姚氏百万富翁 混淆电路_姚氏混淆电路原理简介

安全多方计算(Secure Multi-Party Computation ,MPC)技术主要是指,多个通信的参与者在保障通信和计算过程的正确性、隐私性、公平性等安全特征的基础上,联合进行某些功能函数计算,各自得到他们预定的计算结果的一类技术。近些年来,安全多方计算成为密码学最热门的研究领域之一。

安全两方计算(Secure Two-party Computation)是安全多方计算的一个特例情形,其参与计算的实体仅为两方。

姚氏混淆电路是由姚期智教授在上世纪80年代初提出的,学界第一个安全多方计算方案。

本文简明阐述姚氏混淆电路的基本原理,并描述一个基于混淆电路的两方安全计算协议。

1

安全两方计算

在讨论安全两方计算的概念之始,我们先看看姚氏“百万富翁问题”:两位争强好胜的富翁Alice和Bob 在街头相遇,如何在不暴露各自财富的前提下比较出谁更富有?

这个富有趣味性的问题背后的逻辑,是在Alice和Bob不互相透露自己的秘密的情况下,让两者的秘密(财富值)都参与某个特定计算(比较大小),最终得出想要的计算结果(谁更富有)。并且计算过程中,两者的秘密不能够暴露。以下引出安全两方计算的定义。

安全两方计算(Secure Two-Party Computation)是指两个实体:

    1. 使用任意算法f
    2. 输入各自的私密数据x,y
    3. 不依赖第三方
    4. 除了结果z=f(x,y)外,对其他信息一无所知

使用框图表示如下图:

2e66df4c84c29157fad1a33855d849e5.png

2

布尔电路

布尔电路的定义及相关的两个概念:

1.布尔电路是一些由导线连接的门和输入的集合。不能有环。门有三种:与,或,非。

2.布尔电路的规模指电路中门的数量。布尔电路的深度指从输入导线到输出导线最长一条路线的门的个数。布尔电路的规模反映一个电路的大小,布尔电路的深度反映一次计算所需要的时间

多项式时间算法总是能转换为一个多项式规模的布尔电路。也就是说,第一节中安全两方计算概念中的算法f,只要它是一个多项式时间的算法,总是可以生成一个相同功能的布尔电路的。

布尔电路的逻辑结构可以用真值表表示。真值表的示例见下文中的表1。

3

混淆电路

混淆电路的基本思路是对电路本身进行加密。

1.混淆值

混淆值3c3507b2fd3784e1163e3816a74c19b2.png的取值范围为5a8bd97548219988ca382e3aa119a88f.png460e7955329f00bf5de9ca8a2836a2ea.png中之一,其中5a8bd97548219988ca382e3aa119a88f.png值代表0,460e7955329f00bf5de9ca8a2836a2ea.png值代表1。5a8bd97548219988ca382e3aa119a88f.png460e7955329f00bf5de9ca8a2836a2ea.png是特定长度(如128bit)的随机对称密钥。混淆值本身不会透露它对应的明文信息,即,只得到一个混淆值3c3507b2fd3784e1163e3816a74c19b2.png的情况下,如无额外信息,是不能知道它到底代表0还是代表1的。

2.混淆门

混淆门57d40c86c2a63f4eb62ee7b7767d29db.pnga92c3c2da62e6728f772bb77827209b9.png能够进行混淆值的计算。混淆表是一种对混淆门进行逻辑描述的表,类似于真值表于逻辑门的关系,混淆表与混淆门也包含了等价的信息。通过四步操作,就可以将一个真值表转换为一个混淆表,此过程相当于对真值表/逻辑门进行加密。

对于真值表的第一个输入参数,以a92c3c2da62e6728f772bb77827209b9.png4bfb55a1fef5a7f32bafd595d585241d.png代替其中的0,以d17b764e10063faf948c9d959b9e8c4a.pnga92c3c2da62e6728f772bb77827209b9.png代替其中的1,取得参数1的混淆值3c291f95116147f9c65f2672a675f042.pnga92c3c2da62e6728f772bb77827209b9.png

●对于真值表的第二个输入参数,以a92c3c2da62e6728f772bb77827209b9.png3f781fa572846caa1cfce8da86e03c0d.png代替其中的0,以a92c3c2da62e6728f772bb77827209b9.pngb7fe5736cf02a3ed1c19dbce306cad04.png代替其中的1,取得参数2的混淆值ced813bc580eebe47590fd87d84ae303.pnga92c3c2da62e6728f772bb77827209b9.png

●对于真值表中的输出参数,先dc2e30f6bd48733ca641903f374e4605.pnga92c3c2da62e6728f772bb77827209b9.png代替其中的0,以fc53816c926205ad653245defa64bbf6.pnga92c3c2da62e6728f772bb77827209b9.png代替其中的1,取得输出的混淆值260b1c2d2aca0009854e848060124d27.pnga92c3c2da62e6728f772bb77827209b9.png。再取以a92c3c2da62e6728f772bb77827209b9.pnga92c3c2da62e6728f772bb77827209b9.png为对称密钥,对a92c3c2da62e6728f772bb77827209b9.png进行两次对称加密。(此处的对称密码算法,解密时应能验证是否成果解密,比如使用认证加密AD)

●对上一步生成的表格,只取a92c3c2da62e6728f772bb77827209b9.png260b1c2d2aca0009854e848060124d27.png列,并对各行做乱序处理,得到最终的混淆表。

混淆表的一个示例见第五节的表3。

3. 混淆电路

混淆电路由多个混淆门组成。

对于混淆电路有两种操作:一种是生成混淆电路,先生成一个特定功能的布尔电路,再以此为基础,将其中的逻辑门转换为混淆门,即可生成一个混淆电路。另一种操作称为求值操作,是指生成混淆电路后,使用混淆电路计算得到输出。

4

基于混淆电路的协议

本节描述一个基于混淆电路的两方安全计算协议。

Alice与Bob是两方计算的两个参与者,协议可以描述为:

1.构造电路:假设f是需要计算的函数,Alice构造对应的布尔电路(用1表示真,0表示假),这个电路有两个输入,分别为Alice和Bob的输入。

2.混淆电路:Alice混淆布尔电路中的每一个逻辑门运算的真值表,隐藏布尔电路的输入和输出之间的对应关系。对混淆的结果,只保留260b1c2d2aca0009854e848060124d27.png列,并打乱行顺序,生成混淆表。

3.Alice将电路发给Bob:Alice把混淆表和Alice的输入值发送给Bob。

4.Alice将自己选择的混淆值告知Bob,并将Bob需要的两种混淆值对应的布尔值告知Bob。

5.Bob计算电路值:Bob用真值表和混淆的输入计算输出值。使用Alice和Bob的输入对应的3c291f95116147f9c65f2672a675f042.pngced813bc580eebe47590fd87d84ae303.png,解密混淆表的每一个值,只有一个能够成功解密,结果为260b1c2d2aca0009854e848060124d27.png。再将260b1c2d2aca0009854e848060124d27.png发给Alice,Alice即可还原出混淆值260b1c2d2aca0009854e848060124d27.png对应的布尔值。最后Alice可以将明文计算结果以安全方式告知Bob。

值得提出的是,本协议只是展示了混淆电路的基本原理和使用方法,但安全性和实用性仍需要进一步提升,才能满足现实世界解决问题的需求。在混淆电路协议被提出以后,学界已经涌现了非常多的研究成果来优化其使用中的安全性和计算效率,本文中暂时不进一步讨论这些内容。

5

一个例子:一元富翁

最后,我们举一个具体的例子,来展示第四节中的协议。

问题:假设富翁Alice和Bob的资产数量都只有1bit(0元或1元),需要在不泄露两位富翁的资产数量的前提下,知道Alice的资产是否比Bob多。(本例只为展示协议的流程,所以问题尽量的简化了。即使这样的资产数量并不能使Alice与Bob被称为“富翁”。)

条件:Alice的资产为0元,Bob的资产为1元。他们互相不知道对方的资产数量。

1.构造电路:Alice根据计算函数f,构建下图电路:

60821ab4e8040b580c33e4ec16d2758c.png

其中,Alice的资产值记作x,Bob的资产值记作y,结果记作z。当z=1时,Alice的资产大于Bob的;当z=0时,Alice的资产小于或等于Bob的资产数量。

该电路的真值表如下表所示:

15bde8a146a406951ef80ac93cd83a2d.png

表1-真值表:1bit数字比较

2. 混淆电路:将上述真值表转换为混淆表,混淆表的形式如下表所示:

1140ee1685bdc68de6db09a703a726cb.png

表2-真值表计算混淆表

在计算中,Alice对各个混淆值取随机密钥。其中加密算法选择AES-256,以下密钥为base64编码后的内容:

dd82087e99e3b8a25d60e5178488c6b0.png

由此计算出:

f6486736ca5437ca081a37b9398fd1d2.png

所以需要发送给Bob的混淆表,形式为:(已经打乱过行顺序)

14fe876f5bcdefa89118d0870cbbf3b7.png

3.Alice将表3的混淆表发送给Bob。

4.Alice根据自己的秘密——她的资产是0,选择了混淆值

nQ0DEzHK+KdXOj7Dg0gMa4u6H5TGCHozql2NLQMK5l8=,并且告知Bob她选择了哪个混淆值。

注意Bob并不知晓这个混淆值代表0还是1,所以Bob并不知道Alice的秘密。

并且Alice告知Bob,对于Bob来说,OOvRuZiaRe33Sf3caHNHM/8k8llr2RVdJlnQ0w2AoCM=代表布尔值0;

混淆值AvsOttGzuHT3T7/oC0FQewQqq2ysCZvynMO+2fXjQNw=代表布尔值1。

5.Bob根据自己的秘密——他的资产是1,选择了混淆值AvsOttGzuHT3T7/oC0FQewQqq2ysCZvynMO+2fXjQNw=。

对于表3的每一行,使用两个输入混淆值。

(nQ0DEzHK+KdXOj7Dg0gMa4u6H5TGCHozql2NLQMK5l8=和AvsOttGzuHT3T7/oC0FQewQqq2ysCZvynMO+2fXjQNw=)对该结果做两次对称解密。

四行中仅有一行能够解密成功,解密成功的计算结果为Wn9pYEg4D7uv5ioT3X6DFLVDTkT7aBrfGY6wOYbLhHY=。

Bob将此结果发送给Alice,

Alice查对应关系可得,计算结果为z=0。

对应的,Alice的资产少于等于Bob的。

计算完成。

由示例过程可知,在全过程中,Alice无法知道Bob的选择,于是无法知晓Bob的秘密。而Bob无法知晓Alice的混淆值对应哪个比特,也无法知晓Alice的秘密。但Alice与Bob共同计算出了结果。

d71e9f0188a892d925e3ae6be7c80d07.gif 往期推荐密码基础概念(二)

密码基础概念(一)

ARM平台linux系统内核HOOK常见问题探讨二

ARM平台linux系统内核HOOK常见问题探讨一

2d3167d6c4f621bb635fb7d5d7dd2f3a.png

扫描关注我们

微信:OPPO安珀实验室

54049d47f2608d0643e884c2acff0841.png

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值