2. 后量子签名算法概览
后量子签名算法的设计思路并非只有一条路。目前进入标准化视野的主流方案大致分为三类:基于哈希的签名、基于格的签名、基于编码的签名。它们各自建立在不同的数学困难问题之上,因此在密钥尺寸、签名长度、运算速度、实现复杂度上呈现出截然不同的性能画像。理解这些差异,是后续做性能评测与调优的前提——因为不同算法对CPU、内存、随机数质量、缓存层次的敏感点完全不同,调优手段也大相径庭。
基于哈希的签名:以SPHINCS+为代表
基于哈希的签名安全性只依赖于哈希函数的抗碰撞性与单向性,被认为是最保守、最"抗量子"的路线,因为即便量子计算机出现,哈希函数的安全假设也相对稳固。其核心思想是Merkle树:把大量一次性签名(OTS)的公钥作为叶子节点,逐层哈希得到根节点作为整体公钥。签名时选取某个叶子的一次性密钥对消息签名,并附带从该叶子到根的认证路径。
SPHINCS+是这类方案的无状态代表。它用少量几层超树(hypertree)结构替代了早期XMSS/LMS必须维护的状态,从而避免了"签名次数不能重复、状态必须严格保存"的工程难题。代价是签名体积很大:SPHINCS+的签名通常在7KB到50KB之间(取决于参数集,如sphincs+-sha2-128s约7.8KB,128f约17KB),公钥和私钥则较小(公钥约32字节,私钥约64字节)。签名过程需要大量哈希运算,速度偏慢,验签相对快一些。它的典型特征是"小密钥、大签名、慢签名、快验签、无状态、实现简单",非常适合签名频率低但对长期安全性要求极高的场景,例如固件签名、根证书签发。
基于格的签名:Dilithium与Falcon
格基签名是当前标准化进程中的主力。其安全性建立在模格上困难问题(如SIS、LWE)之上,兼顾了效率与尺寸。Dilithium(现已被NIST选为ML-DSA)基于模格上的短向量问题,采用"拒绝采样"式的Fiat-Shamir变换:签名者反复采样一个小的随机向量,计算承诺,挑战哈希后若结果落在安全范围内则输出,否则重新采样。这种设计使签名分布与私钥无关,从而具备安全性证明。
Dilithium的性能特征是"均衡":公钥约1.3KB,签名约2.4KB(以Dilithium3为例),签名和验签都在毫秒级甚至更快,且不需要浮点运算,适合嵌入式与通用CPU。Falcon则走另一条路,基于NTRU格,使用快速傅里叶变换(FFT)做高斯采样,签名更短(约666字节,Falcon-512),但签名过程涉及浮点FFT和高斯采样,实现复杂、对浮点精度和侧信道防护要求高,验签则很快。可以概括为:Dilithium"尺寸适中、实现友好、速度均衡";Falcon"签名最短、验签快、但签名实现门槛高"。
基于编码的签名:MQDSS等
基于编码的密码学以纠错码解码困难问题为基础,最著名的是McEliece加密,但签名方案相对小众。MQDSS(基于多变量与编码思想的一类签名)等方案试图在编码框架下构造签名。这类方案的特点是公钥往往很大(可达数百KB甚至MB级),签名尺寸中等,运算以有限域上的矩阵/向量运算为主。由于公钥体积庞大,它们在证书链、带宽受限场景中并不占优,更多出现在特定研究或对编码假设有偏好的部署中。工程上需要关注大公钥的存储与传输开销,以及有限域运算的查表优化。
性能特征对比与选型判断
把三类方案放在一起看,可以形成一张清晰的取舍地图。基于哈希的方案是"用签名体积换安全保守性",密钥极小、实现极简、无状态,但签名大且慢;基于格的方案是"综合最优解",尺寸和速度都处于可用区间,Dilithium实现友好、Falcon签名最短但实现门槛高;基于编码的方案则受制于大公钥,在带宽和存储敏感的场景中处于劣势。
实际选型时,建议先明确约束条件再对号入座。若场景是低频签名、长期存档、固件或根证书,签名体积不敏感而安全性要求最高,SPHINCS+是稳妥选择;若场景是TLS握手、代码签名、通用身份认证,需要兼顾尺寸与速度,Dilithium是默认起点;若场景对签名长度极度敏感(如某些区块链或空间受限的报文),且团队有能力处理浮点实现与侧信道防护,可评估Falcon;基于编码的方案目前更适合作为研究或特定合规偏好的备选。