3. 参数集与安全级别
SLH-DSA 在 FIPS 205 中一共定义了 12 个参数集,它们由三个维度交叉组合而成:哈希函数族(SHA2 或 SHAKE)、安全级别(128/192/256 位)以及签名尺寸与速度的取舍(s 小签名、f 快签名)。理解这 12 个参数集的关键,不是死记名字,而是抓住四个核心参数 n、h、d、k 如何共同决定密钥大小、签名大小、签名速度与验证速度。
一、四个核心参数的含义
n 是哈希输出的字节数,也是所有哈希值、随机数、种子和签名的基本长度单位。它直接由安全级别决定:128 位级别取 n=16,192 位级别取 n=24,256 位级别取 n=32。因此 n 是“安全级别”在参数层面的直接体现,n 越大,所有哈希值越长,密钥和签名也越大。
h 是 Merkle 树的总高度,决定了一次性签名(WOTS+)密钥对的数量上限,即 2^h 个叶子。h 越大,可签名的消息数量越多,但树越高,认证路径越长,签名也越大。
d 是超树(hypertree)的层数,把总高度 h 拆成 d 层,每层高度为 h/d。d 越大,每层树越矮,签名时每层需要计算的认证路径越短,签名速度越快,但签名中需要包含每一层的认证路径,层数越多签名越大。因此 d 是“速度与签名大小”之间的调节旋钮。
k 是 FORS(Few-Time Signature)的树数量,每个 FORS 树高度为 a = log2(k),总共有 k × 2^a 个 FORS 叶子。k 越大,FORS 部分能承受的签名次数越多,但 FORS 签名中包含的认证路径也越多,签名随之增大。k 主要影响签名大小和签名时的计算量。
二、12 个参数集的命名与结构
参数集命名格式为 SLH-DSA-{哈希}-{安全级别}{变体}。例如 SLH-DSA-SHA2-128s 表示使用 SHA2、128 位安全级别、小签名变体;SLH-DSA-SHAKE-256f 表示使用 SHAKE、256 位安全级别、快签名变体。s 变体通过增大 h、减小 d 来压缩签名,代价是签名更慢;f 变体通过减小 h、增大 d 来加快签名,代价是签名更大。
三、参数对密钥与签名大小的影响
公钥大小在所有参数集中都是 2n 字节,私钥为 4n 字节。因此 128 位级别公钥 32 字节、私钥 64 字节;192 位级别公钥 48 字节、私钥 96 字节;256 位级别公钥 64 字节、私钥 128 字节。密钥大小只由 n 决定,与 h、d、k 无关,这是 SLH-DSA 相对友好的地方。
签名大小则复杂得多,主要由 n、h、d、k 共同决定。签名由三部分组成:FORS 签名、超树各层认证路径、以及 WOTS+ 链末端值。FORS 部分约为 k(1+a)·n 字节,超树部分约为 (h/d)·d·n = h·n 字节,再加上每层 WOTS+ 的 d·n 字节。以 128s 为例,n=16、h=63、d=7、k=14,签名约 7856 字节;而 128f 的 n=16、h=66、d=22、k=33,签名约 17088 字节,几乎是 s 变体的两倍多。可见 f 变体用更大的签名换取更快的签名速度。
四、参数对签名与验证速度的影响
签名速度主要受 d 和 k 影响。d 越大,每层树越矮,每层需要计算的哈希链越短,签名越快;k 越大,FORS 树越多,FORS 签名计算量越大,签名越慢。f 变体正是通过增大 d、增大 k 来加速签名。验证速度则相对稳定,因为验证只需按认证路径逐层计算哈希,计算量与 h 和 d 成正比,但总体远小于签名计算量。因此 SLH-DSA 的验证通常比签名快一个数量级左右。
五、参数选择速查表
| 参数集 | n | h | d | k | 公钥 | 签名(约) | 签名速度 | 验证速度 |
|---|---|---|---|---|---|---|---|---|
| SHA2-128s | 16 | 63 | 7 | 14 | 32 B | 7856 B | 慢 | 快 |
| SHA2-128f | 16 | 66 | 22 | 33 | 32 B | 17088 B | 快 | 快 |
| SHA2-192s | 24 | 63 | 7 | 17 | 48 B | 16224 B | 慢 | 快 |
| SHA2-192f | 24 | 66 | 22 | 33 | 48 B | 35664 B | 快 | 快 |
| SHA2-256s | 32 | 64 | 8 | 22 | 64 B | 29792 B | 慢 | 快 |
| SHA2-256f | 32 | 68 | 17 | 35 | 64 B | 49856 B | 快 | 快 |
表中数据为 FIPS 205 标准参数下的理论值,实际实现中签名大小可能因编码方式略有差异。SHAKE 系列与对应 SHA2 系列参数完全一致,仅哈希函数不同,因此大小和速度特性相同。
六、工程选型建议
在工程落地时,建议按以下顺序决策:第一,确定安全级别,128 位适用于大多数通用场景,192 位用于中高安全需求,256 位用于长期或高价值场景;第二,判断签名大小是否受限,若受限则选 s 变体;第三,若签名延迟是瓶颈,则选 f 变体;第四,根据平台哈希加速能力选择 SHA2 或 SHAKE。例如在资源受限的 IoT 设备上,若只需少量签名且对大小敏感,可选 SHA2-128s;在服务器端 TLS 场景中,若握手延迟敏感,可选 SHAKE-128f 并利用 SHAKE 硬件指令加速。
掌握这 12 个参数集的关键,是把 n、h、d、k 四个参数与“密钥大小、签名大小、签名速度、验证速度”四个指标建立映射关系。n 决定密钥和哈希值长度,h 决定可签名数量与认证路径长度,d 决定签名速度与签名大小的平衡,k 决定 FORS 部分的签名大小与计算量。理解这层映射,就能在具体工程中快速锁定合适的参数集,而不是在 12 个名字中盲目试错。