量子密钥分发原理
量子密钥分发(英语:quantum key distribution,简称QKD)是利用量子力学特性实现密码协议的安全通信方法。它使通信的双方能够产生并分享一个随机的、安全的密钥,来加密和解密讯息。它常常被误称为量子密码学,因为它是量子密码学任务中最著名的例子。
量子密钥分发的一个最重要的,也是最独特的性质是:如果有第三方试图窃听密码,则通信的双方便会察觉。这种性质基于量子力学的基本原理:任何对量子系统的测量都会对系统产生干扰。第三方试图窃听密码,必须用某种方式测量它,而这些测量就会带来可察觉的异常。通过量子叠加态或量子纠缠态来传输信息,通信系统便可以检测是否存在窃听。当窃听低于一定标准,一个有安全保障的密钥就可以产生了。
以下是一个用qiskit实现量子通讯的电路
from qiskit import QuantumCircuit, transpile
from qiskit_aer import Aer
from qiskit.visualization import plot_histogram, plot_bloch_multivector
from numpy.random import randint
import numpy as np
qc = QuantumCircuit(1,1)
# Alice 将量子比特转换成|+>来发送
qc.h(0)
qc.barrier()
# Alice 现在把这个量子比特发送给Bob
# Bob 使用相同的基来进行测量
qc.h(0)
qc.measure(0,0)
# 画出并模拟电路
display(qc.draw('mpl'))
aer_sim = Aer.get_backend('aer_simulator')
job = aer_sim.run(qc)
plot_histogram(job.result().get_counts())
我们可以清楚的发现Bob所测量Alice发送的量子比特有且只有一个结果。
我们再来看看有第三方监听的情况下会发生什么?
qc = QuantumCircuit(1,1)
# Alice 将量子比特转换成|+>来发送
qc.h(0)
# Alice 现在把这个量子比特发送给Bob
# 但是窃听者尝试阅读这个消息
qc.measure(0, 0)
qc.barrier()
# 窃听者在解密后将结果传达给Bob
# Bob用x基来进行解密
qc.h(0)
qc.measure(0,0)
# 画出并模拟电路
display(qc.draw('mpl'))
aer_sim = Aer.get_backend('aer_simulator')
job = aer_sim.run(qc)
plot_histogram(job.result().get_counts())
Bob监听的量子状态发生了改变,他所收到的消息变成了0和1各50%的概率。