量子密鑰分發 (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 不存在。