同态加密基础概念
大家好,我是老张。干了这么多年密码学工程,我越来越觉得同态加密是个神奇的东西。你想想看,数据加密后还能直接做计算,算完解密结果和明文上算的一样——这不就是“黑箱里算账”吗?今天我们先把这个基础打牢。
说白了,同态加密就是让你在密文上做运算,解密后得到的结果,等于你能在明文上做同样的运算得到的结果。用数学语言表达就是:
Dec( f( Enc(m1), Enc(m2) ) ) = f(m1, m2)
这里的f可以是加法、乘法,甚至任意函数。
核心一句话:密文计算 = 明文结果,中间不需要解密。
加法同态与乘法同态
同态加密不是一开始就能做到万能的。早期方案只支持一种运算。
- 加法同态:支持在密文上做加法。比如
Enc(a) + Enc(b) = Enc(a+b)。经典方案是 Paillier 密码系统。 - 乘法同态:支持在密文上做乘法。比如
Enc(a) × Enc(b) = Enc(a×b)。最熟悉的例子是 RSA,但它的乘法同态其实是个安全隐患。
我在项目中遇到过这么一个场景:客户需要统计多个医院的病例数,但数据不能出医院。我用了 Paillier 加法同态,把每个医院的加密病例数据收集起来直接求和,解密后就是总数。整个过程没看到一条明文,客户很满意。
但你如果有心,会发现一个问题——如果只有加法,没法算平均值(需要除法);只有乘法,没法做线性回归。所以后来才有了全同态。
全同态与部分同态
按照支持的运算范围,同态加密可以分为三类,我列个表你一目了然:
| 类型 | 支持运算 | 代表方案 | 实用性 |
|---|---|---|---|
| 部分同态(PHE) | 仅加法 或 仅乘法 | Paillier, RSA, ElGamal | 效率高,但场景受限 |
| 近似同态(SHE) | 加法和乘法,但有次数限制 | BGV, BFV 初期版本 | 可做简单电路,深度不能太大 |
| 全同态(FHE) | 任意次加法和乘法 | Gentry, CKKS, TFHE | 功能最强,但开销大 |
全同态和部分同态最大的区别在于:能不能同时支持加法和乘法,并且不限次数。
我刚开始学的时候也搞混过。全同态不是“全部的同态”,而是“任意计算”的同态。部分同态只能做一种运算,比如 Paillier 只能加法,RSA 只能乘法。有一种叫做“近似同态”的,可以同时做加法和乘法,但深度有限——就像盖房子只能用三层脚手架,再高就塌了。全同态则可以用同态重构(Bootstrapping)无限续层,理论上什么电路都能算。
避坑提醒:很多刚入门的同学以为全同态就是“又快又全能”,千万别信。我曾经给一个日志聚合项目推荐了 CKKS,结果计算延迟超过 10 秒,被业务方吐槽了一周。全同态目前还是慢,要按场景选型。
一张图看懂分类体系
下面这张图画出了同态加密的家族树,你一眼就能看出它们的关系和区别。
为什么需要区分这些?
直接说结论:选型决定了你的日志聚合查询能不能跑得动。
如果只是简单统计(比如求和、计数),加法同态的 Paillier 最合适。我曾经帮一个金融公司做每日交易笔数聚合,用 Paillier 跑,单节点处理百万级密文只需 2 毫秒。
但如果你要算方差、协方差,加法乘法都得用。这时候就要考虑近似同态或者全同态。我最深刻的教训是用全同态做线性回归,数据量才 1 万条,算了一个小时……后来换了近似同态方案,精度损失在 0.5% 以内,时间缩到了 3 分钟。
警告:不要以为全同态能解决一切。现阶段 FHE 的密文膨胀、计算开销、密钥管理都是坑。我见过一个团队把所有数据都用 FHE 加密,结果查询延迟从 10ms 变成 10 分钟,产品直接废了。一定要根据业务逻辑选部分同态还是全同态。
从入门到精通的第一步
今天这一章,我们只把概念讲清楚。你只要记住:
- 加法同态和乘法同态是两种基本能力
- 部分同态只能做一种,全同态两种都能做而且不限次数
- 选型时先看需求,能不用全同态就别用
下一阶段我们会深入 Paillier 的数学原理和代码实现,把加法同态真正玩起来。好,今天就到这,有问题随时在课程群里@我。