ECDH:
1)Alice生成随机整数a,计算A=a*G。Bob生成随机整数b,计算B=b*G。
2)Alice将A传递给Bob。A的传递可以公开,即攻击者可以获取A。由于椭圆曲线的离散对数问题是难题,所以攻击者不可以通过A、G计算出a。Bob将B传递给Alice。同理,B的传递可以公开。
3 )Bob收到Alice传递的A,计算Q=b*A
4)Alice收到Bob传递的B,计算Q‘=a*B
Alice、Bob双方即得Q=b*A=b*(a*G)=(b*a)*G=(a*b)*G=a*(b*G)=a*B=Q'(交换律和结合律),即双方得到一致的密钥Q。
ECDSA:
ECDSA算法用于数字签名,是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。
验证过程如下:
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)。
验证过程: