同态加密的BGN方案
BGN 方案(Boneh-Goh-Nissim,2005)是首个支持任意多次加法和一次乘法同态的公钥加密方案,且密文长度保持常数。这一突破为电子投票、私有信息检索等需要简单算术运算的场景提供了高效工具。
安全归约
1. 双线性配对(Bilinear Pairing)
设 \(G\)、\(G_T\) 为两个阶均为 \(n\) 的循环群(\(n\) 为合数),双线性映射 \(e: G \times G \rightarrow G_T\) 满足:
- 双线性:\(\forall g, h \in G, a,b \in \mathbb{Z}\),\(e(g^a, h^b) = e(g, h)^{ab}\)。
- 非退化性:若 \(g\) 是 \(G\) 的生成元,则 \(e(g, g)\) 是 \(G_T\) 的生成元。
2. 子群判定问题(Subgroup Decision Problem)
令 \(n = p q\)(\(p,q\) 为大素数),\(G\) 为 \(n\) 阶群。\(G_p\) 表示 \(G\) 中唯一的 \(p\) 阶子群。给定群元素 \(x \in G\),判定 \(x\) 是否落在子群 \(G_p\) 中。BGN 方案的 IND-CPA 安全基于此假设。
BGN 方案构造
1. 密钥生成 (KeyGen)
- 给定安全参数,选择大素数 \(p, q\),计算 \(n = p q\)。
- 选取一个 \(n\) 阶循环群 \(G\) 及其双线性配对 \(e: G \times G \rightarrow G_T\)。
- 随机选取生成元 \(g, u \in G\) 令 \(h = u^q\),则 \(h\) 的阶恰为 \(p\)。
- 输出:
- 公钥:\(\mathrm{pk} = (n, G, G_T, e, g, h)\)
- 私钥:\(\mathrm{sk} = p\)
2. 加密 (Encrypt)
明文空间为 \(\{0, 1, \dots, T\}\),要求 \(T < p\),以保证解密时离散对数求解可行。
- 对明文 \(m\),随机选取 \(r \in \mathbb{Z}_n\)。
- 计算密文:\[C = g^m \cdot h^r \in G \]
由于 \(h\) 的阶为 \(p\),\(h^r\) 提供了随机掩码,使方案成为概率加密。
3. 解密 (Decrypt)
-
对密文 \(C\),解密时用 \(p\) 次幂:
\[C^p = (g^m h^r)^p = g^{m p} \cdot (u^q)^{r p} = g^{m p} \cdot u^{r p q} = g^{m p} \]因为 \(u^{n} = u^{p q} = 1\)。
-
现在需要求离散对数:\(C^p = (g^p)^m\)。由于 \(m\) 的取值范围 \([0, T]\) 较小,可用 Pollard's Lambda(或 Baby-step Giant-step)在 \(O(\sqrt{T})\) 时间内恢复 \(m\)。
同态性质
1. 加法同态(任意次)
设有密文 \(C_1 = g^{m_1} h^{r_1}\)、\(C_2 = g^{m_2} h^{r_2}\)。
- 密文相乘:\[C_1 \cdot C_2 = g^{m_1 + m_2} h^{r_1 + r_2} \]这正是明文 \(m_1 + m_2\) 在随机数 \(r_1 + r_2\) 下的合法密文。因此支持任意次加法。
2. 单次乘法同态
利用双线性配对是关键。计算 \(C_1\) 与 \(C_2\) 的配对值:
展开:
- 主要项 \(e(g, g)^{m_1 m_2}\)。
- 交叉项:\(e(g, h)^{m_1 r_2} \cdot e(h, g)^{m_2 r_1} \cdot e(h, h)^{r_1 r_2}\)。
由于 \(h\) 的阶为 \(p\),而配对值 \(e(g, h)\) 的阶也为 \(p\)(因为 \(e(g, h)^p = e(g, h^p) = e(g, 1) = 1\))。因此所有交叉项都是 \(G_T\) 中 \(p\) 阶子群的元素,它们是干扰项。
为了消除干扰项,我们需要对配对结果进行“重随机化”。通常 BGN 中,乘法运算输出 \(C_{\text{mult}} = e(C_1, C_2) \cdot h_T^{r'} \in G_T\),其中 \(h_T = e(g, h)\)(它是一个 \(p\) 阶元),\(r'\) 为新随机数。这样:
其中 \(R\) 是一个随机组合。解密时,对 \(C_{\text{mult}}\) 求私钥 \(p\) 次幂,可消去所有 \(h_T\) 项,得到 \((e(g, g)^p)^{m_1 m_2}\),再求离散对数即得 \(m_1 m_2 \bmod p\)。
注意:乘法同态只能进行一次。因为乘法结果落在 \(G_T\) 中,而 \(G_T\) 上虽仍可做加法同态,但不能再做配对运算(配对是从 \(G\) 到 \(G_T\),无法反向),因此无法继续乘法。
效率分析
- 公钥/密文长度:群 \(G\) 中的常数个元素(不随消息长度增长)。
- 加密:一次群指数运算。
- 加法同态:一次群乘法。
- 乘法同态:一次配对运算(双线性对计算)。
- 解密:一次幂运算加一次小范围离散对数求解(\(O(\sqrt{T})\))。

浙公网安备 33010602011771号