开始阅读杨强老师的《联邦学习》。
本周主要学习了隐私保护的机器学习的相关知识,包括面向隐私保护的机器学习(PPML)技术和数据分析(第二章)。
PPML中,敌手被假设违反了机器学习系统的隐私性和机密性(系统的敏感信息,比如训练数据或者训练模型的泄露)。PPML中包括了一些著名的方法,安全多方计算,供隐私保护模型训练和预测使用的同态加密算法,防止数据泄露的差分隐私方法。
一 安全威胁模型
为了更好的在机器学习中保护隐私性和完整性,我们先来了解完全威胁模型。在机器学习任务中,威胁安全的参与方通常会扮演三种不同的角色:
输入方:数据的原始拥有者。
计算方:模型建立者和推理服务提供者。
结果方:模型查询者和用户。
攻击方法:
- 重构攻击:攻击者在模型训练期间抽取训练数据或者训练数据的特征向量。
- 模型反演攻击:敌手攻击目的和重构一样。如果敌手拥有白盒权限,不需要存储特征向量就可以获取模型的明文内容,如果敌手有黑盒权限,只能查询模型的数据并收集返回结果。
- 成员推理攻击:敌手获知给定样本是否在模型的训练集中。具体来说就是,敌手知道一个特定样本,判断该样本是否在模型的训练集中。
- 特征推理攻击:简单来说就是获得用户的敏感特征(个人信息)。
敌手的两种类型:
- 半诚实敌手:遵守协议,试图获得除收到信息以外的更多信息。
- 恶意的敌手:不遵守协议,执行任意攻击。
大部分PPML都是考虑半诚实敌手,因为恶意的敌手的行为对自身也会产生非常恶劣的影响。
对于每个安全模型,敌手会攻击一部分参与方使之腐败,而腐败的参与方可能会互相勾结。参与方的腐败可以是静态的,也可以是自适应的,敌手的复杂度可以是多项式时间的或是无计界限的,分别对应着计算安全和信息理论安全,密码学的安全性以不同区分性为基础。
二 隐私保护技术
- 安全多方计算
定义:允许我们计算私有输入值的函数,从而使每一方只能得到其相对应的函数输出值,而不能得到其他方的输入值和输出值。
假设一个私有的数值 𝑥 被分给n 位共享方,则每一方 𝑝𝑖 只根据输入的 𝑥𝑖 来获得输出值 𝑦𝑖 ,所有方能够协同的计算:
𝑦1……𝑦𝑛=𝑓𝑥1……𝑥𝑛
安全多方计算可以通过三种不同框架来实现:不经意传输,秘密共享,阈值同态加密。秘密共享被广泛认为使安全多方计算的核心。
1.1 不经意传输的几种构造方法
看了这几种构造方法就知道不经意传输的定义和核心了。
(1) Bellare-Micail 构造
原理:接收方向发送方发送两个公钥,接收方只拥有两个公钥其中一个所对应的私钥,并且发送方不知道接收方拥有这两个公钥的哪一个私钥,发送方对公钥对应的信息进行加密,发送给接收方,接收方用私钥进行解密。
(2) 姚氏混淆电路
中心思想就是将计算电路分解为产生阶段和求值阶段,每一方对应一个阶段,每个阶段的电路都被做了加密,所以任何一方都不能从其他方获得信息。但这种方法也有局限性,敌手可以通过电路获取结果。混淆电路由一个不经意传输协议和分组密码组成。
(3)不经意传输扩展
不经意传输都有一个公共密钥(因素分解,离散对数)扩展就是基于公钥密码学产生少量的种子,而这些种子可以使用对称密钥密码体制来扩展到任意数量的不经意传输。
1.2 秘密共享
是通过将秘密值分割为随机多份,并将这些份分发给不同方来隐藏秘密值。每一方只能拥有一个通过共享得到的值,即秘密值的一小部分,根据场合需求,需要一定数量的共享数值来重新构造原始的秘密值。
秘密共享其实就是把要分享的数据分成n部分,发送给n各参与方,获得方根据需求构造值。
- 同态加密
是一种不需要对密文进行解密的密文计算方法。
定义:设同态加密方法为 {KeyGen,Enc,Dec,Eval};该方法由四个元组组成
KeyGen是密钥生成函数;Enc是加密函数;Dec是解密函数;Eval是评估函数。
- 非对称同态加密:输入密钥生成元g,输出一个密钥对{pk,sk}=KeyGen(g),(pk是明文加密的公钥,sk是解密的私钥),Enc的输入是明文和pk,输出是c(密文),Dec'的输入是c和sk,输出是相关明文。
- 对称……:KeyGen只生成密钥sk,没有pk,其余函数也没有pk的输入和输出,其他部分是一样的。
如果密文空间只需要经过运算(加法,标量乘法),不需任何中间解密,可以得到明文空间,则证明这个安全密码系统是同态的。
- 差分隐私
中心思想:当敌手想从数据库中查询个体信息时,将其混淆,使其无法从查询结果中辨别个体信息的敏感性。
函数的输出结果对数据集中任何的特定记录都不敏感,因此差分隐私可以抵抗成员推理攻击。
实现差分隐私最常用的方法就是在数据集中加入噪声(优劣明显:会影响模型效果)
导师说不理解安全多方等密码学算法,这章等于白学......
针对本章知识的扩展
安全多方计算
该方法解决的问题就是互相不信任的双方,也不信任其他任何第三方,想要实现通信。
先来看一下姚期智提出的”百万富翁“问题:
Alice有i亿资产,Bob有j亿资产,双方想比较谁更有钱,但是没有可信的第三方,这个问题解法如下:
(1) Alice选择一个大随机数x,并用Bob的公开密钥加密c=Eb(x);
(2) Alice计算c-i,并将结果发送给Bob:
(3) Bob计算下面的100个数:Yu=Db(c-i+u),(v,u=1,2,... ,100 )其中Db是Bob的私有解密密钥。Bob选择一个大素数p(p应该比x稍小一点,Bob不知道x,但Alice能容易地告诉他x的大小),然后计算下面的100个数:Zu=(Yu mod p)。然后验证对所有的u≠v, |Zu-Zv|≥2,并对所有的u验证:0<Zu<p-1。如果不成立,Bob就选择另一个素数并重复验证;
(4) Bob将以下数列和p发送给Alice:[Z1,Z2,... ,Zj + 1,Zj+1 +1, ..., Z100 +1],p;就是所从第j位对Zu数列+1操作;
(5) Alice验证这个数列的第i个数是否与x模p同余。如果同余,她得出的结论是i<=j;如果不同余,她得出的结论是i>j;
(6) Alice把这个结论告诉Bob
多个参与方各自持有数据,共同执行一个计算逻辑,在过程中,参与的每一方不会泄露数据,这就是安全多方计算,也称为MPC计算。
就像百万富翁问题一样,双方想知道自己谁钱多,可以把各自资产告诉一个中间人小a,并且这个小a是完全可信的,而在MPC计算中,算法设计了一个协议可以充当小a的角色,取代中间人的位置。
未更新完,待续......