混淆电路——混淆电路原理

混淆电路原理

在我们前两章讲过混淆电路的基础知识——不经意传输&转换逻辑电路以后,我们就可以将这两种技术合并在一起,用作我们的混淆电路的设置。
我们还是以百万富翁问题为例,在上一章我们已经将比较大小函数转换成逻辑电路了,然后我们还需要处理在电路运行的过程中存在的信息泄漏问题,我们需要将电路的每一条线路进行标记,如下图所示。
在这里插入图片描述
然后就开始我们混淆电路的过程:
我们混淆电路分成四个部分:
Step 1: Alice 生成混淆电路
Step 2: Alice 和 Bob 进行通信
Step 3: Bob evaluate 生成的混淆电路
Step 4: 分享结果

Step 1: Alice 生成混淆电路

首先,Alice 基于上述电路生成对应的混淆电路。生成过程主要分四步。
第一步,Alice对电路中的每一线路进行标注。如上图所示,Alice一共标注了七条线路,包括模块的输入输出 W a 0 , W b 0 , W c 0 , W c 1 W_{a_0},W_{b_0},W_{c_0},W_{c_1} Wa0,Wb0,Wc0,Wc1,和模块内的中间结果 W d , W e , W f W_d,W_e,W_f Wd,We,Wf 。对于每一条线路 W i W_i Wi ,Alice生成两个长度为 k k k的字符串 X i 0 , X i 1 X_i^0,X_i^1 Xi0,Xi1 。这两个字符串分别对应逻辑上的0和1。这些生成的标注会在 Step 2 有选择性地发给Bob,但Bob并不知道 X i 0 , X i 1 X_i^0,X_i^1 Xi0,Xi1对应的逻辑值。
第二步,Alice 对电路中的每一个逻辑门的Truth Table用 X i 0 , X i 1 X_i^0,X_i^1 Xi0,Xi1进行替换,由 X i 0 X_i^0 Xi0替换0,由 X i 1 X_i^1 Xi1替换1。比如电路图中左上方的XOR门的输入是 a 0 , c 0 a_0,c_0 a0,c0,输出是 d d d,对应的Truth Table可以做如下转换。

a 0 a_0 a0 c 0 c_0 c0 d d d
000
011
101
110

转换为

a 0 a_0 a0 c 0 c_0 c0 d d d
X a 0 0 X_{a_0}^0 Xa00 X c 0 0 X_{c_0}^0 Xc00 X d 0 X_d^0 Xd0
X a 0 0 X_{a_0}^0 Xa00 X c 0 1 X_{c_0}^1 Xc01 X d 1 X_d^1 Xd1
X a 0 1 X_{a_0}^1 Xa01 X c 0 0 X_{c_0}^0 Xc00 X d 1 X_d^1 Xd1
X a 0 1 X_{a_0}^1 Xa01 X c 0 1 X_{c_0}^1 Xc01 X d 0 X_d^0 Xd0

第三步,Alice对每一个替换后的 Truth Table 的输出进行两次对称加密,加密的密钥是Truth Table对应行的两个输入。比如Truth Table的第一行是 X a 0 0 , X c 0 0 , X d 0 X_{a_0}^0,X_{c_0}^0,X_d^0 Xa00,Xc00,Xd0,我们就用 X a 0 0 , X c 0 0 X_{a_0}^0,X_{c_0}^0 Xa00,Xc00加密 X d 0 X_d^0 Xd0生成 E n c X a 0 0 , X c 0 0 ( X d 0 ) Enc_{X_{a_0}^0,X_{c_0}^0}(X_d^0) EncXa00,Xc00(Xd0)
第四步,Alice 对第三步加密过后的Truth Table的行打乱得到Garbled Table。所以 Garbled Table 的内容和行号就无关了,混淆电路的混淆二字便来源于这次打乱。
表格进一步变为:

E n c X a 0 0 , X c 0 0 ( X d 0 ) Enc_{X_{a_0}^0,X_{c_0}^0}(X_d^0) EncXa00,Xc00(Xd0)
E n c X a 0 0 , X c 0 1 ( X d 1 ) Enc_{X_{a_0}^0,X_{c_0}^1}(X_d^1) EncXa00,Xc01(Xd1)
E n c X a 0 1 , X c 0 0 ( X d 1 ) Enc_{X_{a_0}^1,X_{c_0}^0}(X_d^1) EncXa01,Xc00(Xd1)
E n c X a 0 1 , X c 0 1 ( X d 0 ) Enc_{X_{a_0}^1,X_{c_0}^1}(X_d^0) EncXa01,Xc01(Xd0)

Step 2: Alice 和 Bob 通信

第一步,Alice将她的输入对应的字符串发送给Bob。比如 a 0 = 1 a_0=1 a0=1,那Alice会发送 X a 0 1 X_{a_0}^1 Xa01给Bob。由于Bob不知道 X a 0 1 X_{a_0}^1 Xa01对应的逻辑值,也就无从知晓Alice的秘密了。
第二步,Bob通过不经意传输协议从Alice获得他的输入对应的字符串。不经意传输保证了Bob在 { X b 0 0 , X b 0 1 } \{X_{b_0}^0,X_{b_0}^1\} {Xb00,Xb01}中获得一个,且Alice不知道Bob获得了哪一个。所以Alice也就无从知晓 Bob 的 b 0 b_0 b0了。
最后,Alice 将所有逻辑门的 Garbled Table 都发给 Bob。在这个例子中,一共有四个 Garbled Table。

Step 3: Bob evaluate 生成的混淆电路

Alice和Bob通信完成之后,Bob便开始沿着电路进行解密。
因为 Bob 拥有所有输入的标签和所有 Garbled Table,他可以逐一对每个逻辑门的输出进行解密。在这个例子中,假设 Bob 拥有的输入标签为 X a 0 1 , X b 0 1 , X c 0 0 X_{a_0}^1,X_{b_0}^1,X_{c_0}^0 Xa01,Xb01,Xc00 。他可以

  1. 对于电路图左上方的XOR,用 X a 0 1 , X c 0 0 X_{a_0}^1,X_{c_0}^0 Xa01,Xc00解密获得 X d 1 X_d^1 Xd1
  2. 对于电路图左下方的XOR,用 X b 0 1 , X c 0 0 X_{b_0}^1,X_{c_0}^0 Xb01,Xc00解密获得 X e 1 X_e^1 Xe1
  3. 对于电路图中间的AND,用 X d 1 , X e 1 X_d^1,X_e^1 Xd1,Xe1解密获得 X f 1 X_f^1 Xf1
  4. 对于电路图右侧的XOR,用 X a 0 1 , X f 1 X_{a_0}^1,X_f^1 Xa01,Xf1解密获得 X c 1 0 X_{c_1}^0 Xc10

值得注意的是,由于Garbled Table每一行的密钥都不同,所以 Bob 只能解密其中一行。而且 Bob 并不知道解密出来的 X d 1 , X e 1 , X f 1 , X c 1 0 X_d^1,X_e^1,X_f^1,X_{c_1}^0 Xd1,Xe1,Xf1,Xc10对应的逻辑值,也就无从获得更多信息了。而 Alice 全程不参与 Bob 的解密过程,所以也如法获得更多信息。
(这里在学习的时候产生了一个疑惑,Garbled Table有4行,并且都是打乱顺序,Bob怎么知道解密出来的一定是正确的呢,后来经过思考,我们可以在设置字符串 X i 0 , X i 1 X_i^0,X_i^1 Xi0,Xi1时,可以在字符串后面加入若干个0,作为解密正确的标志,所以每次在解密的时候,就可以通过这个标志知道是否解密正确。现在主流用的是Point-and-permute的方法减少时间复杂度)

Step 4: 共享结果

最后Alice和Bob共享结果。Alice分享 { X c 1 0 , X c 1 1 } \{X_{c_1}^0,X_{c_1}^1\} {Xc10,Xc11}或者Bob分享 X c 1 0 X_{c_1}^0 Xc10,双方就能获得电路输出的逻辑值了。

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值