DGHV同態庫

PamShao發表於2022-01-07

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()函式裡面有金鑰生成,密文加法、密文乘法和密文重新整理

問題:

 各種報錯,歡迎交流!

參考

1、dghv code執行筆記

相關文章