学习&转载文章:多方安全计算(4):MPC万能积木-秘密共享

前言

在之前的文章(多方安全计算(3)MPC万能钥匙:混淆电路中,我们对MPC中一类通用方案混淆电路(GC)与密文比较策略做了介绍。混淆电路通过将任务抽象为电路以及对基础电路提供加密方案达到了万能钥匙的效果。在姚期智先生提出GC方案不久后,Goldreich等人[1]提出了GMW范式,给通用的密文计算任务指明了一条新的方向。

与GC不同,GMW范式认为既然一个电路可以由与门或者或门组成,那么如果对与门和或门都可以做到输入与输出都为密文形式,且加密形式相同,那么就可以将初始的计算任务拆解为若干子计算步骤,通过逐步的完成密文计算就可以做到在密文下完成整个计算任务。当然,一个真实的计算任务从与门、或门出发是不合适的;一个更自然的出发点是加法计算与乘法计算,而本文将介绍如何通过秘密共享(也常被称为秘密分享)技术在MPC任务中完成加法与乘法计算。读者可以想象,这类似于搭积木,而基础的积木块就是密文加法与密文乘法。

  • GC是通过与门或者或门构造任意计算
  • SS是通过加法和乘法构成任意计算

宏观上说,如图一所示,多方安全计算以不经意传输为根基,基于此可以构造出混淆电路与秘密共享两类通用方案。值得注意的是,此三类方案在理论上都可以完成任意的密文计算任务;但在实际的方案中,往往由于效率上的取舍而构造更定制化的协议。

图1 多方安全计算概览

秘密共享

秘密共享技术事实上早于MPC被提出,其最初是为了解决密钥存储相关的问题,其最初的设计思路可参考文章(秘密共享—隐私计算和区块链共识中的榫卯)。简单起见,本文直接给出秘密共享的通用定义形式。

定义1:(接入结构)

定义\(p_1,...,p_n\)为参与方集合,\(A\in 2^{p_1,...,p_n}\)为参与方集合的一个集族。如果集合\(B\in A\)且\(B\in C\)可推出\(C\in A\),那么集族\(A\)就是单调的。接入结构定义为\(p_1,...,p_n\)的非空子集的一个单调集族\(A\)。接入结构\(A\)内的集合被称为授权集合,接入结构外的集合被称为未授权集合

此处通过定义授权集合来确定秘密应该被哪些参与方知晓。

定义2:(秘密共享)

如果以下条件成立,那么分配方案是在秘密的给定概率分布\(S\)上实现接入结构\(A\)的一个秘密共享方案,此处\(H\)表示信息熵。

正确性:对于每个授权集合\(B\in A\),有\(H(S|S_B)=0\)。

安全性:对于每个未授权集合\(T\notin A\),有\(H(S|S_T)=H(S)\)。

即对授权集合用户来说,更多的其它参与方也不能得到额外的信息;而对未授权集合,他们事实上未得到任何信息。因为上述定义需要绝对的正确性与安全性,以上定义也常被称为完美秘密共享;如将上述公式中的等号换成约等号,则相应方案常被称为统计秘密共享;在MPC计算中通常只关注于完美秘密共享方案。

以上定义是从信息论层面定义的秘密共享,即只有授权的参与方才能得到有用的信息。

密文加法

完美秘密共享有多种构造方法,通常也对应着不同的密钥管理需求;但在MPC中通常不聚焦于此;与同态类似,我们更关注于其计算的同态性。如本文开头所述,我们需要让单步计算的输入与输出保持同样的密文格式

在MPC计算中,我们通常使用最简单的秘密共享方案:加法秘密共享

可参考:Shamir秘密共享

例如,有原始的秘密值4,有两个参与方\(S_1\)与,\(S_2\),那么在经过加法秘密共享后,参与方\(S_1\)可能得到分享值3, \(S_2\)对应得到分享值1。当然,实践中我们通常选用一个较大的环(比如uint64)来完成秘密共享,需保证原始秘密值在这个环中,而分享值等可能的为环上的任意数;方便起见,后文中所述运算都为环中的运算,不再显式说明。

那么加法秘密共享是如何保证自然的保证加法同态性的呢?

有原始两份秘密\(a\)与\(b\);那么由于输入时秘密已被分享,比如\(S_1\)方持有\((a_1,b_1)\),\(S_2\)方持有\((a_2,b_2)\) ,那么由于有\(a_1+b_1+a_2+b_2=a+b\);那么每一方无需与另一方通信,即可在不暴露原始明文的情况下完成密文加法,计算完后\(S_1\)方持有\(a_1+b_1\),\(S_2\)方持有\(a_2+b_2\)。特别的,如果是已知的明文与秘密值相乘,也可以视为密文加法运算

密文乘法

上一节中我们描述了加法秘密共享方案如何自然的完成密文加法,然而此类方案在不交互的情况下完成密文乘法是不可能的。早期文献往往通过OT等方案辅助完成密文乘法;幸运的是,Beaver[2]提出一种被称为beaver triples的策略来更加优雅与一致的解决了这个问题。

  • 目的计算:\(xy\)

具体来说,Beaver将密文计算过程分为离线阶段与在线阶段;离线阶段即获得实际秘密之前的阶段。 beaver triples通过在离线阶段生成一个三元组\((a,b,c)\),保证\((c=ab)\);然后让参与方\(S_1\)与\(S_2\)分别获得\((a_1,b_1,c_1)\)与\((a_2,b_2,c_2)\)。

  • 需要引入一个三元组:\((a,b,c)\),满足\(c=ab\),参与方\(S_1\)和\(S_2\)分别有\((a_1,b_1,c_1)\)与\((a_2,b_2,c_2)\)

然后在某个时间点,参与方分别获得了实际秘密与的分享值\((x_1,y_1)\)与\((x_2,y_2)\)。容易注意到,存在如下公式:\((x-a)(y-b)=x y-a(y-b)-b(x-a)-ab\)

  • 进行秘密分发:\(S_1\)有秘密分片\((a_1,b_1,c_1,x_1,y_1)\)和\(S_2\)有秘密分片\((a_2,b_2,c_2,x_2,y_2)\)

此时,两参与方\(S_i(i=1,2)\)只需分别计算如下步骤(注:步骤中\(=\)为赋值运算符):

① \(S_i\)在本地计算 \(e_i=x_i-a_i,f_i=y_i-b_i\);

②\(S_i\)通过一轮交互【加法】恢复出\(e\)与\(f\);

③\(S_i\)在本地计算\(xy_i=c_i+b_ie+a_if\),然后\(S_1\)进一步计算\(xy_1=xy_1+ef\)。

  • 进行秘密重构:引入辅助信息(\(e=x-a\)和\(f=y-b\)),所以\(ef=(x-a)(y-b)=x y-a(y-b)-b(x-a)-ab\),即\(xy=ef+af+be+c\)

    • 其中\(e,f\)可以通过加法恢复出来,接下来各方通过\(xy=x(y_1+y_2)=xy_1*xy_2\)完成乘法计算。

其过程如下图所示。

图2 两方密文乘法过程

容易注意到,上述步骤实质上构造出了公式中除\(xy\)外每一项的加法分享;通过离线阶段的乘法替代了在线阶段的乘法。该方案也是两方(也可拓展为任意多方)秘密共享策略密文乘法的通用策略,但如何快速的在离线阶段生成beaver triples是一个十分有趣艰深且仍在不断探索的问题。

例子

本节中我们描述一个简单的使用场景:安全地提取传感器收集信息的特征。简单来说,系统模型如下:

这也是一个边缘计算的例子

图3 传感器信息密文特征提取

1、传感器搜集原始图像信息,然后借助两个边缘服务器完成信息的处理,并将结果反馈给用户。此处由于传感器无力完成信息的处理步骤,而不得不借助外部服务器;而传感器直接搜集的信息往往敏感而不能直接公开,因而需要保证边缘服务器们只能得到密文的输入。

2、针对图像的特征提取往往使用卷积神经网络

卷积神经网络常常由全连接层、卷积层、激活函数层与池化层组成。

  • 卷积层与全连接层仅涉及乘法与加法。例如,某卷积层的神经元共享同样的权重和偏置值;在计算这一层时,第\((j,k)\)个输出神经元是通过计算\(y_{j, k}=\sum_{l=0}^{n-1} \sum_{m=0}^{n-1} w_{l, m} x_{j+1, k+m}+b\)得到的,其中\(w_{l,m}\)与\(x_{j+1,k+m}\)为权重矩阵\(W\)与输入神经元对应位置的值。当使用预训练神经网络时,权重\(W\)与\(b\)为已知值。全连接层的计算与之类似,不再赘述。

  • 激活函数层为神经网络提供非线性。常见的激活函数,一类如sigmoid,其涉及指数运算与除法运算;另一类如ReLU,其仅涉及比较运算。诸如前者,通常可使用泰勒展开等方式将其转换为多项式,然后即可使用密文乘法与加法完成。而后者由于涉及比较运算,可借助于混淆电路中的方案完成;在之后的文章中,我们也将进一步介绍如何仅使用秘密共享完成比较计算。

  • 池化层分为最大池化与平均池化。最大池化层首先将输入分为若干个非重叠的小块,然后找出每个小块中最大的值并保留该值,而将其余值都置为0;平均池化计算每个小块中值的平均值,并用该平均值替换原来的值。对于前者同样涉及密文比较计算,而后者只是一个普通的密文加法运算,可在秘密共享中各方独立完成。

就这样,依靠本文所介绍的密文加法与乘法策略,再简单结合之前文章中的GC比较策略,我们就可以做到密文神经网络的计算,从而进一步完成密文传感器信息的特征提取,而只需传感器进行简单的加法秘密共享计算。

熟悉联邦学习的朋友可能注意到,上述策略如果应用于密文神经网络训练则与联邦建模目标一致;但请注意两类方案有着本质的不同:

  • MPC对每一步基础计算都做了密文替换,而联邦学习通常只对梯度等信息做了一定程度的遮掩
  • MPC类方案输入信息与神经网络参数的安全性由严格的困难性假设保证,但在效率上也仍有较大的改善空间。

总结

本文简要的介绍了多方安全计算中另一个重要工具秘密共享,并以加法秘密共享这一最简形式为例,介绍了密文加法与密文乘法的计算方法。值得注意的是,相比于GC类方案,秘密共享更符合直觉,也更多停留在数值计算的层次,因而在实际编码实现与应用中更占优势。虽然通过本文介绍的方案,在理论上已可以计算任意的密文计算,然而更高效的计算方式往往需要更定制化的密文计算协议,在真实的计算机中往往也有着更复杂的取舍。在之后的文章中,我们将介绍诸如比较与除法等基础计算模块的密文协议构造方法,也将介绍更多已有的开源密文计算框架。

参考文献

[1] Micali S, Goldreich O, Wigderson A. How to play any mental game[C]//Proceedings of the Nineteenth ACM Symp. on Theory of Computing, STOC. ACM, 1987: 218-229.

[2] Beaver D. Efficient multiparty protocols using circuit randomization[C]//Annual International Cryptology Conference. Springer, Berlin, Heidelberg, 1991: 420-432.

多方安全计算(4):MPC万能积木-秘密共享的更多相关文章

  1. Shamir秘密共享方案 (Python)

    Shamir's Secret Sharing scheme is an important cryptographic algorithm that allows private informati ...

  2. MPC:百万富翁问题

    学习文章:"一起学MPC:(一)百万富翁问题"和"[隐私计算笔谈]MPC系列专题(一):安全多方计算应用场景一览" 百万富翁问题 将问题具体化: Alice有\ ...

  3. 初识MPC

    MPC调研报告 ​ 这是一篇关于MPC的调研报告,主要介绍了我对MPC领域的一些基础认识.全文按照这样的方式组织:第一节我介绍了什么是MPC以及MPC的起源:第二节介绍了MPC领域常用的一些符号和安全 ...

  4. 洛谷P2409 Y的积木

    P2409 Y的积木 77通过 491提交 题目提供者zhouyonglong 标签云端评测 难度普及+/提高 提交  讨论  题解 最新讨论 这组数据几乎可以卡掉所有程- 第一个题解有点问题 求教大 ...

  5. DirectX11 With Windows SDK--27 计算着色器:双调排序

    前言 上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容: 章节 26 计算着色器:入门 深入理解与使用缓冲区资源(结构化缓冲区/有类型缓冲区) Vis ...

  6. MXNET:深度学习计算-模型参数

    我们将深入讲解模型参数的访问和初始化,以及如何在多个层之间共享同一份参数. 之前我们一直在使用默认的初始函数,net.initialize(). from mxnet import init, nd ...

  7. Federated Machine Learning: Concept and Applications

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Qiang Yang, Yang Liu, Tianjian Chen, and Yongxin Tong. 2019. Federate ...

  8. 【论文笔记】A review of applications in federated learning(综述)

    A review of applications in federated learning Authors Li Li, Yuxi Fan, Mike Tse, Kuo-Yi Lin Keyword ...

  9. Delphi 论文阅读 Delphi: A Cryptographic Inference Service for Neural Networks

    摘要 许多公司为用户提供神经网络预测服务,应用范围广泛.然而,目前的预测系统会损害一方的隐私:要么用户必须将敏感输入发送给服务提供商进行分类,要么服务提供商必须将其专有的神经网络存储在用户的设备上.前 ...

  10. 跨越千年的RSA算法

    转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...

随机推荐

  1. 远程连接Docker服务

    背景 本地开发了一个SpringBoot项目,想通过Docker部署起来,我本地是Window10系统,由于某些原因不能虚拟化并且未安装Docker-Desktop,所以我在想有没有办法本地不需要虚拟 ...

  2. 『玩转Streamlit』--图像与媒体组件

    Streamlit中的图像与媒体组件,主要是st.image.st.audio和st.video. 它们是专为在Streamlit Web应用程序中嵌入和展示多媒体内容而设计的,这些组件不仅丰富了应用 ...

  3. 学校官网应该使用哪种SSL证书?

    学校官网在选择SSL证书时,应考虑多个因素,包括网站的性质.安全要求.预算以及证书的管理便捷性等.以下是关于学校官网应使用哪种SSL证书的详细分析: 多域名和子域名需求: 如果学校官网有多个子域名或者 ...

  4. 全网最适合入门的面向对象编程教程:59 Python并行与并发-并行与并发和线程与进程

    全网最适合入门的面向对象编程教程:59 Python 并行与并发-并行与并发和线程与进程 摘要: 在 Python 中,"并行"(parallelism)与"并发&quo ...

  5. 教育账号无法登录OneDrive的一种解决方法

    众所周知,微软的服务总是能出现一些奇奇怪怪的问题,比如说教育账号无法登录OneDrive,尝试使用网上的临时解决方案失败 onedrive学生账号无法登录win10 OneDrive客户端 用户可以在 ...

  6. MySQL 8.0 OCP 最新中文考试题库(如需完整版请联系作者)

    大家好!今天要给大家带来的是由Oracle公司研发的MySQL 8.0认证考试试题本次试题是全网最全面的试题,总共包含123道.试题正确率在95%以上.对于在今年报考MySQL8.0 中文版本的考生有 ...

  7. golang工具之generate

    示例: 大家经常碰到命名错误码.状态码的同时,又要同步写码对应的翻译,有没有感觉很无聊.这里举一个例子: package main ​ import "fmt" ​ // 定义错误 ...

  8. 开发工具之DevToys

    DevToys 号称开发人员的瑞士军刀,可以帮助完成一些日常任务,比如格式化 JSON.比较文本.测试正则等,无需使用许多不真实的网站来处理的数据. 借助智能检测,DevToys 能够检测出可以处理在 ...

  9. 150页的剑指Offer解答PDF,它来了!!!

    它来了!!! 终于整理出了第一版剑指Offer的PDF,主要以Java语言为主,一共67道题,100多页. 领取方式如下(无套路直接获取百度网盘的 链接,如果链接失效可以直接找我): [秦怀杂货店]公 ...

  10. 通过su - userName 切换用户,无法通过userdel -r 删除用户?

    需要通过exit退出用户,su只是进行了切换,并没有关闭