想象你有一份祖传的私房菜谱和一批珍稀食材,你想请一位米其林大厨为你做一桌宴席,但既不想让任何人看到菜谱,也不想让食材离开视线。传统做法只能把菜谱告诉大厨,或者派一个信得过的人盯着后厨。现在有了全同态加密(FHE),就像发明了一种“魔法保险库”:菜谱和食材全部锁入其中,大厨可以隔着玻璃用机械臂在保险库内自由切菜、炒菜、装盘,整个过程他看不到任何真实内容,而你最后用钥匙打开保险库,得到一盘热气腾腾的佳肴。 这套魔法保险库是用数学构造出来的:加密后的数据之间可以进行加法和乘法计算,计算后的结果解密后与直接计算的结果一致。于是,机器学习模型也可以在密文上推理——医院无需暴露病人数据就能让云端AI模型给出诊断,银行无需泄露用户特征就能完成风控评分。本文将从FHE的基础概念讲起,带你理解加密推理的完整流程、CKKS/BGV方案如何选、计算开销与精度损失从何而来,以及性能优化和工程部署等实战要点。

岗位关联

FHE是隐私计算的技术制高点,掌握密文推理的设计与优化,能让你在医疗、金融等高合规场景中构建真正可落地的数据安全服务,成为稀缺的隐私计算工程师。

目录
  1. 可视化演示
  2. 同态加密基础
  3. 加密推理方案
  4. 方案选型策略
  5. 开销与精度控制
  6. 性能优化技术
  7. 工程部署架构
  8. 应用场景展望
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示Apriori算法挖掘的频繁项集和关联规则,节点表示商品项,连线表示关联关系,支持切换视图模式。

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

项集视图 紫色节点表示商品项 粉色节点表示高关联项 sup(X→Y)=P(X∪Y) 点击切换查看关联规则

同态加密基础

魔法保险库中最神奇的一点:大厨隔着玻璃用机械臂在内部翻炒,虽然看不见食材,但出来的菜和明火直炒的味道一模一样。这是因为保险库的机械臂被设计成只能做加法和乘法两种动作,而这两种动作恰好能组合出几乎所有的加工方式。全同态加密(FHE)正是这样一台“魔法机械臂”——它允许我们在加密数据上直接执行数学计算。

在密码学里,同态加密打破了“先解密再计算”的传统流程。给定两个明文数字 a 和 b,你用公钥加密得到 Enc(a) 和 Enc(b),然后对它们做某种密文运算,这个运算结果解密后,恰好等于对 a 和 b 直接做同样运算的结果。这里的运算包括加法和乘法,两者都支持时,理论上就能构造任意计算。

同态加密按能力分为三类:只支持加法或乘法的叫部分同态(PHE);支持有限次加法和乘法的叫半同态(SHE);支持任意深度计算的叫全同态(FHE)。FHE 的核心技术是 Gentry 在 2009 年提出的“自举”(Bootstrapping),它像给保险库定期保养,把累积的噪声刷新回初始水平,让计算可以无限进行下去。

回到比喻:你不需要把菜谱告诉大厨,只要保险库的机械臂会“加料”和“翻倍”,它就能复刻任意烹饪流程。这就是 FHE 让数据“可用不可见”的本质。

Enc(a)⊕Enc(b)=Enc(a⊕b),⊕∈{+,×}\displaystyle \mathrm{Enc}(a) \oplus \mathrm{Enc}(b) = \mathrm{Enc}(a \oplus b), \quad \oplus \in \{+, \times\}
这条公式说明:密文上加法和乘法的结果,解密后与明文上的运算结果一致。它是整个 FHE 大厦的地基。
  1. Enc 加密函数将明文数据变成无法直接读取的密文,可以理解为把食材锁入保险库。
    Enc(m)\mathrm{Enc}(m)
  2. 明文 a、b参与计算的原始数据,比如病人特征或模型权重。
    a,b∈Ra, b \in \mathbb{R}
  3. ⊕ 同态运算符可以是加法或乘法,表示密文上能执行这两种运算。
    ⊕∈{+,×}\oplus \in \{+, \times\}
  4. 等式含义密文计算后解密,等同于明文直接计算后再加密。
    Dec(Enc(a)⊕Enc(b))=a⊕b\mathrm{Dec}(\mathrm{Enc}(a) \oplus \mathrm{Enc}(b)) = a \oplus b

加密推理方案

把整个厨房搬进保险库后,问题来了:做一道菜要切、炒、炖、调味,机械臂却只会加法和乘法,该如何完成?机器学习的推理同样面临这个挑战——神经网络由线性层(矩阵乘法)和非线性激活函数(如 ReLU、sigmoid)组成。FHE 能精确处理线性部分,但激活函数必须用多项式来“模仿”。

在隐私保护推理中,通常有两种策略:模型所有者把模型权重加密后交给服务端,客户端把输入数据也加密后上传;服务端在密文上逐层执行计算,最后把加密结果返回客户端,由客户端用私钥解密。整个过程服务端既看不到用户数据,也看不到模型的具体参数。

为了让非线性函数能在密文上运行,需要用泰勒展开或最小二乘拟合出多项式近似。以 sigmoid 函数为例,我们可以在某个区间内用一个 n 次多项式近似它。n 越高,逼近越精准,但乘法深度也随之增加,噪声和计算成本都会上升。

大厨虽然只会“加”和“乘”,但凭借精心设计的“模拟菜谱”(多项式),做出的菜和原版几乎一样好吃——这就是加密推理的核心思想。

σ(x)≈P(x)=a0+a1x+a2x2+⋯+anxn\displaystyle \sigma(x) \approx P(x) = a_0 + a_1 x + a_2 x^2 + \cdots + a_n x^n
深度学习中的激活函数无法直接做同态计算,必须先用多项式逼近。这是加密推理方案设计的核心权衡。
  1. σ(x) 激活函数常见的有 sigmoid 和 ReLU,用于给模型引入非线性分类能力。
    σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}
  2. P(x) 逼近多项式用幂级数求和来近似激活函数。
    P(x)=∑i=0naixiP(x) = \sum_{i=0}^{n} a_i x^i
  3. 系数 ai通过最小二乘法或泰勒展开求得的拟合系数。
    ai=σ(i)(0)i!a_i = \frac{\sigma^{(i)}(0)}{i!}
  4. 次数 n 的意义n 越高近似越准,但乘法深度越大,密文噪声增长越快。
    n↑⇒精度↑,噪声↑n \uparrow \Rightarrow \text{精度} \uparrow, \text{噪声} \uparrow

方案选型策略

保险库也有不同型号:有的擅长精确称重配比,有的擅长快速估算分量。全同态加密同样有多个具体方案,其中最主流的就是 CKKS 和 BGV。选错方案,就像让精密的烘焙师傅去炒大锅菜,效果自然不理想。

CKKS 方案专为浮点数近似计算设计。它先把实数明文放大到整数域,再进行加密和计算,过程中还会自动缩放,非常适合神经网络推理中大量出现的连续特征。BGV(及其变体 BFV)则直接在整数模空间上运算,能保证精确结果,更适合需要严格一致性的场景,比如数据库查询、统计计数、整数权重模型。

在机器学习推理中,模型参数和用户特征大都是浮点数,因此 CKKS 通常是首选。但如果你的模型已经做了 8-bit 量化,变成整数权重,BGV/BFV 也可以胜任。选型时还要考虑计算深度、安全强度、密文尺寸和现有库的支持程度。简单说:小数多、要逼近,选 CKKS;整数多、要精确,选 BGV。

选择保险库型号,要看你保存的是“克数精确的骨料”(整数)还是“大致适量的调料”(浮点)。CKKS 和 BGV 各司其职,共同撑起 FHE 在推理中的落地。

Encode(m)=Δ⋅m,m^=⌊Δ⋅m⌉\displaystyle \mathrm{Encode}(m) = \Delta \cdot m, \quad \widehat{m} = \lfloor \Delta \cdot m \rceil
这是 CKKS 编码的第一步:把实数 m 放大 Δ 倍并取整,从而转成可以进行整数加密的表示。
  1. m 明文消息可以是模型权重、输入特征或中间激活值。
    m∈Rm \in \mathbb{R}
  2. Δ 缩放因子通常取 2^40 这样的大数,决定定点表示的精度。
    Δ=240\Delta = 2^{40}
  3. ⌊·⌉ 四舍五入取整把放大后的数变为整数,准备进入加密空间。
    ⌊Δ⋅m⌉∈Z\lfloor \Delta \cdot m \rceil \in \mathbb{Z}
  4. 编码结果编码后的明文槽才能被 CKKS 加密并参与同态运算。
    m^=⌊Δ⋅m⌉\widehat{m} = \lfloor \Delta \cdot m \rceil

开销与精度控制

保险库虽然安全,但机械臂每翻炒一次,内部都会产生一些轻微震动。工序越多,震动累积越明显,最终做出来的菜可能与预期有一点偏差。在 FHE 中,这种“震动”就是噪声;噪声一旦超过阈值,解密就会失败。

密文本身比明文大得多,通常会有几十到上千倍的膨胀。一次加密矩阵乘法,比明文慢两到三个数量级。更关键的是,每一项同态乘法都会让噪声规模增长,深度越大,噪声越大。如果计算路径上有连续 d 次乘法,我们需要预留足够的“噪声预算”,否则结果会被噪声淹没。

为控制开销与精度,工程师会削减模型的乘法深度:把激活函数多项式次数降低、对模型进行量化压缩、必要时使用 Bootstrapping 重置噪声。精度损失主要来自两处:CKKS 编码时浮点转定点的舍入误差,以及激活函数多项式近似带来的逼近误差。它们需要与性能开销一同权衡。

就像保险库越用越旧,噪声预算会随乘法深度消耗殆尽。懂得控制深度、定期“保养”,才能让加密推理既准确又持久。

log⁡B≥log⁡B0+d⋅log⁡Δ\displaystyle \log B \geq \log B_0 + d \cdot \log \Delta
这条不等式说明:能容忍的噪声上限 B,必须大于初始噪声 B0 加上乘法深度 d 带来的累计噪声。深度越大,需要的预算越多。
  1. B 噪声上限密文的解密阈值,由安全参数和方案参数决定。
    B≤q/2B \leq q / 2
  2. B0 初始噪声加密瞬间就存在的基础噪声。
    B0=O(N)B_0 = O(\sqrt{N})
  3. d 乘法深度计算图中一条路径上的连续乘法次数。
    d=max⁡path#{×}d = \max_{\text{path}} \#\{\times\}
  4. Δ 缩放因子每次乘法会引入与缩放因子相关的额外噪声。
    Δ⋅e\Delta \cdot e

性能优化技术

既然一台机械臂加工太慢,那就让许多食材同时进入保险库,一条流水线同时处理多份。CKKS 的 SIMD(单指令多数据)能力正是如此:一个密文中可以打包多个明文槽(slot),一次密文运算等价于对多个明文同时运算,相当于给推理过程加了“批量加速”。

除了 SIMD 批处理,常用的性能优化还有三类。一是模型压缩:对权重做量化和剪枝,减少参与密文乘法的参数数量;二是降低乘法深度:把 Deep ReLU 替换成低次多项式,或用泰勒展开近似整个残差块;三是硬件加速:利用 GPU/FPGA 对密文多项式乘法做并行化,以及使用 RNS 分解把大整数乘法拆成多个小模数乘法。

这些优化往往叠加使用。比如在医疗推理场景中,先把病人特征打包进同一个密文,再把神经网络裁剪成低深度结构,最后用 GPU 加速服务端计算,三层优化叠加后,吞吐量可以提升几十倍。核心思想始终是:减少乘法深度、减少密文数量、减少每个计算的耗时。

保险库的“流水线”让一次加工同时处理几十份食材,吞吐量大幅提升。性能优化不是魔法,而是对保险库内部结构和加工路径的精细设计。

x=(x1,x2,…,xk),Enc(x)⊗Enc(w)=Enc(x⊙w)\displaystyle \mathbf{x} = (x_1, x_2, \ldots, x_k), \quad \mathrm{Enc}(\mathbf{x}) \otimes \mathrm{Enc}(\mathbf{w}) = \mathrm{Enc}(\mathbf{x} \odot \mathbf{w})
SIMD 的核心:把 k 个数据打包成一个向量密文,同时完成 k 次乘法,整体开销几乎不变。
  1. x 明文向量将 k 个样本的特征或中间激活值打包。
    x∈Rk\mathbf{x} \in \mathbb{R}^k
  2. w 权重向量模型参数也打包成同样长度。
    w∈Rk\mathbf{w} \in \mathbb{R}^k
  3. ⊗ 同态乘法密文向量之间的逐元素乘法。
    Enc(x)⊗Enc(w)\mathrm{Enc}(\mathbf{x}) \otimes \mathrm{Enc}(\mathbf{w})
  4. ⊙ 逐元素乘明文上等价的运算,得到 k 个乘积结果。
    x⊙w=(x1w1,…,xkwk)\mathbf{x} \odot \mathbf{w} = (x_1 w_1, \ldots, x_k w_k)

工程部署架构

单有保险库还不够,它需要放在一个装有监控、只有授权人员能进出的机房中,才能确保钥匙和保险库本身的安全。在 FHE 推理的工程实践中,这个“机房”就是可信执行环境(TEE),它与 FHE 形成互补:FHE 保护计算中的数据,TEE 保护计算环境和模型密钥。

一个典型的加密推理服务架构分为客户端和服务端。客户端持有私钥,用公钥加密输入数据后上传;服务端只保存密文模型,在密文上完成神经网络前向传播,把加密结果返回;客户端最后用私钥解密,得到明文预测。服务端从始至终接触不到任何明文,模型供应商也不需要暴露模型权重。

工程落地时要特别注意三点:一是密钥管理,私钥绝不能离开客户端,否则 FHE 形同虚设;二是参数选择,poly_modulus_degree、缩放因子和模数链要匹配模型深度,避免资源浪费或噪声超标;三是结果校验,客户端解密后需要做合理性检查,防止恶意服务端返回错误结果。

把保险库放进监控严密的机房,钥匙仍然留在你手里。FHE 与 TEE 联合,才能构建真正双向隐私保护的推理服务。

Dec(Eval(f,Enc(x),Enc(W)))=f(x,W)\displaystyle \mathrm{Dec}(\mathrm{Eval}(f, \mathrm{Enc}(x), \mathrm{Enc}(W))) = f(x, W)
这段协议描述了端到端的加密推理:客户端加密输入和权重,服务端在密文上计算,客户端解密后得到与明文推理一致的结果。
  1. Enc(x) 加密输入用户对推理样本进行加密。
    Enc(x)\mathrm{Enc}(x)
  2. Enc(W) 加密模型模型所有者对权重加密后部署到服务端。
    Enc(W)\mathrm{Enc}(W)
  3. Eval 同态评估服务端在密文上执行推理函数 f。
    Eval(f,Enc(x),Enc(W))\mathrm{Eval}(f, \mathrm{Enc}(x), \mathrm{Enc}(W))
  4. Dec 解密结果客户端使用私钥解密,得到明文推理结果。
    Dec(⋯ )=f(x,W)\mathrm{Dec}(\cdots) = f(x, W)

应用场景展望

保险库发明之后,医院、银行、政府纷纷来订购——因为大家都有不能公开的“传家宝”。医疗数据涉及患者隐私,金融数据涉及资金安全,政务数据涉及社会治理,这些场景正是 FHE 加密推理的用武之地。

在医疗领域,三甲医院可以把病人加密后的生命体征和影像特征发送给云端 AI 服务商,服务商在密文上完成疾病风险推理,返回加密结果,医院解密后直接使用。整个过程病人数据不出医院,模型参数不泄露给医院,实现了“双向隐私保护”。在金融领域,多家银行可以在不共享原始客户数据的前提下,用加密梯度做联合风控建模,把各自的反欺诈特征融合起来。

未来,FHE 还会与联邦学习深度绑定:各参与方本地计算梯度后加密上传,服务端在密文上聚合平均,再解密更新全局模型。这样一来,即使服务端是“诚实但好奇”的,也无法从梯度推导出任何客户的隐私信息。隐私计算的下一个十年,正是由 FHE 推动的。

各家把自己的食材锁进保险库,联合做出一桌宴席,却不必分享家传秘方。FHE 让数据在密文上流动,为医疗、金融和政务场景带来了前所未有的安全协作可能。

Wt+1=Wt−η⋅Dec(1N∑i=1NEnc(∇i))\displaystyle W_{t+1} = W_t - \eta \cdot \mathrm{Dec}\left(\frac{1}{N}\sum_{i=1}^N \mathrm{Enc}(\nabla_i)\right)
联邦学习 + FHE:全局模型更新时,梯度全程以密文聚合并最后解密,服务端看不到任何一方的原始梯度。
  1. Wt 全局模型第 t 轮联邦学习中的服务端模型权重。
    WtW_t
  2. ∇i 本地梯度第 i 个参与方在本地数据上训练得到的梯度。
    ∇i=∂Li∂W\nabla_i = \frac{\partial L_i}{\partial W}
  3. Enc(∇i) 加密梯度参与方上传前先加密,保护梯度信息。
    Enc(∇i)\mathrm{Enc}(\nabla_i)
  4. 平均与解密服务端在密文上求和平均后解密,再按学习率更新。
    Wt+1=Wt−η⋅∇‾W_{t+1} = W_t - \eta \cdot \overline{\nabla}

AI 应用场景

医疗隐私诊断预测

阶段:模型推理部署 / 隐私计算

解决的问题:传统上医院不敢把病人数据直接交给云端 AI 服务商,因为一旦泄露就是重大医疗事故;服务商也不想公开模型权重。FHE 让医院加密数据后上传,服务端在密文上推理,返回加密结果,医院解密获得诊断。服务商看不到患者数据,医院拿不到模型参数。

具体案例:某三甲医院与影像 AI 公司合作,利用 CKKS 加密病人的生命体征和影像特征,在云端完成心衰风险评估推理。整个过程中患者数据不出院,模型精度损失控制在 1% 以内,单次推理耗时约 2 秒,满足非实时诊断场景需求。

银行跨行联合风控

阶段:联邦建模 / 跨机构推理

解决的问题:单一银行数据维度不足,跨行共享原始客户数据又违反《个人信息保护法》。FHE 让多家银行加密本地模型梯度,服务端在密文上完成梯度聚合,防止攻击者从梯度反推出客户原始特征。

具体案例:多家股份制银行组建隐私计算联盟,使用 BGV 方案加密聚合梯度,联合训练反欺诈模型。模型上线后覆盖客户量提升 3 倍,误报率下降 15%,且全程无需交换任何明文客户数据。

政务数据安全协同

阶段:多方数据融合 / 加密查询推理

解决的问题:政府和公共服务机构之间数据共享受阻,主要原因是数据主权和合规风险。FHE 可以在密文上直接完成跨部门数据匹配和统计推理,例如社保、税务、公安数据联合分析而不泄露个体记录。

具体案例:某市大数据局搭建隐私计算平台,采用 FHE 实现不同部门密文数据的联合统计,用于人口流动分析和社会救助对象识别,数据提供方全程只交出密文和最终统计结果。

Python 演示

python39 行
import tenseal as ts  def create_context():    # 创建 CKKS 上下文,poly_modulus_degree 和 coeff_mod_bit_sizes 控制安全级别与精度    context = ts.context(        ts.SCHEME_TYPE.CKKS,        poly_modulus_degree=8192,        coeff_mod_bit_sizes=[60, 40, 40, 60]    )    context.global_scale = 2 ** 40    context.generate_galois_keys()    return context  def encrypted_linear_predict(ctx, W, b, x):    # 加密输入向量    enc_x = ts.ckks_vector(ctx, x)    # 在密文上计算线性模型 y = W * x + b    enc_y = enc_x.dot(W) + b    return enc_y  def main():    ctx = create_context()    W = [1.0, 2.0, 3.0]    b = 0.5    x = [1.0, 2.0, 3.0]     enc_y = encrypted_linear_predict(ctx, W, b, x)    pred = enc_y.decrypt()[0]     true = sum(wi * xi for wi, xi in zip(W, x)) + b    print("加密推理结果:", pred)    print("明文验证结果:", true)  if __name__ == "__main__":    main()
目的:使用 TenSEAL 库实现一个最简单的加密机器学习推理——线性回归模型在 CKKS 密文上完成预测,并验证解密结果与明文计算一致。
  1. context = ts.context(ts.SCHEME_TYPE.CKKS, ...)创建 CKKS 上下文,相当于选好保险库型号和钥匙规格。
  2. context.global_scale = 2 ** 40设置全局缩放因子,控制浮点转定点的精度。
  3. context.generate_galois_keys()生成 Galois 密钥,用于向量旋转和批量操作。
  4. enc_x = ts.ckks_vector(ctx, x)把明文向量 x 加密成密文向量,相当于把食材锁入保险库。
  5. enc_y = enc_x.dot(W) + b在密文上完成点积和加法,同态计算出加密预测值。
  6. pred = enc_y.decrypt()[0]用私钥解密,取出第一个结果,得到明文预测。

常见误区

误区FHE 既然叫“全同态加密”,就应该能对任意函数直接计算,ReLU、sigmoid 都可以无损使用。

正解FHE 底层只支持加法和乘法组成的多项式运算。ReLU、sigmoid 等非线性函数必须先做多项式近似,近似本身会带来误差,而且多项式次数越高,噪声和计算成本越大。就像保险库里的机械臂只会“加料”和“翻倍”,它做不了需要看火候的复杂动作。

为何常见:因为“全同态”听起来像是支持所有操作,初学者容易忽略底层运算只有加乘这一条铁律。

误区CKKS 加密推理应该和明文推理一模一样,小数点后任何一位都不能差。

正解CKKS 本质是近似同态加密方案。明文先乘以缩放因子再取整,计算过程中噪声不断累积,最后结果只能做到误差在可接受范围内。这和“尝起来味道几乎一样”是一个道理,而不是“每一粒盐都精确相同”。

为何常见:把加密当成无损封装,忽略了浮点转定点的舍入和噪声增长对数值精度的影响。

误区现在有 GPU 加速、SIMD 批处理,FHE 推理延迟应该能降到和明文推理一个量级。

正解即使经过各种优化,单次密文推理仍比明文慢大约 100 到 1000 倍。密文膨胀、多项式模乘、噪声预算管理都带来巨大开销,优化只能缩小差距,不能抹平数量级差异。

为何常见:只看优化后的加速比,忽略了每个密文乘法背后都隐藏着大量大整数运算。

误区数据都全同态加密了,服务端和模型都安全了,其他安全措施可以全部撤掉。

正解FHE 保护的是计算过程中的数据机密性,但模型仍可能被恶意查询或窃取,密钥管理、访问控制、可信执行环境(TEE)依然需要。FHE 和 TEE 是互补关系,而非替代关系。

为何常见:把 FHE 当成“银弹”,忽略了工程安全是一个分层体系,任何一个环节的裸奔都会导致整体防线崩溃。

面试题

Q1. 关于FHE的同态性质,正确的说法是?

单选题 · easy

  • A.密文运算结果与明文计算不一致
  • B.密文加法等同明文加法← 正确答案
  • C.只有乘法支持同态计算
  • D.每次计算都需要先解密

答案:B。FHE 的核心性质是密文上的运算等价于明文上的运算,B 正确。A 说反了,C 忽略了加法同态,D 是传统加密而非同态加密。就像保险库机械臂在密文上翻炒,结果等价于明文烹饪。

Q2. CKKS方案主要适合哪类数据?

单选题 · easy

  • A.大整数精确统计
  • B.二值逻辑判断
  • C.浮点数近似计算← 正确答案
  • D.字符串模式匹配

答案:C。CKKS 专为浮点近似计算设计,支持自动缩放和实数编码,适合神经网络推理。BGV 才适合大整数精确计算,二值和字符串匹配也不是 CKKS 的目标场景。

Q3. 关于FHE相比TEE的优势,正确的有?

多选题 · easy

  • A.数据在计算全程保持密文← 正确答案
  • B.不依赖可信硬件环境← 正确答案
  • C.计算性能与明文相同
  • D.能够抵抗量子计算攻击

答案:AB。FHE 在计算过程中数据始终是密文,且不依赖特定可信硬件,因此 A、B 正确。FHE 性能远低于明文,C 错误;D 的量子抗性取决于底层困难问题,不是所有 FHE 方案都天然抗量子。

Q4. 在CKKS方案中,缩放因子Δ的主要作用是?

单选题 · mid

  • A.提高加密速度
  • B.压缩密文大小
  • C.放大浮点数保留精度← 正确答案
  • D.增加密钥长度

答案:C。CKKS 把浮点数 m 放大 Δ 倍后取整,再进入加密计算,这样避免浮点直接加密带来的精度丢失。缩放因子本质上负责格式化,与加密速度和密文大小无关。

Q5. 多项式近似ReLU,次数越高会导致?

单选题 · mid

  • A.计算越快且噪声越小
  • B.精度越高但噪声越大← 正确答案
  • C.完全消除近似误差
  • D.无法进行同态计算

答案:B。多项式次数越高,对 ReLU 的逼近越精确,但乘法深度也越大,噪声增长更多。类似机械臂的动作越复杂,内部震动越严重。B 正确,其他选项过于绝对。

Q6. 关于CKKS与BGV方案选型,正确的说法有?

多选题 · mid

  • A.CKKS适合浮点ML推理← 正确答案
  • B.BGV适合整数精确计算← 正确答案
  • C.BGV也支持浮点自动缩放
  • D.两者选择与数据类型无关

答案:AB。CKKS 面向浮点近似,BGV 面向整数精确,A、B 正确。BGV 不支持浮点自动缩放,这是 CKKS 的特性;选型当然和数据类型强相关,D 错误。

Q7. 下列哪些属于FHE性能优化常用手段?

多选题 · mid

  • A.SIMD批处理多个样本← 正确答案
  • B.降低模型乘法深度← 正确答案
  • C.使用GPU并行加速← 正确答案
  • D.增加缩放因子无限制

答案:ABC。SIMD 批处理、降低乘法深度、GPU 并行都是常见优化手段。增加缩放因子可以提升精度,但会带来更大的模数和噪声预算压力,不能无限增加,因此 D 错误。

Q8. 在加密推理流程中,客户端持有私钥,服务端返回加密结果后,客户端需要做什么?

单选题 · hard

  • A.本地解密得到推理结果← 正确答案
  • B.将私钥发给服务端
  • C.放弃本次推理结果
  • D.直接使用密文结果

答案:A。私钥必须留在客户端,服务端返回密文后由客户端解密得到明文预测,A 正确。B 会让 FHE 失去意义,C 和 D 都没有完成推理目的。

Q9. 噪声预算与乘法深度的关系是什么?

单选题 · hard

  • A.乘法深度越深,噪声越小
  • B.噪声随乘法深度线性递减
  • C.噪声随乘法深度近似指数增长← 正确答案
  • D.噪声与乘法深度无关

答案:C。每次同态乘法都会使噪声显著放大,深度越深噪声越大,通常呈近似指数增长趋势。控制乘法深度是 FHE 推理设计的关键。

Q10. 在联邦学习+FHE聚合梯度的场景中,哪一步符合FHE作用?

单选题 · extreme

  • A.本地明文训练后直接上传
  • B.加密梯度后密文聚合← 正确答案
  • C.服务端解密后平均
  • D.服务端明文聚合

答案:B。FHE 的作用是让参与方把梯度加密上传,服务端在密文上直接平均,全程看不见明文梯度。B 正确,A 和 D 没有加密,C 在服务端解密会泄露梯度。