跳到主要内容
ecdsa.com

EdDSA(Edwards 曲线数字签名算法)

基于扭曲 Edwards 曲线的 Schnorr 类签名方案,由 RFC 8032 定义并获 FIPS 186-5 批准,两个标准实例是 Ed25519 和 Ed448。
其他写法Edwards-curve Digital Signature AlgorithmPureEdDSA

私钥是一个种子(Ed25519 为 32 字节,Ed448 为 57 字节)。对它计算哈希可得到秘密标量 s 和一个前缀;签名时计算 nonce r = H(prefix ‖ M)、R = r·B、挑战值 k = H(R ‖ A ‖ M) 以及 S = (r + k·s) mod L,签名为 R ‖ S(Ed25519 为 64 字节,Ed448 为 114 字节;RFC 8032 §5.1.6 和 §5.2.6)。nonce 是密钥和消息的函数,因此 EdDSA 签名时不需要随机数,也不可能对不同的消息重复使用同一个 nonce。

PureEdDSA(Ed25519、Ed448)直接对消息本身签名,需要读取消息两遍;HashEdDSA(Ed25519ph、Ed448ph)则改为对 SHA-512 或 SHAKE256 摘要签名;Ed25519ctx 和 Ed448 接受最长 255 字节的上下文字符串,用于域分离。FIPS 186-5 §7 批准了 EdDSA 和 HashEdDSA(§7.8)。

验证不像签名那样统一。RFC 8032 §5.1.7 要求 S 小于群的阶 L,并允许使用带余因子的等式 [8][S]B = [8]R + [8][k]A' 或不带余因子的等式,而各个库对小阶点和非规范编码的处理也不一致。因此,共识系统会固定采用一套规则,例如 Zcash 的 ZIP 215。

标识符:RFC 8410 中的 X.509 OID 1.3.101.112(Ed25519)和 1.3.101.113(Ed448);RFC 9864 中的 JOSE alg 值 Ed25519 和 Ed448,RFC 9864 弃用了 RFC 8037 中多态的 EdDSA;COSE 中为 −19 和 −53(以及较早的 −8);TLS 1.3 中为 ed25519(0x0807)和 ed448(0x0808);SSH 中为 ssh-ed25519。NIST IR 8547(草案)提议在2035年之后禁止使用 EdDSA。

标准与参考资料

全部术语