混淆电路是什么:把程序加密成迷宫,双方只看见该看见的 图 1
混淆电路是什么:把程序加密成迷宫,双方只看见该看见的 · 图 1

两个人想算一个函数,但谁都不想暴露自己的输入——这个看似矛盾的需求在 1980 年代初有一个著名解法:姚期智(Andrew Yao)提出的混淆电路(Garbled Circuit),它最初是为其“百万富翁问题”(两人各持财富、只比大小互不透底)设计的协议骨架。四十多年过去,它从纯理论走进了隐私集合求交、密态竞价甚至链上隐私协议。本文解释这台“加密迷宫”怎么工作、慢在哪里、最近为什么又变快了。

一句话版本

混淆电路把要计算的程序翻译成一个布尔电路,然后构造两层加密:每根导线用一对随机密钥(代表 0 和 1)做标签;每个逻辑门用这 4 个标签加密出一张 4 行门表,只有拿对两个输入标签的人才能解开对应那一行。输入方把加密好的电路发出去,再用 oblivious transfer(不经意传输)让对方按位取走自己输入的标签——而不知道另一组标签是什么。求值像解密俄罗斯套娃:解一根线拿一个标签,用标签去开下一道门。结束时按约定公布输出导线的标签含义。谁能看到什么?只有自己的输入位、最终输出——中间的每根导线都是打乱的密文。

混淆电路是什么:把程序加密成迷宫,双方只看见该看见的 图 2
混淆电路是什么:把程序加密成迷宫,双方只看见该看见的 · 图 2

两个关键补丁

裸构造有两个泄露。第一是顺序:门表按真值表行序排列,求值者知道解的是第几行,能反推自己的输入位——解决办法叫 row reduction / free XOR:门表只需 3 行、XOR 门用向量加法免密,顺带把 AND 门成本降下来。第二是标签乱序:若标签本身有结构,可被字典式试探,标准要求标签是伪随机编码或带对称加密强度。现代实现里,free-XOR 加固定密钥加密(用分组密码的随机置换当哈希)这套组合把每门成本压到约 3 次对称加密级别,这是“混淆电路能用”的工程前提。

从百万富翁到隐私集合求交

姚氏原始场景:两人各有年薪数字,只想知道谁更高,不问出具体值。实现方式是把“逐位比较”写进电路。今天更常见的落地是隐私集合求交 PSI:两家机构各自的客户名单,求交集而不出露各自全集——把哈希比较电路混淆后跑一遍。密码学广告归因、联合风控里的“两边数据都不出域”需求,主流方案之一就是 PSI/混淆电路变体。在加密资产场景里,它也出现在密态订单撮合与跨机构储备核查的研究提案中——但注意,多数生产级“MPC 钱包”用的是门限签名,不是混淆电路,两者常被混为一谈。

为什么长期跑不动,近年怎么快的

混淆电路的代价模型是“电路规模乘以每门密码成本”:任何程序要先编译成门级电路,一次布尔加法器的开销尚可控,但要混淆一段通用代码(编译器路线)就要付出巨大的控制流与内存访问建模成本。近年的工程进展集中在三处:其一,Garbled RAM 与数据访问模式分离,把数组访问的泄露用 ORAM 类结构处理;其二,硬件加速——批量 oblivious transfer 用向量化与 AES-NI 后,OT 不再是唯一瓶颈;其三,与同态加密、秘密分享混合,把适合混淆的部分留给电路、适合代数的部分交给其他原语。结果是局域网级两方计算跑实用函数的时间从论文时代的小时降到分钟乃至秒级,但广域网高延迟场景的代价仍然明显。

快速问答

问:混淆电路能保证对方不按协议出牌吗? 答:裸混淆只保证输入输出保密与输出正确(对半诚实模型);防主动作弊要追加承诺、零知识证明与公平性协议,成本显著上升。

问:它和 TEE 谁更安全? 答:威胁模型不同。混淆电路的保密靠密码学与双方博弈,TEE 靠硬件隔离与厂商信任根;对不信任硬件供应链的场景,密码学路线仍是唯一选择。

问:和零知识证明的区别? 答:ZKP 证“我知道一个满足条件的东西”且不暴露它;混淆电路是“两人一起算一个函数、输入互盲”。前者输出是证明,后者输出是计算结果。

风险提示

混淆电路是密码学原语:实现缺陷(门表顺序、标签生成、OT 协议选型)会直接导致输入泄露,绝不应基于科普描述自研落地。涉及隐私数据的方案须先做数据合规与泄露面评估。本文不构成投资或技术选型建议。