笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具,经由自己阅读后整理而成。
(一)混淆电路
在经典的混淆电路中,加密和扰乱是以门为单位的。每个门都有一张真值表。
(混淆电路的详细原理可找其他一些写的比较完整的博客文章读一读。)
开源框架 Obliv-C
该框架开发者在C语言基础上进行了一定的类C语言处理,添加了一些规则限制来实现混淆电路。Obliv-C 支持双方的半诚实安全模型,源码公布在 GitHub上: [ GitHub - samee/obliv-c ]
Obliv-C 有自己的一套编程语法和相关规则,比如说使用 obliv 来修饰隐私输入数据,指只有数据拥有者才知道其具体值。此外,Obliv-C 还提供了一系列用于隐私计算的函数。Obliv-C 的设计者并没有提供其各个文件的具体介绍,简单使用 Obliv-C 软件也仅需了解其如何编程、如何运行、如何调试即可。打开安装好的 obliv-c 文件夹,可在一级目录中找到一个名为 test 的文件夹,打开它找到一个名为 oblivc 的文件夹,打开它所显示的文件目录即为设计者提供的一系列已完成案例,其中 README.txt 文件中详细说明了各个案例的功能实现,该文件位置也是 Obliv-C 编程的 workspace。
注意,其中涉及到 Makefile 文件的编译,在当前目录的工作路径中输入 make 执行命令行,则会自动生成一个名为 a.out 的文件。可能有些人没接触过 Makefile,有关 Makefile文件的介绍和使用参见下面:
Makefile文件详解:[ Makefile教程(绝对经典,所有问题看这一篇足够了) ]
再找一找有关 Obliv-C 的运行实例,可参考博客:如何运行Obliv-C
从混淆电路的原理可以了解到,相比于明文计算,使用混淆电路计算的网络通信次数及通信量会大大增加。
扩展——姚氏布尔电路优化
姚氏布尔电路主要是将任意功能函数转化为布尔混淆电路,由 Alice 方生成混淆电路表,Bob 方计算混淆电路;针对每一个电路门进行对称加密运算,调用OT协议进行混淆电路中的密钥信息的交换。早期的安全函数计算问题主要是采用混淆电路来解决的,但由于混淆电路对每一比特位进行电路门计算,电路门数量巨大,计算效率较低。针对这些问题,研究者提出了一系列电路优化策略,包括Free-XOR、行约减、Half-Gate技术。
扩展——算术电路
算术电路,可以在有限域上完成加法或乘法运算。一个算术电路由很多个门组成,其中有加法门,乘法门。每个门有几个输入引脚和输出引脚。每个门做一次加法运算或乘法运算。平时跑的代码(没有死循环)都可以用算术电路来表示。
总结:
基于混淆电路的多方安全计算的优势在于固定的交互次数,即两方的交互次数与数据大小、计算量无关,其局限性在于复杂的运算和大的通信开销。Obliv-C 框架对隐私计算混淆电路的计算协议进行了很好的抽象,可以在 C 语言的基础上比较方便地实现两方隐私计算而不需要关心混淆电路的底层实现逻辑。开发人员只需要掌握框架语法和规则就可以进行应用开发了。但是,目前 Obliv-C 框架还是侧重于两方参与的隐私计算,而隐私计算场景有时涉及多方参与。此外,Obliv-C 主要支持的是半诚实安全模型,在实际应用时也要注意其适用场景。
10月份新开了一个GitHub账号,里面已放了一些密码学,隐私计算电子书资料了,之后会整理一些我做过的、或是我觉得不错的论文复现、代码项目也放上去,欢迎一起交流!Ataraxia-github (Ataraxia-github) / Repositories · GitHub