混淆电路Garbled Circuit介绍

混淆电路Garbled Circuit介绍

阅读此文之前,请先阅读差分隐私Differential Privacy介绍,并一直向上追溯直至到达根节点或已访问节点。

混淆电路(Garbled Circuit)这个可得好好写写,一则这玩意儿确实有点抽象,每次说半天都未必能对一个程序猿讲明白,毕竟一堆只发乱码的参与者,怎么就得到了计算结果呢?然而密码学方法已经决定了,确实可以这么做;二则混淆电路乃我们院长的杰作,不能丢他的脸。话不多说,贴图镇楼。

先明确一下混淆电路解决的是什么问题。通俗的说,就是一堆人各自拥有其隐私数据,他们想把这些数据合起来算点什么,但又不想把数据交给别人,混淆电路解决的就是此类问题。我们先来考虑一个经典问题——百万富翁问题。两个身价也就那么百来万的人觉得自己是富翁,他们在某会所里碰见,因为某种原因需要比个高下方能取得某种资格,但又觉得自己那些存款数目是多大秘密似的舍不得告诉别人,于是他俩遮遮掩掩地将数据拆散、打乱、加密,最后算出了结果并只解密结果。

那么,我现在要说说混淆电路具体是如何工作的了。注意关键词“电路(circuit)”,我们知道可计算问题都可以转换为一个个电路,于是就有了加法电路、比较电路和乘法电路等等。当然,更复杂的计算过程,如深度学习等等,也是可以转换成电路的。一个电路是由一个个门(gate)组成的,比如与门、非门、或门、与非门等等。

如上图所示,封面中的两个人Alice和Bob想要搞点事情,他们搞了个电路(比如比较电路,或者emmmm什么电路),电路里面有一些门,每个门包括输入线(input wire)和输出线(output wire)。混淆电路就是通过加密和扰乱这些电路的值来掩盖信息的。在最经典的混淆电路中,加密和扰乱是以门为单位的。每个门都有一张真值表。比如下图就是与门的真值表和或门的真值表。下面就以与门为例来说明混淆电路的工作原理。

Alice和Bob想计算一个与门。该门两个输入线 xy 和一个输出线 z ,每条线有0和1两个可能的值。Alice首先给每条线指定两个随机的key,分别对应0和1。

然后,Alice用这些密钥加密真值表,并将该表打乱后发送给Bob。加密过程就是将真值表中每一行对应的 xy 的密钥加密 z 的密钥。这一加密+打乱的过程,就是混淆电路(garbled circuit)的核心思想。


那Bob收到加密表后,如何计算呢?首先Alice把自己的输入对应的key发给Bob,比如Alice的输入是0,那就发 k_{0x} ,输入是1就发 k_{1x} 。同时把和Bob有关的key都发给Bob,也就是 k_{0y}k_{1y} 。然后Bob根据自己的输入挑选相关的key。由于Bob收到的这些key都是随机数,所以其实并没有任何有效信息泄露。Bob根据收到的 k_x 和自己的 k_y ,对上述加密表的每一行尝试解密,最终只有一行能解密成功,并提取出相应的 k_z

Bob将kz发给Alice,Alice通过对比是 k_{0z} 还是 k_{1z} 得知计算结果是0还是1。由于整个过程大家收发的都是密文或随机数,所以没有有效信息泄露。

以上就是混淆电路中单个门的计算方法。当然每个电路肯定是由多个门组成的,这时候需要将这些门都串起来。当然,这样的混淆电路方法有点复杂,现在大家已经研究出了很多优化方法,具体方法可以去看论文。

(本文未经许可不得抄袭或转载)

[1] Kolesnikov, Vladimir, and Thomas Schneider. "Improved
garbled circuit: Free XOR gates and applications." International Colloquium on
Automata, Languages, and Programming. Springer, Berlin, Heidelberg, 2008.

[2] Yao, Andrew Chi-Chih. "How to generate and exchange
secrets." Foundations of Computer
Science, 1986., 27th Annual Symposium on. IEEE, 1986.

编辑于 05-31

文章被以下专栏收录