2. BB84 窃听检测:截获-重发攻击下的误码率阈值判定
窃听模型与判定思路
截获-重发(Intercept-Resend)攻击是 BB84 最经典的个体攻击模型:Eve 以概率 p 对每个光子进行截获,随机选择测量基测量后,再按测量结果制备新光子发给 Bob。由于 Eve 的基选择与 Alice 的制备基只有 1/2 概率一致,当 Alice 与 Bob 基一致时,Eve 引入的误码率为 1/4。因此,若 Eve 截获比例为 p,筛选后量子误码率(QBER)的期望值为:
QBER(p) = p × 1/4 = p/4
BB84 在仅考虑单光子源、理想探测的简化模型下,安全阈值通常取 QBER ≤ 11%(对应 p ≈ 44%)。超过阈值说明窃听比例过高,密钥不可用,应中止本次协商。下面用 Python 仿真验证这一关系,并给出判定逻辑。
仿真实现:不同窃听比例下的 QBER 计算
下面代码完整实现一次 BB84 协商,并在传输环节插入截获-重发模型。关键点:Eve 对每个光子以概率 p 截获,随机选基测量后按结果重发;Bob 正常测量。最后只统计 Alice 与 Bob 基一致的筛选比特,计算 QBER。
import random
def bb84_with_eavesdropping(n_bits=20000, p_eve=0.0, seed=42):
rng = random.Random(seed)
alice_bits = [rng.randint(0, 1) for _ in range(n_bits)]
alice_bases = [rng.randint(0, 1) for _ in range(n_bits)] # 0:Z, 1:X
# 传输:Eve 截获-重发
eve_bits, eve_bases = [], []
for i in range(n_bits):
if rng.random() < p_eve:
# Eve 随机选基测量
eb = rng.randint(0, 1)
# 若基一致则测得原比特,否则随机
measured = alice_bits[i] if eb == alice_bases[i] else rng.randint(0, 1)
eve_bits.append(measured)
eve_bases.append(eb)
else:
eve_bits.append(alice_bits[i])
eve_bases.append(alice_bases[i])
# Bob 随机选基测量
bob_bases = [rng.randint(0, 1) for _ in range(n_bits)]
bob_bits = []
for i in range(n_bits):
if bob_bases[i] == eve_bases[i]:
bob_bits.append(eve_bits[i])
else:
bob_bits.append(rng.randint(0, 1))
# 基比对筛选
sifted_a, sifted_b = [], []
for i in range(n_bits):
if alice_bases[i] == bob_bases[i]:
sifted_a.append(alice_bits[i])
sifted_b.append(bob_bits[i])
errors = sum(a != b for a, b in zip(sifted_a, sifted_b))
qber = errors / len(sifted_a) if sifted_a else 0.0
return len(sifted_a), qber
THRESHOLD = 0.11
for p in [0.0, 0.1, 0.2, 0.3, 0.44, 0.6, 0.8]:
n, qber = bb84_with_eavesdropping(p_eve=p)
verdict = "可用" if qber <= THRESHOLD else "中止"
print(f"p={p:.2f} 筛选比特={n:5d} QBER={qber:.4f} 判定={verdict}")
结果判读与阈值比较
运行上述代码(示例种子固定,结果可复现)会得到类似下表的数据。理论值 p/4 与仿真值高度吻合,验证了模型正确性:
| 窃听比例 p | 理论 QBER = p/4 | 仿真 QBER(示例) | 与 11% 阈值比较 | 密钥判定 |
|---|---|---|---|---|
| 0.00 | 0.000 | ≈0.000 | 低于 | 可用 |
| 0.10 | 0.025 | ≈0.025 | 低于 | 可用 |
| 0.20 | 0.050 | ≈0.050 | 低于 | 可用 |
| 0.30 | 0.075 | ≈0.075 | 低于 | 可用 |
| 0.44 | 0.110 | ≈0.110 | 临界 | 临界/中止 |
| 0.60 | 0.150 | ≈0.150 | 高于 | 中止 |
| 0.80 | 0.200 | ≈0.200 | 高于 | 中止 |
判定规则:若筛选后 QBER ≤ 11%,认为窃听比例在可容忍范围内,可继续后续的纠错与隐私放大;若 QBER > 11%,说明截获-重发攻击强度过高,本次密钥必须丢弃并重新协商。实际系统中还需考虑探测器暗计数、光源多光子等带来的本底误码,阈值应结合具体参数重新评估。
工程注意点
- 样本量影响:QBER 是统计量,筛选比特越少,估计波动越大。建议用足够多的比特(如 ≥10⁴)做误码估计,或采用随机抽样估计并给出置信区间。
- 阈值不是绝对常数:11% 是理想单光子、无本底误码下的理论界。若系统本底误码为
e₀,则判定条件应修正为QBER ≤ 11% + e₀的近似形式,具体需按安全证明重新推导。 - 攻击模型局限:本仿真只覆盖个体截获-重发攻击。更复杂的集体攻击、相干攻击需要基于诱骗态和更严格的安全分析,不能仅凭 QBER 阈值下结论。