全同态加密(FHE)支持在加密状态下对数据进行计算,但使用FHE 需要非常专业的密码学知识。本文将介绍一种FHE 编译器,支持将高级语言(C++等)对未加密数据的处理,转换为高级语言加密数据的处理。
该编译器基于Google XLS SDK 实现,采用现成的FHE库(TFHE),实现底层的FHE操作。
该编译器采用模块化设计,可以兼容不同的FHE库,和不同的高级语言,
FHE 介绍
同态加密方案可分为:PHE(partially homomorphic encryption), FHE(Fully homomorphic encryption) 和 SHE(somewhat homomorphic encryption)。
-
PHE: 只支持部署同态操作,例如
Pailler
支持加法同态,RSA
支持乘法同态; -
FHE: 同时任意次数的支持加法和乘法操作;
-
SHE: 只支持有限次数的加法和乘法操作。
FHE主要有基于LWE(Learning with Errors) 技术设计,依赖添加noise
进行加密。若noise
足够小,可以实现解密。同态加密次数越多,增加的noise
越多。加法运算的noise
可以忽略,但乘法运算会大幅增加noise
。 当同态次数增加, 增加的noise
也越多,会导致密文无法解密。需要 bootstrapping
降低noise
, 即利用密钥将密文转换为明文。
FHE发展主要有三个阶段:
- 第一代FHE 基于Gentry 方案,效率较差,一次乘法操作需要30mins;
- 第二代FHE有BGV和BFV 方案,采用分层的同态加密技术,需要选择足够大的参数,满足指定的计算,而无需
bootstrapping
。 并且引入了SIMD
批量优化技术,减少延迟。 - 第三代基于GSW方案,侧重于快速
bootstrapping
, 大幅提供bootstrapping
的效率。但是不支持SIMD
批量优化技术。TFHE 基于GSW实现。
FHE 一个关键挑战是参数选择,必须选择正确的参数集避免bootstrapping
, 确保安全,减少密文大小。并且还需要选择合适的编码方案,例如TFHE 适合二进制操作,BGV和BFV 适合数值运算。
FHE 编译器
FHE 编译器支持将一种高级语言转换为另一种高级语言,例如下所示,将处理明文的C++ 程序转换为处理密文的C++ 程序。
FHE 编译器处理流程
主要基于XLS 和 TFHE 实现,将C++ 程序转为 FHE-C++ 流程如下:
模块化设计
编译器模块化设计主要体现在以下三个方面:
- 输入代码可以为任何转换为XLS 的语言;
- 输出的FHE代码可以为任意支持FHE 库的语言;
- FHE 后端可以为任何暴露API 的库。
client-server交互
编译器限制
FHE编译器由于是data-independent
, 不支持branching
, 不支持 变长的循环和数组,也不支持递归。
安全模型
FHE编译器基于honest-curious
模型,服务端会执行正确的计算,但无法解密获得明文数据。但无法抵抗恶意服务器,因为FHE 无法提供结果的验证。
网友评论