1. SLH-DSA概述与课程导引
在传统公钥密码体系中,RSA与ECC的安全性分别依赖大整数分解和椭圆曲线离散对数问题的困难性。这两类困难问题在经典计算模型下尚无有效多项式算法,但Shor算法表明,一旦拥有足够规模、可容错的量子计算机,它们都能在多项式时间内被求解。这意味着当前广泛部署的数字签名在量子计算成熟后可能整体失效。后量子密码(Post-Quantum Cryptography, PQC)正是为应对这一威胁而发展的密码方向,NIST自2016年启动PQC标准化进程,并于2024年正式发布首批标准:FIPS 203(ML-KEM)、FIPS 204(ML-DSA)与FIPS 205(SLH-DSA)。
SLH-DSA即Stateless Hash-Based Digital Signature Algorithm,中文常译为“无状态哈希数字签名算法”,其标准文本为FIPS 205,算法本身源自SPHINCS+提交方案。它属于基于哈希函数的签名族,与基于格的ML-DSA走的是完全不同的技术路线。理解SLH-DSA,首先要抓住三个关键词:基于哈希、无状态、抗量子。
“基于哈希”意味着SLH-DSA的安全性只依赖底层哈希函数(如SHA-256、SHAKE256)的抗碰撞性、抗原像性等性质,而不引入格、编码或多变量等代数结构。这一特点带来两个直接后果:其一,安全假设更“保守”,密码学界对哈希函数的分析历史最长、信任基础最厚;其二,算法实现主要围绕哈希调用展开,不涉及复杂的大数运算或多项式采样,实现路径相对清晰。
“无状态”是SLH-DSA区别于早期哈希签名(如Lamport、Merkle树签名)的关键。早期方案中,签名者必须记录哪些一次性密钥已被使用,一旦状态丢失或重复使用,安全性即遭破坏。SLH-DSA通过超树(hypertree)结构与少次签名(few-time signature)机制,使每次签名可独立选择随机化路径,签名者无需保存任何跨签名的状态。这使其适合密钥可能被复制、备份或部署在多台设备上的场景,例如固件签名、代码签名和长期归档签名。
“抗量子”则指其安全模型针对量子敌手设定。在FIPS 205中,SLH-DSA按底层哈希函数与参数集划分为多个变体,命名规则形如 SLH-DSA-SHA2-128s、SLH-DSA-SHAKE-256f。其中哈希族标识底层函数,128/192/256表示目标安全强度,后缀s(small)与f(fast)分别偏向签名体积小和签名速度快。下表给出几个代表性参数集的量级参考(数值为规范给出的典型值,用于建立直觉):
| 参数集 | 目标安全强度 | 公钥长度 | 签名长度 | 取向 |
|---|---|---|---|---|
| SLH-DSA-SHA2-128s | 128 位 | 32 字节 | 7856 字节 | 签名短、签名慢 |
| SLH-DSA-SHA2-128f | 128 位 | 32 字节 | 17088 字节 | 签名快、体积大 |
| SLH-DSA-SHA2-256s | 256 位 | 64 字节 | 29792 字节 | 高安全、签名慢 |
从表中可以直观看出SLH-DSA的工程特征:公钥极短(仅几十字节),签名却达到数千至数万字节,且s与f变体在“签名时间”和“签名体积”之间形成明显权衡。这决定了它不适合高频、小包体的交互式协议,而更适合签名次数少、验证方存储与带宽相对宽裕、且需要长期安全性的场景。
为建立整体认知,下图给出SLH-DSA的层次结构示意:底层是哈希函数族,其上构建WOTS+等一次性签名与FORS少次签名,再通过多层Merkle树组成超树,最终由顶层树根导出公钥,签名则携带认证路径与随机化索引。
本课程围绕“实现与评估”展开,目标不是停留在概念介绍,而是让学习者能够读懂FIPS 205的算法描述、动手实现或调用SLH-DSA、并对性能与安全性做出合理评估。课程整体分为四个部分:第一部分建立基础,包括哈希函数性质、Merkle树、WOTS+与FORS的构造原理,以及超树如何把一次性签名扩展为多次签名;第二部分进入标准与实现,逐层拆解FIPS 205的密钥生成、签名与验证流程,讨论参数集选择、随机数处理与常见实现陷阱;第三部分聚焦工程评估,涵盖签名/验证耗时测量、签名体积与带宽影响、侧信道与故障注入风险、以及与其他PQC签名方案的对比;第四部分通过案例与复盘,把前述知识落到固件签名、证书链等具体场景。
需要强调的是,SLH-DSA并非ML-DSA的替代品,而是互补方案。ML-DSA签名短、速度快,但安全依赖格问题的困难性;SLH-DSA签名大、速度慢,但安全假设更保守。在实际系统中,二者常按场景分工:高频交互用ML-DSA,长期根信任与固件签名可考虑SLH-DSA。理解这一分工,是后续评估工作的起点。