MPC多方安全计算——比较算法示意
1. 简介与经典例子
1.1 简介
- MPC即多方安全计算,主要目的是通过加密手段使得多方节点在互不知数据的情况下完成协同计算,例如多节点之间的比较、加法、聚合等等。
2.1 经典例子
- 两个百万富翁Alice和Bob想知道他们两个谁更富有,但他们都不想让对方知道自己财富的任何信息。
2. 比较算法流程示意
2.1 描述
- 这里用作示例的是其中的比较算法,即A有5元钱,B有7元钱,需要在互不知道对方的钱的情况下,比较谁更有钱
2.2 比较算法的流程
- 已知条件:
- A拥有a元钱、私钥Da、公钥Ea
- B拥有b元钱
- 值a和b存在一定范围内(需要事先确定),即m<a<n,m<b<n,例如m=0,n=10
- A和B共同约定的较小的整数p,用于取mod,进行混淆
- A将公钥Ea传输给B
- B接收到公钥Ea,同时生成一个合适的随机数x,利用公钥Ea加密x得到k,同时计算 c = k – b,再将c传输给A
- A尝试遍历序列(c + m, c + m + 1, c + m + 2, …, c + n),对每个值使用私钥Da进行解密,并将结果对p取余数(即mod),得到结果序列(dm, dm+1, dm+2, …, dn)
- 此时,(c + m, c + m + 1, c + m + 2, …, c + n)其中有一个数就是k,使用私钥Da解密后其中有一个数就是x,但是A不知道是哪一个
- A继续计算,将得到的序列的前a – m 位的值加1,序列后面的值不变,再将结果序列传输给B
- B得到A传输过来的序列后,查找序列的第b – m位的值,如果该值等于x mod p的余数(说明A未对该值加一),那么证明 a < b,反之,则b <= a
- 注意
- 图中红色部分代表只有A知道的数据
- 蓝色部分代表只有B知道的数据
- 绿色部分代表公共数据
2.3 算法优势、劣势分析
- 优势:双方互不知对方的数据,比较过程安全、保密
- 问题点
- 显然,多个MPC节点之间的数据比较,是需要相互传输数据的,只不过因为进行了加密,所以互相不知道对方的数值是多少
- 一个简单的比较,为了保密、安全,需要进行多次加密、解密、传输,会导致计算量变大很多很多倍,显然性能会急剧降低
- 由于MPC节点通常不在一起,会被分置各个地方,两个节点之间的距离会导致网络I/O传输的性能降低
- 如果计算的是求和,而同时只有2个节点参与运算,显然会暴露双方的值
3. 可供参考的项目
-
MPC相关技术一览
-
Fresco(dk.alexandra.fresco)
- Java开发、开源免费
- 已有求和、聚合求和、求距离、求交集、AES加密等技术
- 地址
- 协议套件
Sutie Parties Adversary ModelOfComputation Reactive DummyBoolean 1+ none Boolean yes DummyArithmetic 1+ none Arithmetic yes TinyTables 2 Semi-honext Boolean yes SPDZ 2+ malicious Arithmetic yes SPDZ2k 2+ malicious Arithmetic yes