4. 后处理算法总览与选型准则

原始量子随机数发生器(QRNG)输出的比特流通常带有偏置、相邻相关性或可预测成分,不能直接作为密码学密钥使用。后处理的任务是在不引入新熵源的前提下,把有偏、弱相关的原始比特转换为接近均匀且不可预测的输出。本节从“适用条件—代价—输出性质”三个维度,对五类主流后处理算法做一次总览,并给出可操作的选型准则。

五类算法的定位

冯·诺依曼校正是最经典的去偏方法:把原始比特两两分组,01 输出 0,10 输出 1,00 和 11 丢弃。它不需要知道偏置大小,只要比特独立同分布即可得到无偏输出。代价是输出率随偏置恶化急剧下降:当原始 1 的概率为 p 时,保留概率为 2p(1−p),p=0.5 时保留 50%,p=0.6 时只剩 48%,p=0.9 时仅 18%。它只去偏,不消除相关性,也不提供密码学强度。

异或压缩把 n 个原始比特异或成 1 个输出比特。若各比特独立且偏置相同,异或后偏置按 (1−2p)^n 指数衰减,n=8、p=0.55 时输出偏置约 0.006,接近均匀。它实现极简、吞吐高,但同样只处理独立同分布假设下的偏置,对马尔可夫相关或外部注入的确定性成分无能为力,且不抗主动攻击。

哈希函数压缩(如 SHA-256、SHA-3)把任意长度输入映射为固定长度输出,具有单向性和雪崩效应。工程上常把原始比特按块喂入哈希,取摘要作为输出。它计算确定、实现成熟,但安全性依赖哈希的抗碰撞与抗原像假设,且输出长度固定,压缩比不随输入熵自适应。若输入熵不足,输出仍可能被穷举。

密码学提取器(如基于 HMAC 的 HKDF-Extract、Toeplitz 哈希、Trevisan 提取器)在信息论或计算假设下,把“弱随机源 + 短种子”提取为接近均匀的密钥。Toeplitz 哈希用随机矩阵与输入做乘加,在已知最小熵下界时可证明输出接近均匀,适合对可证明性要求高的场景;HKDF 则更偏工程实用,依赖 HMAC 的计算安全性。提取器的关键前提是必须知道或保守估计输入的最小熵。

伪随机扩展(PRNG/DRBG,如 AES-CTR DRBG、ChaCha20)用短种子生成任意长输出。它本身不增加熵,只是把种子熵“摊开”。因此它必须放在提取器之后,用已提取的高质量种子驱动,绝不能直接接原始弱随机源。

后处理算法选型:输入条件 → 算法 → 输出性质与代价 原始比特特征 独立同分布 + 偏置 相邻相关 / 马尔可夫 已知最小熵下界 存在主动攻击风险 需要长输出流 资源受限 / 低功耗 需可证明安全性 吞吐优先 候选算法 冯·诺依曼校正 异或压缩 哈希函数压缩 密码学提取器 伪随机扩展 输出性质 无偏,但保留相关性 偏置指数衰减 计算安全,定长输出 可证明接近均匀 不增熵,仅扩展 主要代价 输出率骤降 需独立同分布 算力 / 延迟 需熵估计 + 种子 依赖种子质量 推荐组合: 弱源 → 熵估计 → 密码学提取器(Toeplitz/HKDF)→ 伪随机扩展(AES-CTR DRBG)→ 密钥输出

选型准则:先看输入,再看威胁模型

选型的第一步不是比较算法优劣,而是明确原始比特的统计特征和系统面临的威胁模型。若原始源已通过 NIST SP 800-90B 类熵评估,且偏置稳定、比特间独立,异或压缩或冯·诺依曼校正即可满足非密码学用途;若用于密钥生成,则必须叠加密码学提取器。若原始源存在相邻相关,冯·诺依曼和简单异或都会失效,因为它们的无偏性证明依赖独立同分布假设,此时应先用去相关(如按固定间隔抽样)或直接采用能处理弱随机源的提取器。

第二步是确定“是否需要可证明安全”。Toeplitz 哈希在已知最小熵下界时能给出信息论意义上的接近均匀输出,适合高保障场景;HKDF 实现简单、生态成熟,但安全性归约到 HMAC 的计算假设。若系统已部署 SHA-3 且对吞吐要求不高,SHAKE256 也可作为提取器使用,其可扩展输出特性还能省去单独的扩展模块。

第三步是核算代价。下表给出五类算法在典型参数下的定性对比,其中输出率以原始比特为 1 计,延迟为相对量级。

算法 适用输入条件 输出率(典型) 延迟 抗主动攻击 可证明性
冯·诺依曼校正独立同分布、偏置未知2p(1−p),p=0.5 时 0.5极低否无偏性可证
异或压缩独立同分布、偏置已知1/n,n 为压缩比极低否偏置衰减可算
哈希函数压缩任意,但需熵下界固定摘要长度/输入块中部分依赖哈希假设
密码学提取器弱随机源 + 短种子接近最小熵中高是Toeplitz 可证
伪随机扩展高质量种子任意长低是(种子保密)依赖 PRNG 假设

工程实现中的关键参数

以 Toeplitz 提取器为例,若原始源的最小熵估计为 H_min = 0.85 bit/bit,输入块长 n = 1024 bit,则安全输出长度 m 应满足 m ≤ H_min·n − 2·log2(1/ε),取 ε = 2^−64 时 m ≤ 870 − 128 = 742 bit。工程上常取 m = 512 bit 留出余量。Toeplitz 矩阵由 n+m−1 个随机比特定义,这些比特必须来自高质量种子,且每次提取后应更新,否则矩阵泄露会削弱安全性。

若采用 AES-CTR DRBG 做扩展,种子长度建议不低于 256 bit,并设置重播种间隔。例如每生成 2^20 个 128 bit 块后重新从提取器取种子,防止状态泄露后的输出被回溯。计数器模式下的输出块为 E_K(counter),counter 从 0 递增,需保证同一密钥下计数器不重复。

常见误区:把伪随机扩展直接接在原始弱随机源之后。PRNG 不增加熵,若种子本身有偏或可预测,输出同样可预测。正确顺序永远是“先提取、后扩展”。
选型速记:非密码用途、偏置稳定 → 异或压缩;密码用途、有熵下界 → Toeplitz/HKDF;需要长输出 → 提取器后接 DRBG;资源极受限且仅需去偏 → 冯·诺依曼校正。

最后需要强调,后处理算法的安全性上限由输入最小熵决定。任何算法都无法从零熵中产生熵。因此在实际工程中,熵估计与后处理必须联合设计:先通过 SP 800-90B 的估计器给出保守的 H_min,再据此选择提取器参数和压缩比,最后用统计测试套件(如 NIST STS、Dieharder)验证输出,但统计测试通过只是必要条件,不能替代熵源建模与可证明分析。