GMW (A Generic MPC Protocol)
Table of Contents
1. 简介
姚期智提出的混淆电路(Garbled Circuit)是一个通用的两方安全计算协议(Two-Party Computation),不过它不能简单地扩展为多方(多于两方)安全计算协议(Multi-Party Computation)。到 1990 年,D. Beaver, S. Micali and P. Rogaway 在论文 The round complexity of secure protocols 中才把姚期智的混淆电路扩展为了支持“多方”的安全计算协议,这被称为 BMR 协议。
1987 年,Oded Goldreich, Silvio Micali, Avi Wigderson 在论文 How to Play Any Mental Game 中提出了一种通用的多方安全计算协议,一般称它为 GMW 协议。GMW 协议是第一个通用的多方安全计算协议,本文将介绍它。
2. GMW (Semi-Honest MPC)
在 GMW 协议中,使用布尔逻辑电路或者算术电路来表示 MPC,如图 1 所示。本文仅介绍布尔逻辑电路,不介绍算术电路。
Figure 1: 左图为 MPC 示意图(输入
图 1 右边的布尔逻辑电路(摘自:https://vitalik.ca/general/2020/03/21/garbled.html )是一个“two-bit 加法器”。假设 Alice 和 Bob 两个人参与这个运算,这个布尔逻辑电路有 4 个输入,其中
GMW 提出了一种方法,可以执行布尔逻辑电路,且可保证 Alice 的输入
布尔逻辑电路的运算在
2.1. GMW 协议流程
GMW 协议流程如下:
第 1 步:Input-sharing Phase。各个参与者把自己输入数据(需要保密)的每一个比特位变为随机的 Additive Shares,分发给其它的参与者;
第 2 步:Gate Evaluation。电路输入线的值改为自己分配到的 shares,按照后文介绍的 Gate 执行方式来执行电路中每个 Gate;
第 3 步:Output Reconstruction。对于最后的输出 Gate,各个参与者把自己得到的 Output Share 告诉其它人。输出线上的所有 Output Share 加起来就得到最后的输出。
2.2. 第 1 步:Input-sharing Phase(参与者把输入拆分为 Additive Shares 后分发给其它人)
在 MPC 运算中,假设一共有
假设
- 把
拆分为 Additive Shares 的形式。具体做法是:选择 个随机比特 ,且定义 ,这样一定有 。也就是说 比特位 被拆分为了 个加性分片(Additive Shares ),所有分片加起来会等于 ; - 把
发送给 (其中有一份是发送给自己的)。
上面过程如图 2 所示。
Figure 2:
假设 Alice 和 Bob 要执行图 1 右边的布尔逻辑电路,由于这是一个“two-bit 加法器”,Alice 需要进行 2 次图 2 所示的过程分别把它的 2 个输入比特位拆分为 Additive Shares 后分发给其它人;同理 Bob 也是要进行 2 次图 2 所示的过程。
2.3. 第 2 步:Gate Evaluation
下面介绍如何执行 NOT Gate 和 AND Gate。因为布尔逻辑电路的其它逻辑门都可以使用 NOT Gate 和 AND Gate 这两种逻辑门来表达(关于这个结论可参考:https://en.wikipedia.org/wiki/NAND_logic ),所以我们可以只讨论这两种逻辑门而不失一般性。
2.3.1. NOT Gate
NOT Gate 的真值表如表 1 所示,显然输入输出满足关系
input b | ouput c |
---|---|
0 | 1 |
1 | 0 |
在前面介绍的第 1 步中,参与者已经把它的秘密
NOT Gate 按照下面规则执行(图 3 最右图):
这样计算:- 其它参与者
这样计算:
按照这个规则,容易验证
NOT Gate 是可以本地计算的,意思是
Figure 3: GMW NOT Gate
2.3.2. AND Gate
AND Gate(图 4)的真值表如表 2 所示,显然 AND Gate 相当于
Figure 4: AND Gate
input c | input d | ouput b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
每个参与者手头只有 Input Shares
AND Gate 要麻烦一些,我们先讨论 Two-Party 的情况,然后再讨论 N-Party 的一般情况。
2.3.2.1. Two-Party Case
假设只有两个参与者
AND Gate 的输出
我们不能简单地定义
下面介绍使用 1-out-of-4 OT 协议来拆分
首先
定义
下面我们来验证一下
- 当
时,上式为 ,而直接计算 也是这个值。 - 当
时,上式为 ,而直接计算 也是这个值; - 当
时,上式为 ,而直接计算 也是这个值; - 当
时,上式为 ,而直接计算 也是这个值;
从而
Figure 5: GMW AND Gate Two-Party Case
2.3.2.2. N-Party Case
前面介绍的是 Two-Party 的情况,容易扩展为 N-Party 的通用情况。下面以 4 个 Party 为例介绍一下 N-Party 时的思路。
假设有 4 个参与者
其中
任意两个参与者
这样,
这些 Output Share 加起来会为
当参与者个数为其它数时,情况也类似,不再介绍。
2.4. 第 3 步:Output Reconstruction
当参与者执行完 Gate,得到 Gate 输出线上的 Output Share 后,如果这个 Gate 不是最后一个 Gate,则这个 Output Share 就作为后一个 Gate 的 Input Share 继续往下执行。直到执行到最后一层 Gate。
假设 3 个参与者 Alice/Bob/Carol 执行图 6 所示电路,他们的输入都只有一个比特位,分别为 a/b/c,当执行结束后,Alice/Bob/Carol 可分别得到
Figure 6: Alice/Bob/Carol 执行电路示意图
3. GMW Compiler (Malicious MPC)
前面介绍的 GMW 协议是基于 Semi-Honest 敌手模型,也就是假设各个参与者会忠实地执行协议,但是参与者可能保留交互时得到的信息。
GMW Compiler 是 Goldreich、Micali 和 Wigderson 提出的一种通用编译器,它可以将 Semi-Honest MPC 协议转换为 Malicious MPC 协议。 GMW Compiler 的基本思路是:使用零知识证明来确保每一步计算时参与者都不会偏离协议,从而确保了每一步计算的正确性。 比如,在执行 NOT Gate 时(参考 2.3.1),
GMW Compiler 总结: 先设计一个 Semi-Honest MPC 协议,然后对每一步引入零知识证明以确保参与者忠实地执行协议,这样就把 Semi-Honest MPC 协议改造成了 Malicious MPC 协议。
4. 高效实现 GMW(Beaver Triples)
1992 年,Donald Beaver 在论文 Efficient multiparty protocols using circuit randomization 中提出了 Beaver Triples(也称 Beaver’s Multiplication Triples)。 利用它可以去掉 GMW 中的 1-out-of-4 OT 协议,由于 Beaver triples 可以提前计算,这使得 GMW 的性能大大提升。 高性能的 GMW 协议实现都会使用 Beaver Triples 进行优化。本文不介绍 Beaver Triples 的细节。
5. 参考
- Course 600.641 Lecture 14: Secure Multiparty Computation: https://www.cs.jhu.edu/~susan/600.641/scribes/lecture14.pdf
- Oblivious Transfer and GMW MPC: https://slideplayer.com/slide/13844223/
- A pragmatic introduction to secure multi-party computation. 3.2 Goldreich-Micali-Wigderson (GMW) Protocol
- A pragmatic introduction to secure multi-party computation. 6.5.1 GMW Compiler