安全两方计算(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)外,对其他信息一无所知
使用框图表示如下图:
2
布尔电路
布尔电路的定义及相关的两个概念:
1.布尔电路是一些由导线连接的门和输入的集合。不能有环。门有三种:与,或,非。
2.布尔电路的规模指电路中门的数量。布尔电路的深度指从输入导线到输出导线最长一条路线的门的个数。布尔电路的规模反映一个电路的大小,布尔电路的深度反映一次计算所需要的时间。
多项式时间算法总是能转换为一个多项式规模的布尔电路。也就是说,第一节中安全两方计算概念中的算法f,只要它是一个多项式时间的算法,总是可以生成一个相同功能的布尔电路的。
布尔电路的逻辑结构可以用真值表表示。真值表的示例见下文中的表1。
3
混淆电路
混淆电路的基本思路是对电路本身进行加密。
1.混淆值
混淆值的取值范围为
和
中之一,其中
值代表0,
值代表1。
和
是特定长度(如128bit)的随机对称密钥。混淆值本身不会透露它对应的明文信息,即,只得到一个混淆值
的情况下,如无额外信息,是不能知道它到底代表0还是代表1的。
2.混淆门
混淆门能够进行混淆值的计算。混淆表是一种对混淆门进行逻辑描述的表,类似于真值表于逻辑门的关系,混淆表与混淆门也包含了等价的信息。通过四步操作,就可以将一个真值表转换为一个混淆表,此过程相当于对真值表/逻辑门进行加密。
●对于真值表的第一个输入参数,以代替其中的0,以
代替其中的1,取得参数1的混淆值
。
●对于真值表的第二个输入参数,以代替其中的0,以
代替其中的1,取得参数2的混淆值
。
●对于真值表中的输出参数,先以
代替其中的0,以
代替其中的1,取得输出的混淆值
。再取以
和
为对称密钥,对
进行两次对称加密。(此处的对称密码算法,解密时应能验证是否成果解密,比如使用认证加密AD)
●对上一步生成的表格,只取列,并对各行做乱序处理,得到最终的混淆表。
混淆表的一个示例见第五节的表3。
3. 混淆电路
混淆电路由多个混淆门组成。
对于混淆电路有两种操作:一种是生成混淆电路,先生成一个特定功能的布尔电路,再以此为基础,将其中的逻辑门转换为混淆门,即可生成一个混淆电路。另一种操作称为求值操作,是指生成混淆电路后,使用混淆电路计算得到输出。
4
基于混淆电路的协议
本节描述一个基于混淆电路的两方安全计算协议。
Alice与Bob是两方计算的两个参与者,协议可以描述为:
1.构造电路:假设f是需要计算的函数,Alice构造对应的布尔电路(用1表示真,0表示假),这个电路有两个输入,分别为Alice和Bob的输入。
2.混淆电路:Alice混淆布尔电路中的每一个逻辑门运算的真值表,隐藏布尔电路的输入和输出之间的对应关系。对混淆的结果,只保留列,并打乱行顺序,生成混淆表。
3.Alice将电路发给Bob:Alice把混淆表和Alice的输入值发送给Bob。
4.Alice将自己选择的混淆值告知Bob,并将Bob需要的两种混淆值对应的布尔值告知Bob。
5.Bob计算电路值:Bob用真值表和混淆的输入计算输出值。使用Alice和Bob的输入对应的和
,解密混淆表的每一个值,只有一个能够成功解密,结果为
。再将
发给Alice,Alice即可还原出混淆值
对应的布尔值。最后Alice可以将明文计算结果以安全方式告知Bob。
值得提出的是,本协议只是展示了混淆电路的基本原理和使用方法,但安全性和实用性仍需要进一步提升,才能满足现实世界解决问题的需求。在混淆电路协议被提出以后,学界已经涌现了非常多的研究成果来优化其使用中的安全性和计算效率,本文中暂时不进一步讨论这些内容。
5
一个例子:一元富翁
最后,我们举一个具体的例子,来展示第四节中的协议。
问题:假设富翁Alice和Bob的资产数量都只有1bit(0元或1元),需要在不泄露两位富翁的资产数量的前提下,知道Alice的资产是否比Bob多。(本例只为展示协议的流程,所以问题尽量的简化了。即使这样的资产数量并不能使Alice与Bob被称为“富翁”。)
条件:Alice的资产为0元,Bob的资产为1元。他们互相不知道对方的资产数量。
1.构造电路:Alice根据计算函数f,构建下图电路:
其中,Alice的资产值记作x,Bob的资产值记作y,结果记作z。当z=1时,Alice的资产大于Bob的;当z=0时,Alice的资产小于或等于Bob的资产数量。
该电路的真值表如下表所示:
表1-真值表:1bit数字比较
2. 混淆电路:将上述真值表转换为混淆表,混淆表的形式如下表所示:
表2-真值表计算混淆表
在计算中,Alice对各个混淆值取随机密钥。其中加密算法选择AES-256,以下密钥为base64编码后的内容:
由此计算出:
所以需要发送给Bob的混淆表,形式为:(已经打乱过行顺序)
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共同计算出了结果。

密码基础概念(一)
ARM平台linux系统内核HOOK常见问题探讨二
ARM平台linux系统内核HOOK常见问题探讨一
扫描关注我们
微信:OPPO安珀实验室