Schnorr, ECDSA, EdDSA 签名方案的区别
Schnorr、ECDSA 和 EdDSA 是三种广泛使用的数字签名方案,它们各自有不同的结构、优势和应用场景。以下是它们的主要区别和特点。
1. Schnorr 签名方案
基本原理:
- Schnorr 签名基于离散对数问题的困难性。
- 它是一种简单而高效的签名方案。
签名过程:
- 密钥生成 : 生成私钥 xxx 和公钥 P=xGP = xGP=xG。
- 签名生成 :
- 选择随机数 kkk。
- 计算 R=kGR = kGR=kG。
- 计算哈希 e=H(m∣∣R)e = H(m || R)e=H(m∣∣R),其中 mmm 是消息。
- 计算签名 s=k+exmod ns = k + ex \mod ns=k+exmodn。
- 签名对 : (R,s)(R, s)(R,s)。
验证过程:
- 验证者计算 e=H(m∣∣R)e = H(m || R)e=H(m∣∣R)。
- 计算 sG=R+ePsG = R + ePsG=R+eP。
- 签名有效当且仅当上述等式成立。
特点:
- 签名简单且高效。
- Schnorr 签名是单一的,因此不存在 ECDSA 的"同一消息同一随机数攻击"问题。
2. ECDSA (Elliptic Curve Digital Signature Algorithm)
基本原理:
- ECDSA 是椭圆曲线上的数字签名算法,基于 DSA(Digital Signature Algorithm)并应用了椭圆曲线密码学(ECC)。
签名过程:
- 密钥生成 : 生成私钥 ddd 和公钥 Q=dGQ = dGQ=dG。
- 签名生成 :
- 选择随机数 kkk。
- 计算 R=kGR = kGR=kG,取 RRR 的 xxx 坐标 rrr
- 计算 s=k−1(H(m)+rd)mod ns = k^{-1}(H(m) + rd) \mod ns=k−1(H(m)+rd)modn
- 签名对 : (r,s)(r, s)(r,s)
验证过程:
- 验证者计算 u1=s−1H(m)mod nu_1 = s^{-1}H(m) \mod nu1=s−1H(m)modn 和 u2=s−1rmod nu_2 = s^{-1}r \mod nu2=s−1rmodn
- 计算 R′=u1G+u2QR' = u_1G + u_2QR′=u1G+u2Q,取 R′R'R′ 的 xxx 坐标 r′r'r′
- 签名有效当且仅当 r′=rr' = rr′=r
特点:
- 签名和验证较为复杂,但应用广泛,特别是在比特币和其他区块链系统中。
- 对随机数 kkk 要求高,必须每次使用不同的随机数,否则会导致私钥泄露。
3. EdDSA (Edwards-curve Digital Signature Algorithm)
基本原理:
- EdDSA 基于 Schnorr 签名算法,并应用于 Edwards 曲线(如 Curve25519)。
- 它使用固定的随机数生成过程,消除了对随机数生成器质量的依赖。
签名过程:
- 密钥生成 : 生成私钥 sksksk,计算公钥 AAA。
- 签名生成 :
- 计算哈希 r=H(prefix∣∣m)r = H(prefix || m)r=H(prefix∣∣m),其中 prefixprefixprefix 是密钥的一部分。(固定随机数)
- 计算 R=rGR = rGR=rG。
- 计算哈希 h=H(R∣∣A∣∣m)h = H(R || A || m)h=H(R∣∣A∣∣m)。
- 计算 S=r+h⋅skS = r + h \cdot skS=r+h⋅sk。
- 签名对 : (R,S)(R, S)(R,S)。
验证过程:
- 验证者计算哈希 h=H(R∣∣A∣∣m)h = H(R || A || m)h=H(R∣∣A∣∣m)。
- 计算 S⋅G=R+h⋅AS \cdot G = R + h \cdot AS⋅G=R+h⋅A。
- 签名有效当且仅当上述等式成立。
特点:
- EdDSA 更加高效,特别是在软件实现中。
- 安全性更高,因为它使用固定随机数生成过程,避免了 ECDSA 的随机数重用问题。
- 采用 Montgomery 曲线或 Edwards 曲线,如 Curve25519 和 Ed25519。
4. 比较总结
| 特性 | Schnorr | ECDSA | EdDSA |
|---|---|---|---|
| 数字签名算法 | SR25519 | ECDSA | Ed25519 |
| 算法复杂性 | 简单 | 较复杂 | 适中 |
| 安全性 | 高 | 依赖随机数质量 | 高,避免随机数问题 |
| 计算效率 | 高 | 适中 | 高 |
| 常用曲线 | 多种,包括 Edwards | 多种,包括 secp256k1 | Edwards 曲线(如 Ed25519) |
| 应用场景 | 多种 | 区块链、数字签名 | 高性能应用,SSH、TLS |
结论
Schnorr 签名方案以其简单性和高效性著称,但在使用广泛度上略逊于 ECDSA。ECDSA 在区块链和其他领域中应用广泛,但对随机数生成有较高要求。EdDSA 则通过固定的随机数生成过程提供更高的安全性和效率,适用于对性能和安全性要求更高的应用场景。