https://zhuanlan.zhihu.com/p/149812445
此文翻譯於我的自己的博客:Function Decomposition。
前一陣子在斯坦福學習了CS355(高階密碼學)的課程。給我們上課的是Dan的三個PhD學生Dima Kogan,Florian Tramer和Saba Eskandarian。三個PhD講師各有特色,研究的方向也非常不同。Dima主攻隱私保護技術PIR(Private Information Retrieval),Florian主攻ML和區塊鏈方面的研究,而Saba主攻零知識證明。
CS355這一門課幾乎涵蓋了從古至今密碼學領域的所有內容。從最早的單向函數(One-way Function),到橢圓方程(ECC)和Pairing,最后到一些近幾年比較熱的MPC、零知識、私有信息檢索(PIR)、全同態算法等等。由於前兩天剛剛結課,趁着知識內容還在淺層記憶中沒有忘掉,整理了一波筆記。課程內容非常有趣,其余的內容以后有時間跟大家慢慢分享~
這一期,我們來講一講最近很火的全同態加密(FHE)與伴隨而來的格加密(Lattice-based Encryption)技術。
全同態加密是什么
相信很多朋友已經多少聽說過全同態加密(Fully Homomorphic Encryption/FHE)的大名了。近幾年對於個人隱私保護的話題越來越多,包括同態加密在內的一系列密碼學應用技術也得到了很廣泛的普及。
為了更好的了解這個話題,我想要再對全同態加密這個定義稍作介紹一下。
加密體系回顧
在開始之前,我們先溫習一下最最傳統的加密體系。
我們都知道,如果要構建一個加密系統,往往都需要一個密鑰(Key)。通過這個密鑰,我們可以一頭把明文的信息加密成密文,然后在另一頭通過密鑰再把密文變回原來的樣子。如果沒有這個Key的話,其他的人很難知道我們到底傳遞了什么信息。

上文的圖例基本展示了所有常見加密體系的全貌。所有的加密體系,如果用比較正式的描述方法,無疑是做了三件事:
- 首先,通過一個生成算法
來隨機生成一對用於加密和解密的密鑰
。
- 加密方通過加密密鑰
和加密算法
來加密原文
,最后得到密文
。
- 隨后,在解密的時候,解密方可以通過解密密鑰
和解密算法
來解密密文,最后還原回來原來的原文。
對加密算法有所了解的朋友,肯定會知道常見的一些加密算法,比如說AES,RSA等等。大家肯定也會知道一般來說加密體系分為兩種:對稱加密體系和非對稱加密體系。我們這里描述的這三個步驟,其實通用於任何加密體系。如果是對稱的,那么加密和解密用的密鑰就是一樣的。如果是非對稱的體系的話,那么加密用的就是公鑰(Public Key),然后解密用的是不一樣的私鑰(Private Key)。
在密碼學研究中,每當我們看到一個新的系統的定義之后,接下來往往都要陳述這個系統所應具有的屬性(Properties)。
首先,我們第一個要實現的屬性是正確性(Correctness)。正確性代表說,如果我擁有一個正確的密鑰,那么我就可以通過解密算法 來把密文還原成原文。我們往往都使用概率的方法來表示解密的成功率:
上面的等式代表了,如果我們擁有正確的密鑰,那么解密算法可以還原加密算法生成的密文的幾率是100%。
我們要實現的第二個屬性是語義安全(Semantic Security)。
具體對於語義安全的定義,我們在這里不多做解釋了。但是我們可以理解為,如果我們擁有任意兩個不同的原文所對應的密文,那么我們是無法區分到底哪個密文是對應了哪個原文的:
語義安全的主要意義在於旁觀者無法區分兩條加密的消息。那么如果有入侵者竊聽網絡,看到了我發出的加密信息,只要我使用的加密體系是語義安全的,那么我就可以確信入侵者無法從密文中得到關於加密內容的任何信息。
滿足了上述兩條屬性之后,一個加密體系就變得健全啦。

同態加密:偶然的特殊性質
了解完加密體系是怎么一回事之后,我們可以來關注一下這個看似像隨機生成的亂碼一樣的密文。我們都知道,光看密文本身,我們什么信息都不會得到。但是這是不是就代表,如果沒有密鑰只有密文,我們什么都不能做了呢?
答案我們都知道:其實並不是。
但是在眾多的加密算法當中,有一類算法生成的密文有一種特殊的同態屬性:假如我們使用加密算法 得到了數字1的密文
,然后我們又得到了數字2的密文
。這個時候,如果我們把密文相加起來,
恰恰是
的密文!
對於這種屬性,我們稱之為加法同態。意思就是說,加密過后的密文與以前的原文保持着一種微妙的代數關系。如果我們把密文累加起來,我們就可以獲得把原文相加起來加密過后的新密文。同理可得,加法同態至於,還存在着乘法同態的加密算法。一個乘法同態的算法生成的密文,我們可以相乘起來,然后獲得原文之間相乘之后的結果所對應的密文。整個過程中,我們不需要知道任何和密鑰有關的信息,純粹只是把看似像隨機亂碼的密文組合起來。
舉個例子:匿名投票系統
下面,我們來舉一個例子,生動的描述一下同態加密的實用性。
我們都知道在線投票是怎樣的——假如一個公司的老板想要發起一波投票,選擇公司是否要采取996的制度。那么老板可以讓IT設置一個服務器,讓員工提交自己的選擇:投0代表不想,投1代表想。最后投票階段結束之后,老板就可以把所有的投票加在一起。如果最后所有票的總和超過了員工人數的一半,那么公司就會開始996。
這個投票機制看起來很簡單,但是有一個很大的隱私問題:假如老板心中就想讓全員996,然而只是故意發起了這個投票來釣魚執法,看看哪個員工不願意加班,那么老板可以悄悄委托自己的小弟在網絡上偷聽,把每一個員工提交的選擇都記錄下來,最后看到底是誰投了0。這樣一來,員工都十分害怕,不敢吐露自己的心聲。
如果我們可以使用加法同態的加密算法的話,那么這個問題就很好解決了。
首先,IT可以先使用 算法生成一對加密解密的鑰匙
,然后把公鑰
分發給每個員工。
隨后,每個員工把自己的選擇 (1或0)通過加密算法
加密成密文,然后把密文發送到IT的服務器上:
最后,IT部門可以把每個人的選擇全部加起來,得到一個組合的密文 ,並且把這個密文發給老板。最后老板用解密的密鑰
打開這個密文,得到了最后的投票結果:
這樣一來,我們就成功的用加法同態的特性實現了投票計數系統,並且老板就算派人監聽網絡,也只能看到加密過后的密文 ,並沒有辦法知道每個人到底投了什么票。
當然,這個系統還非常的不完整,比如IT部門可以直接幫助老板把每個人的投票解密開來,然后記錄成一個文檔。對於這個問題還有別的密碼學工具可以幫我們來解決。由於篇幅原因就在這里不多說明啦。
不過到這里,我們應該可以感受到同態加密算法的強大了。我們可以這樣理解:通過同態加密算法,用戶可以與一個不可信的遠程服務器(雲端)進行某種安全代理計算(Secure Delegated Computation)。用戶可以通過同態加密的技術來把自己敏感的隱私輸入加密后托付給雲端,然后雲端可以在加密過后的數據上進行一定程度的計算,最后得到加密過后的用戶想要的結果,並且返還給用戶。最后用戶就可以用解密密鑰來打開得到的結果了。整個協議中,被代理方(雲端)始終都無法看到任何和私密輸入有關的有用信息。

同態加密體系的分類
大致了解了兩種最基礎的同態性質之后,其他的概念就變得非常容易理解了。如果系統性的來看,同態加密體系大致上被分為四類:部分同態、近似同態、有限級數全同態與完全同態。
下面,我們就來依次看一下每一個類別的具體定義。
部分同態加密(Partially Homomorphic Encryption)
同態加密最初級的階段被稱為部分同態加密,定義就是密文只有一種同態特性。這一階段就包括了我們上文所描述的加法同態與乘法同態兩種模式。
如果放到之前說的安全代理計算的場景下看,假如我們有私密輸入 ,然后我們希望雲端可以幫我們計算
,那么我們可以把雲端對於這些輸入做的計算使用函數
來表示。
假如說我們可以通過一個加法同態加密的算法來計算 的話,那么代表了這個函數F肯定就只能包含私密輸入
的任意線性組合(加法運算)。一個可行的例子就是把各項私密輸入乘以一個常數,然后相加起來:
但是如果我們想讓兩個輸入 相乘起來的話,那么上述的加法同態算法就無能為力了。
只能是所有私密輸入的線性組合。
常見的加法同態加密算法就是基於循環群 的ElGamal加密算法。
ElGamal是基於Diffie-Hellman密鑰交換協議為基礎而產生的一個非常方便的公鑰加密算法,采用的是循環群的特性。由於篇幅的原因,我們就在這里不詳細解釋循環群的定義了,我們只需要知道每一個群都可以找到一個生成元(generator) ,然后這個生成元可以進行冪的計算。
ElGamal加密實現方法大致如下:
- 首先我們找到一個生成元
,然后隨機選擇一個整數
。我們把
作為公鑰
,然后把
作為私鑰
。
- 如果要加密一個消息
的話,那么我們就再隨機選擇一個整數
,然后我們就可以輸出密文
。注意這個密文分為
兩段。
- 當我們需要解密一個密文
的時候,我們只需要首先計算
,然后就可以輕松的還原出原文
了:
。
具體ElGamal的正確性和安全性我們就不論證了。但是看到這個加密體系的加密方式之后,由於都是冪運算,我們可以發現ElGamal潛在的加法同態的特性。
假如我們擁有兩條消息 的加密,分別為
,展開來就是:
我們可以注意到,如果我們把兩條密文的兩個部分各自相乘的話,我們就可以得到一個新的密文 :
我們得到的結果恰恰就是原文 加在一起之后所對應的加密密文!這樣的話,如果我們得到了兩條ElGamal加密算法的密文,我們就可以通過這樣的方法得到密文的任意線性組合了。
同理我們也可以應用於乘法同態加密的算法上—— 就只能把所有的私密輸入相乘起來,但是沒有辦法做任何線性組合(加法)。乘法同態的例子其實也非常常見,我們大家都熟悉的RSA加密就是一個乘法同態的系統。
RSA加密的實現方法大致如下:
- 首先找到一個很大的數字
,並且
為質數。然后找到一組數字
使得可以滿足
。我們把
作為公鑰,
作為私鑰。
- 如果要加密一個消息
,我們只需要輸出密文
。
- 如果需要解密一個消息
,我們只需要還原出原文
。
這個加密算法的正確性就在於 。因為RSA加密和解密的過程也就只涉及到了冪的計算,我們又可以觀察到同態的性質了。假如說我們有兩條加密的消息
對應
。那么我們可以把他們相乘起來得到
,並且可以觀察到:
我們就得到了這兩條消息相乘之后所對應的密文!這就是乘法同態性質了,我們可以接着這條密文繼續往上疊加新的密文,這樣一來我們就可以得到密文之間任意的相乘。
近似同態加密(Somewhat Homomorphic Encryption)
就如同我們在上一段所說,如果我們又想讓私密輸入相乘,又想得到它們之間的線性組合的話,單純的部分同態加密算法(RSA,ElGamal)是無法完成的。所以我們就需要來到下一階段。
部分同態加密的下一階段是近似同態加密,這一階段距離我們想要實現的全同態更近了一步。如果我們有近似同態加密算法的話,那么我們就可以在密文上同時計算加法與乘法了。但是需要注意的是,正因為這一階段是近似同態(Somewhat Homomorphic)的,所以可以做的加法和乘法次數非常有限,可以計算的函數 也在一個有限的范圍內。
近似同態加密這一階段常見的例子並不多,如果說最好理解的例子的話,那就應該是基於配對(Pairing)的循環群加密算法了。
上文我們簡單的討論過基於普通循環群的ElGamal加密算法。我們都知道這一算法是加法同態的,也就是說可以得到任意密文之間的線性組合。事實上,在某些特殊的循環群中,我們還可以找到一些薄弱的乘法同態性質。
配對(Pairing)是基於某些特有的橢圓曲線循環群可以進行的一種特殊運算,我們用 來表示。具體Pairing做的事情,就是把兩個循環群中的值映射到第三個循環群中:
這樣一來,我們就變相的得到了前兩個值的冪之間的乘積組合!再搭配ElGamal加密中可以把兩個值的冪做線性組合的屬性的話,那么我們就得到了一個全同態的系統了。
事實上,現實並沒有那么美好,因為Pairing這一特殊屬性並不會出現在所有的循環群當中。所以如果我們把兩個可以做Pairing的群中的值通過Pairing相乘起來,映射到了一個新的群 當中之后,那么新的群並不一定能找到對應的Pairing屬性!
這也就是說,通過擁有Pairing屬性的循環群,我們只能做非常有限的乘法計算。假如說我們當前的群 支持Pairing,但是新的映射群
並不支持任何Pairing,那就代表了如果我們要基於當前的體系進行同態加密運算,可以運算的函數F雖然可以包涵任意的線性組合,但是只能包涵最多一層乘法在里面。
這一局限性證明了這個系統是近似同態的,因為我們不能計算任意邏輯和深度的函數F。
有限級數全同態加密(Fully Leveled Homomorphic Encryption)
來到下一個階段之后,我們距離全同態的目標更進一步了。
這一階段被稱之為有限級數全同態加密。在這一階段的話,我們已經可以對密文進行任意的加法乘法組合了,沒有任何對於次數的局限性。
但是之所以被稱之為有限級數全同態的原因是,這個階段的算法會引入一個新的復雜度上限 的概念,這一復雜度上限約束了函數
的復雜度。如果我們可以把
用二進制電路
來表示的話,那么
的深度和大小一定要在
的范圍之內,即:
也就是說,如果L相對來說比較大的話,那么我們就可以進行各種各樣較為簡單(低復雜度)的同態運算了。有限級數同態加密的算法也是下一階段全同態加密的奠基石,當我們實現了L復雜度以內的全同態之后,實現完全同態也不遠了。
我們可以了解一下這個復雜度的上限 是怎么來的。首先,我們可以想象一下,假如有一個全同態加密的算法,可以對密文進行任何的加法與乘法的運算。但是這個算法在加密的時候會在密文里面加入一定的隨機噪音。
當噪音早可控范圍內的時候,那么解密算法就可以很容易從密文還原回原文。但是當我們疊加密文在一起進行同態計算的時候,每一個密文里面自帶的噪音會被疊加擴大。如果我們只是對密文進行比較簡單的邏輯,那么疊加起來的噪音還在一個可以接受的范圍。但是如果我們過於復雜地堆疊密文在一起,那么一旦噪音的范圍超過了臨界值,那么就會徹底的覆蓋掉原來的原文,從而導致解密會失敗。
在這個場景中,這個同態加密系統可以接受的噪音上限轉換為疊加的邏輯的復雜度的話就是 了。這就是為什么我們只可以進行復雜度小於L的計算,因為一旦復雜度超過L,我們就再也無法還原回原來的原文了。
全同態加密(Fully Homomorphic Encryption,FHE)
千呼萬喚使出來,最后就到我們拭目以待的全同態加密(FHE)了。
就像名字所說的一樣,一個全同態加密的系統沒有任何計算方法的限制,我們可以在沒有密鑰的情況下,把密文任意的組合起來,形成新的密文,並且新的密文,無論計算的復雜度,都可以完美的被還原成原文。
當我們達到這一階段的時候,之前提到的安全代理計算就變得可行了。如果可以找到一個效率比較高的全同態加密體系的話,我們可以安全的把所有本地的計算全部代理到雲端,並且不會泄露任何一丁點數據!
全同態加密體系的定義
在開始下文對於全同態歷史的討論之前,我們可以系統性的定義一下全同態系統的正式定義。一個全同態加密系統,一共擁有四個算法:
- 密鑰生成算法
: 生成加密與解密需要用到的密鑰
。為了簡單表示,我們這里假設這個加密系統是對稱的(即加密密鑰等於解密密鑰)。
- 加密算法
:把原文
加密成密文
。
- 解密算法
:把密文
還原為原文
。
- 運算算法
:把
個密文組合起來,通過一個二進制邏輯電路
,最后得到組合的密文
,使得
。
我們可以看到,最后一步的運算算法 ,就是全同態加密的精髓了。回到上文的例子,如果我們想讓雲端的服務器替我們進行一些機器學習的模型分析,那么在這里,我們只需要把模型分析預測的過程轉換為二進制邏輯電路F,然后我們提供加密過后的數據樣本
,然后雲端就可以通過
得到加密的最后預測的結果。
全同態加密體系的性質
現在我們來看看這個系統的屬性(Properties)。首先,這個體系必須得是正確的(Correctness)。
也就是說,如果我們任意選擇一個電路F,並且任意選擇一組原文消息 。如果我們擁有一開始
算法生成的密鑰的話,那么:
其次,這個系統需要達到語義安全。這一定義我們上文已經闡述過了。
最后,為了讓全同態加密體系變得有實際的使用意義,我們必須還得加一條額外的規定:簡短性(Compactness)。
簡短性是什么意思呢?其實很簡單,就是說 這個算法輸出的結果必須要在一個限定范圍之內。如果要加一個硬性條件的話,就是
這個算法的輸出結果大小必須要獨立於二進制電路
的大小。也就是說,就算
再大,
的結果大小也不會有所改變:
為什么需要加上這個簡短性的特性呢?因為如果沒有這個要求,我們可以非常輕易的做出一個毫無意義的(作弊的)全同態系統:
- 密鑰生成、加密算法可以任意選擇一個語義安全的對稱加密算法。
:運算算法
要做的事情很簡單,直接把對於
的描述和原來的密文
全部輸出到新的密文
當中。
:最后在解密的時候,先把密文里所有的
全部依次解密回原文,然后再根據對F的描述手動跑一下
得到原來的結果。
如果沒有對與 輸出大小的限制的話,那么我們反復疊加多次
之后,得到的密文大小將會越來越大。最后解密的時候,只需要把所有的原始密文解開,然后算一下
就行了。這就好比是一個用戶把自己的健康信息加密了,讓醫院去判斷他有沒有生病,醫院直接原封不動的把密文送回來,然后把自己的整套數據模型加上醫療課本也發回來,跟用戶說,你自己去算吧,是一個意思。
這一類全同態系統還有一個更大的弊端,也就是最后得到的密文並無法完全掩蓋住運算電路 的具體細節。在這個醫院的使用場景中,有可能醫院自己最值錢的就是這套數據分析系統。如果白白的把自己的
發回給了用戶,那自己的辛苦勞動成果就被別人輕易竊取了。
綜上所述,只要滿足正確、語義安全、簡短這三個要素,我們就擁有一個有意義(Non-trivial)的全同態加密體系了。

全同態加密的歷史回顧
在開始學習全同態加密算法到底是怎么實現的之前,我們不妨來看看全同態加密這個概念到底是怎么來的。
FHE(全同態)的概念其實在上世紀70年代末就已經被提出了。1978年,密碼學界的幾個大牛Rivest,Adleman和Dertouzos在他們的論文On Data Banks and Privacy Homomorphisms中第一次提到了對於密文進行一定的計算,可以間接地對原文進行操作的系統構想。到后來這一想法就被重新總結命名為全同態加密了。
由此可見,全同態加密這一概念已經被提出了很久了。令人驚訝的是,1976年,也就是論文發表的兩年前,Diffle-Hellman密鑰交換協議才剛剛被提出!由此可見密碼屆大牛的想象力還是非常豐富的。
當FHE的概念被提出來之后,整個學術界都為之所動,開始了長達幾十年的搜索,試圖找到一個擁有全同態性質的完美算法。但是這幾十年下來,人們試遍了所有可以想到的選擇,但是找不到一個又能滿足全同態所有條件,並且安全性可以被輕易證實的選項。
直到2009年,在斯坦福讀書的PhD Craig Gentry突然靈光一現,攻破了FHE算法的難關。在他的博士畢業論文中,他第一次給出了一個合理並且安全的全同態加密系統!這一系統基於理想格(ideal lattice)的假設。Gentry09提出來的全同態系統,我們往往稱之為第一代全同態加密系統。
在Gentry的論文中,他還提到了一個至關重要的概念叫做Bootstrapping。Bootstrapping是一種對於密文的特殊處理技巧,處理過后竟然可以把一個噪音接近臨界值的密文“重新刷新”成一個噪音很低的新密文。通過Bootstrapping,一個有限級數的系統的噪音可以永遠不超過臨界值,從而變成了全同態的系統。這樣一來,我們就可以同態計算任意大小的 了。
在Gentry的重大突破之后,整個密碼圈又一次陷入了瘋狂,大家都開始爭相基於Gentry提出的想法尋找更加高效率和全能的全同態體系。
在2011年的時候,兩位大佬Brakerski和Vaikuntanathan提出了一個新的全同態加密體系,這一體系基於格(lattice)加密的另一種假設Learning With Errors(LWE)。在同一年,Brakerski,Gentry與Vaikuntanathan這三人一起把這個體系做完了,並且正式發表出來。他們發明的全同態系統簡稱為BGV系統。BGV系統是一個有限級數的同態加密系統,但是可以通過Bootstrapping的方式來變成全同態系統。BGV系統相比起Gentry09提出的系統,使用了更加實際一點的LWE假設。一般來說我們都把BGV系統稱之為第二代全同態加密系統。
2013年,Gentry又卷土重來了。Gentry,Sahai和Waters三個大佬推出了新的GSW全同態加密系統。GSW系統和BGV相似,本身具有有限級數全同態性質,基於更加簡單的LWE假設,並且通過Bootstrapping可以達到全同態。我們一般把GSW系統稱為第三代全同態加密系統。
2013年之后,密碼圈基本上就百花齊放了。基於原來的三代全同態系統之上,出現了各種各樣新的設計,致力於優化和加速BGV與GSW系統的運行效率。IBM基於BGV系統開發了一個開源的全同態運算庫HElib,並且成功的移植到各大移動平台上。與此同時,還有另外一個開源項目TFHE也非常值得注意。TFHE是基於GSW系統,又加以了各種優化與加速,現在也非常的有名。
在開發傳統的全同態庫之外,也有很多團隊在研究如何通過GPU,FPGA,ASIC等異構硬件來更好的加速全同態加密算法的計算。比如cuFHE就是一個比較有名的基於CUDA的GPU加速全同態加密系統。
站在今天的角度上,一路看來,全同態體系的大門被Gentry大神敲開已經過去了11年了。現在業界對於FHE的研究百花齊放,不少人都在不同的角度和應用需求上在研究全同態系統。直到今天,我們已經擁有了多種可行的FHE實現方法,但是現在大家還在不斷追求的是FHE系統運轉的效率。拿現在最前沿的FHE庫來說,在移動平台上同態計算一些比較簡單的邏輯可能要少則花上幾十毫秒,多則花費幾十秒的時間。這些時間單位對於計算機系統來說是極其緩慢的。
如何可以讓FHE系統更加高效率的在異構平台上運行,仍然是一個未解之謎。如果這道難題一旦被解決了,那么把所有的電腦運算都轉為全同態,代理在第三方的雲端上進行計算,都是伸手可得的未來。
FHE與MPC的關系
在結束文章之前,我還想補充說明一下FHE與MPC之間的關系。MPC即Secure Multi-Party Computation,就是可信多方計算。通常代表的是有多方擁有自己的私密輸入,不想泄露給別人,但是他們想使用自己的輸入一起計算一個函數 並分享計算的結果。
MPC其實已經是一個非常廣為人知,並且被研究了很久的一個領域了。自從上個世紀密碼學家姚期智推出了他的Garbled Circuits之后,MPC領域獲得了非常廣的認可,並且也有很多突破。現在我們已經擁有很多可以使用的MPC庫,並且也具有一定的運行效率了。
如果了解MPC的朋友,看到全同態加密系統的艱辛歷史之后,也許會有很多疑問:為什么不可以直接通過一個MPC協議來代替全同態加密呢?
的確,一個MPC協議可以完全代替一個FHE協議。我們只需要把用戶和私密輸入作為一個協議中的一個Party,再把遠程的代理計算服務器作為另一個Party,就滿足了MPC協議執行的條件,只需要通過一定的交互,就可以實現代理計算,並且服務器也看不到私密輸入。
但是有很重要的一點我們忽略了:由於MPC是有交互性的,所以需要用戶和服務器共同進行計算與交流才可以完成協議。這也就和FHE代理計算最根本的需求沖突了。如果用戶需要一直保持在線完成協議,並且也要付出一部分算力的話,那其實計算根本就沒有被“代理”出去,雙方只是為了信息的安全性而在做更多的計算。這也說明了為什么MPC領域已經得到重大突破了,但是FHE的領域仍然是一片未知,因為他們兩個系統解決的是完全不同的問題。

下一站:GSW全同態加密系統
看到這里,想必大家已經對於全同態加密系統有了非常透徹的理解。
下一站,我們可以一起來學習一下前文提到的GSW全同態加密系統。雖然說這是全同態系統的第三代,但是我認為Gentry09,BGV,GSW這三套系統中用到假設最少,構造最簡單,並且最容易理解的就是GSW了。並且現在也有很多開源庫(如TFHE)就是基於GSW系統構建的。
由於篇幅原因,我們就在這里結束這一篇文章吧。下一篇文章,我們可以首先學習一下GSW系統的基礎:基於格(lattice)的加密體系與LWE問題。一旦了解了LWE問題之后,GSW解決的問題就變得非常清晰了。