1 基础参数
Ed25519采用的曲线方程为 y 2 = x 3 + 486662 x 2 + x y^2 = x^3 + 486662x^2 + x y2=x3+486662x2+x , m o d u l o p = 2 255 − 19 modulo \ p = 2^{255} - 19 modulo p=2255−19 。
私钥长度:32字节。
公钥长度:32字节,无其它长度。
签名长度:64字节。
2 签名算法
2.1 生成密钥对
私钥:使用随机数发生器生成随机数 k k k 作为私钥。
公钥生成过程:
- 计算私钥哈希值: H ( k ) = ( h 0 , h 1 , . . . , h 2 b − 1 ) \displaystyle \large H(k)=(h_{0},h_{1},...,h_{2b-1}) H(k)=(h0,h1,...,h2b−1)
- 生成整数: a = 2 b − 2 + ∑ 3 ⩽ i ⩽ b − 3 2 i h i ∈ { 2 b − 2 , 2 b − 2 + 8 , . . . , 2 b − 1 − 8 } \displaystyle \large a=2^{b-2}+\sum_{3\leqslant i\leqslant b-3}2^ih_{i}\in \{2^{b-2},2^{b-2}+8,...,2^{b-1}-8\} a=2b−2+3⩽i⩽b−3∑2ihi∈{2b−2,2b−2+8,...,2b−1−8}
- 生成公钥: A = a B \displaystyle \large A=aB A=aB
在Ed25519中, b b b固定取256。
A A A 就是公钥。
2.2 生成签名
- r = H ( h b , . . . , h 2 b − 1 , M ) \displaystyle r=H(h_b,...,h_{2b-1},M) r=H(hb,...,h2b−1,M)
- R = r B \displaystyle R=rB R=rB
- S = ( r + H ( R , A , M ) a ) m o d l \displaystyle S=(r+H(R,A,M)a)mod \ l S=(r+H(R,A,M)a)mod l
则签名就是 ( R , S ) (R,S) (R,S)。
2.3 签名验证
只需要检验 8 S B = 8 R + 8 H ( R , A , M ) A \displaystyle 8SB=8R+8H(R,A,M)A 8SB=8R+8H(R,A,M)A 是否成立。
2.4 签名验证原理分析
签名验证原理如下公式:
8 S B = 8 ( r + H ( R , A , M ) a ) B = 8 r B + 8 H ( R , A , M ) a B = 8 R + 8 H ( R , A , M ) A \displaystyle \begin{aligned} 8SB &=8(r+H(R,A,M)a)B\\ &=8rB+8H(R,A,M)aB\\ &=8R+8H(R,A,M)A\\ \end{aligned} 8SB=8(r+H(R,A,M)a)B=8rB+8H(R,A,M)aB=8R+8H(R,A,M)A
3 参考资料
- High-speed high-security signatures:描述ed25519签名过程的说明文档。
- EdDSA:描述EdDSA算法的维基百科主页。