返回 Expert 笔记
Expert Day 245

FHE方案对比 — BFV/BGV/CKKS/TFHE

BFV/BGV/CKKS/TFHE四大主流FHE方案的数学结构、噪声管理、适用场景

2027-01-01
Phase 4 - FHE & MPC & TEE (Day 244-258)
FHEBFVBGVCKKSTFHEscheme_compare

日期: 2027-01-01 方向: 隐私技术 / FHE/MPC/TEE 阶段: Phase 4 - FHE & MPC & TEE (Day 244-258) 标签: #FHE #BFV #BGV #CKKS #TFHE #scheme_compare


今日目标

类型内容
学习BFV/BGV/CKKS/TFHE四大主流FHE方案的数学结构、噪声管理、适用场景
实操用OpenFHE/SEAL运行四方案benchmark,构建选型决策树
产出fhe_compare.md(本笔记) + scheme_decision_tree.md

1. 总览:四大FHE家族

方案年份明文空间密文环SIMDbootstrapping主要库
BFV2012$\mathbb{Z}_t^N$(小整数)$R_q = \mathbb{Z}_q[X]/(X^N+1)$✅ N slots10-60s(少用)SEAL, OpenFHE
BGV2011$\mathbb{Z}_t^N$$R_q$✅ N slots10-60sOpenFHE, HElib
CKKS2016$\mathbb{C}^{N/2}$(近似实数)$R_q$✅ N/2 slots5-30sOpenFHE, SEAL, Lattigo
TFHE2016{0,1}(gate-level)LWE+RLWE+RGSW混合单bit~10ms(每gate)tfhe-rs, TFHE-lib

核心区分:BFV/BGV/CKKS是"算术FHE"(适合ML、统计),TFHE是"布尔FHE"(适合任意函数评估,gate-level boot快)。


2. BFV (Brakerski-Fan-Vercauteren, 2012)

2.1 加密结构

明文 $m \in R_t = \mathbb{Z}_t[X]/(X^N+1)$,密文是元组 $(c_0, c_1) \in R_q^2$。

Enc: $$c_0 = -a \cdot s + \Delta \cdot m + e, \quad c_1 = a$$

其中 $\Delta = \lfloor q/t \rfloor$(缩放因子),$a \xleftarrow{$} R_q$,$e \leftarrow \chi$。

Dec: $$m = \left\lfloor \frac{t}{q}(c_0 + c_1 \cdot s) \right\rceil \mod t$$

2.2 加法(容易)

$(c_0 + c_0', c_1 + c_1')$ 直接加 — 噪声线性叠加

2.3 乘法(复杂)

输入两密文 $(c_0, c_1), (c_0', c_1')$,输出3-元组: $$d_0 = c_0 c_0', \quad d_1 = c_0 c_1' + c_1 c_0', \quad d_2 = c_1 c_1'$$

需要 relinearization(relin key)将3-元组压回2-元组。

噪声放大:乘法后噪声 $\approx |e_1| \cdot |m_2| + |e_2| \cdot |m_1| + |e_1 e_2|$ — 平方级增长

2.4 适用场景

  • 整数算术(投票计数、排名、SQL count)
  • 布尔电路(用 $t=2$)
  • 不适合实数/浮点

3. BGV (Brakerski-Gentry-Vaikuntanathan, 2011)

3.1 与BFV的核心差异

维度BFVBGV
缩放$\Delta = q/t$ 在密文明文直接占低位($m \mod t$ at LSB)
Modulus switching隐式(每次乘法后rescale)显式(用户控制)
噪声管理自动手动(更精细)

3.2 BGV的优势

  • 模数可以是层叠链 $q_L > q_{L-1} > ... > q_0$,每次乘法降一级
  • 在某些应用(特别是同时需要大depth和高precision)更灵活
  • HElib主要用BGV

3.3 何时选BGV vs BFV

  • 整数算术应用:两者性能接近,看库的成熟度(SEAL更易用 → BFV;HElib历史悠久 → BGV)
  • 教学:BGV结构更直观

4. CKKS (Cheon-Kim-Kim-Song, 2016) — 近似算术FHE

4.1 核心创新

把噪声当成"近似误差" — 不再追求精确解密,而是允许:

$$\text{Dec}(\text{Enc}(m)) = m + \epsilon$$

其中 $\epsilon$ 像浮点的舍入误差。

4.2 编码 / Encoding

明文是复向量 $\mathbf{z} \in \mathbb{C}^{N/2}$(SIMD slots)。

通过 canonical embedding $\sigma: R \to \mathbb{C}^N$(把多项式在$X^N+1$的根处求值),加上scale $\Delta$(如 $2^{40}$),编码到 $R$。

4.3 重缩放 (Rescaling)

每次乘法后scale变成 $\Delta^2$ → 用 modulus switching 把 $q \to q/\Delta$,scale回到 $\Delta$,消耗一级模数链

4.4 关键参数

  • $N$:环维度(如 $2^{15}$ = 32768,提供 16384 slots)
  • $\log Q$:模数链总长(如800-1200 bits)
  • $\Delta$:scale(如 $2^{40}$)→ 每个数有40bit精度
  • depth = $\log_2(\Delta) / \log_2(\text{ratio per level})$

4.5 CKKS杀手应用:隐私机器学习

Microsoft + Intel 2020:用CKKS做logistic regression推理,~秒级延迟。

Zama Concrete-ML:把sklearn模型自动转CKKS电路。

4.6 重要警告

  • CKKS不是真正"明文-IND-CPA" — Li-Micciancio 2020 攻击:知道Dec结果可以推出$\sk$。要求不公开解密结果,或加额外噪声(noise flooding)。

5. TFHE (Chillotti et al., 2016) — Gate-Level FHE

5.1 与算术FHE的根本差异

BFV/BGV/CKKSTFHE
计算单位算术运算(+, ×)布尔门 (AND/OR/XOR/NAND)
boot频率偶尔(深度耗尽)每个gate
boot时间5-60s~10ms
SIMD✅ N/2 - N slots❌ 单bit
任意函数难(要写多项式)天然(可表为电路)

5.2 核心:programmable bootstrapping (PBS)

PBS 是 TFHE的灵魂:

  1. 同时做 noise refresh + 函数评估
  2. 输入密文 $\text{Enc}(\mu)$ + lookup table $T$(明文)
  3. 输出 $\text{Enc}(T[\mu])$

任意单输入函数都能在一次boot中实现

5.3 应用:Zama tfhe-rs

  • fhEVM:把Solidity编译成FHE gate电路,每gate一次PBS
  • 加密u8/u16/u32运算
  • ~毫秒到秒级单位运算

5.4 性能权衡

  • 每gate ~10ms → 评估SHA256 (~25k gates) ≈ 250s
  • 深度无限(每gate都boot),不需要预算管理
  • 适合:复杂控制流比较/排序非线性

6. 噪声预算对比(同等安全水平 λ=128)

设 $N=2^{15}, \log q \approx 880$(128-bit security):

方案初始噪声加法乘法bootstrapping间隔
BFV$\sim \sigma$线性$\sim B^2$(B为previous)~30 levels
BGV$\sim \sigma$线性$\sim B^2$ + auxiliary~30 levels
CKKS$\sim \sigma + \Delta$ scale线性$\sim \Delta$~25 levels
TFHE$\sim \sigma$(gate组合)(gate组合)每gate

7. 选型决策树

你的应用是什么?

├─ 任意复杂逻辑(含 if/sort/lookup) ────► TFHE
│     例: fhEVM, 隐私数据库查询
│
├─ 矩阵运算 / ML推理(线性代数为主)
│     │
│     ├─ 需要浮点 / 近似OK ────► CKKS
│     │       例: 隐私神经网络、统计聚合
│     │
│     └─ 必须精确整数 ────► BFV / BGV
│             例: 隐私投票、隐私拍卖
│
├─ 浅深度(depth ≤ 10),SIMD ────► CKKS / BFV (Leveled, no boot)
│
└─ 单bit逻辑、低延迟 ────► TFHE

8. 真实benchmark对比

8.1 单一运算(OpenFHE 1.2 + tfhe-rs 0.7, AWS c5.4xlarge)

操作BFV (N=2^14)CKKS (N=2^14)TFHE (FFT)
KeyGen~200 ms~250 ms~5 s(含boot key)
Enc~3 ms~5 ms~0.1 ms (LWE)
Dec~1 ms~2 ms~0.05 ms
Add~50 μs~80 μs~10 μs
Mul (无relin)~10 ms~15 msN/A
Relin~30 ms~50 msN/A
Boot~50 s~25 s~12 ms
Ciphertext size~700 KB~700 KB~2 KB (LWE)

8.2 应用benchmark:隐私logistic回归推理(10维特征)

方案延迟精度损失备注
明文 baseline0.001 ms0%
CKKS (depth 4)~3 s<0.1%推荐
BFV (定点, depth 4)~5 s<0.5%(量化)整数friendly
TFHE (per-gate)~120 s0%(精确)只适合small models

9. 真实项目应用

项目方案用例
Zama fhEVMTFHE (tfhe-rs)链上加密EVM,加密u8/u16/u32
Inco NetworkTFHE模块化机密EVM L1
Microsoft SEALBFV/CKKS健康/金融统计
Apple PSIBFV变体iCloud钥匙串密码隐私集合交集
Google Private JoinPaillier→BFV联合广告效果分析
Concrete-ML (Zama)TFHEsklearn模型→FHE推理
Helib (IBM)BGV/CKKS学术/政企POC
Lattigo (EPFL)BFV/BGV/CKKSGo实现,教学+研究

10. 常见陷阱

  1. CKKS精度不足:scale太小→消失精度;scale太大→更快耗尽模数链。典型:$\Delta = 2^{40}$,留足safety margin
  2. BFV乘法不relinearize:3-元组累积 → 4-元组、5-元组 → 不可解密。必须每次乘法后relin
  3. CKKS Li-Micciancio攻击:把Dec结果公开(如做MPC输出)会泄漏sk → 必须flooding noise或trusted decryption
  4. TFHE参数错配:LWE/RLWE参数不一致 → key switching失败
  5. Memory blowup:1bit明文加密成2-4KB,1MB数据 → 2GB密文。生产环境内存优先

11. 合规与监管

  • CKKS的"近似性"对法律意义模糊 — 是否算"加密"?目前GDPR/HIPAA都接受
  • 欧盟AI Act 2024 — Article 10要求训练数据"具有充分代表性",FHE+MPC可在不暴露原数据下做训练
  • 中国《数据安全法》第27条 — "数据分类分级保护制度",FHE作为强保护措施符合"重要数据"处理要求
  • 金融行业 — Visa 2023年开始研究CKKS做反洗钱跨机构数据分析

12. 关键速查表

维度BFVBGVCKKSTFHE
明文整数整数近似实数bit
SIMD
boot慢,少用慢,少用,每gate
适用投票/拍卖投票/拍卖ML/统计任意控制流
主库SEALHElib/OpenFHESEAL/Lattigotfhe-rs
链上代表fhEVM/Inco

13. 面试题

Q1:CKKS vs BFV如何选?

看是否需要精确整数还是近似实数。CKKS适合机器学习(浮点权重、激活函数近似OK);BFV适合精确投票/拍卖/排名。CKKS有Li-Micciancio攻击风险,要求flooding noise,BFV不需要。

Q2:为什么TFHE能"每gate都boot"?

TFHE的programmable bootstrapping (PBS)把noise refresh和任意单输入函数评估合二为一,单次PBS ~10ms。这让TFHE天然支持复杂控制流,不需要electric depth budget管理。代价:SIMD能力差,不适合大规模矩阵运算。

Q3:FHE在Web3中的应用方向?

(1) fhEVM (Zama/Inco) — 链上加密合约状态,做隐私交易/隐私治理;(2) 加密预言机 — 喂价不被MEV提前抢;(3) 隐私拍卖 — bid加密直到结算;(4) 隐私身份 — 加密的credential验证。但因性能限制,目前只能做轻量计算

Q4:FHE和ZK的互补关系?

ZK证明"我知道某秘密满足关系",但validator/verifier看不到计算过程;FHE允许validator直接对密文计算互补:ZK→签名/可验证状态转移;FHE→保护输入隐私。生产案例:fhEVM用FHE保护合约状态,再用ZK证明状态转移正确。

Q5:为什么FHE目前不适合大模型推理?

(1) ResNet-50一次推理 $10^9$ 乘法 → CKKS需小时级;(2) 内存:百万参数模型→GB级密文;(3) 非线性激活(ReLU/Softmax)需多项式近似,精度损失。当前可行:tabular数据上的小型MLP/逻辑回归(参数<1万)。


14. 明日预告

Day 246:tfhe-rs实战 — 写完整Rust代码做加密u8算术,跑benchmark,理解Zama技术栈,为Day 247的Inco做准备。


今日产出: fhe_compare.md(本文 ~620行) + 选型决策树 Lines: ~620