Appearance
安全多方计算复
1. 安全两方计算背景
百万富翁问题
问题描述:两个百万富翁Alice和Bob想知道谁更富有,但又不愿意让对方知道自己拥有的真正财富。如何在没有第三方的情况下,让对方知道谁更有钱?
解决方案:假设Alice有
函数定义:
基本思想:安全两方计算(Secure two-party computation)是安全多方计算的一个子问题,目标是创建一个通用协议,该协议允许在保护双方输入值的前提下,两方共同计算一个任意函数。
历史背景:姚期智先生最早提出了基于混淆电路的两方安全计算通用协议,可以实现对任意类型布尔门电路的安全计算。
2. 姚氏混淆电路
基本原理
假设需要计算函数
对每个输入
,分别对应于值取0和1 ,分别对应于值取0和1
在姚氏混淆电路中,参与双方需分别负责构造混淆电路和计算混淆电路。假设参与者分别是Alice和Bob,并且Alice负责构造混淆电路,Bob负责计算混淆电路。
混淆表构造
Alice对
- Alice有
,则她将打乱顺序的混淆表和 发给Bob。 - 假设Bob有
,Bob和Alice运行OT 协议,可以得到 对应的 ,然后使用 和 可以解密 得到 并将其发送给Alice。
与门电路示例
问题:Alice和Bob分别有
密钥设置:
对应的密钥为 - 对应的密钥为 - 输出线 对应的密钥为
与门电路真值表:
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
输出转换表:
| 0 | |
| 1 |
混淆表:
执行过程:
- 假如
, ,则Alice将 和混淆表发给Bob。 - 双方运行OT协议,Bob得到
。 - 然后使用
和 可以解密 得到 。 - 根据输出转换表,得到
的真值0。
多个门组成的混淆电路
混淆电路的优化 - Point and Permute
问题:在上述混淆电路中,当接收方收到四个混淆值时要尝试解密直到成功为止,存在一定的开销。
优化方法:Point-and-Permute方法,可以帮助接收者定位到要解密的密文,只需要解密一次。
优化步骤:
令每个门输入
和输出 的两个密钥中都加1bit指针位 ,即: - 对于输入
:它原本对应的密钥是 ,引入一bit指针位 , ,此时的密钥变为 和 ,其中 。 - 同上,对于输入
,两个密钥变为 和 , 。 - 对于输出
,两个密钥变为 和 , 。
- 对于输入
Alice构造混淆表时,表中的每一项按照两个密钥的最后一位
的值排列,然后发送给Bob。 Bob收到混淆表和与Alice输入对应的
后,与Alice运行OT协议得到 。 Bob分别将
和 的最后1 bit 和 取出,以 为坐标在混淆表中找到相应的密文进行解密,即可得到正确的 。
与门示例:
3. GMW协议
GMW协议简介
GMW协议(Goldreich-Micali-Wigderson)是由Goldreich等人提出,是一种支持安全多方计算的协议。GMW协议通常采用秘密分享及OT等常见的密码学原语来实现多方的安全计算功能。
与Yao氏混淆电路协议略有不同,GMW协议不但支持布尔电路还支持算术电路。同时,电路评估时不再使用混淆表,而是在本地直接进行计算,这样大大节省对混淆真值表带来的解密操作,可以减少计算量,节省计算成本。
异或门
秘密分享:
- Alice和Bob的输入分别为
、 。 - Alice产生随机数
,Bob产生随机数 ,则 的两个子份额分别为 ,其中Alice持有 ,Bob持有 ,两个子份额异或可得 。 - 同理将Bob的子份额进行分享,Alice会得到
,Bob持有 。
计算过程:
- 双方分别在本地将
、 的子份额异或: - Alice:
- Bob:
- Alice:
- 而
,因此最终双方会各持有一份 的子份额。
与非门(不需要交互)
秘密分享:
- 分享Alice的输入
,Alice选取随机数 ,并将 发送给Bob,则 的两个子份额分别为 ,其中Alice持有 ,Bob持有 。
计算过程:
- Alice在本地将持有的子份额取反,即Alice:
。 - 因为
,所以最终Alice和Bob各有一份 的子份额。
与门
秘密分享:
- Alice持有子份额
,Bob持有子份额 。 - Alice会针对Bob的子份额的可能取值(0或1),构造一个表
,即 。
表
| 0 | 0 | |
| 0 | 1 | |
| 1 | 0 | |
| 1 | 1 |
表
- Alice随机选择一个
,并将 表中每一项均与 异或得到表 。 : , , ,
执行过程:
- Alice和Bob运行OT
协议,其中Alice充当发送方,Bob充当接收方。 - Alice准备的四个消息为
,Bob以 作为选择位。 - 最终Bob会得到
的子份额 ,Alice有子份额 ,而 ,所以Alice和Bob各得到 的一个子份额。
从两方扩展到多方
秘密分享:
- 假设有
个用户 ,每个用户 的隐私输入为 。 - 用户
分享 的过程如下: 随机选取 个随机数 作为 的前 子份额 。 - 第
个子份额 。 - 对这
个子份额进行异或操作可恢复得到 。 把 分别发给 个用户,自己保留第 个子份额 。
异或门计算:
- 用户
本地计算 。 - 则
。 - 即参与者
在本地计算所得到的 就是 在该异或门输出信号线 上的秘密份额。
与门计算:
。 - 用户
本地计算 ,则可获得 的一个子份额。 - 用户
持有 ,用户 持有 ,$ P_i $ 和 分别输入 和 运行GMW的两方安全的与门协议,则每一方可以得到 的子份额,表示为 。 - 各个参与方在本地将两个部分的子份额
和 异或得到 的子份额,即:
4. BGW协议
BGW协议简介
BGW协议利用Shamir提出的
秘密分享:
- 用户
选取一个 阶的多项式 ,且 。 - 则用户
持有 个秘密的共享份额 , 。 - 最终各个参与方的子份额如下表所示:
| ... | |||||
|---|---|---|---|---|---|
| ... | |||||
| ... | ... | ... | ... | ... | ... |
| ... |
加法运算
计算
本地计算 ,则 。
乘法运算
计算
本地计算 。 注意:多项式
的阶为 ,故需要 个份额才能恢复多项式,因此需要降阶到 阶,方法如下: 其中
是拉格朗日系数。 选取一个新的 阶的多项式 ,且 。 有 个份额 ,然后本地计算: 则
。
乘法三元组
乘法三元组(Multiplication Triples)又被称为Beaver triple,其主要思想是利用预先在离线阶段生成的三元组实现在线时的乘法运算。
假设:参与者
计算
本地计算 和 ,并发送 和$ [f]i P$。 重构 和 。 计算 ,则参与者 和 可以分别获得结果 的子份额 和 。


