1. 程式人生 > >全同態加密釋疑(一)

全同態加密釋疑(一)

2009年全同態加密(Fully Homomorphic Encryption)的誕生,不僅是密碼學界的一個大的突破(Breakthrough),而且是計算機理論界的一個突破。自從2011年建立了全同態加密QQ群,從幾十號人到現在的將近200人,來自各個大學,包括國外。可見人們對全同態加密研究的熱情。

另外在網上有許多同學問我一些問題,有些問題很雷同,可能也是初學者必經之路。全同態加密的入門確實比較難。作為一個過來者,非常願意分享我的一些心得,所以這裡我會把一些共性的問題,用一種深入淺出的方法講述,希望每個人都能看懂。

其實在全同態加密論文的背後,有許多可以說出來的祕密,只不過這個祕密在論文裡沒空間也不適合講,那麼這裡就搞一個專題“全同態加密釋疑”,細說從頭每個讓你困惑的祕密。如果有願意加入的朋友,可以一起分享心得體會。

今天說說全同態加密的四個演算法。可能有些人會說,這個誰不知道,但是知道並不意味著清楚,只有深刻理解了這四個演算法的含義,尤其是第四個演算法的含義,才能清楚什麼是部分同態加密方案,什麼是執行自己的解密電路等等概念。

通常一個公鑰加密方案有三個演算法:KeyGen演算法(金鑰生成),Enc演算法(加密),Dec演算法(解密)。但是在全同態加密中,除了上述三個演算法之外,還包含第四個演算法:Evaluate演算法(密文計算),這個演算法的功能是對輸入的密文進行計算。

首先說說KeyGen演算法(金鑰生成)。該演算法用於生成公鑰和金鑰,公鑰用於加密,私鑰用於解密,這個地球人都知道。但是還可能生成另外一種公鑰,即密文計算公鑰,我們把它稱之為Evk。

密文計算公鑰Evk的作用是在執行Evaluate演算法時用到,而且Evk的形式與使用的全同態方案直接相關。例如如果是通過啟動技術(Bootstrapple)獲得全同態加密,即每次密文計算前要用同態解密約減密文的噪音,這時Evk就是對金鑰的每一位加密後生成的密文,即金鑰有多少位,Evk裡包含的公鑰就有多少個。Evk中每個公鑰的大小就是使用Enc加密後產生密文的大小。典型的代表就是Gentry的理想格方案以及後續的整數上的方案。

當然還有其他情況,例如如果使用金鑰交換與模交換技術獲得全同態加密,典型代表就是BGV方案。這時Evk中包含的就是L–1個矩陣,L是方案中電路的深度,該矩陣用於金鑰轉換。每次密文計算後,都需要使用Evk中的公鑰將維數擴張的密文向量轉換成正常維數的密文向量。 當然還有一種情況就是不需要Evk,例如在Crypto13會議的論文GSW13中,Gentry使用的密文是矩陣(方陣),所以密文乘積或相加不會產生密文維數改變的事情,所以在密文計算時沒有用到公鑰,這也是該論文可以產生基於身份或基於屬性全同態加密方案的根本原因。

關於Evk就說了這麼多,你覺得簡單麼?一個成功男人的背後,有多少……,那麼一個概念的背後就有多少個概念在支撐。千萬別小看了概念,只有善於抓概念,才能體會方案的脈絡。

Enc演算法(加密)和我們平常意義的加密是一樣的,但是在全同態加密的語境裡,使用Enc演算法加密的密文,一般稱之為新鮮密文,即該密文是一個初始密文,沒有和其他密文計算過。所以新鮮密文的噪音稱之為初始噪音。這個相當重要。 Dec演算法(解密)也和我們平常理解的一樣,就是對密文的解密,但是這裡解密演算法不僅能對初始密文解密,還能夠對計算後的密文解密。但是由於部分同態加密方案中密文存在噪音,例如在整數上的全同態加密方案裡,密文乘積的噪音是噪音之積,密文加法的噪音是噪音之和。所以當密文計算到一定程度,其噪音將超過上限,所以對這樣的密文解密將可能失敗。全同態加密的關鍵就是對噪音的控制,使之能對任何密文解密。 最後一個演算法:Evaluate演算法(密文計算),這個演算法是整個全同態加密四個演算法中的核心。可以做個這樣的比喻:前面三個演算法是大樓的地基,後面這個Evaluate演算法就是大樓。這個比喻在後面會體會到它的用意。密文的計算是在電路里進行的,電路是分層的,電路深度越深,層數越多,密文就能夠進行更多次的計算。隨便提一句,密文計算的次數等於電路深度的對數。什麼是計算次數?例如c1*c2,就是進行了一次計算,c1*c2*c3就是進行了三次計算。在全同態加密中,我們一般用乘法次數來衡量計算次數,這是因為乘法的噪音比加法噪音增長的快很多。 Evaluate演算法有三個輸入,第一個輸入是計算公鑰Evk,就是我們在上次博文裡講到的。Evk可以沒有。第二個輸入是函式f,就是Evaluate演算法所要執行的函式,可以是任意函式,因為全同態加密的目標就是對密文能夠進行任意計算。當然這個函式也可以是“解密函式”,Gentry通過觀察發現了一個祕密,等會我們說。第三個輸入是密文,理論上可以有無窮多個密文,但是這是不可能的。 所以Evaluate演算法就是將密文輸入到函式f裡進行計算。我們知道在全同態加密的方案裡,密文都是含有噪音的,密文的計算會導致噪音的增長,如果把函式f表示成電路,那麼Evaluate演算法實際上只能夠對有限深度L的電路進行計算,超過這個深度L的電路就不行了。所以我們把這樣的方案稱之為部分同態加密方案。由此可見Evaluate演算法的重要性,全同態加密就靠它了。還記得剛才的比喻麼?Evaluate演算法相當於大樓,這個大樓的層數是有限的,而全同態加密的目標是無限高! 所以噪音問題導致了Evaluate演算法不能夠對任意電路(函式)進行計算。 而全同態加密追求的就是Evaluate演算法能夠對任意電路進行計算,怎麼辦?那只有控制噪音問題了。如何控制噪音呢?