Craig Gentry于2009年证明了这一点的可行性,此前密码学家们已为此探索了约三十年。其核心理念是:你将数据加密后交给他人,对方在加密状态下对其进行运算,再将结果交还给你,当你解密该结果时,结果是正确的。进行运算的人从未看过你的数据,不是经过脱敏的版本,也不是哈希值,而是实际的底层数值,从未被暴露,哪怕是一微秒。这就是全同态加密——一种让第三方无需解密即可对你的数据执行运算的加密形式。
那么,什么是FHE(全同态加密)?这并非什么技巧,而是某些加密方案的数学特性。你把一个上了锁的箱子交给某人,他们重新排列里面的内容,你打开锁后,排列是正确的,而他们从未拥有钥匙。
在深入了解FHE的运作原理之前,有必要具体说明它所解决的问题,因为大多数"对敏感数据进行运算"的方法都涉及一种人们习以为常、不再质疑的取舍。
标准做法是:对静态数据和传输中的数据进行加密,在处理前解密。你的云服务提供商、数据分析供应商、机器学习服务——所有这些方都需要明文才能完成工作。你不得不将信任延伸给他们。这种方式在大多数时候奏效,但一旦出现数据泄露、司法传票、内部威胁或访问策略配置错误,就会失效。
像Intel SGX这样的可信执行环境(TEE)会创建一个受保护的内存区域,就连操作系统也无法读取。敏感运算在飞地(enclave)内部进行。这确实有其实用价值,但你需要信任硬件供应商,并且寄希望于飞地实现没有可被利用的漏洞。而SGX已被发现存在多处漏洞。
差分隐私通过向查询结果添加经过校准的统计噪声,来限制攻击者从聚合输出中推断个人信息的程度。它保护的是聚合结果,而非对单条记录的运算。
FHE是唯一一种数据在服务器端始终不被解密的方案,其安全证明无需信任任何硬件或第三方,保障是数学层面的。
FHE方案直接在密文上定义算术运算。对加密值进行同态加法和同态乘法运算,解密后所得结果与直接对底层明文执行相同运算的结果完全一致。
两种运算听起来很有限,但实则不然。二进制域上的加法和乘法可以构成AND门和XOR门,进而实现任意数字电路。计算机能够执行的任何函数都可以用这两种运算来表达。这就是从"对加密数字进行算术运算"到"对加密数据进行任意运算"的桥梁。
结构性问题在于噪声。每次FHE运算都会在密文中引入微小误差,误差不断累积,当运算次数足够多时,噪声会淹没信号,导致密文无法解密。Gentry的洞见在于自举(bootstrapping):对含噪密文同态地执行解密电路,从而生成一个具有相同明文值的全新低噪声密文。换言之,就是在加密内部执行解密,噪声得以重置,而数据始终未被暴露。
在噪声变得致命之前只能处理有限次运算的方案被称为分层同态或有限同态。自举正是FHE中"全"字的由来。
对大多数应用而言,FHE目前仍然太慢。当前运行的应用具有共同特征:有限的电路深度、高度敏感的数据,以及某一方愿意承担计算成本以换取数学层面的隐私保障。
私密机器学习推理是最契合的场景。客户端拥有敏感输入,服务器拥有专有模型。FHE让服务器在加密输入上评估模型并返回加密结果,双方都无需暴露各自保护的内容。Zama已针对特定模型架构提供此功能,电路深度可预测且可控。
私密基因组分析自2014年iDASH开始举办加密基因组竞赛以来,一直是标准测试工作负载。疾病风险评分、全基因组关联研究和序列比对均已有FHE实现方案。基因组数据是少数几种隐私风险既是永久性的、又会延伸至从未同意共享任何信息的人的数据类型之一。
机密金融查询涵盖范围查询、加密数据库查找以及对加密交易历史进行欺诈评分。这些工作负载运行频率较低,且数据足够敏感,因此计算开销是可以接受的。
区块链机密性是一个活跃领域。智能合约默认在链上公开执行。基于TFHE的系统允许在加密状态上运行合约逻辑,从而实现私密拍卖、机密投票和密封竞价等机制,其中正确性可公开验证,但输入内容不会被暴露。Zama的fhEVM项目正是专门针对这一目标。
FHE的安全性归结为带错误学习问题(LWE)及其环变体(RLWE)的难解性。这些问题的核心是:给定环或格上的大量近似线性方程,能否还原出秘密值?目前无论是经典计算机还是量子计算机,均未发现解决这两个问题的多项式时间算法。
这使FHE归属于后量子密码学范畴。NIST的后量子标准化工作建立在LWE族问题之上,这为其底层假设提供了额外的审查与信心。尽管如此,LWE被深入研究攻击的历史不足20年,而RSA和椭圆曲线背后已有40余年的密码分析失败记录。目前的信心水平较高,但并非完全相同。
参数决定安全性。必须选取合适的多项式次数、模数大小和噪声分布,以使LWE实例在期望的安全级别下难以被攻破。HomomorphicEncryption.org联盟发布了推荐参数集。强烈建议使用经过这些推荐验证的库默认值,而非自定义配置。
竞争格局
FHE是多项隐私保护计算技术之一,这些技术越来越多地被结合使用,而非相互替代。
安全多方计算(MPC)将运算分散在多个参与方之间,任何一方都无法看到完整输入。对于特定函数,它通常比FHE更快,且在参与方事先确定的情况下是自然之选。而FHE可与单个不可信服务器配合使用。
零知识证明(ZKP)允许一方在不透露证据的情况下证明某一陈述为真。ZKP负责证明,FHE负责计算,两者相辅相成。实际系统往往同时使用两者:FHE用于私密计算,ZKP用于验证计算是否正确执行。
结合FHE与MPC的混合协议是一个活跃的研究领域。单一技术无法满足所有需求,将两者结合可以获得比任何一种技术单独使用时更好的性能和更强的保障。


