1. 后量子签名性能评测导论

后量子签名(Post-Quantum Signature,PQS)是能够在量子计算机攻击模型下仍然保持安全性的数字签名方案。它并不是某一种算法的名字,而是一类方案的统称:基于格的 Dilithium(ML-DSA)、Falcon、基于哈希的 SPHINCS+(SLH-DSA)、基于编码的方案,以及基于多变量多项式的方案,都属于这一家族。它们与 RSA、ECDSA 的根本差别在于安全假设——后者的安全性依赖大整数分解或离散对数难题,而 Shor 算法可以在多项式时间内解决这两类问题;后量子签名则把安全性建立在格上的最短向量问题、哈希函数的抗碰撞性等被认为对量子算法也困难的数学结构上。

这种安全性的代价是工程特性的显著变化。一个直观的对比是:ECDSA P-256 的公钥只有 64 字节、签名约 64 字节,而 ML-DSA-44 的公钥为 1312 字节、签名 2420 字节;SPHINCS+ 的签名甚至可达 7856 字节以上。密钥和签名的膨胀会直接传导到握手报文大小、证书链长度、存储占用和网络分片行为上。因此,后量子签名的落地不是“换一个算法库”那么简单,而是一次涉及带宽、算力、内存与能耗的系统性权衡。性能评测的意义正在于此:它把“能不能用”变成“在什么条件下、以什么代价可用”的量化判断。

后量子签名性能评测:六维指标 → 三类约束 → 调优目标 被测签名方案 ML-DSA / Falcon SPHINCS+ / 编码类 同一安全等级下横向比较 签名速度 次/秒 · 单次耗时 验签速度 吞吐 · 尾延迟 密钥大小 公钥 + 私钥字节数 签名大小 单条签名字节数 内存占用 峰值堆栈 · 工作区 能耗 单次操作焦耳数 算力约束 签名/验签耗时决定 服务端 QPS 与超时 带宽与存储约束 密钥/签名大小决定 报文分片与证书链 资源约束 内存与能耗决定 嵌入式与移动端可行性 调优目标 ① 满足业务时延上限 ② 控制报文膨胀比例 ③ 峰值内存可承载 ④ 单位操作能耗可接受 ⑤ 安全等级不降级 评测原则:固定安全等级(如 NIST 第 3 类)后再横向比较;同一硬件、同一编译选项、同一消息长度下测量; 速度取多次运行的中位数与 P99,大小取编码后字节数,内存取峰值工作区,能耗取单次操作增量。

上图把评测工作拆成三层:左侧是被测方案,中间是六个可测量指标,右侧是这些指标最终约束的三类工程条件,最右是调优目标。理解这张关系图的关键在于:六个指标并非彼此独立,而是通过“安全等级”这一共同基准耦合在一起。脱离安全等级谈“ML-DSA 比 Falcon 慢”是没有意义的,因为不同参数集对应的安全强度不同。因此评测的第一条纪律是先锁定安全等级,再横向比较,通常以 NIST 第 1、3、5 类作为对齐基准。

六个指标各自测什么

签名速度与验签速度是最常被关注的指标,但要注意它们的量纲和分布。工程上应同时记录单次操作耗时(微秒或毫秒)与批量吞吐(次/秒),并给出中位数和 P99 尾延迟。原因在于后量子方案的耗时分布往往比传统算法更“重尾”:Falcon 的签名涉及浮点采样,最坏情况可能明显偏离均值;SPHINCS+ 的签名耗时则与哈希调用次数强相关。只报平均值会掩盖超时风险。

密钥大小与签名大小是纯静态量,测量简单但影响深远。它们决定了 TLS 握手报文是否会超过单个 TCP 段、证书链是否需要分片、区块链交易的存储成本、以及固件中密钥区的容量规划。评测时应记录编码后的实际字节数(含长度前缀),而不是理论位宽。

内存占用常被低估。格基方案的密钥生成与签名过程需要较大的工作区,某些实现在签名时峰值堆栈可达数十 KB 到数百 KB,这对 Cortex-M 类微控制器是硬约束。测量方法是记录峰值工作区(peak heap/stack),而非平均占用。能耗则通常通过功耗采集设备对单次操作做积分得到,单位是毫焦或微焦,适合在移动端与物联网场景中作为选型依据。

一个可复现的评测流程示例

下面给出一个教学用的评测骨架,参数与数值均为示例假设,用于说明流程而非给出实测结论。假设目标是为一台 x86-64 服务器选型,业务要求验签 P99 不超过 1 ms、单条签名不超过 4 KB。

# 示例:固定安全等级(NIST 第 3 类)下的横向评测骨架
方案列表 = [ML-DSA-65, Falcon-512, SPHINCS+-128s]
消息长度 = [32B, 1KB, 64KB]        # 覆盖短令牌与大文档
重复次数 = 1000                     # 取中位数与 P99
测量项   = [keygen_us, sign_us, verify_us,
            pk_bytes, sk_bytes, sig_bytes,
            peak_mem_kb, energy_mj]

for 方案 in 方案列表:
    for 长度 in 消息长度:
        预热(方案, 长度)
        记录(方案, 长度, 测量项)
输出: 中位数 / P99 / 峰值内存 / 单次能耗
判定: verify_p99 <= 1000us 且 sig_bytes <= 4096 ? 通过 : 淘汰

执行这段骨架时,有几个容易出错的细节值得强调。第一,必须做预热,否则首次调用的动态库加载与缓存冷启动会污染数据。第二,消息长度要覆盖真实分布,签名 32 字节的会话令牌和签名 64 KB 的文档,其耗时构成不同——前者以密钥运算为主,后者哈希开销占比上升。第三,内存测量要在独立进程中做,避免与其他分配混淆。第四,能耗测量需固定 CPU 频率并关闭节能调频,否则数据不可比。

判断结果时不要只看“谁最快”。若某方案验签 P99 达标但签名大小 7856 字节,超过了 4 KB 的报文预算,它在当前业务下依然不合格。评测的产出应是一张“指标—阈值—通过/淘汰”的判定表,而不是一个速度排行榜。

调优目标如何从指标推导

调优不是盲目追求每一项指标最优,而是先由业务反推出阈值,再在阈值内寻找平衡点。举例来说,若业务是高频验签的 API 网关,验签速度就是第一优先级,签名速度可以退让;若业务是离线固件签名,签名频率极低,则签名大小与验签内存更关键;若业务是移动端凭证,能耗与密钥存储占用会成为主导约束。这种“业务场景 → 主导指标 → 阈值 → 方案与参数选择”的推导链,正是后续各章调优工作的出发点。

还需要建立一种预期:后量子签名的性能调优空间主要来自三个方向——算法与参数集的选择、实现层面的优化(如 AVX2 向量化、常量时间实现、预计算)、以及系统层面的设计(如会话复用、批量验签、证书链裁剪)。本章建立的六维指标体系,就是衡量这三类手段是否真正奏效的标尺。没有统一基准和明确阈值的“优化”,很容易变成数字游戏。