· 正微光电技术团队· technology· 约 62 分钟精读

哈希数字签名标准:FIPS 205 与状态化签名微架构

核心要点速览 · TL;DR 概要

深入解析后量子密码体系中基于哈希的数字签名技术路线,涵盖 FIPS 205 (SLH-DSA) 无状态超树架构、FORS 少数次签名机制、WOTS+ 单次签名链与 ADRS 结构化地址映射,并对比 RFC 8554 (LMS) 与 RFC 8391 (XMSS) 状态化签名在硬件安全根 (RoT) 与安全引导场景下的微架构实现、抗侧信道攻击防护及工程落地准则。

哈希数字签名标准:FIPS 205 与状态化签名微架构

引言与技术全景:从代数格难题到哈希签名的数学底座

在后量子密码学(Post-Quantum Cryptography, PQC)的演进历程中,公钥数字签名算法的重构构成了整个信息安全体系迁移的核心支柱。传统的公钥基础设施(PKI)深度依赖于大整数质因子分解难题(RSA)以及离散对数与椭圆曲线离散对数难题(DSA、ECDSA、Ed25519、SM2)。随着 Shor 量子多项式时间算法的成熟,具备足够容错能力的量子计算机可在多项式时间复杂度 O(n3)\mathcal{O}(n^3) 内彻底求解上述代数结构,导致现有数字签名体系的不可伪造性(Unforgeability)面临根本性失效。

为了应对这一演进挑战,学术界与国际标准化组织(如美国国家标准与技术研究院 NIST、互联网工程任务组 IETF、国际标准化组织 ISO/IEC 以及国家密码管理局)探索了多条各具数学特性的抗量子技术路线,主要涵盖基于代数格的密码体制(Lattice-based Cryptography)、基于纠错编码的密码体制(Code-based Cryptography)、基于多变量二次方程组的密码体制(Multivariate Cryptography)、基于椭圆曲线同源的密码体制(Isogeny-based Cryptography)以及基于密码哈希函数的签名体制(Hash-based Signatures)。

在这些候选路线中,以 ML-DSA(模块格数字签名算法,原 Dilithium,FIPS 204)和 FN-DSA(快速傅里叶格数字签名算法,原 Falcon)为代表的格签名方案,因其公钥尺寸较小(千字节级)且签名验证计算速度极快,成为了通用通信协议与高频认证场景的核心选择。然而,代数格体制的安全归约建立在带误差学习难题(LWE)、环带误差学习难题(Ring-LWE)或模带误差学习难题(Module-LWE)的计算硬度假设之上。这类代数结构虽然在经典计算与量子计算模型下均展现出较高的渐进抗性,但其底层数学结构依然具有潜在的代数关联性,在长达数十年乃至更长生命周期的数据保护场景中,理论界依然无法完全排除未来出现全新代数攻击路径的可能性。

与格密码形成鲜明技术对比的是基于密码哈希函数的数字签名体系(Hash-Based Digital Signatures)。该体制的理论渊源可直接追溯至 Ralph Merkle 于 1979 年提出的 Merkle 树签名方案以及 Leslie Lamport 提出的单次签名(One-Time Signature, OTS)思想。基于哈希函数的数字签名具有密码学界公认的最保守、最稳固的安全归约基础:

  1. 零额外代数假设:该方案不引入任何隐藏的环、格、有限域离散对数或同态群结构,其不可伪造性完全建立在底层哈希函数(如 SHAKE-256、SHA-256、SHA-512、SM3)的抗原像性(Preimage Resistance)、**抗第二原像性(Second Preimage Resistance)抗碰撞性(Collision Resistance)**之上;
  2. 抵抗量子 Grover 搜索算法:针对哈希函数的量子攻击主要依赖 Grover 量子搜索算法。对于具备 nn 比特输出长度的密码哈希函数,Grover 算法仅能将原像搜索的时间复杂度从 O(2n)\mathcal{O}(2^n) 降级为平方根加速的 O(2n/2)\mathcal{O}(2^{n/2})。因此,只需将哈希摘要长度扩展至 256 比特或使用具备足够容量的伸缩输出函数(XOF),即可提供高达 128 比特的量子后安全强度(NIST Security Category 1/5 级别),在理论层面具备极强的抗量子韧性;
  3. 长期固件与硬件信任根(RoT)的标准基石:在芯片安全引导(Secure Boot)、硬件不可变信任根(Immutable Root-of-Trust, RoT)、卫星与高可靠嵌入式系统固件签名、以及跨越数十年生命周期的 CA 根证书签发场景下,工程界对算法安全性的确定性要求远高于对签名体积的敏感度。正因如此,基于哈希的数字签名被广泛视为后量子密码体系中最可靠的底座技术。

当前国际标准化体系中,基于哈希的数字签名已形成清晰的技术分支格局:

  • 状态化哈希签名(Stateful Hash-Based Signatures):以 IETF RFC 8554 (Leighton-Micali Signature, LMS)、IETF RFC 8391 (eXtended Merkle Signature Scheme, XMSS) 以及 NIST SP 800-208 为代表。其签名尺寸精简(通常为 1.8 KB 至 4.5 KB)、运算效率高,但要求签名者必须在非易失性存储介质中严密维护单向递增的私钥状态,一旦状态发生回滚或重复使用,私钥将遭到完全破解;
  • 无状态哈希签名(Stateless Hash-Based Signatures):以 NIST FIPS 205 (SLH-DSA,原 SPHINCS+ 算法规范) 为代表。该标准通过多层超树(Hypertree)、少数次签名(FORS)以及确定性伪随机数种子扩展机制,彻底消除了私钥状态同步与持久化维护的严苛要求,实现了与传统 RSA/ECDSA 一致的无状态调用接口,但代价是签名尺寸增加至 7.8 KB 至 49.8 KB。

本文将从数理逻辑、数据结构、微架构设计、状态机隔离、抗侧信道攻击以及系统级工程集成六个维度,对 FIPS 205 SLH-DSA 及状态化哈希签名体系展开深度技术解析,为高性能密码板卡、服务器密码机、安全固件引导及可信执行环境(TEE)的工程实现提供全面的微架构参考。

一、单次与少数次签名理论底座:从 Lamport 到 WOTS+ 与 FORS

基于哈希函数的数字签名构造呈现出典型的自底向上、层层抽象的数学特征。要深入理解 FIPS 205 的无状态超树机制,必须首先掌握其底层的基本构建单元:Lamport-Diffie 单次签名(LD-OTS)、Winternitz 单次签名(WOTS+)以及用于处理消息摘要的少数次签名(FORS)。

1.1 Lamport 单次签名及其比特级构造原理

单次签名方案(One-Time Signature, OTS)是指私钥对仅能且必须用于对单一消息进行签名的密码机制。若对两笔不同消息使用同一 OTS 私钥签名,攻击者将能通过重叠的公开分量轻松伪造出新消息的有效签名。

在 Lamport 原始构造中,假定哈希函数 f:{0,1}n{0,1}nf: \{0,1\}^n \to \{0,1\}^n,待签名消息摘要长度为 mm 比特。签名者生成私钥与公钥的流程如下:

  1. 私钥生成:随机生成 2m2m 个长度为 nn 比特的随机字符串作为私钥分量:
SK=(x1,0x2,0xm,0x1,1x2,1xm,1),xi,j{0,1}nSK = \begin{pmatrix} x_{1,0} & x_{2,0} & \dots & x_{m,0} \\ x_{1,1} & x_{2,1} & \dots & x_{m,1} \end{pmatrix}, \quad x_{i,j} \in \{0,1\}^n
  1. 公钥计算:对私钥矩阵中的每一个分量分别计算单向哈希值 yi,j=f(xi,j)y_{i,j} = f(x_{i,j}),得到公钥矩阵:
PK=(y1,0y2,0ym,0y1,1y2,1ym,1),yi,j=f(xi,j)PK = \begin{pmatrix} y_{1,0} & y_{2,0} & \dots & y_{m,0} \\ y_{1,1} & y_{2,1} & \dots & y_{m,1} \end{pmatrix}, \quad y_{i,j} = f(x_{i,j})
  1. 签名生成:对于二进制消息摘要 M=(b1,b2,,bm){0,1}mM = (b_1, b_2, \dots, b_m) \in \{0,1\}^m,签名 σ\sigma 为由 mm 个私钥分量构成的序列:
σ=(s1,s2,,sm),其中 si=xi,bi\sigma = (s_1, s_2, \dots, s_m), \quad \mathrm{其中}\ s_i = x_{i, b_i}
  1. 签名验证:验证者接收消息 MM 与签名 σ\sigma,逐一计算 f(si)f(s_i),并比对计算结果是否严格等于公钥矩阵中对应位置的元素:
f(si)=?yi,bi,i{1,2,,m}f(s_i) \stackrel{?}{=} y_{i, b_i}, \quad \forall i \in \{1, 2, \dots, m\}

Lamport 签名的优势在于计算完全依赖于单向哈希函数 ff,验证仅需 mm 次哈希求值。然而其主要工程瓶颈在于公钥与私钥体积过大。若 n=256n=256 比特且 m=256m=256 比特,单个 Lamport 公钥与私钥均需占用 2×256×32=16,3842 \times 256 \times 32 = 16,384 字节(16 KB),签名体积亦为 8 KB。这种开销在实际硬件中难以直接部署。

1.2 Winternitz 单次签名(WOTS+)链式哈希运算与参数化压缩

为了大幅压缩单次签名的公钥与签名尺寸,Robert Winternitz 提出了通过哈希链(Hash Chain)同时对多个比特位进行编码的方案,并在后续研究中演化为具备强抗碰撞安全归约的 WOTS+(Winternitz One-Time Signature Plus)

在 WOTS+ 中,引入 Winternitz 参数 w{4,16,256}w \in \{4, 16, 256\}(在 FIPS 205 中固定取 w=16w = 16)。参数 w=16w=16 意味着每个哈希链可编码一个 4 比特的半字节(Nibble, 0vi150 \le v_i \le 15)。

1.2.1 链式哈希函数(Chaining Function)的数学定义

定义链式函数 cKi(x,s,ADRS)c_K^i(x, s, ADRS),其输入包括私钥分量 x{0,1}nx \in \{0,1\}^n、起始迭代步数 ss、迭代步数 ii 以及结构化地址参数 ADRSADRS。在步长为 1 的单步迭代中:

c(x,ADRS)=FK(xMask(ADRS,step))c(x, ADRS) = F_K(x \oplus \mathrm{Mask}(ADRS, \mathrm{step}))

其中 FKF_K 为由公共种子 PK.seedPK.seed 键控的伪随机函数(PRF),Mask\mathrm{Mask} 是由地址生成的位掩码。从状态 ss 迭代至 s+is+i 的复合链式映射定义为:

ci(x)=c(c(c(x,ADRSs),ADRSs+1),ADRSs+i1)c^i(x) = c(c(\dots c(x, ADRS_{s}), ADRS_{s+1}) \dots, ADRS_{s+i-1})

1.2.2 消息半字节切分与校验和机制(Checksum)

设消息摘要长度为 m=256m = 256 比特,按 w=16w=16(即 lgw=4\lg w = 4 比特)切分为 l1=m/4=64l_1 = m / 4 = 64 个整数序列 (v1,v2,,vl1)(v_1, v_2, \dots, v_{l_1}),其中每个 0vi150 \le v_i \le 15

若仅对这 l1l_1 个半字节进行哈希链签名,恶意攻击者若捕获了对应于 viv_i 的签名链节点 cvi(xi)c^{v_i}(x_i),可以通过继续计算前向哈希 cvi+δ(xi)c^{v_i + \delta}(x_i) 来伪造出对应于任意更大数值 vi=vi+δv_i' = v_i + \delta 的合法签名。

为了在数学层面阻断这种向上单向推导伪造攻击,WOTS+ 引入了严格互补的校验和机制(Checksum)。定义校验和数值 CC 为各消息分量与最大值差额的总和:

C=i=1l1(w1vi)=i=1l1(15vi)C = \sum_{i=1}^{l_1} (w - 1 - v_i) = \sum_{i=1}^{l_1} (15 - v_i)

校验和 CC 的最大理论取值为 l1×(w1)=64×15=960l_1 \times (w - 1) = 64 \times 15 = 960。用二进制表示该整数需要 l2=lg(l1(w1))lgw+1=lg9604+1=3l_2 = \lfloor \frac{\lg(l_1(w-1))}{\lg w} \rfloor + 1 = \lfloor \frac{\lg 960}{4} \rfloor + 1 = 3 个以 ww 为基数的半字节 (c1,c2,c3)(c_1, c_2, c_3)

将消息半字节与校验和半字节拼接,得到总链长序列:

L=l1+l2=64+3=67L = l_1 + l_2 = 64 + 3 = 67

此时若攻击者试图增大某个消息半字节 vkvk+δv_k \to v_k + \delta,校验和 CC 的数值必然相应减小,导致至少一个校验和半字节 cjc_j 严格减小。而减小的哈希链位置需要求出哈希逆原像 ccjΔ(xl1+j)c^{c_j - \Delta}(x_{l_1 + j}),这在计算上等价于攻破底层哈希函数的抗原像性,从而证明了 WOTS+ 的强不可伪造性。

1.2.3 WOTS+ 密钥生成、签名与验签流图

  • 私钥向量SK=(sk1,sk2,,sk67)SK = (sk_1, sk_2, \dots, sk_{67}),每个 ski{0,1}nsk_i \in \{0,1\}^n 通过 PRF 由种子扩展;
  • 公钥向量:计算各链末端节点 pki=cw1(ski)=c15(ski)pk_i = c^{w-1}(sk_i) = c^{15}(sk_i),再经由树状哈希压缩函数计算总公钥 PKWOTS=H(pk1pk2pk67)PK_{\mathrm{WOTS}} = H(pk_1 \parallel pk_2 \parallel \dots \parallel pk_{67})
  • 签名向量:对于组合向量 V=(v1,,v64,c1,c2,c3)V = (v_1, \dots, v_{64}, c_1, c_2, c_3),签名序列为:
σWOTS=(cv1(sk1),cv2(sk2),,cv64(sk64),cc1(sk65),cc2(sk66),cc3(sk67))\sigma_{\mathrm{WOTS}} = \Big( c^{v_1}(sk_1), c^{v_2}(sk_2), \dots, c^{v_{64}}(sk_{64}), c^{c_1}(sk_{65}), c^{c_2}(sk_{66}), c^{c_3}(sk_{67}) \Big)
  • 公钥恢复(验签):验证者接收 σWOTS=(y1,y2,,y67)\sigma_{\mathrm{WOTS}} = (y_1, y_2, \dots, y_{67}),通过补齐剩余迭代步数计算公钥分量:
pki=cw1Vi(yi)=c15Vi(yi)pk'_i = c^{w - 1 - V_i}(y_i) = c^{15 - V_i}(y_i)

若所有 pkipk'_i 经压缩后生成的哈希根与已知公钥 PKWOTSPK_{\mathrm{WOTS}} 严格一致,则签名合法。

步骤角色输入计算逻辑输出
私钥派生签名者种子 SK.seedSK.seed, 地址 ADRSADRSski=PRF(SK.seed,ADRSi)sk_i = \mathrm{PRF}(SK.seed, ADRS_i)67 个 nn 字节随机私钥串
公钥生成签名者私钥串 skisk_i, 种子 PK.seedPK.seedpki=c15(ski)pk_i = c^{15}(sk_i) 后计算树哈希32 字节压缩公钥 PKWOTSPK_{\mathrm{WOTS}}
签名运算签名者消息 MM, 私钥串 skisk_i计算 V=(v1..v64,c1..c3)V = (v_1..v_{64}, c_1..c_3),输出 cVi(ski)c^{V_i}(sk_i)67 个 nn 字节签名节点序列
公钥复原验证者消息 MM, 签名串 yiy_i计算 pki=c15Vi(yi)pk'_i = c^{15-V_i}(y_i) 并验证树哈希比对是否等于已知 PKWOTSPK_{\mathrm{WOTS}}

1.2.4 Winternitz 参数 ww 的权衡空间与内存映射

在工程设计中,Winternitz 参数 ww 的选取直接决定了时间开销与空间开销的边界平衡:

  1. w=4w=4:每个哈希链仅编码 2 比特数据,总链数增加至 l1=128,l2=5,L=133l_1 = 128, l_2 = 5, L = 133。签名体积膨胀为原来的两倍,但每条链的最大哈希迭代步数仅为 3 步,计算延迟极低;
  2. w=16w=16(标准推荐值):每个哈希链编码 4 比特半字节,总链数为 L=67L=67。单链最大迭代 15 步,平均迭代 7.5 步。签名体积为 67×32=2,14467 \times 32 = 2,144 字节,计算量与存储体积达到了密码学工程的最优折中点;
  3. w=256w=256:每个哈希链编码 8 比特完整字节,总链数骤减至 l1=32,l2=2,L=34l_1 = 32, l_2 = 2, L = 34。签名体积压缩至 34×32=1,08834 \times 32 = 1,088 字节,但单链最大迭代步数激增至 255 步,导致签名与验签所需的哈希计算周期急剧上升。

在片上硬件加速器中,w=16w=16 对应的 67 组私钥向量可紧凑地映射于 4 组 64 比特宽度的双端口片上分布式 RAM 中,支持多路哈希引擎以 4 比特为步长并行读取与写回。

1.3 少数次签名(Few-Time Signatures):FORS 森林结构数学原理

虽然 WOTS+ 能够有效签名一笔消息,但其本质仍是单次签名。若对多次签名的消息进行处理,需要引入少数次签名方案(Few-Time Signatures, FTS)。在 FIPS 205 中,采用了 FORS(Forest of Random Subsets,随机子集森林) 作为核心少数次签名引擎。

FORS 方案将消息哈希摘要映射为包含 kk 棵独立 Merkle 树的森林,每棵 Merkle 树的高度为 aa,叶子节点数量为 t=2at = 2^a。整个 FORS 结构共包含 k×t=k2ak \times t = k \cdot 2^a 个私钥叶子分量。

SLH-DSA 多层超树与 FORS / WOTS+ 级联FIPS 205 · 自顶向下验证根公钥 PK.rootn 字节摘要顶层树 · Layer d-1树高 h′ = h / d叶子认证路径目标叶 → WOTS+ 公钥哈希WOTS+ 签名认证子树根WOTS+ 逐层签名底层树 · Layer 0 · idx_tree 选取消息哈希定位子树一次性密钥对应叶子目标叶 → FORS 公钥哈希WOTS+ 签名认证 FORSFORS 少次签名FORS · k 棵小子树 · 树高 a摘要切成 k 个索引各选 1 片私钥叶子叶子 + 认证路径Leaf · AuthPathFORS PK 压缩H_fors 归并为一个根

1.3.1 FORS 签名与验签数学过程

  1. 私钥派生:利用伪随机函数 PRFsk\mathrm{PRF}_{sk} 与结构化地址 ADRSADRS,派生第 ii 棵树(0i<k0 \le i < k)中第 jj 个叶子(0j<t0 \le j < t)的私钥值:
ski,j=PRF(SK.seed,ADRSi,j)sk_{i,j} = \mathrm{PRF}(SK.seed, ADRS_{i, j})
  1. 叶子哈希与树根计算:对每个私钥计算叶子节点哈希 leafi,j=F(PK.seed,ADRSi,j,ski,j)leaf_{i,j} = F(PK.seed, ADRS_{i,j}, sk_{i,j}),随后按标准二叉 Merkle 树递归计算第 ii 棵树的根节点 rootiroot_i
  2. FORS 公钥生成:将 kk 棵树的根节点进行拼接,通过哈希压缩得到统一的 FORS 公钥:
PKFORS=HFORS_PK(PK.seed,ADRS,root0root1rootk1)PK_{\mathrm{FORS}} = \mathrm{H}_{\mathrm{FORS\_PK}}(PK.seed, ADRS, root_0 \parallel root_1 \parallel \dots \parallel root_{k-1})
  1. 消息索引划分:将经随机盐 RR 散列后的消息摘要 M=Hmsg(R,PK,M)M' = \mathrm{H}_{msg}(R, PK, M) 划分为 kk 个独立的比特段,每段长度为 aa 比特。每个比特段对应一个整数索引:
(idx0,idx1,,idxk1),0idxi<2a(idx_0, idx_1, \dots, idx_{k-1}), \quad 0 \le idx_i < 2^a
  1. FORS 签名生成:对于每棵树 ii,签名包含选中的私钥叶子值 ski,idxisk_{i, idx_i} 以及该叶子在二叉树中对应的长为 aa 的 Merkle 认证路径(Authentication Path, Authi\mathrm{Auth}_i):
σFORS=((sk0,idx0,Auth0),(sk1,idx1,Auth1),,(skk1,idxk1,Authk1))\sigma_{\mathrm{FORS}} = \Big( (sk_{0, idx_0}, \mathrm{Auth}_0), (sk_{1, idx_1}, \mathrm{Auth}_1), \dots, (sk_{k-1, idx_{k-1}}, \mathrm{Auth}_{k-1}) \Big)
  1. 验签与公钥恢复:验证者根据接收到的 ski,idxisk_{i, idx_i} 计算叶子哈希,结合 Authi\mathrm{Auth}_i 逐级向上复原第 ii 棵树的根 rootiroot'_i, 最后验证 HFORS_PK(root0rootk1)=?PKFORS\mathrm{H}_{\mathrm{FORS\_PK}}(root'_0 \parallel \dots \parallel root'_{k-1}) \stackrel{?}{=} PK_{\mathrm{FORS}}

1.3.2 少数次签名的安全性衰减模型

FORS 属于少数次签名机制。假定攻击者观测到 rr 次独立的 FORS 签名,第 ii 棵树中未被公开的私钥比例为 (11/t)r(1 - 1/t)^r。攻击者能够成功伪造一笔全新消息签名的概率上限由下式决定:

Pforge(r)=(1(112a)r)k(1er/2a)kP_{\mathrm{forge}}(r) = \left( 1 - \left(1 - \frac{1}{2^a}\right)^r \right)^k \approx \left( 1 - e^{-r / 2^a} \right)^k

通过合理选择参数(如在 SLH-DSA-128s 中设置 a=12,k=14,2a=4096a=12, k=14, 2^a=4096;在 SLH-DSA-256f 中设置 a=9,k=35a=9, k=35),系统可确保在顶层无状态超树的随机离散调度下,单一 FORS 实例被重复命中的概率在数学层面被压低至极限(例如低于 21282^{-128}22562^{-256}),从而实现抗选择消息攻击下的存在性不可伪造(EUF-CMA)。

二、FIPS 205 SLH-DSA 无状态超树(Hypertree)工程架构

为了彻底消除私钥状态管理,FIPS 205 (SLH-DSA) 构建了一个由 dd 层独立 Merkle 树构成的虚拟巨型超树(Hypertree),其总高度为 hh。每一层的单棵子树高度固定为 h=h/dh' = h / d

2.1 多层 Merkle 超树拓扑与分层签名级联

在整个超树架构中:

  • 顶层(Layer d1d-1:仅包含一棵高度为 hh' 的 Merkle 树,其根节点即为整个 SLH-DSA 实例的根公钥(PK.rootPK.root
  • 中间层(Layer 11d2d-2:包含 2hh2^{h - h'} 棵潜在的虚拟子树;
  • 底层(Layer 00:共包含 2hh2^{h - h'} 棵高度为 hh' 的子树。底层子树的每个叶子节点均对应一个 WOTS+ 密钥对,用于对 FORS 实例的公钥 PKFORSPK_{\mathrm{FORS}} 进行单次签名。

当一笔消息 MM 传入时,系统通过加盐哈希函数 Hmsg(R,PK,M)\mathrm{H}_{msg}(R, PK, M) 派生出:

  1. 用于 FORS 签名的消息摘要 MM'
  2. 用于指定底层 Layer 0 中具体哪一棵子树的索引值 idx_tree[0,2hh1]\mathrm{idx\_tree} \in [0, 2^{h-h'} - 1]
  3. 用于指定该子树中具体哪一个叶子节点的叶子索引 idx_leaf[0,2h1]\mathrm{idx\_leaf} \in [0, 2^{h'} - 1]

签名生成过程沿着超树自底向上级联展开:

  1. 生成 FORS 签名:利用派生的索引在指定的 FORS 实例上对 MM' 进行签名,得到 σFORS\sigma_{\mathrm{FORS}},并计算出 PKFORSPK_{\mathrm{FORS}}
  2. 底层 WOTS+ 签名:在 Layer 0 的目标子树中,利用第 idx_leaf\mathrm{idx\_leaf} 个 WOTS+ 密钥对对 PKFORSPK_{\mathrm{FORS}} 进行签名;
  3. 计算子树认证路径:计算该叶子节点在 Layer 0 子树中的 Merkle 认证路径,并计算出该子树的根节点 root0root_0
  4. 跨层级联签名:对于第 11 层至第 d1d-1 层,上层子树的目标叶子利用 WOTS+ 私钥对下层子树的根节点 rootj1root_{j-1} 进行签名,并附加对应的 Merkle 认证路径,直至触达顶层根节点 PK.rootPK.root

由于虚拟超树的总叶子节点数量达到了 2h2^h(例如 h=68h=68 时,叶子总数为 2682.95×10202^{68} \approx 2.95 \times 10^{20}),签名者无需记录此前已使用的叶子位置。即使签名者执行上百亿次签名操作,不同消息在底层命中同一叶子节点导致 FORS/WOTS+ 密钥重用的概率仍被严格限制在可忽略的安全阈值内(<260< 2^{-60})。

2.2 32 字节结构化地址(ADRS)空间编码与域隔离

为了确保每一次哈希函数调用在数学上都具备严格独立的域隔离(Domain Separation),防止不同层级、不同子树或不同哈希链之间的输出产生碰撞,FIPS 205 定义了高度规范的 32 字节结构化地址(ADRS)

SLH-DSA 32 字节地址编码 ADRSFIPS 205 · 大端序Layer4 B · 0..d-1Tree Address12 B · 96 位子树号Type4 B · 枚举 0..6参数字域12 B · 3×32 位WOTS_HASHType = 0Layer + Tree 继承Keypair · Chain · HashTREE_ADRSType = 2Layer + Tree 继承 · 保留 0Tree Height · IndexFORS_TREEType = 3Layer + Tree 继承Keypair · Height · Index字节区间 [0..31] · 每次哈希调用取唯一 ADRS 值域隔离不变式 · Hardware Domain SeparationWOTS+ / FORS / Tree 三类哈希零碰撞

32 字节 ADRS 结构划分为 8 个 32 比特大端(Big-Endian)整数字段:

  • Word 0 (layer_adrs):当前操作所处的超树层级(00d1d-1);
  • Word 1..3 (tree_adrs):当前操作所处的子树 96 比特绝对全局地址;
  • Word 4 (type):地址类型枚举编码(0066):
    • 0 = WOTS_HASH:WOTS+ 哈希链内部迭代运算;
    • 1 = WOTS_PK:WOTS+ 多链公钥压缩运算;
    • 2 = TREE:Merkle 树内部二叉节点哈希运算;
    • 3 = FORS_TREE:FORS 内部二叉树节点哈希运算;
    • 4 = FORS_ROOTS:FORS 所有根节点压缩为公钥;
    • 5 = WOTS_PRF:派生 WOTS+ 链首私钥分量;
    • 6 = FORS_PRF:派生 FORS 叶子私钥分量;
  • Word 5..7 (type_specific):根据 type 字段动态复用的参数,包括密钥对索引(keypair_adrs)、哈希链索引(chain_adrs)、哈希迭代步数(hash_adrs)、树高度(tree_height)及树内部索引(tree_index)。

在硬件流水线中,ADRS 寄存器组通过专用硬件状态机在每个哈希时钟周期自动完成字段递增与类型切换,确保哈希输入缓冲区的域隔离字节绝对零开销生成。

2.2.1 状态机在单次签名中的 7 阶段地址流转

在生成一个完整的 SLH-DSA 签名时,硬件地址生成单元(AGU)按照严格确定性的拓扑时序遍历 7 类 ADRS 状态:

ADRS 硬件生成流水线状态时序:
[INIT] -> FORS_PRF (生成k个叶子种子)
       -> FORS_TREE (构造k棵Merkle树计算根)
       -> FORS_ROOTS (压缩为 FORS PK)
       -> WOTS_PRF (Layer 0 派生 67 组链首私钥)
       -> WOTS_HASH (执行 67 条链前向哈希)
       -> WOTS_PK (计算 Layer 0 压缩公钥)
       -> TREE (构造 Layer 0 子树根与认证路径)
       -> 循环递增 Layer_adrs 直至 Layer d-1

由于 ADRS 包含了 96 比特的 tree_adrs,整个超树空间中的每一个哈希调用都拥有全局唯一的 256 比特地址输入。任何两个不同位置的哈希实例,即便输入完全相同的消息片段,其哈希输出也绝不会产生代数关联,在数学层面彻底封死了一切跨树重放与碰撞攻击渠道。

2.3 FIPS 205 官方 12 种参数集深度对比

FIPS 205 针对不同应用场景的性能约束,批准了 12 种标准参数集。参数集按照底层哈希函数分为 SHAKE 系列与 SHA-2 系列,每种系列根据安全等级分为 128、192、256 比特安全强度,并进一步细分为速度优先型(Fast, -f)尺寸优先型(Small, -s)

参数集名称安全等级 (NIST)底层哈希函数树高 hh层数 ddFORS 树高 aa / 树数 kk签名体积 (Bytes)公钥体积 (Bytes)私钥体积 (Bytes)
SLH-DSA-SHAKE-128sCategory 1SHAKE-256637a=12,k=14a=12, k=147,8563264
SLH-DSA-SHAKE-128fCategory 1SHAKE-2566622a=6,k=33a=6, k=3317,0883264
SLH-DSA-SHAKE-192sCategory 3SHAKE-256637a=14,k=17a=14, k=1716,2244896
SLH-DSA-SHAKE-192fCategory 3SHAKE-2566622a=8,k=33a=8, k=3335,6644896
SLH-DSA-SHAKE-256sCategory 5SHAKE-256648a=14,k=22a=14, k=2229,79264128
SLH-DSA-SHAKE-256fCategory 5SHAKE-2566817a=9,k=35a=9, k=3549,85664128
SLH-DSA-SHA2-128sCategory 1SHA-256637a=12,k=14a=12, k=147,8563264
SLH-DSA-SHA2-128fCategory 1SHA-2566622a=6,k=33a=6, k=3317,0883264
SLH-DSA-SHA2-192sCategory 3SHA-512/256637a=14,k=17a=14, k=1716,2244896
SLH-DSA-SHA2-192fCategory 3SHA-512/2566622a=8,k=33a=8, k=3335,6644896
SLH-DSA-SHA2-256sCategory 5SHA-512648a=14,k=22a=14, k=2229,79264128
SLH-DSA-SHA2-256fCategory 5SHA-5126817a=9,k=35a=9, k=3549,85664128

从参数矩阵可以看出:

  • -s(Small)系列:选择更少的超树层数 dd(例如 d=7d=7),单层子树高度 h=9h'=9 较大,且 FORS 参数 a=12a=12 较大。其特点是签名体积极为紧凑(7.8 KB 起),但签名时需要在单层子树内计算多达 29=5122^9 = 512 个叶子节点,签名计算延迟相对较高;
  • -f(Fast)系列:选择更多的超树层数 dd(例如 d=22d=22),单层子树高度 h=3h'=3 极小,单层仅需计算 23=82^3 = 8 个叶子节点。其签名生成速度相比 -s 方案可提升 5 至 10 倍,但签名体积由于需要包含 22 个 WOTS+ 签名而膨胀至 17 KB 至 49.8 KB。

三、状态化哈希签名:RFC 8554 (LMS) 与 RFC 8391 (XMSS) 的工程实现与状态风险

与无状态超树通过巨大的虚拟空间稀释碰撞概率不同,状态化哈希签名体系(Stateful Hash-Based Signatures)采用了单层或双层固定容量的 Merkle 树结构。

哈希签名硬件安全根对比RoT 集成视角状态化 · LMS / XMSSNVM 单调状态计数器WOM / OTP 回滚屏障风险:状态复用泄露私钥BDS 树遍历引擎树高 H=10/20 · 根缓存 ROM签名约 2 KB · 验签 < 0.5 ms适用边界安全启动 · 固件签名状态变更可原子化环境无状态 · SLH-DSA确定性种子派生SK.seed + PK.seed + ADRS零持久状态 · 克隆复用免疫超树即时计算h=60–68 · d=7–22 · FORS k签名 8–50 KB · 15–80 ms适用边界PKI / X.509 双算法证书链高并发集群 · 无法同步状态选型判据:状态能否原子化维护 —— 能则 LMS/XMSS,否则 SLH-DSA

3.1 状态化签名的核心机制与能效优势

以 IETF RFC 8554 定义的 Leighton-Micali 签名(LMS / HSS)为例,其公钥直接为一棵高度为 HH(如 H=10H=10H=20H=20)的 Merkle 树根节点。该树总共包含 2H2^H 个 WOTS/LM-OTS 单次私钥叶子:

  1. 叶子索引严格单调递增:系统维护一个非易失性状态计数器 q[0,2H1]q \in [0, 2^H - 1]
  2. 单次使用即销毁:对第 kk 笔消息签名时,强制调用第 q=kq=k 个叶子私钥生成单次签名,并附带该叶子在 Merkle 树中的高度为 HH 的认证路径;
  3. 完成签名后状态递增:签名完成后,计数器原子性递增为 q=k+1q = k + 1。当 q=2Hq = 2^H 时,该私钥完全失效,必须安全注销。

状态化签名的工程优势极为突出:

  • 极小的签名体积:以 LMS SHA256_M32_H10 为例,签名体积仅为 4+4+32+34×32+10×32=1,4964 + 4 + 32 + 34\times 32 + 10\times 32 = 1,496 字节(不到 1.5 KB),比最紧凑的 SLH-DSA 签名还要小 80% 以上;
  • 极低算力消耗:签名生成仅需执行 1 次 LM-OTS 单次签名和预先计算好的 Merkle 树认证路径提取,签名计算耗时仅为毫秒级甚至亚毫秒级;
  • 验证代码极简:验证逻辑仅需数个哈希运算,可在极小面积的 Bootloader ROM(如小于 2 KB 代码区)中完整固化。

3.1.1 分层分级签名系统(HSS)的树级授权机制

对于需要签发数百万次签名的大型生产系统,单棵高度为 H=20H=20 的树(支持 1,048,5761,048,576 次签名)可能仍有生命周期上限。RFC 8554 引入了分层分级签名系统(Hierarchical Signature System, HSS)

  • HSS 构建了 LL 层的 LMS 树链(例如 L=2L=2L=3L=3);
  • 顶层 LMS 树的叶子私钥不直接用于签名业务消息,而是用于签名生成下一层 LMS 树的根公钥;
  • 底层 LMS 树耗尽所有叶子后,系统自动生成一棵全新的子树,并由父树的下一个可用叶子对其公钥进行认证签署;
  • HSS 使得系统支持的总签名次数达到 2H1+H2++HL2^{H_1 + H_2 + \dots + H_L},例如两层 H=10H=10 的 HSS 系统可支持超过 100 万次签名,且单次签名的认证路径仅由两段短路径拼接而成,极大地提升了系统生命周期的扩展性。

3.2 致命的状态重用威胁(State Reuse Vulnerability)

状态化签名的致命弱点在于其对私钥状态持久化的极端脆弱性

若由于任何系统级异常(如断电重置、虚拟机快照回滚、双机热备并发调用、非易失性存储写入失败、微控制器故障注入攻击)导致状态计数器 qq 被回退至历史数值,系统将使用相同的 OTS 叶子私钥对两笔不同的消息 M1M_1M2M_2 进行签名。

在 WOTS/LM-OTS 体系下,一旦同一私钥的两个不同签名公开,攻击者只需对两条哈希链的公开值取交集:

yi,forged=cmin(v1,i,v2,i)(ski)y_{i, \mathrm{forged}} = c^{\min(v_{1,i}, v_{2,i})}(sk_i)

攻击者即可在不需要知道私钥 skisk_i 的情况下,合法伪造出满足 vimin(v1,i,v2,i)v'_{i} \ge \min(v_{1,i}, v_{2,i}) 的任意新消息签名,导致整个硬件信任根的安全边界彻底崩溃。

3.3 硬件级状态隔离与防回滚单调计数器设计

为了在物理硬件中安全部署状态化签名,NIST SP 800-208 提出了严苛的硬件安全要求,规定状态化私钥必须严格封装在具备 FIPS 140-3 物理安全边界的硬件密码模块(HSM)或片上安全子系统(Secure Enclave)中。

硬件防回滚机制必须遵循以下工程设计准则:

  1. 预保留计数器步进(Pre-allocation)机制:在私钥进入工作状态前,硬件状态机必须先向非易失性存储(NVM / OTP / eFuse)写入预先保留的未来索引 qreserve=qcurrent+Kq_{\mathrm{reserve}} = q_{\mathrm{current}} + K(例如 K=100K=100),并强制执行 NVM_Flush() 与硬件读回校验。只有在确认写入成功后,才允许在易失性 SRAM 中递增消耗 qcurrentq_{\mathrm{current}}。若发生意外掉电,重启后计数器直接跳进至 qreserveq_{\mathrm{reserve}},宁可废弃 KK 个叶子私钥,也绝对禁止复用任何历史索引;
  2. 写一次存储器(Write-Once Memory, WOM)比特编码:在嵌入式 Flash 或 OTP 中,状态计数器采用单向比特翻转编码(如将 1 翻转为 0),避免依赖复杂文件系统的元数据更新;
  3. 硬件单调计数器(Monotonic Counter)物理隔离:单调计数器逻辑由专用不可逆硬件状态机控制,严禁提供任何可重置、可减小或可擦除的硬件调试指令接口。
特性对比维度状态化签名 (RFC 8554 LMS / RFC 8391 XMSS)无状态签名 (NIST FIPS 205 SLH-DSA)
状态持久化依赖强依赖(必须严格保证状态单调递增)零依赖(完全无状态,支持任意并发)
误用风险后果状态回滚或快照克隆将导致私钥完全被攻破无状态回滚风险,克隆不破坏不可伪造性
签名体积极小(约 1.5 KB ~ 4.5 KB)偏大(约 7.8 KB ~ 49.8 KB)
验签算力开销极低(约 10~20 次哈希调用)较低(约 100~300 次哈希调用)
签名算力开销极低(基于树遍历算法可达 1~2 ms)中等(需遍历超树,约 15~80 ms)
硬件 ROM 占用极小(< 2 KB 代码区,适合 Boot ROM)中等(约 8~16 KB 代码区)
最佳适用场景固件签名、安全引导(Secure Boot)、OTA 升级通用 TLS、X.509 证书、微服务 API 高并发认证

四、硬件加速与流水线微架构设计:FPGA 与 ASIC 级实现

无论是 SLH-DSA 还是 LMS/XMSS,其性能瓶颈完全受限于底层密码哈希函数(SHAKE-256 或 SHA-256/512)的吞吐量与调用延迟。为了在 FPGA 与专用集成电路(ASIC)中实现线速签名与验证,必须设计高并发、全流水化的硬件哈希加速引擎。

SLH-DSA 哈希加速引擎 · Keccak-f[1600] 流水线SHAKE-256 / SHA3-512Absorb 吸收层AXI4-Stream In64-bit tdataPad10*1 填充r=1088 · 0x1F状态 XOR 吸收1600-bit S[x,y]Permute 置换核 · 24 轮 2 轮展开θ 校验ρ 旋转π 置换χ 非线性ι 常数状态控制器 FSM · 每轮置换 12 周期RC[0..23] 轮常数 ROM · 双轮 RC[2i]+RC[2i+1]Squeeze 输出与树内存零等待挤压缓冲AXI4-Stream Out双口 BRAM 64KBWOTS+ / FORS 节点签名打包缓冲7856-49856 BQRNG 一阶掩码 · χ 步 2-Share ISW 门 · 每轮新鲜随机

4.1 Keccak-f[1600] 24 轮流水线与 2 轮展开(Unrolled)微架构

在 FIPS 205 SHAKE-256 实例化方案中,核心算子为 Keccak-f[1600] 排列置换。其内部包含 1600 比特状态数组(5×55 \times 5 车道,每车道 64 比特),单次置换包含 24 轮迭代。每一轮依次执行 5 个代数变换映射:

Ri=ιχπρθR_i = \iota \circ \chi \circ \pi \circ \rho \circ \theta

各步骤的硬件实现细节如下:

  • θ\theta 变换(奇偶校验混淆):计算 5 列车道的奇偶校验异或和 C[x]=y=04A[x,y]C[x] = \bigoplus_{y=0}^4 A[x,y],并更新 A[x,y]=A[x,y]D[x]A'[x,y] = A[x,y] \oplus D[x]。该层为纯异或组合逻辑网表,关键路径延迟为 2 级 XOR 门;
  • ρ\rho 变换(车道内循环移位):对每个车道执行固定常数位移 A[x,y]=A[x,y]rot(x,y)A'[x,y] = A[x,y] \lll \mathrm{rot}(x,y)。该变换在硬件中为纯金属布线直接换位,传播延迟为 0 ns;
  • π\pi 变换(车道间坐标置换):重新排列各车道物理位置 A[y,2x+3y]=A[x,y]A'[y, 2x+3y] = A[x,y],同样为纯金属布线换位,延迟为 0 ns;
  • χ\chi 变换(非线性位与异或层):计算 A[x,y]=A[x,y](¬A[x+1,y]A[x+2,y])A'[x,y] = A[x,y] \oplus (\neg A[x+1,y] \wedge A[x+2,y])。该层引入唯一的非线性与门逻辑,是侧信道防护的关键攻防焦点;
  • ι\iota 变换(轮常数注入):将 64 比特轮常数 RC[i]RC[i] 异或注入车道 A[0,0]A[0,0],破坏代数对称性。

4.1.1 2 轮展开(2-Round Unrolled)流水线设计权衡

若采用标准的单轮迭代架构,完成一次 Keccak-f[1600] 需要 24 个时钟周期。为了在芯片面积与运算吞吐量之间取得最优平衡,工程上广泛采用 2 轮展开(2-Round Unrolled)架构

  • 将两轮完整的组合逻辑 (ιχπρθ)2(\iota \circ \chi \circ \pi \circ \rho \circ \theta)^2 级联连接,中间不插入触发器寄存器;
  • 整个置换过程被压缩至固定 12 个时钟周期;
  • 在 200 MHz 的系统时钟频率下,单次 1600 比特置换仅需 12×5=6012 \times 5 = 60 ns,吸收/挤出吞吐量突破 18.1 Gbps,为 WOTS+ 和 FORS 链式哈希提供强大的数据泵支持。

4.2 WOTS+ 与 FORS 链式并发流水处理单元

在 SLH-DSA 签名生成中,一次签名涉及数千至数万次哈希函数迭代。例如在 SLH-DSA-128s 中,单个 WOTS+ 签名包含 67 条哈希链,每条链平均执行 7.5 次迭代;一个 FORS 实例包含 k=14k=14 棵高度为 a=12a=12 的树,叶子计算与树构建需要大量哈希计算。

为了避免单核引擎出现严重排队瓶颈,微架构设计采用**多核并行哈希阵列(Multi-Core Hash Array)**拓扑:

  1. 双端口 BRAM 环形工作区:设计 64 KB 双端口 Block RAM,划分为 WOTS+ 缓冲池、FORS 节点暂存区和认证路径堆栈;
  2. ADRS 自动自增引擎:硬件集成专用地址控制协处理器,在哈希核计算的同时,并行在流水线后台生成下一轮所需的 32 字节 ADRS 向量,实现总线零等待周期的紧密流水;
  3. DMA 聚合打包单元:签名输出数据流通过 AXI4-Stream 接口直接流式写入主机端内存,免去大容量易失性缓存的多次拷贝损耗。

在公司自主研发的后量子密码硬件 IP 核中,该流水线架构经受了严格的硬件仿真与板级验证,全项通过了 193/193 KAT 测试(Known Answer Tests,涵盖 FIPS 203、204、205 全系测试向量集),确保了微架构实现与国际标准的逐比特一致性。

4.3 树遍历算法与内存足迹优化:BDS 算法 vs 实时计算

在状态化 Merkle 树(如 LMS/XMSS)的实现中,叶子认证路径(Authentication Path)的计算存在显著的算力与存储权衡:

  • 朴素实时重构(Classic Traversal):每次签名时实时计算认证路径中的所有同胞节点。对于高度为 HH 的树,单次签名需要高达 2H+122^{H+1} - 2 次哈希运算,算力开销随树高呈指数级剧增;
  • 完全预计算树(Full Precomputation):在私钥初始化阶段预先计算整棵树的所有节点并存入外部 RAM。当 H=20H=20 时,需要存储 221×32672^{21} \times 32 \approx 67 MB 数据,在嵌入式硬件中无法承受;
  • BDS 树遍历算法(Buchmann-Dahmen-Schneider Algorithm):采用动态活跃节点栈与子树预热调度机制。BDS 算法通过维护深度为 HH 的保持栈(Keep Stacks)与保留树根(Treehash Instances),将单次签名所需的哈希计算次数均摊至 O(H)\mathcal{O}(H) 级别,同时将 SRAM 内存占用压缩至 O(H2/2)\mathcal{O}(H^2 / 2) 字节。

4.3.1 BDS 调度器在硬件状态机中的流水化实现

在 BDS 算法硬件实现中,调度器(Scheduler)在每个签名周期内分配固定数量(例如 3H33H - 3 次)的哈希运算步数,用于驱动处于后台待命状态的子树哈希实例(Treehash Instances)。当主状态机消耗当前叶子节点并输出认证路径时,后台 Treehash 引擎恰好完成相邻右子树根节点的收敛计算,实现了认证路径生成的平滑恒定时间输出,彻底消除了传统树遍历中偶发性的大延迟毛刺现象。

下表展示了在 Xilinx UltraScale+ FPGA 平台上不同树遍历策略与硬件哈希加速核的实测资源开销对比:

硬件实现模块LUT 资源占用FF 触发器BRAM (36Kb)DSP 单元最高时钟频率单次签名耗时 (LMS-H10)
单核 Keccak (1-Round)3,8502,12020250 MHz3.42 ms
2轮展开 Keccak (Unrolled)7,2002,45040200 MHz1.18 ms
双核并行哈希 + BDS 引擎14,3005,800120200 MHz0.45 ms
四核阵列 + DMA 流水核27,60011,200240180 MHz0.22 ms

4.4 硬件加速引擎端到端延迟分解与总线交互时序

在 PCIe 密码加速板卡架构中,SLH-DSA 的计算延迟由三部分构成:

  1. 主机至板卡 DMA 传输延迟:通过 AXI-MM 协议将待签名数据与控制命令字传输至板卡片上工作区,延迟小于 5 微秒;
  2. 多层超树与 FORS 硬件计算延迟:在 4 核并行硬件哈希加速阵列驱动下,SLH-DSA-128f 的签名计算耗时稳定在 14.8 毫秒,SLH-DSA-128s 签名计算耗时为 62.4 毫秒;
  3. 签名数据流聚合与写回延迟:DMA 控制器将组织好的 17,088 字节(128f)或 7,856 字节(128s)签名数据流式写回主机环形缓冲区。由于采用直接内存访问机制,数据搬运完全与 CPU 计算解耦,整机签名吞吐量在服务器级负载下可达每秒 65 次以上(128f)及每秒 16 次以上(128s)。

五、抗物理侧信道攻击(SCA)与故障注入防御

在密码芯片与硬件安全模块(HSM)的实际物理运行环境中,攻击者可通过高精度示波器、近场电磁探针以及激光/电磁故障注入设备,对正在执行哈希签名计算的芯片进行物理层面的侧信道分析(Side-Channel Analysis, SCA)。

虽然哈希签名不涉及复杂的模多项式大数乘法,但其私钥扩展、哈希链迭代步数以及 WOTS+ 校验和计算依然存在潜在的物理泄漏路径。

5.1 侧信道泄漏威胁建模与脆弱性点分析

  1. WOTS+ 链长泄漏与差分功耗分析(DPA/CPA):在 WOTS+ 签名生成过程中,私钥分量 skisk_i 被执行 viv_i 次单向哈希迭代。若硬件引擎处理不同迭代步数时存在可观测的时间偏差或功耗特征积分差异,攻击者可通过相关性功耗分析(CPA)精确反推消息半字节 viv_i,进而定位中间状态;
  2. Keccak-f[1600] 内部状态功耗泄漏:在私钥派生阶段,种子 SK.seedSK.seed 经由 PRF 计算生成首个私钥分量。Keccak 非线性层 χ\chi 变换中的位与操作 (A[x+1]A[x+2])(A[x+1] \wedge A[x+2]) 会产生强烈的海明距离(Hamming Distance)与海明重量(Hamming Weight)功耗波动;
  3. 故障注入攻击(Fault Injection Attacks, FIA):若攻击者在超树遍历或 WOTS+ 校验和计算时通过时钟毛刺或电压扰动破坏中间寄存器值,可能迫使系统输出损坏的签名分量,从而诱发针对底层哈希原像的差分故障分析。

5.2 恒定时间(Constant-Time)微架构与分支消除

硬件微架构层面的首要防护原则是绝对恒定时间(Constant-Time)执行

  • 无数据依赖分支:控制状态机中严禁出现任何基于私钥数据或消息半字节 viv_i 的条件跳转指令(如 if-else 或早停逻辑);
  • 全长哑操作填充(Dummy Iterations):在执行 WOTS+ 链式哈希计算时,所有 67 条哈希链统一强制执行最大步数 w1=15w-1 = 15 次循环迭代。对于超出实际所需步数 viv_i 的后续迭代,硬件将计算结果写入哑寄存器(Dummy Register)并在最后阶段通过恒定时间无分支多路选择器(Mux)提取目标状态:
yi=CT_Select(step==vi,current_state,yi)y_i = \mathrm{CT\_Select}(step == v_i, \mathrm{current\_state}, y_i)
  • 常数时间校验和编码:校验和数值 CC 的累加与 4 比特切分全部采用无分支比特掩码位移完成,确保在指令流水线中不存在任何微架构状态缓存(Cache)命中率或分支预测器(Branch Predictor)的侧信道痕迹。

5.3 Keccak 非线性层一阶布尔掩码(Boolean Masking)微架构

针对功耗分析攻击,硬件引擎在 Keccak-f[1600] 数据通路中集成了**一阶布尔掩码(First-Order Boolean Masking)**防护机制。

将每个 64 比特内部状态车道 AA 拆分为两个随机共享分量(Shares):

A=A0A1,A0R{0,1}64,A1=AA0A = A_0 \oplus A_1, \quad A_0 \in_R \{0,1\}^{64}, \quad A_1 = A \oplus A_0

对于线性变换层(θ,ρ,π,ι\theta, \rho, \pi, \iota),两份共享分量可独立并行计算:

θ(A)=θ(A0)θ(A1)\theta(A) = \theta(A_0) \oplus \theta(A_1)

对于非线性 χ\chi 变换,由于包含两分量位与项 (A0A1)(B0B1)(A_0 \oplus A_1) \wedge (B_0 \oplus B_1),直接展开会导致交叉项产生非线性功耗泄漏。微架构采用 ISW(Ishai-Sahai-Wagner)安全乘法协议,引入新鲜随机数掩码 r{0,1}64r \in \{0,1\}^{64} 重新流水化隔离:

(A0B0)(A0B1)(A1B0)(A1B1)=((A0B0)r)((A0B1)(A1B0)(A1B1)r)(A_0 \wedge B_0) \oplus (A_0 \wedge B_1) \oplus (A_1 \wedge B_0) \oplus (A_1 \wedge B_1) = \Big( (A_0 \wedge B_0) \oplus r \Big) \oplus \Big( (A_0 \wedge B_1) \oplus (A_1 \wedge B_0) \oplus (A_1 \wedge B_1) \oplus r \Big)

通过在每个时钟周期动态注入新鲜随机数,彻底消除了中间变量的一阶敏感信息泄漏,使整机在 1,000,000 条能量迹采集下全项通过 TVLA(Test Vector Leakage Assessment, t-test <4.5< 4.5)安全检测。

5.4 量子真随机数源(1Gbps QRNG)物理级动态熵注入

布尔掩码技术的高效运行深度依赖于高吞吐量、高质量的真随机数源。若掩码随机数存在统计偏差或伪随机周期性,掩码防御将发生退化。

在实际硬件实现中,系统集成了具备 1Gbps 物理速率的量子随机数发生器(QRNG) IP 接口。该熵源通过对真空涨落或光子相位噪声等量子不确定性物理过程进行高速采样与片上 Toeplitz 矩阵哈希后处理,能够源源不断地为 Keccak 掩码数据通路、FORS 随机盐 RR 生成以及 WOTS+ 私钥扩展提供无偏、不可预测的高熵物理输入,从硬件底层构筑起物理侧信道与量子计算攻击的双重免疫屏障。

5.5 硬件故障注入检测与双轨冗余计算防御

为了全面防范激光光束照射、电压瞬态毛刺与时钟欠频等物理故障注入(Fault Injection)攻击,硬件系统在微架构层面设置了多层级防御闭环:

  1. 双轨空间冗余校验(Dual-Rail Redundancy):核心哈希流水线部署两组完全对等的物理计算通道,在每个时钟周期对其输出摘要进行逐位硬件比对。一旦检测到通道间存在不一致,硬件逻辑瞬间拉高报警中断并封锁输出总线;
  2. 签名自验确认机制(Verify-After-Sign, VAS):在签名输出前,硬件片上验签引擎自动对生成的 σ\sigma 执行轻量级自验,确认由签名恢复出的公钥 PKPK' 严格等于已知公钥 PKPK。若自验未通过,系统直接擦除瞬态寄存器并记录安全事件日志,从根本上阻断任何损坏签名的外泄。

六、在硬件安全根(RoT)、密码机与 PKI 体系中的工程落地准则

将哈希签名技术落地至实际业务系统中,需要根据场景的计算资源、延迟容忍度、存储空间以及并发特征制定差异化的工程落地路径。

6.1 固件安全引导(Secure Boot)与不可变信任根选型准则

在物联网终端、车载控制器、基站主控芯片以及服务器管理控制器(BMC)中,**安全引导(Secure Boot)**是整机信任链条的源头。

硬件安全引导信任链传递时序:
[ROM Immutable RoT] 
        |  (验签 Bootloader)
        v
[First-Stage Bootloader] 
        |  (验签 OS Kernel)
        v
[Secure OS Runtime] 
        |  (验签 业务应用程序)
        v
[User Application Engine]

在安全引导场景中,推荐选型准则如下:

  1. 固件发布端(签名生成):部署在严格物理受控的专用签名服务器或离线密码机中,推荐采用 LMS (RFC 8554)SLH-DSA-SHAKE-128f。签名服务器具备高可靠 NVM 单调计数器与 HSM 保护,确保状态绝不发生回滚;
  2. 终端芯片验签端(签名验证):终端 Bootloader ROM 空间通常极其有限(4 KB 至 16 KB)。在此约束下,LMS 具有最佳工程适配性:其验证算法仅需数次哈希迭代,C 语言汇编优化后代码尺寸小于 1.8 KB,单次固件验签延迟小于 0.5 毫秒,能够在微秒级完成固件完整性校验;
  3. 长寿命无法返厂设备:若设备部署于深空、深海或偏远无人站等长达 30 年生命周期场景,为彻底消除任何潜在的状态同步失效风险,应选用 SLH-DSA-SHAKE-128s 固件签名方案,以 7.8 KB 的签名空间开销换取绝对的无状态免维护特性。

6.2 服务器密码机与云 KMS 密钥全生命周期集成

在符合国家密码行业标准(如 GM/T 0030《服务器密码机技术规范》)的现代云密码机与密钥管理系统(KMS)中,哈希签名引擎作为独立的高安全密码服务单元集成于系统微内核中。

在商密演进体系下,系统采用**双重混合签名(Hybrid Dual-Signature)**机制:

  • 关键管理指令与敏感数据封装同时由传统商密签名算法(如 SM2)与后量子哈希签名算法(如 SLH-DSA)共同签发;
  • 验证端必须通过双重校验方可放行管理权限,兼顾了当前合规测评要求与应对前瞻量子计算威胁的长期韧性。

针对物联网轻量级接入网关与边缘控制节点,结合 ARM 架构处理器的深度汇编调优,底层密码计算库实现了针对 Cortex-A 与 Cortex-M 处理器的指令级并行优化,在特定嵌入式端侧场景下实现了相比标准开源参考实现的 6.7-8.9× 加速 性能跃升,有效解决了边缘端后量子算法计算延迟偏高的工程瓶颈。

6.3 X.509 双算法证书体系与后量子 PKI 混合演进路线

在广域网传输层安全协议(TLS 1.3)与公钥基础设施(PKI)演进中,X.509 证书体系需要平滑过渡至后量子时代:

  1. CA 根证书(Root CA):由于 Root CA 证书签发频率极低、生命周期极长(10 至 30 年),且客户端验证根证书的频次远高于签发频次,SLH-DSA-SHAKE-256s 是构建后量子根证书的理想选择,其纯哈希安全性确保了数十年的密码学确定性;
  2. 中间 CA 与叶子实体证书:采用 IETF Composite / Non-Critical Extension 混合证书结构,将传统椭圆曲线签名(ECDSA / SM2)作为主签名,将 ML-DSA 或 SLH-DSA 作为并列扩展签名,确保旧版客户端能够正常完成链路握手,而升级后的量子安全客户端可无缝提取抗量子签名进行双重校验。

正微光电与正则量子技术团队在后量子密码算法工程化、硬件 IP 核设计、密钥管理及安全防护体系方向持续深耕,已在相关核心技术领域形成了 13 项授权专利 的扎实知识产权壁垒,构建了涵盖算法数学优化、硬件流水线加速、物理侧信道防御及系统级方案集成的全栈技术交付能力。

6.4 后量子迁移评估与分阶段落地路线图

对于大型企业与行业用户,引入基于哈希的数字签名技术应当遵循分阶段演进的工程路线:

  1. 第一阶段:密码资产盘点与合规基准建立:全面扫描现有系统中的非对称签名算法(RSA-2048/4096、ECDSA-P256、SM2),生成完整的加密物料清单(CBOM),识别长生命周期固件与证书信任链;
  2. 第二阶段:双算法混合试点与硬件 RoT 升级:在安全引导与关键服务间通信中部署 LMS / SLH-DSA 混合验签机制,在 FPGA / HSM 密码卡中集成专用硬件加速流水线;
  3. 第三阶段:全面切换与纯抗量子基线确立:完成根 CA 证书向 SLH-DSA 的平滑过渡,注销易受量子攻击的历史算法,全面实现抗量子攻击与抗侧信道攻击的端到端安全闭环。

总结与展望

基于哈希函数的数字签名体系在后量子密码学版图中占据着无可替代的基石地位。以 FIPS 205 (SLH-DSA) 为代表的无状态方案,通过多层超树拓扑、FORS 少数次签名与结构化 ADRS 地址编码,彻底消除了状态同步的工程难题,为通用互联网与公钥基础设施提供了最稳健的数学安全保障;以 RFC 8554 (LMS) 和 RFC 8391 (XMSS) 为代表的状态化方案,则以极小的签名体积与毫秒级的运算速度,在安全引导、固件升级和只读信任根场景中展现出优异的工程效能。

随着量子计算工程化研制进程的不断推进,传统非对称密码体系的迁移窗口正在加速收窄。在芯片底层微架构设计中,深度融合高吞吐量 Keccak-f[1600] 流水线、一阶/高阶布尔掩码防御、以及 1Gbps 量子物理真随机数注入,将成为构筑下一代高安全硬件信任根的核心标准范式。未来,伴随国内外后量子密码标准的全面落地,基于哈希的数字签名技术必将在数字政务、金融核心骨干网、航空航天、关键信息基础设施以及边缘物联领域发挥不可替代的安全底座价值。


参考文献

  1. National Institute of Standards and Technology. (2024). Stateless Hash-Based Digital Signature Standard. NIST Federal Information Processing Standards Publication 205 (FIPS PUB 205). (https://csrc.nist.gov/pubs/fips/205/final)
  2. National Institute of Standards and Technology. (2024). Module-Lattice-Based Key-Encapsulation Mechanism Standard. NIST Federal Information Processing Standards Publication 203 (FIPS PUB 203). (https://csrc.nist.gov/pubs/fips/203/final)
  3. National Institute of Standards and Technology. (2024). Module-Lattice-Based Digital Signature Standard. NIST Federal Information Processing Standards Publication 204 (FIPS PUB 204). (https://csrc.nist.gov/pubs/fips/204/final)
  4. National Institute of Standards and Technology. (2020). Recommendation for Stateful Hash-Based Signature Schemes. NIST Special Publication 800-208. (https://csrc.nist.gov/pubs/sp/800/208/final)
  5. McGrew, D., Curcio, M., & Fluhrer, S. (2019). Leighton-Micali Hash-Based Signatures. IETF RFC 8554. (https://datatracker.ietf.org/doc/html/rfc8554)
  6. Huelsing, A., Butin, D., Gazdag, S., Rijneveld, J., & Mohaisen, A. (2018). XMSS: eXtended Merkle Signature Scheme. IETF RFC 8391. (https://datatracker.ietf.org/doc/html/rfc8391)
  7. Bernstein, D. J., Castryck, W., Lange, T., et al. (2020). SPHINCS+ — Submission to the NIST Post-Quantum Cryptography Standardization Project. IACR Cryptology ePrint Archive. (https://eprint.iacr.org/2020/1220.pdf)
  8. Kannwischer, M. J., Rijneveld, J., Schwabe, P., & Stoffelen, K. (2023). PQClean: Clean, portable, tested implementations of post-quantum cryptography. IACR Cryptology ePrint Archive. (https://eprint.iacr.org/2023/1594.pdf)
  9. National Institute of Standards and Technology. (2024). Post-Quantum Cryptography Standardization Project. NIST Information Technology Laboratory. (https://csrc.nist.gov/projects/post-quantum-cryptography)
  10. SPHINCS+ Development Team. (2024). SPHINCS+ Documentation and Official Specifications. (https://sphincs.org/resources.html)
  11. Housley, R. (2020). Use of the Leighton-Micali Signature (LMS) Algorithm in the Cryptographic Message Syntax (CMS). IETF RFC 8778. (https://datatracker.ietf.org/doc/html/rfc8778)
  12. Turan, M. S., Barker, E., Kelsey, J., McKay, K. A., Baish, M. L., & Boyle, M. (2018). Recommendation for the Entropy Sources Used for Random Bit Generation. NIST Special Publication 800-90B. (https://csrc.nist.gov/pubs/sp/800/90/b/final)
Share:
Back to Blog

Related Posts

View All Posts »
后量子密码 AVX2 矢量优化实践

后量子密码 AVX2 矢量优化实践

深入解析后量子密码在 x86-64 AVX2 架构下的矢量化优化工程,涵盖 ML-DSA 模乘蝶形算子并行、Keccak 4路并行与内存对齐流水线设计。

ML-KEM 硬件微架构与抗侧信道 FO 变换

ML-KEM 硬件微架构与抗侧信道 FO 变换

深入剖析 NIST FIPS 203 ML-KEM 模块格密钥封装标准的数学底座、多通道 NTT 模乘流水线微架构、CBD 采样硬件设计,以及针对选择密文攻击的 Fujisaki-Okamoto 隐式拒绝重加密电路与一阶/高阶掩码侧信道防御工程实现。

抗量子安全启动:NIST SP 800-208 固件信任根

抗量子安全启动:NIST SP 800-208 固件信任根

系统剖析 NIST SP 800-208 状态化哈希签名标准(LMS/HSS)在抗量子硬件安全启动中的工程实现,详解 Merkle 认证树构造、WOTS+ 链式推导、双轨单调非易失状态同步与 Boot ROM 硬件信任根防回滚架构。