隐私计算
隐私计算learning
从技术层面来说,隐私计算主要有三类主流技术路线:一类是采用密码学和分布式系统,以多方安全计算(Secure Multiparty Compute,MPC)为代表;另一类是采用基于硬件的可信执行环境(Trusted Execution Environment,TEE);最后一类是近年来发展相当火热的**联邦学习(Federated Learning,FL)**。此外,还有零知识证明、同态加密、差分隐私等技术。各类技术路线融合应用趋势凸显。
参考
隐私计算介绍https://www.esensoft.com/industry-news/dx-5995.html
对多方学习的介绍和经典应用https://36kr.com/p/1718172828733449
默克尔树的介绍https://yeasy.gitbook.io/blockchain_guide/05_crypto/merkle_trie
多方安全计算
- 定义
多方安全计算(Secure Multi-Party Computation)是指在无可信第三方的情况下,多个参与方协同计算一个约定函数,除计算结果以外,各参与方无法通过计算过程中的交互数据推断出其他参与方的原始数据。作为隐私计算的一种常用工具,多方安全计算在安全性和易用性方面有着天然的优势。
- 起源
起源于1982年姚期智院士提出的姚氏百万富翁问题:两个百万富翁在街头偶遇,双方想要知道谁更有钱,但他们都不想暴露自身的资产金额,如何在不借助第三方的情况下,得出谁更富有的结论。
最经典的解决方案如下:
假设两个富翁为张三、李四,拥有资产分别为:张三拥有300万,李四拥有500万。
3.后续发展
目前,在MPC 领域,主要用到的是技术是秘密共享、不经意传输、混淆电路、同态加密、零知识证明等关键技术,你可以认为多方安全计算是一堆协议集。
1.秘密共享
秘密共享的思想是将秘密以适当的方式拆分,拆分后的每一个份额由不同的参与者管理,单个参与者无法恢复秘密信息,只有若干个参与者一同协作才能恢复秘密消息。更重要的是,当其中任何相应范围内参与者出问题时,秘密仍可以完整恢复。
example:
假如你和你的朋友们正在一起面临某种生存困境,比如在野外迷路了,或是被困在沙漠中,或是核冬天,或是丧尸来袭,你们难以获取食物,只好将剩下的食物的收集到一起放进保险箱。但是有个问题—你们并不相信其他人,其他人很可能趁大家不注意将食物偷走。这时候,保险箱的钥匙应该怎么保管?
shamir方案[5]就是指准备w把钥匙,至少要t把钥匙才能开启:
数学上类似多元一次线性方程,每一行包含n个变量的方程等同于分给每个人的一把钥匙,总方程的变量数=必须的钥匙数+一个或多个最终答案
2.同态加密(抽象等我多看几篇博客缓缓)
同态加密是一种允许在加密之后的密文上直接进行计算,且计算结果解密后和明文的计算结果一致的加密算法。
这个特性属性对于保护信息的安全具有重要意义,利用同态加密技术可以先对多个密文进行计算之后再解密,不必对每一个密文解密而花费高昂的计算代价;利用同态加密技术可以实现无密钥方对密文的计算,密文计算无须经过密钥方,既可以减少通信代价,又可以转移计算任务,由此可平衡各方的计算代价,利用同态加密技术可以实现让解密方只能获知最后的结果,而无法获得每一个密文的消息,可以提高信息的安全性。
3.不经意传输
不经意传输是一种可保护隐私的双方通信协议,消息发送者从一些待发送的消息中发送某一条给接收者,但并不知道接收者具体收到了哪一条消息。不经意传输协议是一个两方安全计算协议,协议使得接收方除选取的内容外,无法获取剩余数据,并且发送方也无从知道被选取的内容。
比如Alice每次发两条信息(m0、m1)给Bob,Bob提供一个输入,并根据输入获得输出信息,在协议结束后,Bob得到了自己想要的那条信息(m0或者m1),而Alice并不知道Bob最终得到的是哪条。
example:
steps alice bob 1|2 生成两对rsa公私钥,将公钥puk0和puk1发给bob 生成一个随机数,用puk1和puk0中随机一个加密此随机数,将密文发给alice 3|4 alice用两个私钥分别解密收到的随机数密文,得到k0和k1,并将要发送的消息m1和m2与k0、k1分别异或,将结果e0,e1发给bob bob将自己的真实随机数与收到的e0、e1分别异或,将得到一条真是数据和一条随机数 分析 第三步最关键,alice如果无法分辨bob的真实随机数,则无法得知bob获得的是哪条数据 4.零知识证明
零知识证明指的是证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。允许证明者 prover、验证者 verifier 证明某项提议的真实,却不必泄露除了「提议是真实的」之外的任何信息。
example:
在图中,C点和D点之间存在一道密门,只有知道秘密口令的人才能打开。证明者(Prover)P知道秘密口令,并希望向验证者(Verifier)V证明,但又不希望泄露秘密口令,可通过以下证明过程实现:
第一步,验证者V站在A点,证明者P站在B点;
第二步,证明者P随机选择走到C点或D点,验证者V在A点无法看到证明者P选择的方向;
第三步,验证者V走到B点,并要求证明者P从左通道/右通道的方向出来;
第四步,证明者P根据验证者V的要求从指定方向出来,如有必要需要用秘密口令打开密门。
如果证明者P知道秘密口令,就一定能正确地从验证者V要求的方向出来;如果证明者P不知道秘密口令,则每次有1/2的概率能从验证者V要求的方向出来。该证明过程可重复进行多次,直到验证者V相信证明者P拥有打开密门的秘密口令。
通过以上证明过程,证明者P就向验证者V完成了关于秘密口令的零知识证明,即证明过程不会泄露任何关于秘密口令的知识。
用默克尔树结构为例,可证明某个人拥有L1 - L4这些原始数据,但又不需将数据公之于众第一步:证明者可通过创建如图所示的默克尔树结构,然后对外公布Hash0-1、Hash1以及Top Hash(在哈希算法篇时,我们曾介绍过仅哈希值无法推导出原始数据)。
第二步:通过数据L1经哈希算法生成Hash0-0,然后根据公布的Hash0-1生成Hash0 ,再根据公布的Hash1生成Top Hash。如果最后生成的Top Hash值与公布的Top Hash值一致,则可证明他是拥有L1 - L4数据,而不需要公布这一系列的原始数据。这也就实现了零知识证明。
联邦学习
- 定义
假设有两个不同的企业 A 和 B,它们拥有不同的数据,比如企业 A 有用户特征数据,企业 B 有产品特征数据和标注数据。这两个企业按照 GDPR 准则是不能粗暴地把双方数据加以合并的,因为他们各自的用户并没有机会同意这样做。
假设双方各自建立一个任务模型,每个任务可以是分类或预测,这些任务也已经在获得数据时取得了各自用户的认可。
那么,现在的问题是如何在 A 和 B 各端建立高质量的模型。但是,又由于数据不完整(例如企业 A 缺少标签数据,企业 B 缺少特征数据),或者数据不充分(数据量不足以建立好的模型),各端有可能无法建立模型或效果不理想。联邦学习就是来解决这个问题的。
联邦学习的本质是一种机器学习框架,即分布式机器学习技术。联邦学习以一个中央服务器为中心节点,通过与多个参与训练的本地服务器(以下简称“参与方”)交换网络信息来实现人工智能模型的更新迭代。
即中央服务器首先生成一个通用神经网络模型,各个参与方将这个通用模型下载至本地并利用本地数据训练模型,将训练后的模型所更新的内容上传至中央服务器,通过将多个参与方的更新内容进行融合均分来优化初始通用模型,再由各个参与方下载更新后的通用模型进行上述处理,这个过程不断重复直至达到某一个既定的标准。
在整个联邦学习的过程中,各参与方的数据始终保存在其本地服务器,降低了数据泄露的风险。
- 解释
我们以包含两个数据拥有方(即企业 A 和 B)的场景为例介绍联邦学习的系统构架。该构架可扩展至包含多个数据拥有方的场景。假设企业 A 和 B 想联合训练一个机器学习模型,它们的业务系统分别拥有各自用户的相关数据。
此外,企业 B 还拥有模型需要预测的标签数据。出于数据隐私保护和安全考虑,A 和 B 无法直接进行数据交换,可使用联邦学习系统建立模型。联邦学习系统构架由三部分构成。
第一部分:加密样本对齐。由于两家企业的用户群体并非完全重合,系统利用基于加密的用户样本对齐技术,在 A 和 B 不公开各自数据的前提下确认双方的共有用户,并且不暴露不互相重叠的用户,以便联合这些用户的特征进行建模。
第二部分:加密模型训练。在确定共有用户群体后,就可以利用这些数据训练机器学习模型。为了保证训练过程中数据的保密性,需要借助第三方协作者 C 进行加密训练。以线性回归模型为例,训练过程可分为以下 4 步:
第①步:协作者 C 把公钥分发给 A 和 B,用以对训练过程中需要交换的数据进行加密,注意传输的数据是模型的计算中间结果(后面会解释具体是什么),不涉及用户隐私,当然虽然传输的数据是加密的,但模型训练的时候是要用私钥解密的。
第②步:A 和 B 之间以加密形式交互用于计算梯度的中间结果,那个这个中间结果具体指什么呢?
我参考的博客作者作了如下解释:
假设A上有样本的X1,X2特征,B上有样本的X3,X4特征及标签Y,模型为logistic回归;首先,A根据当前模型计算每条记录的X1,X2线性组合结果,B根据当前模型计算每条记录的X3,X4线性组合结果;然后A将结果加密后传给B,同时B将结果加密后传给A。
第③步:A和B分别基于解密后的交互中间信息(线性组合结果)进行各自的梯度值计算,比如B可基于接收的线性组合结果、标签Y等数据计算LOSS(损失)及X3、X4的梯度,A接收后可计算LOSS(损失)及X1,X2的梯度。
然后A,B分别将计算得到的X1,X2,X3,X4的梯度值上传到C,C基于梯度值计算出模型的新参数。
第④步:C将四个新参数分别传送回A和B,也就是更新A,B的模型,用于新一轮的迭代。
迭代上述步骤直至损失函数收敛,这样就完成了整个训练过程。在样本对齐及模型训练过程中,A 和 B 各自的数据均保留在本地,且训练中的数据交互也不会导致数据隐私泄露。因此,双方在联邦学习的帮助下得以实现合作训练模型。
第三部分:效果激励。联邦学习的一大特点就是它解决了不同机构要加入联邦共同建模的问题,提供数据多的机构所获得的模型效果会更好,模型效果取决于数据提供方对自己和他人的贡献。这些模型的效果在联邦机制上会分发给各个机构反馈,并继续激励更多机构加入这一数据联邦。以上三部分的实施,既考虑了在多个机构间共同建模的隐私保护和效果,又考虑了以一个共识机制奖励贡献数据多的机构。
机密计算
- 定义
机密计算就是针对数据在使用过程中的安全问题所提出的一种解决方案。它是一种基于硬件的技术,将数据、特定功能、应用程序,同操作系统、系统管理程序或虚拟机管理器以及其他特定进程隔离开来,让数据存储在可信执行环境(Trusted Execution Environment,TEE)中,即使是使用调试器,也无法从外部查看数据或者执行操作。TEE确保只有经过授权的代码才能访问数据,如果代码被篡改,TEE将阻止其继续进行操作。
机密计算的核心功能有:
第一、保护 In-Use 数据的机密性:内存中的数据是被加密的,即便被攻击者窃取到内存数据也不会泄露数据;
第二、保护 In-Use 数据的完整性:度量值保证了数据和代码的完整性,使用中有任何数据或代码的改动都会引起度量值的变化;
第三、保护 In-Use 数据的安全性:相比普通应用,机密计算应用有更小的 TCB(Trusted Compute Base),意味着更小的攻击面,也意味着更安全。,以 Intel SGX 为例,除了 CPU 和可信应用自身以外,其他软硬件的访问都是被拒绝的,包括操作系统、Hypervisor 等。
差分隐私
- 定义
差分隐私(Differential Privacy)是Dwork[3] 在2006年针对数据库的隐私泄露问题提出的一种新的隐私定义。主要是通过使用随机噪声来确保,查询请求公开可见信息的结果,并不会泄露个体的隐私信息,即提供一种当从统计数据库查询时,最大化数据查询的准确性,同时最大限度减少识别其记录的机会,简单来说,就是保留统计学特征的前提下去除个体特征以保护用户隐私。
举个例子,当不使用差分隐私技术时,我们查询A医院数据库,查询今日就诊的100个病人患病情况,返回10人患肺癌,同时查询昨天99个病人患病情况,返回9个人患肺癌,那就可以推测今天来的那个人张三患有肺癌,这个就暴露了张三的个人隐私了。
使用差分隐私技术后,查询A医院的数据库,查询今日就诊的100个病人患病情况,返回肺癌得病率9.80%,查询今日就诊的99个病人患病情况,返回肺癌得病率9.81%,因此无法推测剩下1个人张三是否患有肺癌。