DGHV同態庫


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()函數里面有密鑰生成,密文加法、密文乘法和密文刷新

問題:

 各種報錯,歡迎交流!

這里推薦使用:https://github.com/limengfei1187/DGHVlib

參考

1、dghv code運行筆記


免責聲明!

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



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