量子通信(QKD)与BB84协议

量子密钥分发 (QKD, Quantum key Distribution )

 

QKD是量子信息的一个重要分支,也称为“量子保密通信”。

一个量子通信的课程推荐给大家,论述的全面、详细:https://ke.qq.com/course/382160

一个系统、全面讲解传统加密通信SSL/TLS的课程 : http://edu.51cto.com/sd/89f15

量子通信是一个广泛的研究领域,包括QKD、量子隐形传态和“超密编码”等等。但由于量子密钥分发是唯一接近实用的,所以当媒体报道“量子通信”的时候,他们实际上指的就是量子密钥分发。

看“量子密钥分发”这个名字,就能看出来这是一种保密通信的办法。那目前的保密方法不能保密吗?我们需要了解密码学的基本原理,才能明白QKD解决了哪些传统密码术与量子密码相比的不足之处,以及量子因数分解对传统密码术造成了什么样的挑战。

      要保密就要有保密算法,这个算法可以看做是“编码规则”,只靠这个编码规则可以保密吗? 显然是不能的,因为别人也会知道这个算法,也会推导这个算法,你用的算法也在别人的“思考范围之内”;所以靠把一个规则“死保”是不现实的。例如,把算法以机器的形式固定下来(二战中德国用的Enigma密码机),那么敌人一旦得到一台机器,就可以知道算法,一下全外泄了。

     再一个就是算法(不刻意保密)不保密,但是使用双方持有各自的密钥,这样才能互相解密对方发过来的信息,密钥定期更换,刻意根据实际情况配发给各个不同的使用者,这样即使一部分人的密钥外泄,也不至于殃及全局。这个办法也是最常用的,是个目前看来最好的选择。也是目前密码学最主要的领域。

 

密码学的一个基本原则是,在设计算法时,你必须假设敌人已经知道了算法和密文,唯一不知道的是密钥。密码学的研究目标就是,让敌人在这种情况下破译不了密文。算法、密文、密钥三个元素,缺一个密钥,让你死活破译不了;三缺一干着急,这是设计密码体系时的基本原则。

目前可以做到密码本身可以是安全的,但密钥的传送不安全。

香农(著名牛人)证明了一个数学定理:密钥如果满足三个条件,那么通信就是“绝对安全”的。这里说的“绝对安全”是指:敌人即使截获了密文,也无法破译出明文,他能做的只是瞎猜而已。哪三个条件呢?

(1)密钥是一串随机的字符串;

(2)密钥的长度跟明文一样,甚至更长;

(3)每传送一次密文就更换密钥,即“一次一密”。满足这三个条件的密钥叫做“一次性便笺”—— one time pad 。

      我们仔细分析就可以得知,香浓的定理只是“丰满的理想”,而要面对“骨感的现实”。“一次一密” 就是说每次传加密消息前都要获取一次密钥,那么假定集团军指挥所要和某野战军通信(使用无线电台),上午、下午、晚上要传送3次绝密信息,那么就要使用一种手段完成三次双方交换密钥的工作,那么不能使用电台,因为还没有获得密钥嘛,从保密角度看就是派机要人员去做,那么机要员都可以安全的去做交换密钥了,那么更可以”安全的把信息带过去“,交换密钥然后再使用电台,是多此一举,如果机要员不能安全的交换密钥,那么一旦密钥外泄,使用无线电通信也是不能保密的——这就是悖论的地方。

 

    为了解决密钥传送和保存的问题,数学家们想出了另外一套办法,称为“非对称密码体制”或者“公钥密码体制”——RSA 。这个新体系不需要信使传递密钥。解密只是接收方的事,发送方并不需要解密,他们只要能加密就行。这种非对称密码体制实现的关键在于:公钥加密的东西,只能用私钥解密,而且得知公钥以后不能(很难)从已知的公钥推导出私钥。就是说,有些事情沿着一个方向操作很容易,逆向操作却很困难。因数分解就是一个,这就是因数分解能用于密码术的原因,也是RSA体系的重要前提。

    RSA在理论上已经被量子的因数分解算法攻克了。即使是在目前还没有量子计算机的前提下,RSA密码体制也是可能被攻破的,人们也在不断的研究新的算法,在经典计算机上更快的解决因数分解这个难题。

量子密钥是在双方建立通信之后,通过双方的一系列操作产生出来的。它的产生过程就是它的传递过程,可以说是”随制随用“,利用量子力学的特性,可以使双方同时在各自手里产生一串随机数,而且不用看对方的数据,就能保证双方的随机数序列是完全相同的。这串随机数序列就是密钥。量子密钥的产生过程,同时就是分发过程,这样就不用想之前那样去传递密钥了,也就避免了风险。QKD使得香浓推导出的理想状态下的定理,落到了实处。

 

    量子密钥是一串随机的字符串,长度也可随意设定,而且每次需要传输信息时都重新产生一段密钥,这样就完全满足了香农定理的三个要求(密钥随机,长度不小于明文,一次一密),因此用量子密钥加密后的密文是不可破译的。双方都有了密钥之后,剩下的事情就是通信,这个通信可以使用任意的形式,网络、无线电报、激光通信、设置可以手写出来送过去,反正是破译不了的,是安全的。

在一个QKD系统中,什么样的操作,能在通信双方产生一段相同的随机数序列呢?

不少科普文章说量子密码术离不开量子纠缠,这就大错特错了!这种说法造成了很多困扰。实际上,量子密码术有若干种实现方案,有的利用量子纠缠,有的不利用量子纠缠。而实际中难度相对低的,好实现的,恰恰没利用量子纠缠,分析一下就能看出来,量子纠缠是一种多量子体系的现象,而对于实验来说,操纵多个量子肯定比操纵一个量子困难。所以,只要有单量子的方案,人们必然会先用单量子方案。

实际情况也是如此,绝大多数量子密码术的实验都是用单量子方案做的,而基于量子纠缠的量子密码术方案,就像用法拉利跑车送快递一样不实用,只具有理论意义。怎么在双方产生相同的随机数序列?想想前面介绍的三大特性,真正产生随机数的是对叠加态的测量。所以只要充分利用叠加和测量这两个特性就可以,单个量子就可以在双方产生相同的随机数序列。和经典信息学中的通信协议一样,我们把量子密码术的方案都称为某某协议(就像计算机科学中的“,HTTP协议,FTP协议,TCP/IP协议”),上述的利用EPR对的方案叫做EPR协议;而单粒子的方案包括BB84协议、B92协议、诱骗态协议等。BB84协议是美国科学家Charles H. Bennett和加拿大科学家Gilles Brassard在1984年提出的,BB84是两人姓的首字母加上年份的缩写。BB84协议是最早的一个方案,而且目前最先进的诱骗态协议可以理解为它的演进加强版。所以只要理解了BB84协议,就理解了量子密钥分发的精髓。

在BB84协议中,用到偏振光子(光子是光的量子)的四个状态:|0>、|1>、|+>和|->。这四个状态是用光子的偏振(回顾一下,偏振方向就是电场所在的方向)来表示的,分别对应光子的偏振处于0度、90度、45度和135度。

|0>和|1>这两个态构成一个基组,|+>和|->这两个态构成另一个基组。在某个基组下测量这个基组中的状态,比如在|0>和|1>的基组中测量|0>,那么结果不变,测完以后还是|0>这个态。在某个基组下测量这个基组之外的状态,比如说在|0>和|1>的基组中测量|+>,那么结果必然改变,以一半的概率变成|0>,一半的概率变成|1>。因为|+>状态可以表示为 |0> 、|1> 2个状态的线性叠加 : 1/√2*|0> + 1/√2*|1> ,√2的平方加/√2的平方等于 1/2 +1/2 = 1 ,所以测量后所得结果各占 50% 。

 

现在我们来描述BB84协议的操作过程。A拿一个随机数发生器,产生1个随机数0或者1(记作a),用a来决定选择哪个基组:得到0就用|0>和|1>的基组,得到1就用|+>和|->的基组;选定基组之后,再产生1个随机数(记作a′),根据这第二个随机数决定在基组中选择哪个状态:得到0就在|0>和|1>中选择|0>或者在|+>和|->中选择|+>,得到1就在|0>和|1>中选择|1>或者在|+>和|->中选择|->。经过这样双重的随机选择之后,A把选定的随机数 a' 保留,把由a'的值所决定的光子发送出去(一个一个连续的发出,a'决定的是光子的状态)。

 

B接到光子的时候,并不知道它是属于哪个基组的。B也拿一个随机数发生器,产生1个随机数(记作b),得到0的时候就在|0>和|1>的基组中测量,得到1的时候就在|+>和|->的基组中测量。B测得|0>或者|+>就记下一个0,测得|1>或者|->就记下一个1,我们把这个数记为b′。

 

如果B猜对了基组,也就是a = b,那么所得到得那个光子的状态就是B的基组中的一个,测量以后不会变,a′必然等于b′。而如果B猜错了基组,a ≠ b,那么光子的状态就不是B的基组中的一个,所以测量后会突变,a′和b′就不一定相等了(有一半的概率不同)。把这样的操作重复若干次,双方发送和测量若干个光子。结束后,双方公布自己的第一个序列,也就是a和b随机数序列(注意不是把发送出去的光子随机数序列公布,而是第1个序列),比如说A这一方的a序列是0110,B这一方的b序列是1100。然后找出其中相同的部分,就是第2位(1)和第4位(0)。那么B就知道自己这里接收到的光子的第2个和第4个,与A那边是同一个基组,所以测量以后得到的结果b'(b'的第2个与第4个)必然与A那里所保留的a' (a'的第2个与第4个)相同。

 

A和B把各自手里第2位和第4位的a′和b′整理出来,这个随机数序列就可以用作密钥。如果发送和接收N个光子,由于B猜对基组的概率是50%,就会产生一个长度约为N/2位的密钥。至于a、b两个序列中不同的部分,就抛弃掉了。

    

到目前为止我们都假定只有A、B双方在通信,没有窃听者。作为一个保密的方法,需要回答的下一个问题是:在有人窃听的情况下,如何保证密钥不外泄?把窃听者称为E,料敌从宽,要假设E具有和AB一样的技术能力甚至比AB更高的技术能力。A发给B的每一个光子都先落到他手里。BB84协议有一个办法,使得E偷不走密钥。什么办法呢?如果E只是把这个光子拿走,那么他只是阻断了A、B之间的通信,仍然拿不到任何信息。E希望的是,知道所截获的那些光子的状态,然后再把这个光子放过去,让B去接收;这样A和B看不出任何异样,不知道有窃听,在A和B公布a、b序列后,E再根据a、b帅选整理自己的光子状态序列,得出密钥。

 

E的最大困难在于,他要知道当前这个光子所处的状态,就要做测量。可是他不知道该用哪个基组测量,那么他只能猜测。猜的话就有一半的概率猜错,猜错以后就会改变光子的状态。例如A发出的状态是|+>(这对应于a= 1, a′ = 0),E用|0>和|1>的基组来测量|+>,就会以一半的概率把它变成|0>,一半的概率把它变成|1>;然后B再去测量这个光子。如果B用的基组是|0>和|1>(b = 0),测量结果是|1> ,公布后会发现这里a ≠ b,这个数据就被抛弃。而如果B用的基组是|+>和|->(b = 1),公布后会发现这里a = b, 这个数据要保留。这时b′等于什么呢?无论光子状态是|0>还是|1>(E测量后状态变成|0>或|1>,正常该是|+>),在|+>和|->的基组下测量时都以一半的概率变成|+>(b′ = 0),一半的概率变成|->(b′ = 1); 而无E窃听测量的情况下B应该测得的是 |+> 状态(b'=0); 也就是在有E窃听测量的情况下B得出的密钥有一定比例和A的密钥不同。

 

分析一下会发现这个普遍的规律:只要E猜错了基组,a′和b′就会有一半的概率不同;E猜错基组的概率是一半;所以在E做了测量的情况下a′和b′不同的概率是1/2 × 1/2= 1/4。

因为E随机选对基组的概率是1/2 ,所以自然有一半是对的,剩下的一半是基组选错的,也就是和接收方的基组不一样,所以造成接收方测量的结果有一半是对的,一半是错的,这样就有了1/4的错误率。 有了这个错误率,也就可以发现有窃听。这是一个很了不起的事情,在经典信息体系中是做不到的。

 

为了知道有没有窃听,A和B在得到a′和b′序列后,再挑选一段公布。这是BB84协议中的第二次公布。第一次公布是公布第一个随机序列(也就是表示基组的那个序列)。假如在公布的序列中出现了不同,那么他们就知道有人在窃听,这次通信作废。

 

第一次公布的是双方随机选择的基组的情况,基组一样的就认为是要保留的;第二次公布是保留下来的数据的一部分,这个保留的数据原本是要作为密钥的不能全公布出来,可是为了安全、不被窃听,只能牺牲掉一段;如果发现公布出来的那一部分双方有很大差异,就说明有人窃听。

 

要公布多少个呢?公布1个,E蒙混过关的几率是3/4。公布2个字符,就是3/4的平方。公布m个,E蒙混过关的概率就是3/4的m次方。当m = 100时,只剩下3.2× 10^-13。因此,如果公布了很长一段都完全相同,那么就接近100%的置信度了,通信双方就把a′和b′序列中剩下的部分作为密钥。

 

如果发现有窃听,怎么办?有多条信道的话,可以换一条信道;此外,量子密码术跟一些光学技术联用,可以确定窃听者的位置,可以直接把窃听的抓起来,这是量子密码术特有的另一个巨大优势,传统密码术最要命的就是发现不了窃听,更定位不了。

 

     有人会想到E可以不去冒风险去测量未知态的量子,而是copy一个一样的,等A B 双方公布基组以后就可以放心的进行测量了,从而得到密钥。可是在量子力学中有一个基本定理——量子不可克隆定理,就是说不能完美的克隆出一个未知的量子态。

    我们简单的分析一下,假如有一个办法(或函数)可以完美克隆未知量子态,把它记做 F,2个未知量子态 |x>,|y>并且 |x>和|y>构成一个基组,那么便有 :

F {(|x>)(|0>)} = (|x>)(|x>)=|xx> (1) ,

F {(|y>)(|1>)} = (|y>)(|y>)=|yy> (2) ,

    F{(|x>+|y>)(|0>+|1>)} = (|x>+|y>)(|x>+|y>) (3) ,    F{(|x>+|y>)(|0>)} = (|xx>+|yy>) (4)

 

(1) (2) 式 成立 ,那么 (3)或者(4) 就成立,可是(3) (4) 不能同时成立 ,因为(3) 是一个直积态 ,而(4) 是一个纠缠态。

也就是通过 F 既可以克隆出 一个直积态 ,也可以克隆出一个纠缠态,而F 是一个函数,不能同时产生直积态和纠缠态。

所以F 不存在。

 

posted @ 2020-05-07 10:42  CharyGao  阅读(3323)  评论(0编辑  收藏  举报