4、量子密钥分发(QKD)原理:BB84协议详解、相位编码与偏振编码、密钥生成流程
量子密钥分发,圈内人常叫QKD。说白了,它就是利用量子力学的基本原理,让通信双方能安全地共享一串密钥。你想想看,经典通信里,密钥分发一直是老大难问题——你永远不知道中间有没有人在偷听。但QKD不一样,如果有人窃听,量子态就会坍缩,双方立马就能发现。
我个人最早接触QKD是在2016年,当时给一个科研机构搭实验平台。说实话,第一次看到单光子探测器响起来的时候,还挺激动的。嗯,咱们今天就从最经典的BB84协议讲起。
4.1 BB84协议:量子密钥分发的基石
BB84协议是1984年由Bennett和Brassard提出的。别看它年头久,现在绝大多数QKD系统都还是基于这个框架。它的核心思想很简单:用单光子的量子态来编码比特信息。
协议里用了两组共轭基:
- Z基(计算基):|0⟩ 和 |1⟩,对应水平/垂直偏振,或者相位0/π
- X基(Hadamard基):|+⟩ 和 |−⟩,对应对角/反对角偏振,或者相位π/2/3π/2
为什么需要两组基?因为根据量子不可克隆定理,窃听者不知道发送方用了哪组基,就无法完美复制量子态。我在项目中遇到过有人问:「那如果窃听者刚好猜对了基呢?」没错,他确实有50%的概率猜对。但协议后续有纠错和隐私放大步骤,能把这些泄露的信息压缩掉。
核心要点:BB84的安全性建立在「测量会扰动量子态」这个物理事实上。任何窃听行为都会留下痕迹。
4.2 偏振编码 vs 相位编码
BB84协议的具体实现,主要有两种编码方式。我两种都搭过,各有各的坑。
4.2.1 偏振编码
偏振编码最直观。用光子的偏振方向来表示比特:
| 基 | 比特0 | 比特1 |
|---|---|---|
| Z基(直线偏振) | 水平偏振 (H) | 垂直偏振 (V) |
| X基(对角偏振) | 对角偏振 (D, +45°) | 反对角偏振 (A, -45°) |
偏振编码的好处是物理实现简单,用波片和偏振分束器就能搞定。但有个大问题——光纤会随机改变光的偏振态。我曾经在一条20公里的光纤链路上测试,偏振漂移快得离谱,每几分钟就得重新校准一次。所以偏振编码更适合自由空间QKD,比如卫星通信。
4.2.2 相位编码
相位编码是目前光纤QKD的主流方案。它利用马赫-曾德尔干涉仪,通过控制光脉冲的相对相位来编码信息。
具体做法是:发送端(Alice)和接收端(Bob)各有一个不等臂干涉仪。Alice随机选择相位0或π(对应Z基),或者π/2或3π/2(对应X基)。Bob随机选择相位0或π/2来测量。
我记得第一次调相位编码系统时,干涉仪的稳定性让我头疼了好几天。温度变化、振动都会导致相位漂移。后来我学乖了,加了个反馈控制环路,实时补偿相位漂移。嗯,这里要注意:相位编码对光源的相干长度要求很高,普通LED不行,得用窄线宽激光器。
我的建议:如果是实验室验证,用偏振编码上手快。如果是实际光纤部署,老老实实用相位编码。别问我怎么知道的——我当年在偏振编码上浪费了两个月。
4.3 密钥生成流程:从原始密钥到最终密钥
很多人以为QKD就是发光子、收光子,然后密钥就出来了。其实没那么简单。完整的密钥生成流程分好几步,每一步都有讲究。
下面这张图是我自己画的流程,你一看就明白:
下面我把每个步骤拆开讲:
4.3.1 量子态制备与传输
Alice随机生成一串比特,再随机选择用Z基还是X基来编码。然后通过光纤或自由空间把光子发出去。这里有个细节:实际系统中单光子源很难做,通常用弱相干态激光脉冲代替,平均每脉冲0.1个光子左右。为什么这么低?因为如果每脉冲光子数多了,窃听者就可以分走一个光子而不被发现——这就是著名的PNS攻击。
4.3.2 基比对与原始密钥提取
Bob收到光子后,也随机选基测量。测量完成后,两人通过经典信道公开各自的测量基(注意!不是测量结果)。只保留基一致的那些比特,丢弃不一致的。这个过程会丢掉大约一半的数据。
我曾经在调试时发现,基比对后剩下的比特数比理论值少很多。查了半天,原来是Bob的随机数生成器有偏差,导致他选Z基的概率远高于X基。所以随机数质量真的很重要。
4.3.3 误码估计
Alice和Bob随机挑出一部分比特公开比对,计算量子误码率(QBER)。如果QBER超过某个阈值(通常11%左右),说明信道不安全或者有窃听,直接中止协议。正常光纤系统中,QBER一般在1%~3%之间。
注意:误码估计时公开的比特必须丢弃,不能再用于最终密钥。这是很多人容易忽略的。
4.3.4 纠错与隐私放大
纠错这一步,说白了就是把Alice和Bob手上不一致的比特纠正过来。常用的是Cascade协议,虽然效率不高但实现简单。我更喜欢用LDPC码,吞吐量高很多。
隐私放大则是用哈希函数把密钥压缩一下。假设窃听者知道了k个比特的信息,我们就压缩掉k个比特,确保最终密钥的安全性。嗯,这里有个经验值:隐私放大后的密钥长度大约是原始密钥长度的60%~70%。
4.4 实际部署中的几个坑
最后分享几个我在项目中踩过的坑:
- 同步问题:Alice和Bob的时间同步必须精确到纳秒级。我一开始用GPS同步,后来发现室内收不到信号,改用了光脉冲同步。
- 暗计数:单光子探测器即使没有光子也会偶尔产生计数。温度越低暗计数越少,但制冷成本也高。我一般用-50°C的硅APD,暗计数率能控制在100Hz以下。
- 后脉冲效应:探测器检测到一个光子后,短时间内容易产生假计数。解决办法是加一个死时间,比如10微秒。
小技巧:调试QKD系统时,先别急着跑完整流程。先用连续激光把光路对准,再用脉冲光调时序,最后才上单光子。一步到位的话,出了问题你都不知道是光路问题还是电子学问题。
好了,BB84协议的核心内容就这些。相位编码和偏振编码各有适用场景,密钥生成流程的每一步都有它的物理意义。下次你搭QKD系统时,希望这些经验能帮你少走些弯路。