安全多方计算框架
本文对现有安全多方计算/学习框架进行了全面、系统的梳理。
- 目前大部分安全多方计算框架主要基于秘密共享、同态加密、混淆电路以及相关基本模块的组合。
- 通常使用定制的协议来支持特定数量的参与方(一般为两方或三方),导致可扩展性较差。
- 大多数只能支持诚实大多数/不诚实大多数的半诚实安全模型,以及诚实大多数的恶意安全模型。恶意安全模型只有基于SPDZ协议的安全多方学习框架才可以支持。
- 大部分支持安全训练功能的框架能够高效运行的模型较为简单,如线性回归、逻辑回归和网构较为简单的神经网络。对ResNet等较复杂的模型支持较少或效率较低。
1. ABY
ABY框架由德国达姆施塔特工业大学(Technische Universita ̈t Darmstadt)的 Engineering Cryptographic Protocols Group于2015年在论文《ABY – A Framework for Efficient Mixed-Protocol Secure Two-Party Computation》中提出。
该框架仅实现具有半诚实安全性的两方计算,支持三种秘密共享类型(算术共享、布尔共享、姚式共享)之间的安全转换,其中,算术共享采用Beaver乘法三元组,布尔共享采用GMW(Goldreich-Micali-Wigderson)协议,姚式共享采用混淆电路协议。
源代码:
https://github.com/encryptogroup/ABY
2. ABY3
ABY3 由Payman Mohassel and Peter Rindal于2018年在论文《ABY3: A Mixed Protocol Framework for Machine Learning》中提出。
该框架设计了一个通用的基于三方服务器的隐私保护机器学习框架,基于此实现了新的线性回归、逻辑回归、神经网络模型;提出了新的完整的算术电路、布尔电路和Yao电路之间的转化协议;提出了新的三方秘密分享下的定点十进制小数乘法、并设计了计算分断线性多项式函数的协议;该框架仅以半诚实安全性来实现三方计算
源代码:
https://github.com/ladnir/aby3
3. CBMC-GC
CBMC-GC由Martin Franz1, Andreas Holzer于2014年在论文《CBMC-GC: An ANSI C Compiler for Secure Two-Party Computations》中提出。
该框架是一个能将符合ANSI-C标准的程序转换成布尔电路的电路编译器,还包括一个以其他格式输出电路的工具circuit-utils,这个工具对于仅支持部分电路格式的文件框架至关重要,比如EMP-toolkit。
源代码:
https://github.com/MPC-SoK/frameworks/tree/master/cbmc-gc
4. Cheetah
Cheetah是阿里安全双子座实验室于2022年在USENIX Security’22的发布的论文《Cheetah: Lean and Fast Secure Two-Party Deep Neural Network Inference》提出的框架。
该框架通过仔细设计DNN,基于格的同态加密、VOLE类型的不经意传输和秘密共享, 提出了2PC-NN推理的系统Cheetah, 比CCS’20的CrypTFlow2开销小的多, 计算效率更快, 通信效率更高。
源代码:
https://github.com/Alibaba-Gemini-Lab/OpenCheetah
5. CrypTFlow2
CrypTFlow2是微软Deevashwer Rathee等人在CCS’2020的发表论文《CrypTFlow2: Practical 2-Party Secure Inference》提出的框架。
该框架基于茫然传输(Oblivious Transfer, OT)提出了安全比较的一种新的协议,并对该协议进行了深度优化。然后,利用该比较协议设计了面向神经网络的多个算子协议,例如ReLU、Truncation、faithful Division (divisor is public), Avgpool、和Maxpool等。
源代码:
https://github.com/mpc-msri/EzPC
6. EMP-toolkit
EMP-toolkit由XiaoWang,AlexJ.Malozemoff,andJonathanKatz在2016年提出,实现了零知识证明、OT、混淆电路等安全多方计算基本模块,实现语言包括Python、C++等。
源代码:
https://github.com/emp-toolkit
7. FRESCO
FRESCO由Alexandra Institute于2020年提出,该框架是一个高效的安全计算框架,提供了许多常用的安全功能的标准库,以便快速实现新的复杂功能,在应用程序中使用。FRESCO支持并行化和预处理等技术,使其能够扩展到大型计算。
FRESCO框架只实现了不诚实多数计算,对算术电路(SPDZ和SPDZ2k )具有恶意安全,对二进制电路具有半诚实安全。
源代码:
https://github.com/aicis/fresco
8. Frigate
Frigate是一个编译器,它将类似C语言的代码编译成二进制的电路描述,由Benjamin Mood, Debayan Gupta, Henry Carter等人于2016年在论文《Frigate: A Validated, Extensible, and Efficient Compiler and Interpreter for Secure Computation》中提出。
9. JIFF
JIFF由Multiparty.org Development Team于2020年发布,是一个用于构建依赖安全多方计算的应用程序的JavaScript库。JIFF高度灵活,专注于可用性,能够在浏览器、手机或Node.js中运行。JIFF的设计使得开发人员不需要熟悉MPC技术或知道密码协议的细节,就可以构建安全的应用程序。
源代码:
https://github.com/multiparty/jiff
10. MP-SPDZ
MP-SPDZ由澳大利亚的研究机构CSIRO’s Data61于2020年在论文《MP-SPDZ: A Versatile Framework for Multi-Party Computation》中提出。
MP-SPDZ 作为SPDZ-2(Keller等人,CCS’13)的分支,是多方计算MPC协议SPDZ(Damgård等人,Crypto’12)的实现。MP-SPDZ将SPDZ-2扩展到了二十多种MPC协议,
该框架作为SPDZ-2的分支,是多方计算协议SPDZ的实现。MP-SPDZ将SPDZ-2扩展到了二十多种MPC协议,涵盖了常用的安全模型(诚实/不诚实的多数人和半诚实/恶意模型),以及二进制和算术电路的计算(后者的模数为素数和二次幂),所采用的基本模块包括秘密共享、不经意传输、同态加密和混淆电路。主体语言是Python,定义了很多新的关于MPC的类和库,可基于Python的高级编程接口来使用相关协议。
11. MPC-ECDSA
2023年,Safeheron公司开源了基于 C++ 的 MPC 门限签名协议库,主要包括GG18、GG20、MPC-CMP3 种具有代表性的 MPC-ECDSA 协议。
源代码:
https://github.com/Safeheron/multi-party-ecdsa-cpp
12. MPyC
MPyC由Berry Schoenmakers于2020年发布,是一个用于MPC的开源Python包,实现了基于Shamir的秘密共享的半诚实安全的计算。
源代码:
https://github.com/lschoe/mpyc
13. Obliv-C
Obliv-C由Samee Zahur, Mike Rosulek, David Evans于2015年在论文《Obliv-C: A Language for Extensible Data-Oblivious Computation》中提出。
Obliv-C是一个简单的GCC包装器,可以很容易地在常规C程序中嵌入安全计算协议。
源代码:
https://github.com/samee/obliv-c
14. OblivVM
OblivVM由Chang Liu, Xiao Shaun Wang, Kartik Nayak等人于2015年在论文《ObliVM: A Programming Framework for Secure Computation》中提出。
ObliVM提供了一种领域专用语言,将Java的扩展编译成Java字节码,支持Yao的混淆电路,具有半诚实的安全性。
源代码:
https://github.com/oblivm/ObliVMLang
15. PICCO
PICCO由Yihua Zhang, Aaron Steele, and Marina Blanton于2013年在论文《PICCO: A General-Purpose Compiler for Private Distributed Computation》中提出。
该框架将C语言扩展编写的程序编译成本地二进制文件,并在分布式环境中运行它,实现了基于Shamir的秘密共享的诚实多数半诚实计算。
源代码:
https://github.com/applied-crypto-lab/picco
16. Private Join and Compute
谷歌公司于2019年推出了Private Join and Compute隐私计算开源框架。该框架Private Join和Compute结合了隐私集合交集、同态加密两种基本的加密技术来保护数据。
源代码:
https://github.com/Google/private-join-and-compute 。
17. SCALE-MAMBA
SCALE-MAMBA框架由KU Leuven COSIC于2019年提出。该框架是SPDZ-2的另一个分叉,尽管有共同的根源,但自2018年以来,这两个分叉已经有了很大的分歧。SCALE-MAMBA只实现了素数模数(不是二的幂数)的算术计算,根据Hazay等人的混淆电路,以及基于秘密共享的二进制计算。所有的计算都只在恶意安全的情况下实现,不诚实多数计算模数化只使用同态加密实现。另一方面,SCALE-MAMBA对理论上可能的任何访问结构都实现了诚实多数计算。前端与MP-SPDZ中的类似,但没有后期增加的动态循环优化、重复代码优化和机器学习功能。此外,作者已经开始脱离Python编译器,转而使用基于Rust的新编译器。
源代码:
https://github.com/KULeuven-COSIC/SCALE-MAMBA
18. Sequre
Sequre由Haris Smajlović, Ariya Shajii, Bonnie Berger等人于2023年在论文《Sequre: a high-performance framework
for secure multiparty computation enables biomedical data sharing》提出。
该框架是一个易于使用的高性能MPC应用开发框架,提供了一套自动编译时优化,可以显著提高MPC应用程序的性能,主体语言是Python,目前已应用与在各种生物信息学任务上,包括全基因组关联研究、药物-靶标相互作用推断等,速度比现有流程提高了3-4倍,代码库大小减少了7倍。
源代码:https://github.com/0xTCG/sequre
19. Sharemind MPC
Sharemind MPC由 于200年在论文《Sharemind: A Framework for Fast Privacy-Preserving Computations》中提出。
该框架实现了各种后端的前台,但它自己的后端只使用三方诚信多数半诚信计算。它还允许使用ABY和FRESCO作为后端,而专有的后端不能自由使用。
源代码:
https://github.com/sharemind-sdk
20. Squirrel
Squirrel是摩根大通及其附属公司(“JP摩根”)的人工智能研究小组和AlgoCRYPT CoE小组于2023年在论文《Squirrel: A Scalable Secure Two-Party Computation Framework for Training Gradient Boosting Decision Tree》提出的框架。
该框架可在纵向切分的数据集上进行安全的两方GBDT训练的框架,其中两个数据所有者各自持有相同数据样本的不同特征,在训练过程中不会泄露任何敏感的中间信息。
21. TinyGarble
TinyGarble由Ebrahim M. Songhori, Siam U. Hussain等人于2015年在论文《TinyGarble: Highly Compressed and Scalable Sequential Garbled Circuits》中提出。
该框架实现了Yao的半诚实安全的混淆乱码电路。TinyGarble可以将1024位乘法所需的内存占用压缩为4,172倍,同时将非XOR门的数量减少67%。
源代码:
https://github.com/esonghori/TinyGarble
22. Wysteria
Wysteria由Aseem Rastogi、Matthew A. Hammer等人于2014年在论文《WYSTERIA: A Programming Language for Generic, Mixed-Mode Multiparty Computations》中提出。
该框架实现了一个特定领域的语言,在半诚实环境下,只有二进制计算。
源代码:
https://github.com/voidshard/wysteria