rfc8032: Edwards-Curve Digital Signature Algorithm (EdDSA)
doc
ed25519
ed25519-High-speed high-security signatures
background
eddsa secret key b bits,
H(k) 2*b bits
a 是取H(k)的 3<=i<=b-3 共b-5位, 加i<3的低位全0,加2^(b-2)对应的b-1位
A = aB,并压缩表达为A_。
r = H(h_b, ..., h_2b-1, M),其中,M为message,h_b, ..., h_2b-1 为 H(k)的 top b bits。相当于,以k & message派生r。
R = rB,并压缩表达为R_。
S = ( r + H(R_, A_, M)*a ) mod l
签名是(R_, S_),共2*b bits
验签可以是 8SB = 8R + 8H(R_, A_, M)A
r
r的风险与ecdsa sony playstaion3的案例类似。
eddsa基于k & M 生成r,因此不用随机生成r。
malleability
已知一个有效签名,可以构造针对相同message的另一个有效签名(取S, A的负值)。
但是无法构造针对不同message的有效签名(因为M参与r, s运算)。
schnorr signature compare
schnorr signature通过构造(R, S),并校验SB = R+ H(R_, M)A,避免求逆。
eddsa关键设计为: 2*b bits 的H; A_ 参与 S中的H运算;与schnorr不同的R值处理。
curve addition
x = X/Z y = Y/Z coordinates (X, Y, Z, T)
fast decompression
q = 2^255 - 19 ,mod 8 余 5 用Montgomery变换,避免求逆。
批量校验多个签名
设P_i = 8*R_i + 8*H_i*A_i - 8*S_i*B
如果每个签名都valid,则,z_i*P_i之和必定为0。
由于z_i随机,当某个P_i不为0(即invalid signature),而z_i*P_i恰好为0时,可能有false positive,但不会false negative。