Google 开源 HEIR 编译器:让 AI 推理直接在密文上运行

8 月 14 日,Google 在其安全博客发文,介绍了 Private Computing Toolkit 中新增的开源编译器 HEIR,并把四个用 HEIR 编译的加密推理应用 demo 连同源代码一起放在了 GitHub 上。这套工具链的目标只有一个:让 AI 模型直接在密文上完成推理,服务端全程看不到明文数据。

google/fully-homomorphic-encryption 仓库卡片

端到端加密与 AI 功能的矛盾

传统的端到端加密把用户数据保护得很好,但代价是服务提供方无法再基于数据做任何计算。垃圾邮件检测、病毒扫描、内容推荐这类功能,都要求服务端能读取数据本身。医疗和金融领域对这个矛盾更敏感:严格的数据合规限制了机构之间的数据流通,而把 AI 模型下发到本地设备运行,又有泄露厂商模型知识产权的风险。

同态加密(Homomorphic Encryption)改变了这个权衡的形态。它允许计算机直接在加密后的密文上执行加法和乘法运算,服务器处理完密文、返回加密结果,用户端解密后得到与明文计算等价的输出。整个过程中服务器接触不到任何明文。举例来说,云服务可以在完全看不到用户特征的前提下给出内容推荐。这次发布的 demo 里恰好就包含这样一个推荐模型。

代价是性能开销。同态加密的计算成本远高于明文运算,但 Google 的判断是:这个权衡正在从"能力与隐私二选一"收敛为一个成本问题,而这个成本本身在快速下降。

HEIR 是什么

HEIR 全称 Homomorphic Encryption Intermediate Representation,是一个基于 MLIR 的开源编译器工具链,仓库在 google/heir,2023 年 4 月创建,目前 789 star、152 fork、79 位贡献者。它的核心能力是把在明文数据上训练好的 AI 模型,编译成能在加密输入上运行的等价版本。

google/heir 仓库卡片

Google 给它定的目标是三句话:Make it easy, Make it fast, Make it scale。分别对应三件事:

  • Make it easy:自动化完成模型到 FHE 兼容版本的转换。应用开发者用 Python 写程序、标注哪些类型是秘密数据,剩下的交给编译器。Google 的愿景是把它做成一键式方案,让不懂密码学的工程师也能在生产应用里接入加密推理。
  • Make it fast:支持多种 FHE 方案和高性能后端。HEIR 目前对接的后端包括 Lattigo(Go)、OpenFHE(C++/Python)、TFHE-rust,以及 Google 自研的面向 TPU 和 GPU 的 JAX 后端 Jaxite。
  • Make it scale:基于 MLIR 的多层中间表示,用方言(dialect)体系表达 CKKS、BGV、CGGI 等不同加密方案的语义,让复杂的模型能跨方案、跨后端伸缩。

一个关键背景:手动把现有程序改写成高效的同态加密版本,过去需要一个密码学家团队。HEIR 做的事情就是把这部分专业工作编译器化。项目在 2023 年公布后,已经和四家同态加密硬件加速器公司建立了合作:Belfort Labs、Niobium、Cornami 和 Optalysys。学术侧与 Georgia Tech、CMU、UCSB、伊利诺伊理工、普渡、爱丁堡大学、清华大学等有合作,目前有四篇同行评审论文基于 HEIR 完成。

四个加密推理应用

demo 仓库(google/fully-homomorphic-encryption,3651 star)里放了四个用 HEIR 编译的私有推理应用,全部基于 CKKS 方案,官方说明延迟数字按单线程 CPU 口径给出,源代码全部开源。运行方式统一是 Bazel:

bash
bazel run -c opt //demos/cc_fraud/lattigo:evaluate_fhe -- --row_idx=0

信用卡欺诈检测。一个 Linear → Sigmoid → Linear → Sigmoid → Linear 结构的 MLP 模型,训练数据来自 Kaggle 的欺诈检测数据集,82 个特征列。与 Niobium 和 hardshell.ai 合作编译。这个 demo 同时提供 Lattigo 和 OpenFHE 双后端版本,还有 timing 变体(测量每个 FHE 算子的执行时间)和 debug 变体(解密中间值并与明文参照对比验证精度)。

网络流量异常检测。基于 Kitsune 系统的 KitNET 集成异常检测器,来自 Niobium 的 fhe-NetworkMonitor。用途是让服务提供商在不接触网络包明文内容的前提下检测流量异常。仓库里有两个配置:5 特征版(2 个子自编码器 + 一个 5→3→5 自编码器输出层,用 Mirai 攻击数据的 32K 包数据集)做快速验证,50 特征版用统一块对角线性变换重构 ensemble 层,消除 FHE 编译中 tensor.concat 的开销。

热词检测。TC-ResNet8 时序卷积网络,在 Google Speech Commands 数据集上训练,把 1 秒音频分类为 12 类(10 个核心关键词加 silence 和 unknown)。场景是语音触发的 AI 助手在保护录音隐私的前提下识别唤醒词。与 Belfort Labs 合作编译。

私有内容推荐。Deep Learning Recommendation Model(DLRM)加一个同态加密逻辑回归模型 HELRM,结构是稠密特征分支 + 稀疏特征嵌入分支 + 交互层 + 顶层 MLP。训练数据是 Criteo 1TB 广告点击数据集。这个 demo 完整展示了"云服务在看不到用户特征的前提下给出推荐"的形态。与 Belfort Labs、LG、纽约大学合作。仓库特别警告:这个 demo 需要 96 GiB 以上内存。

编译器怎么处理神经网络

demo 仓库还披露了 PyTorch 模型导出到 MLIR 的完整流程,目前尚未完全自动化,分四步:

  1. 选定 torch 模型规格和预训练权重文件;
  2. 用 torch-mlir 把模型和冻结权重导出为 MLIR 文件;
  3. 写脚本估算所有激活函数输入的取值范围(如 ReLU、Sigmoid 的输入区间);
  4. 在 MLIR 的 linalg.generic 算子上标注近似多项式的阶数和定义域。

第 4 步是关键。同态加密方案原生只支持加法和乘法,Sigmoid 这类非线性激活函数必须用多项式逼近。标注的语法长这样:

mlir
%5 = linalg.generic {
    degree = 7 : i32,
    domain_lower = -10.000000e+00 : f64,
    domain_upper = 10.000000e+00 : f64,
    ...
} ins(%4 : tensor<1x128xf32>) outs(%1 : tensor<1x128xf32>) {

degree 控制多项式阶数,阶数越高近似越准、计算越慢。开发者在这里做精度和性能的权衡。完成标注的 MLIR 文件交给 heir_lattigo_lib 这类规则宏,就能生成对应后端的可执行库。

开发者视角的边界

这套东西现在处于什么状态,repo 里写得比较坦诚。"把 PyTorch 模型导出到 HEIR 的流程尚未自动化",需要手动做范围标注和多项式配置;DLRM demo 需要近百 GiB 内存;官方也明确说硬件加速器的延迟收益会在"不久的将来"另文演示,意味着当前这些 demo 的单线程 CPU 延迟数字更多是基线而非卖点。

但它标定了一个方向:FHE 的工程门槛正在从"养一个密码学家团队"降到"编译器加标注"。配合四家硬件加速器厂商的芯片路线,加密推理在欺诈检测、流量监控、语音唤醒这类窄域、低延迟敏感的场景里已经可以跑通。对处理医疗、金融数据的团队来说,这是一条不依赖可信硬件(secure enclave)的纯密码学路线:安全保障不取决于对芯片供应商的信任,而取决于数学。

Google 把 HEIR 定位为 FHE 领域的产业标准编译器,希望应用开发者、编译器工程师、硬件设计师和密码学研究者都能在它上面构建。四个 demo 加一个开源编译器,加上 2023 年至今积累的论文和硬件合作,这个方向的可用性正在越过临界点。

来源