BGV加密方案

BGV加密方案是一个整数全同态加密方案,其加密域可以是格或多项式环,基于LWE或者RLWE困难问题。BGV采用的主要思想是将明文嵌入在最低比特位,然后通过模运算取出明文。比如密文为\textbf{c},私钥为\textbf{s},那么,其解密结构为\textbf{c}^T\textbf{s}=m+te \mod p,其中t是明文空间的模 ,p是密文空间的模。因为t是远远小于p的,所以只要te足够小,那么直接用t模就可以取出明文。为了便于描述,下面的都是在分圆多项式环R=Z[x]/(x^d+1)上。

密钥的选择

设噪声分布为\chi,s是在噪声分布中采样的一个随机数。那么私钥\textbf{s}=(1,s)

随机从环上选取a,和噪声e,计算b=as+te,其中t是明文空间的模。那么公钥为(b,-a)

加密

假设我们要加密一个明文m。

选取噪声u,e_1,e_2,计算c_0=bu+te_2+mc_1=-au+te_1

密文\textbf{c}=(c_0,c_1)

解密

有密文\textbf{c}和私钥\textbf{s}m=c_0+c_1s \mod t

加解密正确性证明

m=c_0+c_1s \mod t

m=bu+te_2+m-asu+tse_1 \mod t

m=asu+teu+te_2+m-asu+tse_1 \mod t

加法同态

有密文\textbf{c}_1\textbf{c}_2分别是由m_1m_2加密而来。考虑他们的解密结构\textbf{c}_1^T\textbf{s}=m_1+te_1\textbf{c}_2^T\textbf{s}=m_2+te_2,则\textbf{c}_1+\textbf{c}_2与私钥的内积(\textbf{c}_1+\textbf{c}_2)^T\textbf{s}=m_1+m_2+t(e_1+e_2)显然是m_1+m_2的一个有效密文。

但是,噪声显然比原来要增加大概一倍,是呈现线性增加的。所以,随着加法次数的增加,噪声会越来越大,直到淹没明文,变成无效密文。

乘法同态

有密文\textbf{a}=(a_0,a_1)\textbf{b}=(b_0,b_1)分别是由m_1m_2加密而来。

则,\textbf{a}\textbf{b}=(a_0b_0,a_1b_0+a_0b_1,a_1b_1)

考虑(\textbf{a}^T\textbf{s})(\textbf{b}^T\textbf{s})=(\textbf{b}\textbf{a})^T\textbf{s}^2=(m_1+te_1)(m_2+te_2)=m_1m_2+te_3,是m_1m_2的一个有效密文,但是,此时,私钥为\textbf{s}^2,比原来的私钥维度增加了。

从上式可以看出,密文的噪声是指数级增加的,而且,密文的维度也在不断增加。这对于高效计算乘法是非常不利的。而密文的重线性化,使得密文的维度维持在跟直接加密一样。

对于噪声的解决方案主要有两种,一个是模交换技术,另一个是自举重加密。

模交换是通过减小密文域模的大小来减少噪声,而自举重加密则是将密文进行同态解密后再加密,以获得新的密文,这样就跟直接加密的密文一样了。

你可能感兴趣的:(安全,同态加密,密码学)