DGHV
DGHV全同態方案的實現
這是具有壓縮公鑰的DGHV的全同態加密方案的實現,參考文章:
[1] J.S. Coron, D. Naccache and M. Tibouchi, "Public-key Compression and Modulus Switching for Fully Homomorphic Encryption over the Integers", Proceedings of Eurocrypt 2012.available at http://eprint.iacr.org/2011/440
實現依靠數學庫Sage,具體參考:數學庫Sage安裝和使用
什麼是DGHV方案?
最初在下面的文章中給出:
[2] M. van Dijk, C. Gentry, S. Halevi and V. Vaikuntanathan, "FullyHomomorphic Encryption over the Integers". Proceedings of Eurocrypt 2010.and available at http://eprint.iacr.org/2009/616
加密:c= q*p + 2*r + m
這裡p是金鑰,m是位元明文(0或1),q是一個大隨機數,r是一個小隨機數
解密:m=(c mod p) mod 2,容易看出,若噪音2*r < p,則可以解密成功
例如:
給定兩個密文:
c1= q1*p + 2*r1 + m1
c2= q2*p + 2*r2 + m2
加法:c1+c2=(q1+q2)*p+2*(r1+r2)+m1+m2
可以得到:m1+m2=( c1+c2)mod p mod 2
乘法:c1*c2=q12*p+2*(2*r1*r2+r1*m2+r2*m1)+m1*m2
也可以得到:m1*m2=( c1*c2)mod p mod 2
這裡,密文的噪音比原始密文c1和c2擴大了兩倍,由於噪聲必須低於p,
因此在密文上進行的乘法次數是有限的,所以方案叫做 Somewhat FHE
為了獲得“純”的FHE,即密文的無限次加法和乘法,必須減少密文中的噪音量,叫做密文重新整理。
Gentry的密文重新整理的關鍵思想,是使用金鑰位的加密對密文位上的解密電路進行同態計算,這叫做Bootstrapping技術,然而我們得到的不是明文位,而是明文位的加密,即相同明文的新密文,現在若解密電路有足夠小的深度,那麼新密文中的噪音量實際上小於原始明文中的噪音量,因此叫做密文重新整理。
然而,之前的解密演算法m=(c mod p) mod 2的深度並不小,因此解密過程必須被“壓縮”,以便可以將其表示為低深度電路,在[2]中解釋了是如何完成的。
到目前為止,我們只描述了一個私鑰加密方案,即加密者必須知道私鑰p,然而很容易獲得公鑰加密方案。為此生成一組公開密文xi,它們都是0的不同的加密,xi=qi*p+2*ri,然後加密1bit的m,c=m+2*r+random_subset_sum(xi),
c確實是m的加密。
在該庫中,我們實現了DGHV的同態加密,即實現了金鑰生成,加解密,同態加,同態乘和密文重新整理
什麼是壓縮公鑰?
在DGHV演算法中我,密文大小必須是很大的,以防止格基約減演算法,密文大小至少為10^7 bits,金鑰p相對較小,大概為2000bit,大約10^4的密文必須包含在公鑰中,所以我們給出公鑰的的大小為10^11 bits,即12.5GB
為了減少公鑰的大小,我們實現了[1]的技術,而不是生成 xi=qi*p+2*ri ,第一生成相同尺寸的偽隨機數X,計算di,使得 xi=Xi-di是小的,模p,那麼只有這些小的正確的值被儲存在公鑰中,(帶有PRNG的種子),使用
這種壓縮技術,可以減少公鑰大小變為 10^4*(2*10^3)=2*10^7 bits,即2.5MB,這是可以接受的。
下載
git clone 地址
安裝
1、安裝sage庫
具體參考:數學庫Sage安裝和使用
2、執行sage
./sage load("dghv.sage")
testPkRecrypt()函式裡面有金鑰生成,密文加法、密文乘法和密文重新整理
問題:
各種報錯,歡迎交流!