想象你拥有一只魔法保险柜——柜身是磨砂玻璃,外人无法看清里面的东西,但柜角装着一双灵巧的机械手。你把装着数字的保险柜交给远方的厨师,厨师虽然看不见数字,却能操控机械手在柜内完成搅拌与翻炒。待柜子送回来,你用自己的钥匙打开,发现里面的数字已经被正确算好了。这听起来像魔术,其实是密码学里的「同态加密」。根据柜子能做的动作多少,业界诞生了四件著名厨具:只会拌的 Paillier、能切能炒但油烟大的 BGV、换了一套清爽刀法的 BFV,以及一位追求「差不多就行」的高效大厨 CKKS。选哪一件,要看你做什么菜、允许多少油烟、能付多少电费。这篇文章将带你走进这间全透明厨房,把四种方案的门道一一尝个明白。

岗位关联

理解不同同态加密方案的取舍,是从事隐私计算、联邦学习与数据安全工作的基本功。掌握这笔账,你才能在不泄露数据的前提下,为真实项目做出靠谱的技术选型。

目录
  1. 可视化演示
  2. 核心概念
  3. Paillier 加法同态
  4. BGV 整数全同态
  5. BFV 整数全同态
  6. CKKS 近似浮点
  7. 噪声与性能
  8. 选型指南
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示同态加密的密文计算流程与Paillier、BGV/BFV、CKKS三类方案的参数对比,支持模式切换查看不同维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

同态加密计算流程 明文经加密后在密文域直接执行计算 计算过程无需解密保障数据机密性 Dec(Enc(a) ⊕ Enc(b)) = a ⊕ b 密文域运算结果解密后等价于明文运算

核心概念

想象你请了一位看不见东西的大厨。你把一个磨砂玻璃保险柜交给他,柜子里放着你的食材,柜门外伸进一双机械手臂。大厨虽然看不见柜中的食材,却能根据你从窗口递进的纸条,操控机械臂完成「加一勺糖」「搅拌三圈」这类操作。几个小时后,柜子送回来,你打开一看,食材已经按配方处理完毕。整个过程中,大厨没看过一眼食材,但活儿全干完了。

这个「看不见却算得动」的魔法柜子,在密码学中叫同态加密。它的核心性质可以写成一句话:对密文做某种运算,等价于对明文做对应运算后再加密。用符号表示:把加密的 $m_1$、$m_2$ 放进柜子,机械手「叠加」一下,拿回来解出来的就是 $m_1+m_2$。

同态加密家族按「机械手能做什么动作」分成几档:只会一种动作的叫部分同态,动作更多但次数有限的叫稍全同态,任意动作无限次数的叫全同态。这篇文章的主角是四个成名方案——只会拌的 Paillier、能切能炒但油烟大的 BGV、刀法更清爽的 BFV,以及追求「差不多就行」的 CKKS。

总之,这口保险柜的价值不在于柜子本身多结实,而在于柜子里那双「盲操作」的手能完成多复杂的菜式。接下来,我们挨个认识这四位大厨。

Enc(m1+m2)=Enc(m1)⊗Enc(m2)\mathsf{Enc}(m_1 + m_2) = \mathsf{Enc}(m_1) \otimes \mathsf{Enc}(m_2)
这个公式是同态加密的「总纲」:等式左边是「先把明文加起来再加密」,右边是「先各自加密再做密文运算」。两者结果一致,意味着我们可以在看不见明文的情况下完成计算。
  1. 加密函数$\mathsf{Enc}(m)$ 表示用公钥把明文 $m$ 加密成密文。
    Enc(m)\mathsf{Enc}(m)
  2. 密文运算$\otimes$ 表示密文上的某种运算,具体方案不同,可以是模乘法或多项式乘法。
    ⊗\otimes
  3. 整体含义对两个密文做运算后解密,等价于对两个明文直接做加法。
    Dec(Enc(m1)⊗Enc(m2))=m1+m2\mathsf{Dec}(\mathsf{Enc}(m_1) \otimes \mathsf{Enc}(m_2)) = m_1 + m_2

Paillier 加法同态

Paillier 是保险柜家族里的「凉拌专员」。他的机械手只练过一个动作:把两份食材倒进一个盆里拌匀。对应到密码世界,就是两个密文相乘,解密后等于对应明文相加。因为动作单一,他的柜子里几乎不积攒油烟,可以一口气处理成千上万份食材而不需要清理。

Paillier 于 1999 年由 Pascal Paillier 提出,属于部分同态加密。它是一套公钥加密系统:任何人可以用公钥把数字 $m$ 加密成密文,只有持有私钥的你才能解密。它的同态魔法表现在这个等式上——密文做乘法,明文做加法,仿佛数字在密文世界里发生了一次「运算换装」。

由于只做加法,Paillier 的密文扩展率非常低:明文在 $\mathbb{Z}_n$ 里,密文在 $\mathbb{Z}_{n^2}$ 里,体积只膨胀约两倍。这在同态加密里是极其奢侈的「轻量级」。实际应用中,电子投票、密文求和、联邦学习中的梯度聚合,都是 Paillier 的主场。

如果说其他全同态方案是功能繁多的重型机械,Paillier 就是那台把「拌匀」做到极致的轻巧推车。别嫌它动作少——大量统计任务归根到底就是加法,而它恰好又快又稳。

E(m1)⋅E(m2) mod n2=E(m1+m2 mod n)E(m_1) \cdot E(m_2) \bmod n^2 = E(m_1 + m_2 \bmod n)
注意这里有个「运算换装」:密文上用乘号,解密出来却是加法。这正是 Paillier 最迷人的地方——你把它当乘法器用,它帮你算的却是加法。
  1. 密文输入$E(m_1)$ 和 $E(m_2)$ 是两次独立加密得到的密文,任何人都能生成。
    E(m1),  E(m2)E(m_1),\; E(m_2)
  2. 模乘法运算在模 $n^2$ 的环里把两个密文相乘,这是云服务器能做的唯一动作。
    E(m1)⋅E(m2) mod n2E(m_1) \cdot E(m_2) \bmod n^2
  3. 解密结果乘积解出来等于 $m_1 + m_2$ 模 $n$,与直接对明文求和一致。
    E(m1+m2 mod n)E(m_1 + m_2 \bmod n)

BGV 整数全同态

BGV 给保险柜装上了两只机械手:一只负责切(加法),一只负责炒(乘法)。理论上,绝大多数菜谱都能由「切」与「炒」组合出来。然而,每炒一次菜,柜内就会多一层油烟;油烟越积越浓,直到磨砂玻璃彻底变成黑玻璃,你打开柜子也看不清菜变成什么样了——解密失败。

BGV 由 Brakerski、Gentry 和 Vaikuntanathan 于 2011 年提出,是第一代实用的全同态加密方案,奠基在 LWE/RLWE 格问题上。它把整数编码为多项式系数,通过密文加法和乘法构造任意计算电路。为了让无限深度的计算成为可能,BGV 祭出三件套:密钥交换、模切换和自举。

密钥交换解决乘法后密文尺寸膨胀的问题,把三元密文压回二元;模切换在每次乘法后按比例缩小模数,让噪声的增长不再失控;而当噪声逼近临界值时,自举对密文做一次「加密的解密」,将噪声重置回初始水平。但三件套都很昂贵,尤其自举,常常吃掉 90% 以上的计算时间。

BGV 像一位手艺全面的大厨,但每道菜的成本都包含一次电费高昂的排烟。聪明的使用法不是逃避油烟,而是精心设计菜谱,把乘法层级控制在油烟上限之内,只在关键时刻才开抽油烟机。

ϵk≈ϵ0×Bk\epsilon_k \approx \epsilon_0 \times B^k
这是 BGV 噪声的「指数诅咒」:每做一次乘法,噪声大约放大 $B$ 倍。乘法做到第 $k$ 次,噪声就是初始值的 $B^k$ 倍。所以计算深度稍微加深一点,噪声就会爆炸。
  1. 初始噪声$\epsilon_0$ 是加密时就注入的随机扰动,每个密文生来就带一点「油烟」。
    ϵ0\epsilon_0
  2. 放大倍数$B$ 是单次乘法把噪声放大的底数,与安全参数和模数相关。
    BB
  3. 指数累积$k$ 是连续乘法的次数,指数位置说明噪声是指数级膨胀而非线性增长。
    BkB^k

BFV 整数全同态

BFV 是 BGV 的同门师弟,同样拥有「切炒双全」的机械手。变化在于他换了一套刀法:下锅之前,先把所有食材按固定大小切丁(消息缩放),于是烹饪过程中飞溅的油星明显变少,同样的排烟预算能做更多道菜。

BFV 由 Brakerski、Fan 和 Vercauteren 在 2012 年提出,与 BGV 同属基于 RLWE 的全同态整数方案。两者都能在密文上进行加法和乘法,但编码思路不同:BGV 把消息嵌在模数结构里,BFV 则先把明文 $m$ 乘以一个缩放因子 $\Delta$ 再加密,解密时除以 $\Delta$ 还原。

BFV 的缩放策略让整数除法变得很自然:除以一个数等于乘以它的倒数再取整,这在 BGV 里却要费一番周折。因此,需要精确整数除法、平均值计算的场景,BFV 往往更顺手。主流库 OpenFHE 和 Microsoft SEAL 对 BFV 的支持也很成熟。从性能对比看,BFV 和 BGV 的密文扩展率都处在千倍量级,属于「半斤八两」的通勤费用。

如果说 BGV 是爆炒时油花四溅的铁锅,BFV 就是不粘涂层升级版——同一套菜谱,更少的油烟,更省心的维护。但该有的排烟系统(自举)一样不能少,只是能多撑几层烟火。

m=⌊[c0+c1s]qΔ⌉m = \left\lfloor \frac{[c_0 + c_1 s]_q}{\Delta} \right\rceil
这是 BFV 的解密公式:先用私钥 $s$ 还原「放大后的消息」,再除掉缩放因子 $\Delta$,最后取整。缩放因子就像菜谱里的「定宽切丁模具」,让每一步误差都可控。
  1. 密文还原$c_0 + c_1 s$ 用私钥 $s$ 把密文 $(c_0, c_1)$ 还原成带噪声的放大消息。
    c0+c1sc_0 + c_1 s
  2. 模数归约$[\cdot]_q$ 在模 $q$ 下取整数值,把噪声扰动压到最小范围。
    [c0+c1s]q[c_0 + c_1 s]_q
  3. 缩放还原除以 $\Delta$ 并四舍五入,恢复出真正的明文 $m$。
    ⌊⋅Δ⌉\left\lfloor \frac{\cdot}{\Delta} \right\rceil

CKKS 近似浮点

CKKS 保险柜里的机械手是一位「差不多先生」。他做的菜不追求精确到克,而是保证口味大体不差,误差在可接受范围内。为此,他换来惊人的效率:能同时颠勺炒一整车食材(向量打包),特别适合「尝个大概对不对」的场合——比如让 AI 判断一张片子像不像早期肺癌。

CKKS 由 Cheon、Kim、Kim 和 Song 于 2017 年提出,是首个面向浮点近似计算的全同态方案。它把复数或实数向量编码成多项式,一条密文里打包成百上千个数值,密文乘法天然变成逐元素乘法(SIMD)。计算过程中用一个缩放因子 $\Delta$ 模拟浮点小数点,每次乘法后执行重缩放(rescaling)把比例调回去,同时压住噪声。

正因为误差可控但不为零,CKKS 完美契合机器学习:神经网络本来就是梯度下降、概率输出的「容错算法」,对 $10^{-5}$ 量级的扰动浑然不觉。于是,密文推理和密文训练几乎成了 CKKS 的代名词。代价是密文扩展率同样高达千倍级别——一条 HE 密文动辄数 MB,传输和存储都让人心跳加速。

差不多先生的菜未必适合国宴摆盘(比如货币金额的精确结算),却最适合时间紧、量大、口味容错的场景。AI 世界的烟火气,正好配 CKKS 这位高效大厨。

Dec(Enc(m1)⊙Enc(m2))≈m1×m2\mathsf{Dec}\big( \mathsf{Enc}(m_1) \odot \mathsf{Enc}(m_2) \big) \approx m_1 \times m_2
注意这里的符号从 $=$ 变成了 $\approx$。CKKS 解密出来的结果不是精确的 $m_1 \times m_2$,而是一个误差足够小的近似值。这既是它的「不精确」,也是它高性能的根源。
  1. 特殊乘法$\odot$ 表示密文上的乘法并伴随一次重缩放(rescaling),用来把缩放因子调回来。
    Enc(m1)⊙Enc(m2)\mathsf{Enc}(m_1) \odot \mathsf{Enc}(m_2)
  2. 近似符号$\approx$ 表示结果与真实乘法只差一个很小的浮点误差,误差量级由缩放因子和层级决定。
    ≈\approx
  3. 误差来源误差来自每次乘法后的取整与缩放,深度越深,累积误差越大,但通常控制在 $10^{-5}$ 量级。
    m1×m2+δ,∣δ∣≪1m_1 \times m_2 + \delta,\quad |\delta| \ll 1

噪声与性能

四口保险柜摆在厨房里,我们得打开账本算一笔账:每一口柜子的「排烟成本」和「食材损耗」是多少?这决定你接不接这单生意。

衡量同态加密方案有两条硬指标:噪声累积速度和密文扩展率。噪声是密文中夹杂的随机扰动,每次乘法都会被放大,放大到一定程度就无法解密;密文扩展率指密文体积与明文体积的比值,直接决定传输带宽和存储成本。

| 方案 | 支持运算 | 密文扩展率 | 噪声增长速度 | 典型深度 |

|------|---------|-----------|-------------|---------|

| Paillier | 仅加法 | 约 2 倍 | 极慢 | 极深(加法几乎无噪声) |

| BGV | 加法+乘法 | 千倍级 | 快(指数) | 约 10~20 层乘法 |

| BFV | 加法+乘法 | 千倍级 | 较快(指数) | 约 15~25 层乘法 |

| CKKS | 加法+乘法(近似) | 千倍级 | 中等 | 可数十层,容忍误差 |

厨具没有好坏,只有账本算不算得过来。BGV 的油烟虽然大,但你的菜谱只炒三步,那它就绰绰有余;CKKS 效率虽高,可客户若要求克克精确,它的「差不多」就交不了差。

L≈log⁡B(ϵmax⁡ϵ0)L \approx \log_B \left( \frac{\epsilon_{\max}}{\epsilon_0} \right)
这个公式告诉你「最多能连续做多少次乘法」:把解密能容忍的最大噪声 $\epsilon_{\max}$ 除以初始噪声 $\epsilon_0$,再取以 $B$ 为底的对数。每多一层乘法,可用的深度预算就少一分。
  1. 噪声上限$\epsilon_{\max}$ 是解密算法还能正确还原明文的噪声临界值,超过就报错。
    ϵmax⁡\epsilon_{\max}
  2. 初始噪声$\epsilon_0$ 是加密时携带的基础噪声,越小留给计算的预算越多。
    ϵ0\epsilon_0
  3. 对数运算$\log_B$ 把指数增长的噪声换算成「能撑几层乘法」,这就是运算深度上限。
    log⁡B(⋅)\log_B(\cdot)

选型指南

你是一家医院的「数据大厨」,想把病人的病历送上云服务器做分析,又不愿泄露隐私。面对四口保险柜,怎么下单?答案藏在你要做的「菜」里。

先算菜谱有几层乘法:若是求和、均值、统计计数这类纯加法任务,Paillier 是预算最优解,成熟稳定;若是金额结算、整数运算且深度可控,BFV 的缩放机制让整数除法得心应手;若要在密文上跑神经网络,CKKS 的浮点近似和 SIMD 打包几乎是唯一答案。BGV 则适合整数电路设计友好、愿意精细管理噪声预算的场景。

其次看算力约束:全同态计算比明文慢好几个数量级,自举更慢,所以「能不用 FHE 就不用」是工程界的共识,或配合可信硬件等其他隐私技术混合使用。最后看发展趋势:专用硬件加速(FPGA/ASIC)、SIMD 打包优化、混合协议正在把 FHE 的延迟从秒级推向毫秒级,CKKS 的生态也愈发繁荣。

选型不是选最贵的厨具,而是选最合菜谱的那口锅。凉拌菜就推 Paillier 小推车,整数大餐交给 BFV 不粘锅,AI 快炒认准 CKKS 猛火灶——至于那台自举抽油烟机,预算充足时备上,关键时刻能救命。

c′=Enc(Dec(c))c' = \mathsf{Enc}\big( \mathsf{Dec}(c) \big)
自举(Bootstrapping)的数学本质是「在加密状态下解密一次再重新加密」。这一步把密文里的噪声洗掉一大半,让计算可以无限继续。它就像厨房里的超大功率抽油烟机——贵,但关键时刻能救命。
  1. 解密操作$\mathsf{Dec}(c)$ 在加密电路内部完成,谁也不知道明文是什么。
    Dec(c)\mathsf{Dec}(c)
  2. 重新加密紧接着用公钥加密,得到一个新密文 $c'$。
    Enc(⋅)\mathsf{Enc}(\cdot)
  3. 效果$c'$ 包含的噪声被重置到接近初始水平,可以继续下一轮计算。
    c′c'

AI 应用场景

联邦学习的安全梯度聚合

阶段:训练阶段中的安全聚合(Secure Aggregation)

解决的问题:传统联邦学习直接传明文梯度,攻击者可以逆推还原训练数据;用 Paillier 对梯度加密聚合,服务器只见密文和聚合结果,单个参与方的梯度永不落地。

具体案例:某三甲医院联盟横向联邦训练肺结节识别模型,各院用 Paillier 加密本地梯度上传,中央服务器在密文上直接求和后下发,各院解密更新模型。全程影像数据不出院,梯度明文不落地,训练效果与明文聚合几乎一致。

云端 AI 推理的隐私保护

阶段:推理与部署阶段

解决的问题:用户把数据加密后上传,云服务器用 CKKS 在密文上跑神经网络推理;传统方案要么明文裸奔,要么依赖可信执行环境,前者泄露隐私,后者受硬件限制。

具体案例:银行征信系统用 CKKS 部署信用评分模型,借款人的收入、负债、流水等敏感字段全程加密,云端只返回加密的评分结果,模型权重同样对用户保密,实现双向隐私保护。

电子投票的密文计票

阶段:数据采集与聚合统计

解决的问题:传统投票需要可信计票中心,计票员能看到每一张票;Paillier 让每张票加密为 0/1 密文,计票节点只能做密文求和,最终只解密出总票数。

具体案例:某大型组织无记名投票系统采用 Paillier 同态计票,选票加密上传后,计票节点在密文上求和,最终只公布票数和结果,任何单个选票内容都不可追溯,兼顾匿名性与可验证性。

Python 演示

python33 行
# 需要安装依赖: pip install phe# 演示 Paillier 加法同态: 云服务器汇总密文, 不泄露任何明文from phe import paillier  def main():    print("=== Paillier 加法同态演示 ===")    # 1. 密钥生成: 公钥交给数据方, 私钥由数据方自己保管    pub_key, priv_key = paillier.generate_paillier_keypair()     # 2. 医院加密三笔检查费用, 上传云服务器    bills = [128.5, 362.0, 89.75, 450.25]    enc_bills = [pub_key.encrypt(m) for m in bills]    print("明文账单:", bills)    print("密文账单(截断):", [str(e)[:16] + "..." for e in enc_bills])     # 3. 云服务器在密文上直接求和, 全程看不到明文    enc_total = sum(enc_bills)    print("云服务器完成密文求和")     # 4. 医院取回结果, 用私钥解密    total = priv_key.decrypt(enc_total)    print("解密总额:", round(total, 2))    assert abs(total - sum(bills)) < 1e-6     # 5. 密文还支持标量乘法, 可用于求平均等统计    enc_avg = enc_total * (1.0 / len(bills))    avg = priv_key.decrypt(enc_avg)    print("密文求平均:", round(avg, 2))  if __name__ == "__main__":    main()
目的:用 python-paillier 库完整演示「加密 → 云端密文求和 → 解密」的加法同态流程,模拟医疗账单的隐私统计场景。
  1. pub_key, priv_key = paillier.generate_paillier_keypair()生成一对钥匙:公钥用来加密,私钥只能自己留着解密。
  2. enc_bills = [pub_key.encrypt(m) for m in bills]把每笔费用逐个丢进保险柜,变成外人读不懂的密文。
  3. enc_total = sum(enc_bills)云服务器直接把密文相加,这正是 Paillier 的核心法力:看不见数字,却能算出总和。
  4. total = priv_key.decrypt(enc_total)拿回结果后用私钥解密,得到所有账单的总金额。
  5. enc_avg = enc_total * (1.0 / len(bills))密文还能乘以常数,再解密就是平均值,用途又扩大一步。

常见误区

误区「BGV/BFV 支持任意计算,我把所有数据都加密丢给云服务器跑就行,反正全能算。」

正解全同态加密的计算开销极其惊人,通常比明文慢 5~6 个数量级,密文体积膨胀上千倍,自举一次更是昂贵。它适合特定的小规模精确计算或大批量 SIMD 并行,绝不适合把整个数据库都加密后跑任意 SQL。比喻:让厨师每炒一道菜都要换一次防尘服、开一次抽油烟机,时间和电费都让人倒吸凉气。

为何常见:论文里的「任意函数」宣传让人误以为没有代价,忽略了底层的性能账单。

误区「Paillier 只能加不能乘,支持的东西太少,商业上没什么价值。」

正解现实中大量数据分析任务本质是加法——求和、均值、计数、直方图、梯度聚合。这些场景用 Paillier 不仅够用,而且因为它密文小、噪声低、速度快,早已在电子投票、联邦学习、密文数据库中落地。加法不是短板,而是它的精准定位。

为何常见:看论文时只关注「全同态 vs 部分同态」的标签,忽略了实际需求往往只是加法。

误区「CKKS 也是全同态,解密出来的结果应该和明文计算完全一样。」

正解CKKS 是近似加密方案,解密结果带着可控的浮点误差,误差大小由缩放因子、运算深度和舍入方式决定。它适合神经网络这类天然容忍噪声的任务,但绝不适用于货币金额、法律文书等要求精确相等的场景。比喻:差不多先生端出的菜「大体对味」,却经不起米其林评委的克克计较。

为何常见:把「解密后能得到结果」错误理解成「得到完全精确的结果」,忽略了近似符号 $\approx$ 的存在。

误区「既然自举能刷新噪声,那我就随便算,无限深度,不用做预算规划。」

正解自举是目前全同态计算中最贵的操作,通常占整个计算耗时的 90% 以上。实践中必须精心设计「层级预算」:把任务拆成尽量少的乘法层,只在必要时调用自举。盲目依赖自举,账单会高到让你怀疑人生。

为何常见:理解了自举的机制,却没理解它的性能代价,把「可行」当成了「免费」。

误区「反正同态加密密文都很大,选哪个方案传输开销都一样。」

正解Paillier 的密文扩展率只有约 2 倍,而 BGV、BFV、CKKS 的扩展率通常在千倍量级——一条 CKKS 密文动辄数 MB。这直接决定了网络带宽、存储成本和整体架构设计。把 Paillier 和 BGV 当成同一档开销,是选型的大忌。

为何常见:只听说过「同态加密慢且大」,没有对具体方案的扩展率做量化对比。

面试题

Q1. 下列哪个方案只支持加法同态?

单选题 · easy

  • A.Paillier 方案← 正确答案
  • B.BGV 同态方案
  • C.BFV 同态方案
  • D.CKKS 同态方案

答案:A。Paillier 是部分同态加密,只支持密文乘法对应明文加法。BGV、BFV、CKKS 都同时支持加法和乘法,属于全同态家族。

Q2. 同态加密中「噪声」主要来自哪里?

单选题 · easy

  • A.加密随机性与乘法运算← 正确答案
  • B.网络传输中的信号衰减
  • C.服务器长时间运行的发热
  • D.明文数据本身的体积大小

答案:A。噪声来自加密时注入的随机项,并在每次乘法后被放大。它是同态加密正确性失效的根本原因,与网络、硬件发热、明文大小无关。

Q3. CKKS 与 BGV、BFV 最大的区别是什么?

单选题 · mid

  • A.支持近似浮点与复数计算← 正确答案
  • B.不需要依赖任何安全假设
  • C.所有场景下密文尺寸更小
  • D.无需密钥即可完成解密运算

答案:A。CKKS 面向浮点近似计算,结果带可控误差;BGV 和 BFV 都是精确整数运算。安全性上 CKKS 同样依赖 RLWE 假设,密文尺寸并不更小,解密也必须有私钥。

Q4. 自举(Bootstrapping)在 FHE 中的作用是什么?

单选题 · mid

  • A.刷新密文噪声,支持无限深度← 正确答案
  • B.压缩密文体积,降低传输带宽
  • C.提高同态加密的运行速度
  • D.自动为系统生成全新密钥对

答案:A。自举对密文执行一次「加密的解密再加密」,把噪声重置到接近初始水平,从而支持任意深度的计算。它不压缩密文、不加速计算、不生成密钥,反而非常昂贵。

Q5. Paillier 方案的密文扩展率大约是多少?

单选题 · easy

  • A.约两倍,明文空间是密文空间的平方根← 正确答案
  • B.约一千倍,密文占据巨大存储空间
  • C.约一百倍,扩展率中等偏大
  • D.约零点五倍,密文比明文还要小

答案:A。Paillier 明文在 $\mathbb{Z}_n$ 中,密文在 $\mathbb{Z}_{n^2}$ 中,所以密文约是明文的 2 倍大小,远小于 BGV/BFV/CKKS 的千倍级扩展率。

Q6. BGV 方案中控制噪声增长的关键技术组合是?

单选题 · hard

  • A.密钥交换、模切换与自举← 正确答案
  • B.哈希扩展、数据填充与校验码
  • C.对称加密、消息认证码与签名
  • D.时间戳、随机数与日志审计

答案:A。密钥交换(Key Switching)控制乘法后密文膨胀,模切换(Modulus Switching)降低噪声压力,自举(Bootstrapping)重置噪声,三者共同撑起 BGV 的全同态能力。

Q7. 在隐私保护机器学习推理中,最常用的 HE 方案是?

单选题 · hard

  • A.CKKS, 支持浮点近似与批量打包← 正确答案
  • B.Paillier, 只支持加法同态运算
  • C.ElGamal, 常用于经典公钥加密
  • D.RSA, 广泛用于安全传输通道

答案:A。神经网络推理需要浮点乘加和海量并行,CKKS 的近似计算与 SIMD 打包恰好匹配;Paillier 只能加法,ElGamal 和 RSA 不具备实用同态能力。

Q8. 下列关于 BGV 和 BFV 的说法正确的有哪些?

多选题 · mid

  • A.两者都支持精确整数全同态运算← 正确答案
  • B.BFV 采用消息缩放,除法更自然← 正确答案
  • C.BGV 方案完全不需要噪声管理
  • D.两者安全性都基于 RLWE 假设← 正确答案

答案:ABD。BGV 和 BFV 都是整数全同态方案,基于 RLWE/格难题。BFV 的缩放机制让整数除法更自然;C 错在 BGV 同样需要密钥交换、模切换和自举来管理噪声。

Q9. 下列哪些场景适合使用 Paillier?

多选题 · mid

  • A.电子投票中的匿名计票统计← 正确答案
  • B.联邦学习中的梯度安全聚合← 正确答案
  • C.任意深度神经网络的密文推理
  • D.密文数据库的求和与均值查询← 正确答案

答案:ABD。投票计数、梯度聚合、求和均值都是纯加法任务,Paillier 高效胜任。C 需要大量密文乘法和近似计算,Paillier 不支持,应选用 CKKS。

Q10. 关于同态加密「密文扩展率」的说法正确的有哪些?

多选题 · hard

  • A.密文扩展率等于密文除以明文大小← 正确答案
  • B.Paillier 的扩展率远低于 BGV← 正确答案
  • C.扩展率不影响传输与存储开销
  • D.CKKS 密文含多个多项式分量← 正确答案

答案:ABD。扩展率是密文与明文体积之比,直接决定带宽与存储成本,C 明显错误。Paillier 约 2 倍而 BGV/CKKS 达千倍级;CKKS 密文通常由两个以上多项式构成,体积庞大。