跳到正文
Go back

密钥切换 - hybrid Approach

编辑此页

深入解析 RNS-CKKS 中的高效密钥切换:Hybrid Approach 原理与推导

在全同态加密(FHE)的硬件加速与软件库实现(如 Lattigo, OpenFHE)中,密钥切换(Key-Switching / Relinearization) 往往是性能的最主要瓶颈。

在 RNS-CKKS 方案中,如何高效地处理密钥切换一直是一个核心难题。从最早的两种朴素实现(Type I 和 Type II),发展到如今被广泛采用的 Hybrid Approach(混合方法),其背后的数学直觉与工程权衡非常精彩。

本文将详细剖析 论文《Efficient Bootstrapping for Approximate Homomorphic Encryption with Non-Sparse Keys》中 Hybrid Approach 的数学原理,给出严谨的正确性证明,并对比其与传统方法的优劣,特别适合正在进行 FHE GPU/ASIC 加速器开发的开发者阅读。

1. 背景:Key-Switching 的核心矛盾

在 CKKS 中,密文乘法后会得到一个三元密文 (c0,c1,c2)(c_0, c_1, c_2),其解密形式包含 s2s^2 项:c0+c1s+c2s2c_0 + c_1 s + c_2 s^2。为了让密文继续保持“由同一个秘密钥 ss 解密”的形态,我们需要将其重线性化/密钥切换回二元密文 (d0,d1)(d_0, d_1),使得 d0+d1sc0+c1s+c2s2d_0 + d_1 s \approx c_0 + c_1 s + c_2 s^2。这一过程使用评估密钥(Switching Key / Relinearization Key)swks2s\text{swk}_{s^2 \rightarrow s},其计算核心可以理解为:对 c2c_2(以及其分解后的 digits)与 swk\text{swk} 做内积累加,从而“吸收”掉 s2s^2 项。

如果将其误实现为“直接同态计算密文与秘密钥的乘法”,会引入不可控的噪声放大并破坏正确性。工程实现中,为了在 RNS 下稳定地完成上述内积与后续的 ModDown,通常需要引入辅助模数 PP

在 Hybrid Approach 出现之前,存在两种极端的处理流派:

Hybrid Approach 的诞生,就是为了在“计算复杂度”和“参数大小”之间寻找一个最佳甜点(Sweet Spot)

2. Hybrid Approach 的核心思想

Hybrid Approach密钥切换原理图 1 Hybrid Approach密钥切换原理图 3

Hybrid Approach 引入了一个分解因子 dnumdnum(在部分文献中记为 β\beta)。它将模数链 QQ 分解为 dnumdnum 个分块(Digits)。

2.1 密钥结构

为了支持这种分解,我们利用 中国剩余定理(CRT) 构造了一组特殊的基底 w(i)w^{(i)}。 Key-Switching Key (swkswk) 被定义为 dnumdnum 个密文的集合:

swk(i)=(ais+ei+Pw(i)s,ai)(modPQ)\mathbf{swk}^{(i)} = \left( -a_i s + e_i + P \cdot w^{(i)} \cdot s', \quad a_i \right) \pmod{PQ}

其中 w(i)w^{(i)} 是针对第 ii 个分块的 CRT 基底。


3. 数学原理与正确性证明 (详细推导)

很多开发者对 Hybrid Approach 的困惑在于:为什么把密文切开再乘,最后还能加回去,且噪声还能被消除? 下面我们通过严谨的代数推导来证明其正确性。

3.1 预备定义

3.2 推导过程

算法的核心步骤包含:扩展、内积、ModDown。

步骤 1:内积运算 (Inner Product)

我们在模 PQPQ 下计算密文分量与密钥的内积: Ctmp=i=0dnum1cextended(i)swk(i)(modPQ)\text{C}_{tmp} = \sum_{i=0}^{dnum-1} c^{(i)}_{extended} \cdot \mathbf{swk}^{(i)} \pmod{PQ}

注意:这里的 cextended(i)c^{(i)}_{extended} 指的是通过 BConv 将 c(i)c^{(i)} 从其原本的小素数基扩展到整个 PQPQ 模数链后的结果。

让我们观察解密后的相位 (Phase)Phase(Ctmp)=ic(i)Phase(swk(i))=ic(i)(Pw(i)s+ei)(modPQ)\begin{aligned} \text{Phase}(\text{C}_{tmp}) &= \sum_{i} c^{(i)} \cdot \text{Phase}(\mathbf{swk}^{(i)}) \\ &= \sum_{i} c^{(i)} \cdot \left( P \cdot w^{(i)} \cdot s' + e_i \right) \pmod{PQ} \end{aligned}

步骤 2:提取公因式与 CRT 重构

将上式展开: Phase(Ctmp)=Ps(ic(i)w(i))CRT重构+ic(i)ei噪声项 Etotal(modPQ)\text{Phase}(\text{C}_{tmp}) = P \cdot s' \cdot \underbrace{\left( \sum_{i} c^{(i)} w^{(i)} \right)}_{\text{CRT重构}} + \underbrace{\sum_{i} c^{(i)} e_i}_{\text{噪声项 } E_{total}} \pmod{PQ}

利用 3.1 中的 CRT 关键性质 c(i)w(i)=c+kQ\sum c^{(i)} w^{(i)} = c + kQ,代入上式: Phase(Ctmp)=Ps(c+kQ)+Etotal(modPQ)=Pcs+PkQs+Etotal(modPQ)\begin{aligned} \text{Phase}(\text{C}_{tmp}) &= P \cdot s' \cdot (c + k \cdot Q) + E_{total} \pmod{PQ} \\ &= P \cdot c \cdot s' + \mathbf{P \cdot k \cdot Q \cdot s'} + E_{total} \pmod{PQ} \end{aligned}

步骤 3:模数 PQPQ 的魔法 (消除 kQ)

请注意加粗项 PkQs\mathbf{P \cdot k \cdot Q \cdot s'}。 因为该项包含因子 PPQQ,它必然是 PQPQ 的倍数。 在 (modPQ)\pmod{PQ} 的环中,该项恒等于 0

因此,内积的结果简化为: Phase(Ctmp)Pcs+Etotal(modPQ)\text{Phase}(\text{C}_{tmp}) \equiv P \cdot c \cdot s' + E_{total} \pmod{PQ}

步骤 4:Modulus Down (除以 P)

最后一步是 RNS 下的 Modulus Down,其数学意义是乘以 P1P^{-1}ResultCtmpP1(modQ)\text{Result} \approx \text{C}_{tmp} \cdot P^{-1} \pmod Q

解密结果为: PhasefinalP1(Pcs+Etotal)=cs+EtotalP\begin{aligned} \text{Phase}_{final} &\approx P^{-1} \cdot (P \cdot c \cdot s' + E_{total}) \\ &= c \cdot s' + \frac{E_{total}}{P} \end{aligned}

结论

  1. 正确性:我们成功还原了 csc \cdot s'
  2. 噪声控制:总噪声 EtotalE_{total} 被巨大的辅助模数 PP 除掉了。只要 PP 足够大(PQ/dnumP \approx Q/dnum),剩余噪声 EtotalP\frac{E_{total}}{P} 就可忽略不计。

4. 深度剖析:Algorithm 3 的数据流向与 RNS 陷阱

在阅读相关文献(如 SHARP 论文或 Lattigo 源码)时,Algorithm 3 的第一行往往是最容易产生误解的地方。为了确保在 GPU/ASIC 上正确实现,需要结合 RNS 的算术特性,对数据流向进行严格的剖析。

Hybrid Approach密钥切换原理图 2

4.1 核心结论:全模数扩展

观察算法第 1 行的公式:

d[[c]qα0i<β]PQ\mathbf{d} \leftarrow [[c]_{q_{\alpha_0 \le i < \beta}}]_{PQ_\ell}

这里表达了一个至关重要的实现细节:第一步生成的向量 d\mathbf{d},其每一个分量都必须被扩展到完整的模数链 PQPQ_\ell 上,而不仅仅是 PqαP \cup q_{\alpha}

为什么?这是由 RNS 的乘法铁律 决定的:两个多项式要相乘,它们必须定义在“完全相同”的 RNS 基(素数集合)上。

4.2 详细原理解析

让我们拆解这一过程:

  1. 内层操作(分解) [c]qαi[c]_{q_{\alpha_i}}

    把密文 cc 切成 β\beta 个小块(Digits)。第 ii 个小块 c(i)c^{(i)} 初始时刻只存在于它自己的素数基 qαiq_{\alpha_i} 中。

  2. 外层操作(扩展) []PQ[\cdot]_{PQ_\ell}

    这是完全扩展 (Full BConv)。需要把每一个小块 c(i)c^{(i)},通过 BConv 扩展到整个当前的模数系统 PQPQ_\ell(即 QQ 的所有素数 + 辅助模数 PP)。

为什么要扩展到整个 PQPQ_\ell?(而不是只扩展到 P)

这对应了算法 Line 2 的点积操作:

(a,b)(d,swk0,)(a, b) \leftarrow (\langle \mathbf{d}, \mathbf{swk}^0 \rangle, \dots)

展开来看,其本质是求和:

Result=cextended(0)swk(0)+cextended(1)swk(1)+\text{Result} = c^{(0)}_{\text{extended}} \cdot swk^{(0)} + c^{(1)}_{\text{extended}} \cdot swk^{(1)} + \dots

请注意 Key (swkswk) 的形态

因此,虽然 c(0)c^{(0)} 原本只在 qα0q_{\alpha_0} 上有值,但为了和“全尺寸”的 swk(0)swk^{(0)} 相乘,它必须被 BConv 投影到 swk(0)swk^{(0)} 所在的所有素数上。

4.3 修正后的完整数据流 (Step-by-Step)

假设 Q={q0,q1,q2,q3}Q = \{q_0, q_1, q_2, q_3\}P={p0}P = \{p_0\}dnum=2dnum=2

Digit 0 是 {q0,q1}\{q_0, q_1\},Digit 1 是 {q2,q3}\{q_2, q_3\}

4.4 理论直觉与 RNS 实现的差异

为什么容易产生“填 0”或“只扩展到 P”的误解?这是因为混淆了 CRT 基底的理论性质RNS 的具体实现

4.5 针对 GPU 实现的建议

基于上述分析,在 28-bit GPU 实现中,应当构建以下三个核心 Kernel:

  1. Kernel 1 (Full BConv): 实现一个能够将 dnumdnum 个小块,分别广播/扩展到整个模数链 PQPQ 的 Kernel。这会是计算密集度很高的一步,复杂度为 O(dnumLN)O(dnum \cdot L \cdot N)

  2. Kernel 2 (MultAcc): 在全模数链 PQPQ 上执行点积累加。

  3. Kernel 3 (ModDown): 再次调用 BConv 把 PP 上的结果投影回 QQ,然后做减法。


5. 对比与权衡 (Trade-off)

为什么 Hybrid Approach 能够胜出?以下是三种方案的详细对比:

特性Type I (Bit Decomposition)Type II (Modulus Raising)Hybrid Approach (Sweet Spot)
分解数量 (dnumdnum)LL (约 20~60)112 ~ 4
辅助模数 PP 大小不需要或很小PQP \approx Q (巨大)PQ/dnumP \approx Q / dnum (适中)
总模数 PQPQQ\approx QQ2\approx Q^2QQ1/dnum\approx Q \cdot Q^{1/dnum}
密钥存储 (swk)LL1 个dnumdnum
计算复杂度极高 (LL 次乘法)低 (1 次大乘法)中等 (dnumdnum 次乘法)
参数安全性 NN优秀差 (易导致 N 翻倍)优秀 (保持小 N)

分析结论

  1. 为什么不用 Type II? 虽然 Type II 只需要存 1 个 Key,算 1 次乘法,看似最快。但由于 PQP \approx Q,导致总模数 PQPQ 极大。为了满足同态加密的安全性(128-bit Security),更大的模数要求更大的多项式度数 NN。 一旦 NN2152^{15} 被迫增加到 2162^{16},计算延迟会增加 2-4 倍,内存占用翻倍。这是得不偿失的。

  2. 为什么 Hybrid 是最优解? Hybrid 通过设置 dnum3dnum \approx 3,使得 PP 只有 QQ 的三分之一大小。这样 PQPQ 的总大小通常能维持在当前 NN 的安全范围内。 虽然我们需要存储 3 个 Key,多做几次 BConv,但相比于 NN 翻倍带来的性能损耗,这些开销是完全可以接受的。

  3. 显存带宽优化 针对 GPU 实现,存储 dnumdnum 个 Key 可能会占用大量带宽。SHARP 论文和现代库建议使用 PRNG (伪随机数生成器)

    • swk=(as+,a)swk = (-a \cdot s + \dots, a)
    • 其中多项式 aa 是随机的。我们在显存中只存一个 32字节的 Seed
    • 在计算时,GPU 动态生成 aa,从而将带宽占用减半。

6. 总结

Hybrid Approach 是 RNS-CKKS 密钥切换技术的集大成者。它利用 CRT 的代数性质,巧妙地化解了噪声与效率的矛盾。

对于硬件开发者而言,理解其背后的 “扩展 -> 内积 -> 模约减” 这一 RNS 数据流至关重要。正确实现 Hybrid Approach,并配合 dnumdnum 的参数调优,是实现高性能 FHE 加速器的关键一步。


编辑此页
Share this post on:

Next Post
阅读论文 A Full RNS Variant of Approximate Homomorphic Encryption