4. 隐私放大算法设计基础
隐私放大(Privacy Amplification)是量子密钥分发后处理链路的最后一环,其任务是把通信双方共享的、但窃听者掌握部分信息的原始密钥,压缩成一段更短、窃听者信息可忽略的最终密钥。设计一个可用的隐私放大算法,核心不是"选一个哈希函数",而是围绕四个相互牵制的量做工程决策:输入从哪来、压缩比取多少、哈希函数用什么参数、输出留多少安全裕量。本节按这条设计主线展开,并给出可直接套用的计算与配置方法。
一、输入提取:先确定"能用的比特"是什么
隐私放大的输入并非任意比特串,而是经过误码协商(纠错)后双方一致、且已知窃听者信息上界的密钥串。工程上第一步是明确三个输入量:
- 原始密钥长度 n:纠错后双方一致的比特数,注意纠错过程本身会泄露信息(通常以泄露比特数 leak_EC 计),这部分必须从安全预算中扣除。
- 窃听者信息上界:常用量子比特误码率 QBER 估计,单光子相位编码 BB84 在渐近情形下,窃听者关于每个比特的信息可用二元熵 h₂(QBER) 近似刻画。
- 输入串的可用性:需确认输入已去除公开协商信息、帧头、填充位,且长度与纠错输出严格对齐;若输入中混入了公开比对过的比特,必须剔除或计入泄露。
一个常见错误是把纠错前的筛后密钥直接送入隐私放大。正确做法是:输入 = 纠错后一致密钥,且安全预算中显式扣除纠错泄露。示例假设:筛后密钥长度 100000 bit,QBER = 3%,纠错泄露 leak_EC = 12000 bit(约为 n·h₂(QBER) 的 1.15 倍,含协商开销)。
二、压缩比计算:从安全界到可执行比例
压缩比决定了"输入多少比特换 1 比特最终密钥"。渐近安全界下,可提取的最终密钥长度满足:
l ≤ n·[1 − h₂(QBER)] − leak_EC − Δ_safety
h₂(x) = −x·log₂x − (1−x)·log₂(1−x)
代入示例:h₂(0.03) ≈ 0.1944,则 n·[1−h₂] ≈ 100000×0.8056 = 80560 bit;扣除 leak_EC = 12000 后余 68560 bit;再预留安全裕量 Δ_safety(下文讨论)。若取 Δ_safety = 256 bit,则 l ≤ 68304 bit,压缩比约为 100000/68304 ≈ 1.46,即约 1.46 个输入比特产出 1 个最终密钥比特。工程上通常把压缩比表述为"输出/输入"的比例 r = l/n ≈ 0.683,配置时向下取整到哈希函数可实现的输出长度。
三、哈希函数参数确定:把安全界落到可实现结构
理论上可用通用哈希族(如 Toeplitz 矩阵哈希)实现,工程上需确定三个参数:
- 哈希族与实现方式:Toeplitz 哈希只需 n+l−1 个随机种子比特,运算可用移位异或或快速傅里叶实现,适合高速场景;也可用 AES 类伪随机函数做压缩,但需保证种子真随机且不重复使用。
- 输出长度 l:由压缩比计算得到,并向下取整到实现支持的粒度(如 8 bit 或 128 bit 对齐)。
- 种子长度与新鲜性:Toeplitz 种子长度 = n + l − 1,必须由真随机源产生、每次会话更新,且不得与纠错阶段复用。
示例中 n = 100000、l = 68304,则 Toeplitz 种子需 168303 bit。若硬件随机源速率有限,可改用分块 Toeplitz(把输入分块、各块独立哈希后拼接),代价是安全界略降,需要在裕量中补偿。
四、输出长度与安全裕量的工程权衡
安全裕量 Δ_safety 用于吸收三类不确定性:有限长效应(输入长度有限导致统计估计偏差)、QBER 估计误差、哈希族非完美带来的剩余信息。经验上可按以下思路取值:
- 有限长修正项约与 √n·log(1/ε) 同阶,ε 为安全参数(如 2⁻³²);
- QBER 估计误差按置信区间上限代入,而非点估计;
- 预留固定下限(如 128~256 bit)作为兜底。
权衡的本质是"安全 vs 成码率":裕量取大,最终密钥更短、成码率下降;取小则安全界变紧。工程上建议把 Δ_safety 设为可配置参数,并在测试中验证:给定 QBER 与 n,实际输出 l 是否始终满足安全界,且成码率满足系统指标。
五、把设计落到可执行的配置
综合以上,一个可复现的隐私放大配置可写成如下参数表(示例值,需按实际系统标定):
| 参数 | 示例值 | 确定依据 |
|---|---|---|
| 输入长度 n | 100000 bit | 纠错后一致密钥长度 |
| QBER 工作范围 | 1%~5% | 系统实测统计,取上限代入 |
| 纠错泄露 leak_EC | 12000 bit | 协商日志统计,含开销系数 |
| 安全裕量 Δ_safety | 256 bit | 有限长修正 + 估计误差 + 兜底 |
| 输出长度 l | 68304 bit | 按公式计算后向下对齐 |
| 压缩比 r | ≈0.683 | l/n |
| 哈希族 | Toeplitz | 种子 n+l−1 = 168303 bit |
实现时还需注意两点:其一,压缩比与输出长度应在运行时按当次 QBER 与 n 动态计算,而非写死;其二,每次会话必须重新生成哈希种子,并对种子做完整性保护。验证阶段可构造已知 QBER 的测试向量,检查输出长度是否满足安全界、相同输入不同种子是否产生不同输出、以及边界情形(如 QBER 接近阈值时 l 是否仍为正)是否被正确拒绝。只有把输入、压缩比、哈希参数与裕量四者作为一个整体标定,隐私放大环节才既安全又具备可用的成码率。