ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

数据可用不可见:同态加密如何让AI在密文上安全推理

数据可用不可见:同态加密如何让AI在密文上安全推理 最近一次内部技术交流里有人提了个很实际的问题“我们想用外部的大模型处理病历但数据不能直接给别人怎么办”讨论到后半场有人提到 Google 在 homomorphic encryption同态加密上的工程化推进。我当时的判断是同态加密过去不是不能做而是“能做但没法用”真正把它推向实用边缘的不是某个密码学突破而是大厂把密码学算法做成产品级工具链的意愿和能力。这句话值得展开。Google 在这个方向上的动作价值不在于发明了新加密算法而在于让“数据可被计算但不可被读取”从论文变成可运行的代码。这也直接回应用了很多团队真正关心的问题隐私 AI 不是“要不要用”而是“哪一层值得用、该怎么用”。1. 为什么数据协作会卡住而同态加密能成为破局点1.1 数据协作的困境不在算力而在信任边界过去几年几乎所有涉及敏感数据的 AI 项目都会卡在同一个地方模型需要数据数据不能出域。传统做法绕不开几种妥协。第一种是脱敏后出域。这条路越来越不可靠因为脱敏不等于匿名化很多特征组合仍然可以通过交叉比对重识别出个体尤其是在医疗、金融这类高维表格数据里。第二种是把模型部署到数据方。技术上可行但工程负担很大。先不说 GPU 和运维成本光是模型版本更新、日志审计、安全补丁就足够让一个算法团队失去节奏。更何况很多第三方模型是闭源或持续在线更新的根本没法拿过来做本地化部署。第三种是联邦学习之类的分布式建模框架。它解决的是“多方一起训练一个模型”的问题但前提是参与方愿意进入同一个训练协议。如果只是想调用一个现成模型做推理不参与训练联邦学习并不能很好覆盖这个场景。这里正是同态加密的破局点它允许数据方只把加密后的数据交给服务方服务方在完全看不到明文的情况下完成推理再把加密结果返回给数据方。数据方是唯一持有密钥的人也只有它能解密出最终结果。1.2 一个可以随身携带的心智模型会计算的保险箱理解同态加密不需要先钻进多项式环里。你可以把它想象成一个特殊保险箱数据锁进去之后别人即使拿到箱子也打不开。但和普通保险箱不同的是它允许别人隔着箱体做运算比如给箱内的数字加上 5或者把两个箱子的值乘起来。计算完开箱者拿到的已经是结果。这个抽象不完美但足够建立第一层直觉同态加密不是为了把数据“锁死”而是为了让数据在保持密文状态的同时仍然能被计算。这正好解决了隐私 AI 最核心的矛盾——既要保证数据不泄露又要完成 AI 推理。1.3 同态加密和联邦学习、可信执行环境不是替代关系很多刚接触的人会把同态加密、联邦学习、可信执行环境混为一谈。其实它们面对的问题不一样信任假设也不一样。方案核心信任假设主要适用场景主要限制联邦学习参与方诚实且协议安全梯度更新不泄露明文多方联合训练模型只覆盖训练不覆盖“用别人模型做私密推理”可信执行环境信任硬件厂商和芯片实现在远程服务器上解密密文并计算软件隔离依赖特定 CPU/云环境硬件供应链是关键风险同态加密信任数学算法和实现不信任服务器数据方加密输入服务方密文计算计算开销高模型需要做同态友好改造对 AI 推理来说同态加密提供的是一个更纯粹的信任路径服务方连中间结果都看不到信任从“相信别人不会偷看”变成了“即使偷看也看不到”。这种数学式信任在合规审计和跨组织合作中更有吸引力。2. 同态加密想真正落地难点先藏在工程侧2.1 开销不是“慢一点”而是数量级放大如果有人告诉你同态加密让推理“慢了几十倍”这个描述已经不是夸张而是过于乐观了。更常见的体感是一次适合做同态计算的神经网络推理计算开销会放大数百倍甚至更高具体取决于模型结构、参数级别和算子类型。这句描述会吓退很多人但它也是理解这门技术的起点。同态加密为了换取密文可计算性付出的代价非常昂贵密文尺寸比明文大得多运算需要工作在多项式环上中间产生的大量中间项也要不断做密钥交换和重线性化。每一个环节都会把简单计算撑大成一场资源消耗战。因此工程上的关键不是“能不能更快”而是“在哪些场景下这个数量级放大可以被接受”。2.2 噪声是那根最容易被忽略的隐形绳索同态加密里的每一项密文都带着设计好的噪声。密钥持有者能解密出明文是因为噪声还不够盖过真实数值。而你每做一次乘法计算噪声都会显著增长。这就是为什么同态加密不能像普通代码那样随意设计计算流程。在典型参数配置下一个密文能支持的乘法深度是有限的超过阈值解密出来的东西就是垃圾数据。加密方案为此设计了“层级”概念每消耗一层深度就减少一层。想做更深计算就只能引入引理或重加密机制而重启噪声的代价非常高。实际项目里你往往不是在调模型精度而是在控制噪声预算一层神经网络要用多少层深度非线性激活函数会吃掉多少预算打印出来像在做预算规划而不是写算法。2.3 AI 模型不是天然就能跑在密文上深度神经网络里最常见的非线性激活函数比如 ReLU在同态加密世界里没有直接对应物。ReLU 本质是分段函数“x 大于 0 取 x否则取 0”这个判断在密文里无法直接执行。解决方案通常是把 ReLU 替换成可以用加法和乘法近似表达的“多项式近似形式”或者在计算图中引入精心设计的查表协议。问题是这种近似会引入误差而且误差会逐层累积。一个 50 层的网络如果每层激活函数误差只大一点点最后输出的可信度都会受到明显影响。这也是为什么“把现成大模型塞进同态加密”往往行不通。真正可行的方法是围绕同态约束重新设计模型更浅、更小、更线性化并且用近似激活函数重新训练或微调。2.4 精度问题会让“结果看起来对”变成一种错觉AI 推理常使用 CKKS 这类支持浮点近似的同态加密方案。注意它是“近似”而非精确计算因为在编码过程中数据会被放大成整数再经历多层乘法和噪声累积。于是你很快会遇到一个反直觉现象明明网络参数量很大求出来却和明文结果差了不少。这往往不是模型训练不够好而是同态参数预留的“精度余量”不够。工程上需要给明文结果和同态结果分别建立基线对比误差在哪个算子爆发。这本质上是一种数值稳定性工程和处理浮点异常的思维方式一脉相承。2.5 编译器才是决定开发者体验的胜负手很多年以前同态加密的主要使用方式是一行一行手写底层多项式运算开发门槛高到不像工程。这也是它迟迟走不出学术圈的重要原因。转折点在于编译器层开始出现。把模型描述自动翻译成同态友好的算子序列再做并行化、噪声调度和密钥切换优化。Google 相关的开源基础设施里HEIR 这类编译器项目就属于这个方向它试图把高级语言级描述翻译成中间表示再针对不同后端做优化。有了真正的编译器同态加密才有可能从“密码学专家专用工具”变成“普通后端工程师也能评估的组件”。这一点比单纯提高某一次乘法速度更重要。3. 当同态加密接入 AI 推理执行链路会变成什么样3.1 明文推理和私密推理的路径差异传统 AI 推理链路大致是客户端把明文特征传给服务端服务端在模型上计算再把明文结果返回。这个流程简洁、高效、易调试但问题是服务端能看见所有输入。同态加密下的私密推理链路形态完全不同客户端在本地生成密钥对。客户端把特征向量用公钥加密后发送给服务端。服务端在密文上执行模型的线性层、激活近似层、输出层。服务端返回加密结果全程无法看到任何中间值。客户端用私钥解密得到明文结果。这个流程里的服务端更像是“算力外包商”它提供的不是数据接触权而是计算执行权。3.2 一段帮助你建立直觉的伪代码下面这段代码不能直接运行它只是为了帮助你建立“私密推理流向”的整体印象。# 伪代码仅用于说明流程不是任何同态加密库的真实 API # 数据方负责加密输入和最终解密 key_pair generate_keypair() plaintext_feature [1.0, 3.2, 2.1, 0.7] cipher_feature encrypt(plaintext_feature, key_pair.public_key) # 服务方只能访问公钥无法看到明文特征 encrypted_result run_model_on_ciphertext( cipher_feature, model_weights, key_pair.public_key ) # 数据方用私钥解密服务端返回的密文 plain_result decrypt(encrypted_result, key_pair.secret_key) print(隐私推理结果:, plain_result)真实项目的难点会在run_model_on_ciphertext这一行爆炸式展开模型必须完成同态友好改造、每一层都要分配噪声预算、中间结果要设计好解包和密钥切换。写起来像是一门“受约束的模型优化课”。3.3 服务端调试会变成最难受的环节在普通推理服务里输入不对、模型推理异常看一眼中间张量就能定位。但在同态加密场景里服务端根本没有权限去解密和查看中间值所有调试只能依赖数据方事后反馈。这意味着服务端开发和测试的文化要改变。常见做法是先写明文版参考模型再写同态版算子然后建立“明文结果 vs 同态结果对比基线”。每一步修改都带着基线对比回归测试否则根本不知道该怀疑谁。4. 先不要给所有 AI 场景上同态加密过一遍判断表4.1 一套低门槛的“这个场景适不适合 HE”判断标准在实际项目里我建议用五个问题来筛选这个输入数据如果泄露会带来什么真实后果模型能不能安全地部署到数据方本地业务容许多大的响应延迟和单次推理成本模型结构是否足够小、足够浅、容易做同态友好改造你更需要的是一次性“私密推理”还是长期“批量学习”如果第一问压力极高、第二问做不到、第三问能接受较高成本第五问属于推理而不是大规模训练那这个场景就值得认真评估同态加密。4.2 适合优先尝试的三种场景从当前技术水平看比较高价值、相对容易落地的候选场景包括医疗领域的辅助诊断特征分类少量高维特征一个训练好的浅层模型输入敏感度极高但单次调用量不大。金融风控中的黑名单匹配或相似度计算可以用同态加密先计算加密特征之间的相似度再做阈值判断服务方拿不到具体个体信息。跨机构之间的加密聚合统计不需要直接跑完整神经网络只需要对多个机构的数据做密文求和、求均值再解密得到统计结果。这些场景的共同特点是小模型、少量输入、关注“结果值”而不是“生成过程”对延迟的容忍度更高。4.3 暂时不适合硬上的三种场景反过来说有几类场景目前别急着同态加密大规模生成式对话每个 token 都是高度非线性生成过程同态计算量和延迟会迅速失控。面向普通用户的高频实时 API如果每次请求都带来几百倍开销产品成本扛不住。超大模型推理模型参数本身如果难以压缩成同态友好的小型结构部署也不现实。这不是说永远不行而是说在现阶段应该先把同态加密用在“小而高价值”的决策点上。5. 想动手上手从跑通一个小实验开始5.1 学习阶段的技术选型原则上手第一步不是自己实现同态加密算法这是密码学专家才该做的事。普通工程团队应该选择成熟开源库。常见选项包括 OpenFHE、Microsoft SEAL 这类底层密码库以及建立在它们之上的 Python 封装。如果你更关心编译器层可以关注 HEIR 这类项目理解模型是怎么被翻译成同态电路的。这里有一句特别重要的经验不要只看论文性能要看项目文档里有没有维护中的示例、活跃的 issue 和持续发布。同态加密工具链还在快速演进版本兼容和社区活跃度非常关键。5.2 一个最小可验证的目标密文上的线性层先别跑完整神经网络。最合理的第一个项目是加密一个向量在密文上完成一次矩阵向量乘法最后解密检查结果和明文计算的误差。实验路径可以这样安排准备一个只有几个特征的简单向量。准备一个小规模随机矩阵。用 CKKS 参数完成加密。在密文上做一次矩阵乘法。解密并和明文乘法的结果对比。在这个过程中你会遇到许多基本但有价值的概念编码、缩放因子、加密层级、公钥和私钥的区别、解密失败是什么样、误差为什么会随乘法深度变大。如果整个过程能在本地跑通并且误差控制在你预期范围内你已经比只看科普的人往前走了一大步。5.3 一定要建立明文基线和结果对比做同态加密实验时最忌讳只看“解密成功”。解密成功只说明密码流程没错不能说明模型结果可用。我在实操中会先把明文计算结果记下来再统计同态计算结果记录两者之间的差值、最大误差、平均误差。如果误差在业务可接受范围内才继续往下调参数如果差了一个数量级先检查编码缩放因子和参数深度而不是怀疑模型。一个可以作为模板的结果记录表实验编号输入维度乘法深度密文大小明文结果同态结果绝对误差耗时0181约 XX KB0.8230.8190.004约 XX ms0282约 XX KB0.7210.7160.005约 XX ms具体数字会因为参数、库类型和机器配置变化不必照抄但记录这种表会帮助你形成体感。5.4 要不要重新训练模型很多模型直接在同态电路里运行效果很差并不是代码写错而是模型没有针对“近似激活函数有限深度”做调整。如果实验结果误差不可接受处理方法通常是剪枝、量化和重训练。把这些额外成本算进项目排期远比一开始就期待“直接跑通”更现实。6. 出现异常时不要先怀疑密码算法按链路排查6.1 常见现象和可能的故障点同态加密项目一旦结果不对新手第一反应往往是“是不是库坏了”。但除非你踩到版本兼容问题否则绝大多数异常出在配置和使用方式上。我把常见问题按表现分成几类现象最可能的故障点解密后输出乱码公钥/私钥/重线性化密钥不匹配结果和明文差距巨大编码缩放因子不合理、噪声预算耗尽计算过程正常但始终溢出参数深度预留不足乘法次数过高运行极慢或内存爆炸多项式维度设置过大、频繁触发高开销算子明文和同态结果在某一层后突然偏差变大非线性激活函数的近似误差累积换了一台机器结果不稳定没锁定底层版本、并行方案和随机数行为6.2 一条实用的分层排查路径我更建议按下面的顺序排查而不是东一榔头西一棒子先查输入明文向量的编码、维度和取值范围是否和模型预期一致。再查密钥是否所有参与方都用同一个参数实例生成的密钥尤其是重线性化密钥。再查参数乘法深度有没有覆盖模型路径缩放因子是否足够承载精度。再查模型激活函数是否做了同态友好替换有没有确认误差上限。最后才怀疑库和底层平台换一个示例测试看库本身能不能完整跑通。这条链路之所以从输入开始是因为大多数同态加密项目都死在使用者自定义的数据格式上。底层库如果本身不健康示例通常早就运行失败了轮不到你的业务代码去触发。6.3 日志在这种环境下会更重要同态加密场景下服务端看不到明文中间结果所以它很难像普通服务那样打印“第几层激活值”来做诊断。最好的替代方案是在本地明文参考模型里打印每一层输出。用同样的输入跑同态路径只解密对应层输出做对比。单独开发一份“同态测试工具”支持逐层解密验证但这个工具必须留在数据方本地不能进入生产服务端。这套方法本质上是不信任生产环境能完成自检而靠离线回归保证整个链路的可信度。6.4 生产化之前还差哪些环节如果你的实验已经跑通还想进一步评估生产落地至少还要确认以下事项密钥生成、分发、轮换和吊销是不是有明确负责人。日志里是否记录了加密输入版本、参数标识和模型版本方便复现问题。是否预留了内存和 CPU 资源峰值是否会导致容器被 OOM。模型升级时是否需要重新匹配参数和深度预算。有没有写清安全假设和适用范围比如哪一方能看什么、不能看什么。同态加密最大的工程陷阱是“在实验环境跑通了一次”不等于“能在生产环境稳定跑一年”。7. 这轮隐私 AI 实用化真正值得关注的是什么Google 这类大厂释放出的信号不是“同态加密今天就能全面替代现有方案”而是“隐私计算的基础设施正在从论文走向工程”。编译器、库、参数管理、硬件加速和场景化解决方案这些才是让同态加密从象牙塔走到业务的关键拼图。对普通应用团队来说现在做对事情只有一件找一个小而真实的敏感数据场景跑通一条最小链路记录明文和密文之间的差异理解成本上界在哪里。不要急着把所有业务都搬到同态加密上也不要在概念阶段就放弃。同态加密真正改变的不是“AI 能不能更聪明”而是在数据被保护的前提下AI 能不能被更多组织、更多场景安全地使用。这个问题的答案会随着编译器和工程实践一点点变成现实。而我们能做的是先把第一段实验代码跑起来。
返回列表