BGV全同态加密
BGV全同态加密
方案描述
KeyGen(\(\lambda\)):根据预设的加密方案的安全性,选择一个安全参数\(\lambda\),安全参数的选择将影响密文模数\(q\)和密文多项式的最高次数\(N\)。在本文中,选择的参数满足128比特安全性。随机采样\(s \leftarrow \mathcal{R}_2\),\(a \leftarrow \mathcal{U}_{q_L}\)和\(e \leftarrow \mathcal{X}\)。之后,计算私钥\(sk = s\)和公钥\(pk = (pk_1,pk_2) = ([-a \cdot s+te]_{q_L} , a)\)。
KeySwitchGen(\(sk\)):模交换能够让同态乘法的次数增加,而模交换需要依赖模交换密钥,首先随机采样多项式\(a \leftarrow \mathcal{U}_{q_L}\)和\(e \leftarrow \mathcal{X}\)。然后输出\(ks = (ks_1, ks_2) \equiv ([-a \cdot s + te + sk \cdot sk]_{q_L} , a)\)作为模交换密钥。
Enc(\(m,pk\)):给定输入消息\(m \in \mathcal{P}\),首先选择三个随机多项式:\(u \leftarrow \mathcal{R}_2\),\(e_1 \leftarrow \mathcal{X}\)和\(e_2 \leftarrow \mathcal{X}\)。然后加密器通过计算生成密文\(c\):\(c=(c_1,c_2)\equiv([pk_1 \cdot u+te_1+m]_{q_L},[pk_2 \cdot u+te_2]_{q_L}) \in \mathcal{C}\)。
Dec(\(c,sk\)):解密一个密文\(c\),需要在对应的模数链层次\(l\)执行以下步骤:\(\mathrm{i)}\) 计算\(m' = [c_1 + c_2 \cdot sk]_{q_l}\),以及\(\mathrm{ii)}\) 输出解密后的明文\(m = m' \pmod{t}\)。
计算模拟
给出模拟代码
1 | |