安全多方计算
安全多方计算
安全多方计算 (Secure Multi-Party Computation,简称 SMC) 是一种分布式计算技术,可以在多个参与方之间进行计算,同时保护参与方的隐私和数据安全。在安全多方计算中,每个参与方都持有一部分数据,计算结果只有在所有参与方都合作的情况下才能得到,同时不泄露任何参与方的私密信息。
安全多方计算的应用非常广泛,例如:金融领域的风险评估、医疗保健领域的基因分析、电子投票、隐私保护数据挖掘等等。
安全多方计算的实现依赖于密码学的技术,如秘密共享、同态加密、零知识证明等等。当前,有很多开源的安全多方计算框架,例如:MPC-Benchmark、ABY、EMP-Toolkit等,这些框架提供了高效、安全、易用的安全多方计算实现。
安全多方计算的基本原理是通过将数据分散到不同的参与方,并在不暴露原始数据的情况下进行计算。参与方之间进行通信,以达到计算结果的共享,但在这个过程中不泄露私密信息。
安全多方计算中的参与方可以是两个或更多个,每个参与方都可以拥有一部分私密数据,比如一些敏感的个人数据、金融交易数据、医疗记录等等。这些数据不应该暴露给其他参与方,但在一些情况下,需要进行计算并产生结果。
在安全多方计算中,数据被加密并分割为多个部分,分发给不同的参与方。这些参与方之间进行协作,执行计算,并最终生成结果。在此过程中,每个参与方只知道其拥有的数据部分,但不知道其他参与方拥有的数据,因此保证了数据的隐私性。
安全多方计算需要使用密码学技术来实现,其中包括加密、解密、身份验证、秘密共享等技术。目前已经有很多安全多方计算的实现,比如有基于同态加密、安全多方秘密共享等的方案。安全多方计算技术在隐私保护、数据安全等领域有着广泛的应用。
现有开源框架比较
MP-SPDZ - 是SPDZ-2(Keller等人,CCS'13)的分支,SPDZ是多方计算(MPC)协议SPDZ(Damgård等人,Crypto'12)的实现。MP-SPDZ将SPDZ-2扩展到了二十多种MPC协议,所有这些协议都可以用同一个基于Python的高级编程接口来使用。这大大简化了不同协议和安全模型的成本比较。这些协议涵盖了所有常用的安全模型(诚实/不诚实的多数人和半诚实/恶意模型),以及二进制和算术电路的计算(后者的模数为素数和二次幂)。所采用的基本基元包括秘密共享、不经意传输、同态加密和混淆电路。
ABY - 该框架仅实现具有半诚实安全性的两方计算[DSZ15]。但是,与MP-SPDZ不同,它提供了秘密共享计算和混淆电路之间的转换。内积示例需要大约60行代码,没有注释或空行。
ABY3 - 该框架仅以半诚实安全性来实现三方计算[MR18]。 内积示例需要大约需要40行代码,没有注释或空行。
CBMC-GC - 这是将C代码编译为二进制电路描述[BHWK16],并由ABY执行编译器。Hastings 无法执行示例代码。
EMP-toolkit - 框架仅在各种安全模型中实现混淆电路[WMK16]。内积示例需要大约60行代码,而没有注释或空行。
FRESCO - 这个框架[Ale20]只实现了不诚实多数计算,对算术电路(SPDZ和SPDZ2k )具有恶意安全,对二进制电路具有半诚实安全[DNNR17]。内积示例需要大约30行左右的代码,没有注释和空行。
Frigate - 这是一个编译器,它将类似C语言的代码编译成二进制的电路描述[MGC+16]。内积示例需要大约20行代码,没有注释或空行。
JIFF - 这个JavaScript库只实现了半诚实安全的诚实多数计算[Tea20]。与MP-SPDZ不同,它允许在离线和在线阶段之间改变安全模型。内积示例需要大约50行代码,没有注释和空行。
MPyC - 这个Python框架[Sch20]只实现了基于Shamir的秘密共享[Sha79]的半诚实安全的计算。内积示例需要大约20行代码,没有注释或空行。
Obliv-C - 这个框架通过标准C编译扩展到机器码[ZE15]。它只支持姚的乱码电路,具有半诚实的安全性。内积示例需要20行左右的代码,没有注释或空行。
OblivVM - 这个框架将Java的扩展编译成Java字节码[LWN+15]。它只支持Yao的乱码电路,具有半诚实的安全性。内积示例需要20行左右的代码,没有注释或空行。
PICCO - 这个框架通过标准C将C语言的扩展编译成本地二进制文件[ZSB13]。它只实现了基于Shamir的秘密共享的诚实多数半诚实计算。内积示例需要10行左右的代码,没有注释和空行。
SCALE-MAMBA - 这个框架[COS19]是SPDZ-2[KSS13,KRSS18]的另一个分叉。尽管有共同的根源,但自2018年以来,这两个分叉已经有了很大的分歧。SCALE-MAMBA只实现了素数模数(不是二的幂数)的算术计算,根据Hazay等人[HSS17]的混淆电路,以及基于秘密共享的二进制计算[FKOS15,WRK17]。所有的计算都只在恶意安全的情况下实现,不诚实多数计算模数化只使用同态加密实现。另一方面,SCALE-MAMBA对理论上可能的任何访问结构都实现了诚实多数计算。前端与MP-SPDZ中的类似,但没有后期增加的动态循环优化(6.3节)、重复代码优化(6.4节)和机器学习功能(7.3节)。此外,作者已经开始脱离Python编译器,转而使用基于Rust的新编译器。内积示例只需要不到10行代码,没有注释或空行。
Sharemind MPC - 这个框架实现了各种后端的前台,但它自己的后端只使用三方诚信多数半诚信计算[BLW08]。它还允许使用ABY和FRESCO作为后端,而专有的后端不能自由使用。内积示例只需要不到10行代码,没有注释和空行。
TinyGarble - 这个框架只实现了Yao的半诚实安全的混淆乱码电路[SHS+15]。Hastings等人无法在这个框架中运行他们所有的例子。
Wysteria - 这个框架实现了一个特定领域的语言,在半诚实环境下,只有二进制计算,且是不诚实大多数[RHH14]。Hastings等人无法在这个框架中运行他们所有的例子。