同态加密(CKKS)中的重线性化(Relinearization)

在基于环上的同态加密方案,比如BGV,BFV或者CKKS,在经过乘法同态的时候,往往会导致密文的维度增加。比如由明文m_1加密而成的密文\textbf{c}_1=(a_0,a_1),明文m_2加密得到的密文为\textbf{c}_2=(b_0,b_1),则\textbf{c}_1 \cdot \textbf{c}_2=(a_0b_0,a_0b_1+a_1b_0,a_1b_1),维度变成了3。为了能高效的计算同态乘法,抑制密文增长,我们需要重线性化。

我们以CKKS为例

假设有密文\textbf{c}=(c_0,c_1)和一次乘法后的密文\textbf{d}=(d_0,d_1,d_2),私钥\textbf{s}=(1,s),则对于\textbf{c},解密为m+e=c_0+c_1s,对于\textbf{d},解密为m+e=d_0+d_1s+d_2s^2。(运算都是模p运算,p为明文空间的模,e为产生的噪声)

为了实现密文的重线性化,我们还需要一个辅助的密钥evk=(b,a) ,其中b=-as+e+ps^2

则对\textbf{d}进行重线性化后的密文\textbf{c}\prime=(c_0,c_1)=(d_0,d_1)+\lceil evk \cdot d_2 \cdot p^{-1} \rfloor

证明如下:

c_0=d_0+\lceil bd_2p^{-1} \rfloor=d_0+\lceil -asd_2p^{-1}+d_2ep^{-1}+d_2s^2 \rfloor

c_1=d_1+\lceil ad_2p^{-1}\rfloor

c_0+c_1s=d_0+d_1s+d_2s^2+\lceil d_2ep^{-1} \rfloor

由于e是噪声,相对于p来说很小,所以\lceil d_2ep^{-1} \rfloor在有效解密时为0。故,新的密文是\textbf{d}的一个2维密文。

猜你喜欢

转载自blog.csdn.net/watqw/article/details/122968135
今日推荐