一句话先说清
哈希基签名(hash-based signatures)是只用哈希函数构造的数字签名家族:私钥是一小串哈希原像,公钥是它们的哈希,签名干脆把部分原像直接亮出来让验证者现算哈希。ECDSA、RSA 依赖的数学难题在足够大的量子计算机面前会被 Shor 算法攻破,而哈希签名只需哈希函数抵抗格罗弗搜索的平方加速——这使它成为目前最保守、也最经得起时间考验的后量子路线。它的家谱始于 Merkle 1979 年提出的一次性签名,现代代表是 RFC 8391 标准化的 XMSS 和 2024 年 8 月进入 NIST FIPS 205 标准的 SLH-DSA(源自 SPHINCS+)。

一次性密钥的数学原语
一个极简的 Lamport 式一次性方案:私钥是几百个随机数,公钥是它们的哈希。要签一条消息,把消息哈希切段,每段按数值决定亮出哪个原像。验证者拿原像重哈希,对得上就通过。缺点写在名字里——这把钥匙只能签一条消息:签过第二条,攻击者就能从两次泄露的原像里拼出新的伪造签名。Winternitz 改进让每个原像对应更大的数值区间,把原像数量砍下来,代价是单向性假设更强。XMSS 标准里的 WOTS+ 是这条线的现代形态,配合掩码后即使哈希函数不再抗碰撞,方案安全性仍能保住。
用一棵树把千万次签名挂到一个公钥下
一次性密钥只能签一次,但树可以“签树”:先用 WOTS+ 签名一对下一层一次性密钥的哈希(即内部节点),如此层层向上,最终只有树根需要出现在公钥里。签名时亮出这条路径上的兄弟哈希,验证者从叶子一路哈希回根。这就是 1979 年 Merkle 构想的“Merkle 签名树”,XMSS 是它的标准化加强版:每个节点哈希都带位置和掩码,防止重排攻击;XMSS^MT 再套一层树解决密钥生成慢的问题。树有高度上限,叶子用完,这个公钥就寿终正寝——签名总量在生成时已经写定。
有状态是运维的雷,无状态花钱消雷
哈希签名的致命运维细节是“状态”:系统必须精确记住下一个该用哪片叶子。快照回滚、虚拟机克隆、双机同开,都可能让两枚签名复用同一片叶子,整把公钥瞬间作废。有状态的 XMSS/LMS 靠工程纪律(RFC 提示必须保证计数器单调)扛这个风险。SPHINCS+ 换了打法:把“从哪片叶子开始签”由消息与随机数伪随机决定,并在一个拥有天文数字叶子的超树上轮转,重复使用同一片叶子概率小到可忽略——不需要记账,故称无状态。2024 年 8 月 13 日发布的 NIST FIPS 205(SLH-DSA)把它标准化,与基于格(格密码)的 ML-DSA 并列为两大后量子签名标准,一个保守求稳,一个追求效率。
快速问答
问:哈希签名的公钥有多大?出奇地小,几十到一百多字节;代价在签名——SLH-DSA 一档可达八千字节到约五十千字节,远大于 ECDSA 的六十四字节。 问:区块链现在用得上吗?直接上链签名偏贵,更多用在代码签名、固件、证书链等长寿场景;加密领域更多以哈希树做承诺结构而非直接签名。 问:量子机会到吗?学界的定位是“现在就换,别等”,哈希基路线的吸引力正在于它不押注任何尚未被完全验证的数学难题。
常见误区
一是把“只用哈希”读成“绝对安全”:它仍依赖哈希函数抗第二原像,只是假设条件最弱。二是以为一次性密钥泄露只是“这一笔”有风险:同一片叶子的两次泄露等于私钥裸奔,所有用它签的消息都可被伪造。三是把有状态方案的不便当成设计缺陷:XMSS 的纪律换来了远小于 SLH-DSA 的签名体积,两者是“省空间但要记账”与“免记账但费带宽”的取舍。
风险提示:本文为密码学概念科普,不构成任何投资建议;钱包与签名方案的迁移请等待你使用的协议与工具链的官方指引。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。