MPC 多方安全计算
两项技术乍一看有点像,都声称可保护数据安全,都用到了很多密码学技术和理论,部署上也都是多节点分布式,所以当人们谈论MPC的时候,很容易想到,“哎,区块链不也是这样的吗,那本期就研究对比一下。
MPC多方安全计算
先看 Secure Multi-Party Computation, MPC 主要目的是通过加密手段使得多方节点在互不知数据的情况下完成协同计算.
通过示例更直观有效
假设: 即A有5元钱,B有7元钱,需要在互不知道对方的钱的情况下,比较谁更有钱
- 已知条件:
- A 拥有a元钱、私钥PriA、公钥Ea
- B 拥有b元钱
- 值 a 和吧都除以一定范围内(事先约定),既可以表示为 m < a < n, m < b < n. 假设 m =0 ,n =10
- A 和 B共同约定较小的整数 p 取mod 混淆
-
首先 A将自己公钥传递给 B

-
B接收到公钥Ea,同时生成一个合适的随机数x,利用公钥Ea加密x得到k,同时计算 c = k – b,再将c传输给A

-
A尝试遍历序列(c + m, c + m + 1, c + m + 2, …, c + n),对每个值使用私钥PriA进行解密,并将结果对p取余数(即mod),得到结果序列(dm, dm+1, dm+2, …, dn)

-
此时,(c + m, c + m + 1, c + m + 2, …, c + n)其中有一个数就是k,使用私钥PriA解密后其中有一个数就是x,但是A不知道是哪一个
-
A继续计算,将得到的序列的前a – m 位的值加1,序列后面的值不变,再将结果序列传输给B

-
B得到A传输过来的序列后,查找序列的第b – m位的值,如果该值等于x mod p的余数(说明A未对该值加一),那么证明 a < b,反之,则b <= a

- 图中红色部分代表只有A知道的数据
- 蓝色部分代表只有B知道的数据
- 绿色部分代表公共数据
优势:双方互不知对方的数据,比较过程安全、保密
问题点:
- 显然,多个MPC节点之间的数据比较,是需要相互传输数据的,只不过因为进行了加密,所以互相不知道对方的数值是多少
- 一个简单的比较,为了保密、安全,需要进行多次加密、解密、传输,会导致计算量变大很多很多倍,显然性能会急剧降低
- 由于MPC节点通常不在一起,会被分置各个地方,两个节点之间的距离会导致网络I/O传输的性能降低
- 如果计算的是求和,而同时只有2个节点参与运算,显然会暴露双方的值
对比区块链技术
区块链(Blockchain)技术是一种不依赖第三方、通过自身分布式节点进行网络数据的存储、验证、传递和交流的一种技术方案。通俗一点说,区块链是一种由多方共同维护,使用密码学保证传输和能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也称为分布式账本技术(Distributed Ledger Technology)。而广义的区块链可以包含更加丰富的计算形式,乃至图灵完备的程序(通常称为智能合约)
多方安全计算(MPC)的定义是“针对无可信第三方情况下,安全地进行多方协同的计算问题。即在一个分布式网络中,多个参与实体各自持有秘密输入,各方希望共同完成对某函数的计算,而要求每个参与实体除计算结果外均不能得到其他参与实体的任何输入信息。
简单的说,虽然区块链和多方安全计算都是一群人按照特定规则(协议)进行交互,但区块链主要是为了共同对完成的计算的正确性进行验证,从而实现对结果的一致认可并防止结果的记录被篡改。而多方安全计算(MPC)的目的是为了在对输入保密的情况下,得到计算结果。区块链重在可验证的计算,强调的是计算的可验证性,这一过程中并不考虑输入数据的保密性。而MPC强调的是计算过程中对于输入数据的保密性。但是MPC并不能确保数据是可验证的
二者的主要区别
- 规则的安全性和可靠性假设不同。区块链是容忍一定量的串通的恶意节点的,MPC只要有任何节点的错误(不一定是恶意),计算就没法发生
- 规则的实现机制不一样,在区块链里节点通过共识协议达成共识,而在MPC里节点通过隐私计算协议完成加密运算。大多数共识协议是通过冗余执行实现的,各个节点看到了相同的信息。而隐私计算的核心思想是不让其他节点看到保密信息
- 规则的目的不一样,区块链的目的是实现计算的可验证性,让大家一致证明交易的确发生了。而MPC的目的是确保在计算过程中对输入数据的保密性,在不暴露明文的前提下完成某种运算
- 规则的触发事件也不一样,区块链的触发事件是矿工通过挖矿新产生了一个数据块,交易本身不需要保密(大部分区块链的可验证性都来源于所有验证节点能够看到交易的明文);而MPC的触发事件是很多人将自己的私有数据加密后作为输入,这些输入数据都对自身以外的其他任何人保密
应用场景: 区块链做存证+MPC做隐私保护就是一个很好的解决方案