Elliptic Curve Digital Signature Algorithm
通俗化的理解:
1、一条曲线方程
2、在曲线上随机选择一个起始点(私钥)
3、利用起始点做一些变化,获得曲线上的第二个点(公钥)
4、利用私钥与文件hash值进行运算得到数字签名,40字节
5、数字签名由两部分构成R与S,各160位
6、用公钥可验证签名的正确性,利用公钥和S运算可得到R,相等即正确
细节:
1、整数运算,数字区间由签名位数决定,该算法使用160位
2、曲线方程形式 y^2=(x^3+a*x+b) mod p p是小于160位(二进制)的质数
3、点加(point addition)的计算。在椭圆曲线上取一点p;过p做切线,得切线与椭圆曲线的交点;交点取反,得2p。k*p的乘法以此类推,做过(k-1)p与p的直线与椭圆曲线的交点取反。
4、R=k*P的性质,已知R与P的值,无法推出k的值。(trap door function)
5、使用ECDSA需要的参数 a, b, p, N, G 前三者定义了曲线方程 N表示曲线上的点的数目 G表示起始点(横坐标)
6、设置一个随机数字(20字节)为私钥(dA),公钥(Qa)=私钥(dA)*G
7、生成随机数字k(20字节),用G与k进行点乘(point multiplication),得到的点的x轴坐标值为R
8、通过SHA1计算文件的hash值z,S=k^-1(z+dA) mod p 。k^-1(mod p)为k的模反元素,即(k*k^-1)≡1(mod p)。因为p为质数,k是随机生成的整数,故k的模反元素一定存在。
9、利用公式S^-1*z*G+S^-1*R*Qa得到20字节答案,与R比较,若相同则签名正确。