椭圆曲线加解密的数学原理和数字签名的原理

这篇文章的背景,假设你已经了解了什么是椭圆曲线也就是形如y^2=(x^3+a*x+b)mod(p)的方程。我们研究的是基于有限域上的离散曲线,有限域和离散是在计算机中研究问题的一个必要前提。我们假设定义曲线E(p,a,b,G,n,h)。各曲线参数说明如下:

p,a,b:定义了该曲线的数学形态,p约束限制了所有的取模运算结果位于区间[1,p-1],跟点的个数相关。

G:是曲线上的基点。

n:是曲线的阶,也就是n*G = o\propto ,这个概念源头来自于罗巴切夫斯基几何,可以通过性质来定义它。

h:所有点的个数除以n的商。

关于椭圆曲线的加法运算,和乘机运算以及阿贝尔群的性质此处不详细说明。但是最主要的两条需要说明

x+y\equiv z mod(p)

x*y\equiv z mod(p)

1、椭圆曲线加密,属于非对称加密的一种。常用的非对称加密还有RSA.留在以后的文章中详细说明。

假设alice和bob要进行加密通信。

首先两人建立通信的模型设为E(p,a,b,n,G,h),如果此处模型不一样那么后续的算法就没有建立的基础。

注意在这个模型下面n*G=O\propto (无穷远点)。

alice选择随机私钥k,并按照椭圆曲线乘积运算生成公开秘钥K=k*G.。并且将G和K传输给bob。

bob在收到消息后将明文编码到曲线上一个点M(比如按照字节作为曲线上点的x坐标,当然这里只是便于理解举了一个简单例子,实际编码方法略过),并产生自己的私钥r和公钥r*G。并计算点C1=M+r*KC2=r*G,bob将此密文c1和c2传给alice.因为运算是基于取模mod运算,所以逆运算很难。

alice收到信息后使用自己的私钥进行解密。计算C1-k*C2就会得到bob给她的信息明文

原理如下:

C1-kC2=M+rK-krG=M+rkG-krG=M

所有以上运算建立在群运算的运算法则基础之上。

2、椭圆曲线数字签名算法(ecdsa)

计算消息摘要digest = hash(message)

取摘要的len = size(n)*8个bit长度作为z

[1,len-1]范围内,随机选择一个整数k,这里随机数k的选择非常重要,需要保持随机,否则就会产生利用随机数冲突恢复私钥的漏洞。

利用k得到椭圆曲线上一点(x1,y1)=k*G

然后利用公式r=x1计算r

利用公式s=k^-1(z+r*pri) mod(n)计算s,这里k^-1表示k的模反元素。

得到数字签名(r,s)

签名验证原理,利用公钥以及签名计算一个点P(x_{p},y_{p}  ),如果x_{p} 等于r那么证明签名有效,message没有被意外篡改过。

验证过程只需要证明点P的x坐标等于r即可:

(公式1)P=s^-1*z*G + s^-1*r*pub

下面进行证明,说明为什么P点的x坐标与r相等,则证明了签名的正确性,也就是证明上公式成立的充分条件就是,message和r以及s均未被篡改过。

因为:

pub = pri*G

所以上式等价于:

P=s^-1*z*G + s^-1*r*pri*G=s^-1(z+r*pri)*G

又因为想要使得P的x坐标等于r等价于P点就是曲线上x坐标为r的点

因为点k*G的x坐标刚好就是r,所以只需证明P=k*G

所以上式等价于证明k*G = s^-1(z+r*pri)*G

根据阿贝尔群的性质只需证明:k = s^-1(z+r*pri)mod(p)

也就是:s = k^-1(z+r*pri)mod(n)

显然如果签名s和消息message(摘要)没有被篡改过,那么这就是显然成立的。

由证明过程P=k*G的条件我们也可以导出变种:

P(r,f(r))=P=s^-1*z*G + s^-1*r*pub

由此变种公式可以推到出公钥pub也是一种签名验证方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容