伤不起的算法-ECC-ECDSA
ECDSA: ECDSA算法用于数字签名,是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。 签名过程如下: 1、选择一条椭圆曲线Ep(a,b),和基点G; 2、选择私有密钥k(k<n,n为G的阶),利用基点G计算公开密钥K=kG; 3、产生一个随机整数r(r<n),计算点R=rG; 4、将原数据和点R的坐标值x,y作为参数,计算SHA1做为hash,即Hash=SHA1(原数据,x,y); 5、计算s≡r - Hash * k (mod n) 6、r和s做为签名值,如果r和s其中一个为0,重新从第3步开始执行 验证过程如下: 1、接受方在收到消息(m)和签名值(r,s)后,进行以下运算 2、计算:sG+H(m)P=(x1,y1), r1≡ x1 mod p。 3、验证等式:r1 ≡ r mod p。 4、如果等式成立,接受签名,否则签名无效。 证明公式: 签名体制的正确性证明: 签名体制的正确性证明: sG+H(m)P =(k-H(m)nA)G+H(m)P =kG-H(m)nAG+H(m)P =kG-H(m)P+H(m)P =kG 所以,r1≡r mod p。 R=kG;P=nAG; s=k-H(m)*nA mod p 简单的例子: 签名过程: 选取随机数k = 3,假设h(m) = 4 ,则计算(x,y) = kG = 3 (x,y) = kG = 3(0,2)=(11,9),r = x mod n = 11 mod 23 = 11,s=k-H(m)×nA mod p = 3 –4×9 mod 23 = 13。因此对m的签名为(11 13)。 验证过程: 签名接收者B得到签名后计算:sG+H(m)P= 13G + 4P = (11,9),r1 = x1 mod n = 11 mod 29 = 11 = r。因此B接受签名。
|