密码学系列 - 介绍几种不同的签名方案

Schnorr, ECDSA, EdDSA 签名方案的区别

Schnorr、ECDSA 和 EdDSA 是三种广泛使用的数字签名方案,它们各自有不同的结构、优势和应用场景。以下是它们的主要区别和特点。

1. Schnorr 签名方案

基本原理:

  • Schnorr 签名基于离散对数问题的困难性。
  • 它是一种简单而高效的签名方案。

签名过程:

  1. 密钥生成 : 生成私钥 xxx 和公钥 P=xGP = xGP=xG。
  2. 签名生成 :
    • 选择随机数 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。
  3. 签名对 : (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)。

签名过程:

  1. 密钥生成 : 生成私钥 ddd 和公钥 Q=dGQ = dGQ=dG。
  2. 签名生成 :
    • 选择随机数 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
  3. 签名对 : (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)。
  • 它使用固定的随机数生成过程,消除了对随机数生成器质量的依赖。

签名过程:

  1. 密钥生成 : 生成私钥 sksksk,计算公钥 AAA。
  2. 签名生成 :
    • 计算哈希 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。
  3. 签名对 : (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 则通过固定的随机数生成过程提供更高的安全性和效率,适用于对性能和安全性要求更高的应用场景。

相关推荐
老星*1 天前
Vaultwarden:开源轻量的1Password替代,自托管密码管理方案
开源·github·密码学
山川绿水2 天前
bugku——MISC——键盘
安全·网络安全·系统安全·密码学
Sunsets_Red3 天前
乘法逆元的 exgcd 求法
c++·学习·数学·算法·c#·密码学·信息学竞赛
code_li3 天前
为什么手机没网,身份验证器也能生成验证码
智能手机·密码学
lplum_6 天前
2026 中国高校智能机器人创意大赛 软件系统安全赛 初赛wp
安全·web安全·网络安全·系统安全·密码学·网络攻击模型·安全威胁分析
lplum_7 天前
2025第十届“楚慧杯”湖北省网络与数据安全实践能力竞赛 wp
网络·安全·web安全·网络安全·系统安全·密码学·新人首发
QCN_8 天前
应用密码学——第一章诸论
密码学
搬砖魁首8 天前
密码学系列 - 零知识证明(ZKP) - 为什么把zkstark的证明提交到在evm链上时,得先包装成zksnark证明?
区块链·密码学·零知识证明·zkstark·zksnark
一袋米扛几楼988 天前
【密码学】Playfair(普莱费尔) 是什么?
密码学
一袋米扛几楼988 天前
【密码学】CrypTool2 工具是什么?
服务器·网络·密码学