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,比原来的私钥维度增加了。

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

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

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

同态加密是一种令人信服的加密技术,可以在加密的状态下保持数据运算的可行性。同态加密背后的主要思想是对数据进行加密,使其仍然可以在加密的状态下进行某些数学运算,然后将结果解密以获得最终结果。 BGV(Bajard, Gentry, Halevi)是一种同态加密方案,可用于执行加法和乘法运算。以下是一个简单的伪代码示例,用于说明如何实现同态加密的加法和乘法操作: // 密钥生成 参数:安全参数 lambda 输入:无 返回:公钥 pk,密钥 sk 成员: pk, sk 函数密钥生成(lambda): 生成两个大质数 p, q 生成一个可满足安全性要求的环 R 随机选择多项式 f(x) ∈ R 满足特定条件 生成公钥 pk = (p, q, R, f(x)) 生成密钥 sk = (p, q, R, f(x)) 返回 pk, sk // 加密函数 参数:公钥 pk, 明文 m 输入:无 返回:密文 c 成员:c 函数加密(pk, m): 随机选择多项式 g(x) ∈ R 计算密文 c = (g(x) * f(x) + m) mod q 返回 c // 解密函数 参数:密钥 sk, 密文 c 输入:无 返回:明文 m 成员:m 函数解密(sk, c): 使用 CRT 计算 c mod p 和 c mod q 计算明文 m = (c mod p) mod q 返回 m // 同态加法函数 参数:公钥 pk, 密文 c1, 密文 c2 输入:无 返回:密文 c 函数同态加法(pk, c1, c2): 计算密文之和 c = (c1 + c2) mod q 返回 c // 同态乘法函数 参数:公钥 pk, 密文 c1, 密文 c2 输入:无 返回:密文 c 函数同态乘法(pk, c1, c2): 计算密文之积 c = (c1 * c2) mod q 返回 c 以上是一个基本的同态加密方案的实现示例。需要注意的是,该示例中的函数并不具有完整性和安全性,并且仅用于说明目的。实际中,同态加密的实现还需要进行更多的细化和改进,以满足具体应用的安全性需求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值