一:什么是同態加密(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)處理數據的整個處理過程大致是這樣的:
- Alice對數據進行加密。並把加密后的數據發送給Cloud;
- Alice向Cloud提交數據的處理方法,這里用函數f來表示;
- Cloud在函數f下對數據進行處理,並且將處理后的結果發送給Alice;
- Alice對數據進行解密,得到結果。
- KeyGen函數:密鑰生成函數。這個函數應該由Alice運行,用於產生加密數據Data所用的密鑰Key。當然了,應該還有一些公開常數PP(Public Parameter);
- Encrypt函數:加密函數。這個函數也應該由Alice運行,用Key對用戶數據Data進行加密,得到密文CT(Ciphertext);
- Evaluate函數:評估函數。這個函數由Cloud運行,在用戶給定的數據處理方法f下,對密文進行操作,使得結果相當於用戶用密鑰Key對f(Data)進行加密。
- Decrypt函數:解密函數。這個函數由Alice運行,用於得到Cloud處理的結果f(Data)。
- 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方案了
知乎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