跳到主要内容
ecdsa.com

预哈希签名(HashEdDSA、HashML-DSA)

对消息的摘要而不是消息本身签名,要么隐式进行(ECDSA、RSA),要么通过 Ed25519ph、HashML-DSA 等显式独立、带域分隔的变体实现。
其他写法prehashHashEdDSAEd25519phHashML-DSAHashSLH-DSAexternal mu

ECDSA 和 RSA 签名的始终是哈希,因此可以流式计算数据的哈希,或在另一台机器上计算,HSM 只会看到 32~64 字节。PureEdDSA 和 ML-DSA 则把整条消息与依赖密钥的值一起处理(EdDSA 的 nonce 和挑战值都要对消息计算哈希;ML-DSA 把公钥的哈希绑定到消息代表值 μ 中),因此整条消息都必须送到签名者那里。

预哈希变体正是为这种情况准备的:Ed25519ph 和 Ed448ph(RFC 8032;即 FIPS 186-5 §7.8 中的 HashEdDSA)、HashML-DSA(FIPS 204 §5.4)以及 HashSLH-DSA(FIPS 205 §10.2.2),后两者把哈希函数的 OID 绑定到被签名的内容中。它们是不同的算法,签名也不同,因此纯变体的验证器会拒绝它们。FIPS 204 还允许 ML-DSA 除生成签名随机数之外的所有步骤都在签名模块之外运行,HSM 接口借此接受预先计算好的 μ。

预哈希使安全性依赖于哈希的抗碰撞性,而纯 EdDSA 能够容忍哈希碰撞。除非流式处理或远程签名者迫使你使用预哈希,否则应使用纯变体;切勿在没有域分隔的情况下用同一个密钥混用两种变体(RFC 8032 §8.6;FIPS 204 建议每个密钥只用一种变体)。

标准与参考资料

全部术语