同態加密


一:什么是同態加密(Homomorphic Encryption)

Craig Gentry給出的直觀定義:

A way to delegate processing of your data, without giving away access to it.

     一般的加密方案關注的都是 數據存儲安全。沒有密鑰的用戶,不可能從加密結果中得到有關原始數據的任何信息。我們注意到,這個過程中 用戶是不能對加密結果做任何操作的,只能進行存儲、傳輸。對加密結果做任何操作,都將會導致錯誤的解密,甚至解密失敗。
        同態加密方案最有趣的地方在於,其關注的是 數據處理安全。同態加密提供了一種對加密數據進行處理的功能。也就是說,其他人 可以對加密數據進行處理,但是處理過程不會泄露任何原始內容。同時,擁有密鑰的用戶對處理過的數據進行解密后,得到的正好是處理后的結果。

二:同態加密有什么用處?

        同態加密幾乎就是為雲計算而量身打造的!我們考慮下面的情景:一個用戶想要處理一個數據,但是他的計算機計算能力較弱。這個用戶可以使用雲計算的概念,讓雲來幫助他進行處理而得到結果。但是如果直接將數據交給雲,無法保證安全性啊!於是,他可以使用同態加密,然后讓雲來對加密數據進行直接處理,並將處理結果返回給他。這樣一來:
  • 用戶向雲服務商付款,得到了處理的結果;
  • 雲服務商掙到了費用,並在不知道用戶數據的前提下正確處理了數據;

       但是,這么好的特性肯定會帶來一些缺點。同態加密現在最需要解決的問題在於:效率。效率一詞包含兩個方面,一個是加密數據的處理速度,一個是這個加密方案的數據存儲量。

業界如何評價全同態加密的構造?在此引用一個前輩的話:

如果未來真的做出了Practical Fully Homomorphic Encryption,那么Gentry一定可以得到圖靈獎。
(第一個構造出全同態加密方案的人是Gentry)

 三:同態加密具體如何定義?

 我們在雲計算應用場景下面進行介紹:

 

 

 

Alice通過Cloud,以Homomorphic Encryption(以下簡稱HE)處理數據的整個處理過程大致是這樣的:
  1. Alice對數據進行加密。並把加密后的數據發送給Cloud;
  2. Alice向Cloud提交數據的處理方法,這里用函數f來表示;
  3. Cloud在函數f下對數據進行處理,並且將處理后的結果發送給Alice;
  4. Alice對數據進行解密,得到結果。
據此,我們可以很直觀的得到一個HE方案應該擁有的函數:
  • KeyGen函數:密鑰生成函數。這個函數應該由Alice運行,用於產生加密數據Data所用的密鑰Key。當然了,應該還有一些公開常數PP(Public Parameter);
  • Encrypt函數:加密函數。這個函數也應該由Alice運行,用Key對用戶數據Data進行加密,得到密文CT(Ciphertext);
  • Evaluate函數:評估函數。這個函數由Cloud運行,在用戶給定的數據處理方法f下,對密文進行操作,使得結果相當於用戶用密鑰Key對f(Data)進行加密。
  • Decrypt函數:解密函數。這個函數由Alice運行,用於得到Cloud處理的結果f(Data)。
那么,f應該是什么樣子的呢?HE方案是支持任意的數據處理方法f?還是說只支持滿足一定條件的f呢?根據f的限制條件不同,HE方案實際上分為了兩類:
  • Fully Homomorphic Encryption (FHE):這意味着HE方案支持任意給定的f函數,只要這個f函數可以通過算法描述,用計算機實現。顯然,FHE方案是一個非常棒的方案,但是計算開銷極大,暫時還無法在實際中使用。
  • Somewhat Homomorphic Encryption (SWHE):這意味着HE方案只支持一些特定的f函數。SWHE方案稍弱,但也意味着開銷會變得較小,容易實現,現在已經可以在實際中使用。

四:什么叫做安全的HE?

        HE方案的最基本安全性是語義安全性(Semantic Security)。直觀地說,就是密文(Ciphertext)不泄露明文(Plaintext)中的任意信息。如果用公式表述的話,為:

        

        這里PK代表公鑰(Public Key),是非對稱加密體制中可以公開的一個量。公式中的"約等於"符號,意味着多項式不可區分性,即不存在高效的算法,可以區分兩個結果,即使已知m0, m1和PK。有人說了,這怎么可能?我已經知道m0, m1了,我看到加密結果后,對m0或者m1在執行一次加密算法,然后看哪個結果和給定結果相同不就完了?注意了,加密算法中還用到一個很重要的量:隨機數。也就是說,對於同樣的明文m進行加密,得到的結果都不一樣,即一個明文可以對應多個密文(many ciphertexts per plaintext)。
        在密碼學中,還有更強的安全性定義,叫做選擇密文安全性(Chosen Ciphertext Security)。選擇密文安全性分為非適應性(None-Adaptively)和適應性(Adaptively),也就是CCA1和CCA2。
        知乎er一大坨的答案中已經間接提到了,HE方案是不可能做到CCA2安全的。那么,HE方案能不能做到CCA1安全呢?至今還沒有CCA1安全的FHE方案,但是在2010年,密碼學家們就已經構造出了CCA1的SWHE方案了

五:舉個SWHE的例子?

        在2009年Graig Gentry給出FHE的構造前,很多加密方案都具有Somewhat Homomorphism的性質。實際上,最最經典的RSA加密,其本身對於乘法運算就具有同態性。Elgamal加密方案同樣對乘法具有同態性。Paillier在1999年提出的加密方案也具有同態性,而且是可證明安全的加密方案哦!后面還有很多啦,比如Boneh-Goh-Nissim方案, Ishai-Paskin方案等等。不過呢,2009年前的HE方案要不 只具有加同態性,要不 只具有乘同態性,但是不能同時具有加同態和乘同態。這種同態性用處就不大了,只能作為一個性質,這類方案的同態性一般也不會在實際中使用的。
 
在此我們看一下Elgamal加密方案,看看怎么個具有乘同態特性。Elgamal加密方案的密文形式為: 
 

其中r是加密過程中選的一個隨機數,g是一個生成元,h是公鑰。如果我們有兩個密文:     

 我們把這兩個密文的第一部分相乘,第二部分相乘,會得到:

 

也就是說,m1的密文m2的密文相乘得到的的密文正好是m1m2所對應的密文。這樣,用戶解密后得到的就是m1m2的結果了。而且注意,整個運算過程只涉及到密文和公鑰,運算過程不需要知道m1m2的確切值。所以我們說Elgamal具有乘同態性質。但是很遺憾,其沒有加同態性質。

 

例:加密函數E,明文x,y

加法同態,如果存在有效算法⊕,E(x+y)=E(x)⊕E(y)或者 x+y=D(E(x)⊕E(y))成立,並且不泄漏 x 和 y。
乘法同態,如果存在有效算法 ,E(x×y)=E(x) E(y)或者 xy=D(E(x) E(y))成立,並且不泄漏 x 和 y。

內容來自:https://www.zhihu.com/question/27645858

https://baike.baidu.com/item/%E5%90%8C%E6%80%81%E5%8A%A0%E5%AF%86/6380351

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM