【密码学基础】混淆电路(Garbled Circuit)

1 概念

  • 混淆电路是一种密码学协议,以实现安全多方计算(MPC)。场景是当多个通信方需要共同输入数据,然后通过同一个函数计算出一个结果,但是,各个通信方都不允许其他人知道自己的输入是什么。混淆电路就能很好地解决这个问题。
  • 补充:可计算函数都可转化为电路的实现:加、比较、乘法等。电路是由门(gate)组成,如与门、非门、或门、与非门等。
  • 混淆电路通过加密和扰乱电路值来掩盖真实的输入信息,加密和扰乱是以门为单位,每个门都有一张真值表。
  • 混淆电路(GC) = 不经意传输(OT) + 逻辑电路

2 流程

本文以与门为例介绍混淆电路的算法流程。Alice和Bob两方分别拥有数据 X X X Y Y Y(0或1),现在希望双方都不知道对方数据的情况下,计算出逻辑与的结果 Z Z Z

Step 1:Alice生成混淆电路

首先,Alice将目标函数转化为布尔电路,然后生成一张与门的 真值表(true table):
【密码学基础】混淆电路(Garbled Circuit)_第1张图片
然后,随机生成6个数 X 0 , X 1 , Y 0 , Y 1 , Z 0 , Z 1 X_0, X_1, Y_0, Y_1, Z_0, Z_1 X0,X1,Y0,Y1,Z0,Z1对真值表进行替换。注: X 1 X_1 X1表示替换 X = 1 X=1 X=1的位置,其他同理。于是有了下面这张 替换表
【密码学基础】混淆电路(Garbled Circuit)_第2张图片
之后,Alice对替换表中的 Z Z Z进行连续两次对称加密(加密密钥和解密密钥相同)。如下图,加密密钥则是两个输入 X , Y X, Y X,Y,得到加密表:
【密码学基础】混淆电路(Garbled Circuit)_第3张图片
然后,打乱各行,使加密表内容与行号无关(这里我交换了第2和第3行的顺序),最终得到 混淆表(garbled table)。 这也就是混淆电路中“混淆”二字的由来!
【密码学基础】混淆电路(Garbled Circuit)_第4张图片

Step 2:Alice和Bob进行通信

Alice将自己的输入 X = n X=n X=n替换为为第一步生成的随机数 X n X_n Xn,发送给Bob,这样Bob就无从知晓Alice的真是输入到底是多少了。
然后,Bob也需要将手里的真实输入替换为第一步生成的随机数,怎么实现?通过不经意传输(OT)协议,从Alice手里获取对应的替换值 Y 1 / Y 0 Y_1/Y_0 Y1/Y0。注意!因为采用了1-out-of-2 OT协议,所以Bob只能取到 Y 1 , Y 0 Y_1, Y_0 Y1,Y0中的其一,并且Alice无从知晓Bob到底取走了哪个,从而无法知道Bob手里的真实值是多少。
随后,Alice也将混淆表发送给Bob进行后续的计算。

Step 3:Bob计算混淆电路

Alice和Bob完成上述的通信后(Alice替换真实值发给Bob,Bob从Alice手里取到对应替换值,Alice将混淆表发给Bob),Bob尝试进行电路解密。假设Alice真实输入是0,Bob真实输入是1,那么目前Bob已知的信息有 X 0 , Y 1 X_0, Y_1 X0,Y1两个数据。使用这两个值,对混淆表进行对称密钥解密,最终,只有第3行是可以解密出结果的!也就是 Z 0 Z_0 Z0。注意,这里解密出的 Z 0 Z_0 Z0仍是替换值,而只有Alice才知道替换的关系。

Step 4:Alice和Bob共享计算结果

Bob分享解密后的结果 Z 0 Z_0 Z0给Alice,Alice知道替换值与原始值的替换关系,所以可以快速替换回真实值,并且可以将最终的真实结果分享给Bob。

通过以上4个步骤,就在双方均不知道对方数据的情况下,顺利实现了共同计算同一个函数的功能。

总结

【密码学基础】混淆电路(Garbled Circuit)_第5张图片
Alice端会生成布尔电路已经对应的真值表、替换表、加密表以及混淆表,发送给Bob的是替换值和混淆表,然后Bob通过OT协议拿到自己的替换值,从而对混淆表中的值进行解密。最后,将解密结果共享给Alice得到真值结果,最后双方共享真值结果。

参考资料:
混淆电路简介(GC)
MPC系列-混淆电路

你可能感兴趣的:(隐私计算及密码学基础,密码学)