4. 诱骗态强度与概率配置的密钥率优化
决策变量与密钥率的关系
在诱骗态 BB84 中,发送端每脉冲随机选择一种强度:信号态强度 μ(概率 p_μ)、弱诱骗态强度 ν(概率 p_ν)、真空态强度 0(概率 p_0,通常取 p_0 = 1 − p_μ − p_ν)。安全密钥率下界为
R ≥ q · [ −Q_μ f(E_μ) H₂(E_μ) + Q₁(1 − H₂(e₁)) ]
其中 Q_μ、E_μ 为信号态的增益与量子误码率,Q₁、e₁ 为单光子脉冲的增益与误码率,由 ν 与真空态的统计量估计得到。μ 增大可提高 Q₁ 的估计精度与计数率,但会抬高多光子比例;ν 过小则统计涨落大、估计方差高。因此存在一组使 R 最大的 (μ, ν, p_μ, p_ν)。
参数扫描程序实现
下面给出一个可直接运行的 Python 脚本。它用弱相干光源的增益/误码解析式构造物理模型,在四维网格上扫描 (μ, ν, p_μ, p_ν),对每个组合计算安全密钥率下界,并输出最优配置。所有参数均为教学示例值,结果由给定输入直接推出,非实测数据。
import numpy as np
from itertools import product
# ---------- 1. 信道与探测器参数(示例值) ----------
alpha = 0.2 # 光纤损耗 dB/km
L = 50.0 # 传输距离 km
eta_det = 0.1 # 探测器效率
Y0 = 1e-6 # 暗计数率(每脉冲)
e_d = 0.02 # 本底误码率
f_ec = 1.16 # 纠错效率
q = 0.5 # 基比对概率(BB84 取 1/2)
eta_ch = 10 ** (-alpha * L / 10.0)
eta = eta_ch * eta_det
def H2(x):
x = np.clip(x, 1e-12, 1 - 1e-12)
return -x * np.log2(x) - (1 - x) * np.log2(1 - x)
# ---------- 2. 弱相干光源的增益与误码 ----------
def gain(mu):
# Y0 为暗计数,1-(1-eta)^n 近似为 n*eta(小 eta 下)
return Y0 + 1 - np.exp(-eta * mu)
def qber(mu):
Q = gain(mu)
return (Y0 * e_d + (1 - np.exp(-eta * mu)) * e_d) / Q
# ---------- 3. 单光子参数估计(ν 与真空态) ----------
def single_photon(nu, mu):
Q_nu, E_nu = gain(nu), qber(nu)
Q_0, E_0 = gain(0.0), qber(0.0)
# 标准诱骗态估计(简化下界)
Q1_lb = (nu * mu / (mu - nu)) * (
Q_nu * np.exp(nu) - Q_0 - (nu**2 / mu**2) * (gain(mu) * np.exp(mu) - Q_0)
)
e1_ub = (E_nu * Q_nu * np.exp(nu) - E_0 * Q_0) / (
(nu * mu / (mu - nu)) * (Q_nu * np.exp(nu) - Q_0 - (nu**2/mu**2)*(gain(mu)*np.exp(mu)-Q_0))
)
return max(Q1_lb, 0.0), min(max(e1_ub, 0.0), 0.5)
# ---------- 4. 安全密钥率 ----------
def key_rate(mu, nu, p_mu, p_nu):
Q_mu, E_mu = gain(mu), qber(mu)
Q1, e1 = single_photon(nu, mu)
R = q * (-Q_mu * f_ec * H2(E_mu) + Q1 * (1 - H2(e1)))
return R
# ---------- 5. 四维网格扫描 ----------
mu_grid = np.linspace(0.30, 0.80, 26)
nu_grid = np.linspace(0.02, 0.20, 19)
pmu_grid = np.linspace(0.50, 0.90, 21)
pnu_grid = np.linspace(0.05, 0.30, 11)
best = {"R": -np.inf}
for mu, nu, p_mu, p_nu in product(mu_grid, nu_grid, pmu_grid, pnu_grid):
if p_mu + p_nu > 0.95:
continue
R = key_rate(mu, nu, p_mu, p_nu)
if R > best["R"]:
best = {"R": R, "mu": mu, "nu": nu, "p_mu": p_mu, "p_nu": p_nu}
print("最优配置:")
for k, v in best.items():
print(f" {k:5s} = {v:.4f}")
结果判读与验证要点
- R 必须为正:若最优 R ≤ 0,说明当前距离/损耗下无法生成安全密钥,应缩短 L 或降低暗计数。
- μ* 与 ν* 的合理性:典型最优 μ 在 0.4–0.6、ν 在 0.05–0.15 之间;若 μ* 顶到网格边界,应扩大扫描范围。
- 概率约束:p_μ + p_ν 接近 0.95 时真空态概率过小,会削弱 Q₁ 估计的可靠性,可加约束 p_0 ≥ 0.05。
- 网格收敛性:将网格步长减半重跑,若最优 R 变化小于 1%,认为扫描已收敛。
- 物理一致性:检查 Q₁ ≤ Q_μ、e₁ ≤ 0.5,否则说明估计公式在边界处失效。
扫描时先固定 p_μ、p_ν 对 (μ, ν) 做二维粗扫定位峰值区域,再在峰值附近加密网格,可显著减少计算量而不损失精度。