这篇文章的背景,假设你已经了解了什么是椭圆曲线也就是形如的方程。我们研究的是基于有限域上的离散曲线,有限域和离散是在计算机中研究问题的一个必要前提。我们假设定义曲线。各曲线参数说明如下:
p,a,b:定义了该曲线的数学形态,p约束限制了所有的取模运算结果位于区间,跟点的个数相关。
G:是曲线上的基点。
n:是曲线的阶,也就是n*G = o,这个概念源头来自于罗巴切夫斯基几何,可以通过性质来定义它。
h:所有点的个数除以n的商。
关于椭圆曲线的加法运算,和乘机运算以及阿贝尔群的性质此处不详细说明。但是最主要的两条需要说明
1、椭圆曲线加密,属于非对称加密的一种。常用的非对称加密还有RSA.留在以后的文章中详细说明。
假设alice和bob要进行加密通信。
首先两人建立通信的模型设为,如果此处模型不一样那么后续的算法就没有建立的基础。
注意在这个模型下面(无穷远点)。
alice选择随机私钥k,并按照椭圆曲线乘积运算生成公开秘钥.。并且将G和K传输给bob。
bob在收到消息后将明文编码到曲线上一个点M(比如按照字节作为曲线上点的x坐标,当然这里只是便于理解举了一个简单例子,实际编码方法略过),并产生自己的私钥r和公钥。并计算点和,bob将此密文c1和c2传给alice.因为运算是基于取模运算,所以逆运算很难。
alice收到信息后使用自己的私钥进行解密。计算就会得到bob给她的信息明文
原理如下:
所有以上运算建立在群运算的运算法则基础之上。
2、椭圆曲线数字签名算法()
计算消息摘要
取摘要的个bit长度作为。
从范围内,随机选择一个整数,这里随机数的选择非常重要,需要保持随机,否则就会产生利用随机数冲突恢复私钥的漏洞。
利用得到椭圆曲线上一点
然后利用公式计算
利用公式计算,这里表示k的模反元素。
得到数字签名。
签名验证原理,利用公钥以及签名计算一个点,如果等于那么证明签名有效,没有被意外篡改过。
验证过程只需要证明点P的x坐标等于即可:
下面进行证明,说明为什么P点的x坐标与相等,则证明了签名的正确性,也就是证明上公式成立的充分条件就是,均未被篡改过。
因为:
所以上式等价于:
又因为
因为点,所以只需证明
所以上式等价于。
根据阿贝尔群的性质只需证明:
也就是:
显然如果签名没有被篡改过,那么这就是显然成立的。
由证明过程的条件我们也可以导出变种:
由此变种公式可以推到出公钥也是一种签名验证方法。