同态加密的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(C_1, C_2) = e(g^{m_1} h^{r_1}, g^{m_2} h^{r_2}) \in G_T \]

展开:

  • 主要项 \(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'\) 为新随机数。这样:

\[C_{\text{mult}} = e(g, g)^{m_1 m_2} \cdot h_T^{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})\))。
posted @ 2026-06-24 13:02  lumiere_nebula  阅读(17)  评论(0)    收藏  举报