共计 5650 个字符,预计需要花费 15 分钟才能阅读完成。
“隐语”是开源的可信隐衷计算框架,内置 MPC、TEE、同态等多种密态计算虚构设施供灵便抉择,提供丰盛的联邦学习算法和差分隐衷机制。
开源我的项目:
https://github.com/secretflow
https://gitee.com/secretflow
DataFunTalk. 专一于大数据、人工智能技术利用的分享与交换。致力于成就百万数据科学家。定期组织技术分享直播,并整顿大数据、举荐 / 搜索算法、广告算法、NLP 自然语言解决算法、智能风控、主动驾驶、机器学习 / 深度学习等技术利用文章。
嘉宾:洪澄
洪澄,中国科学院大学博士,目前于阿里巴巴团体安全部双子座实验室负责资深平安专家,次要从事密码学、隐衷爱护计算相干技术钻研,率领团队在 EuroCrypt、S&P(Oakland)、USENIX’SEC、SIGMOD、SIGKDD、VLDB 等顶级学术会议和期刊上发表论文 30 余篇,获 iDASH 国内基因隐衷计算大赛一等奖,牵头负责了平安多方计算国际标准 IEEE P2842 的撰写工作。
分享主题:可证实平安的隐衷计算
注释:为什么隐衷计算中会须要可证实平安?顾名思义,隐衷计算是爱护隐衷的计算,那么视隐衷爱护水平的不同,其计算效率也不同。比方,广域网下多方单干,应用 LR 训练一个这么大的数据集,迭代一次须要多久呢?有的计划须要 100 秒,有的须要 0.3 秒,有的则须要 15 分钟。
所以如果间接问隐衷计算的效率当初能做到比明文慢多少倍,这是没有方法答复的;先形容隐衷爱护的水平,再形容计算效率,这个形容才有意义。例如,咱们列一个坐标轴,X 轴是效率,Y 轴是安全性,只说效率是多少,就像只给出 X 轴的坐标,没有给出 Y 轴的坐标,那是无奈判断这个计划的好坏的。
然而因为效率是最容易掂量的,大家都十分善于 PR 这个 X 轴,比方能做到仅比明文计算慢多少倍,有的人说三个量级,有的人说两个量级,甚至我最近看到说比明文仅慢 3 到 5 倍的都有。然而 Y 轴则甚少有厂商被动提及,因为他看不见摸不着也不好形容。那客户就永远只能看到 X 轴,犹如盲人摸象,这就是业界的一个现状。
如何讲清楚一个计划在 Y 轴中的地位?这就须要 可证实平安了。首先要明确定义平安假如,即计划能进攻什么样的攻击者,不能进攻什么样的攻击者;而后在这一假如下,证实计划面对攻击者的时候,能达到什么样的防护成果,有哪些信息泄露。打个比方,仅说“我的计划是平安的”,这是不够的;更适合的办法是证实“我的计划在单方都是半诚恳的假如下,只会泄露行数、列数、建模后果,没有其余信息泄露”。这样就能够不便地在 Y 轴中找到它的地位了。
这里有一个很好的反例,就是 dragon in my garage,这是东方的一个寓言:我的仓库里有一条喷火龙。他人问我:你的龙为什么看不见?我说因为它是通明的。又问:你的龙为什么没有足迹?我说因为它是飞着的。又问:你的龙为什么摸不着?我说因为它是等离子态的。只有我没有明确地定义什么是龙,龙能干什么,那么无论你怎么问,我都能够找到一个圆过来的办法。
隐衷计算的安全性也是如此,如果不应用可证实平安来侧面的论证一个隐衷计算计划的安全性,而是被动地等着他人来挑战,那就跟仓库喷火龙一样,无论怎么攻打都能够圆过来。比方他人问我的计划是不是泄露了统计信息?我说这不重要,不影响隐衷。又问:计划是不是须要额定的第三方?我说咱们会对第三方进行严格的审计,又问:你这个借鉴的加密算法有平安证实吗?我说为技术窃密,临时不能颁布;等等。
留神一个误区,就是要求计划具备可证实安全性,并不等于要求计划具备最高级的安全性。因为最高级安全性的代价太高了,在不须要最高级安全性的场合,齐全能够升高安全性以晋升效率,也就是减小 Y 坐标来取得大一点的 X 坐标。然而不能只说 X 坐标,而不去阐明 Y 坐标就义了多少。可证实平安就是一把尺子,用来对 Y 坐标进行严格的论证。
可证实平安是密码学畛域评估算法安全性的黄金准则。目前有两种风行的证实形式:第一个是基于游戏的证实形式。通过一个例子来阐明什么是基于游戏的证实形式。假如 Alice 是攻击者,Bob 是防守者。Bob 跟 Alice 运行一个协定,而后 Bob 筛选两个数据 data 1 和 data 2 的其中之一。然而 Alice 从这个交互的协定过程中猜不进去 Bob 用的是 data 1 还是 data 2。如果这对任意 data 1 跟 data 2 都成立的话,就能够说这个协定是平安的,因为这能够阐明 Alice 对 Bob 的原始数据的信息是无所不知的。
第二个是基于模仿的证实形式。假如 Alice 与两方交互。第一个是 Bob,它正在运行着本人的实在数据,和 Alice 跑一个真正的隐衷计算协定。另一个是个机器人,是个模拟器,它并没有 Bob 的输出数据,只有整个计算的后果。Alice 跟这个机器人和 Bob 同时进行交互,它感觉不进去哪个是机器人哪个是 Bob。能够看到,这个机器人基本没有用 Bob 的原始数据,Alice 都辨别不进去。那阐明这个协定的确没有对 Alice 泄露任何后果之外的信息。
咱们通过一个 paillier 同态加密的例子来了解如何用基于游戏的证实形式来证实 paillier 是平安的。
假如 Alice 是攻击者,Alice 能够任选两个数据 m0 和 m1,而后让 Bob 来加密一下这两个数据。Bob 加密了这两个数据,而后从其中任意选了一个,把密文发给 Alice。Alice 去猜到底加密的是 m0 还是 m1。能够看出如果轻易猜的话,那胜利的概率肯定是 50%。然而如果 Alice 可能以大于 50% 的概率猜对的话,那阐明 paillier 算法肯定有问题。
咱们来做一个反证,假如 Alice 能够博得这个游戏,能以大于 50% 的概率猜对这个到底是 m0 的密文还是 m1 的密文,咱们无妨假如它是 m0 的密文,Alice 猜对了。那么 Alice 可能猜出 C 是 m0 的密文,那她就能够把这个 m0 约掉。剩下 r 的 n 次方,也就是 d 是 mod n 平方上的一个 n 次幂,就是 Alice 能够胜利地判断这样一个 n 次幂。然而这个判断叫做 dcr 问题,这个问题是艰难的,个别认为它跟大数合成的难度是靠近的,所以就产生了矛盾。换句话说,如果 Alice 可能博得这个游戏,那她就能够破解 dcr 问题。所以 Alice 不可能博得这个游戏,也就是说 Alice 只能以 50% 的概率随机地猜想,即 Paillier 算法在 dcr 假如下是平安的。
再来看一个基于模仿的证实形式的例子,以一个简略的 OT 协定为例。Bob 领有两个数 x0 和 x1,Alice 想得到其中一个,但她不想通知 Bob 她想得到哪一个。协定具体内容是 Alice 随机抉择 s,而后发送这两个数给 Bob,而后 Bob 就加密这两个数,发回去。因为 Alice 有其中一个数的离散对数,所以她能够解密其中一个。然而 Bob 并不知道 Alice 能解密哪个。咱们看如何用基于模仿的证实形式证实这个 OT 的安全性。
假如 Alice 是攻击者。假如存在一个机器人和一个 Bob,Bob 是有实在的数据 x0 和 x1 的,然而机器人没有,它只有最终的 OT 计算结果 x0,对 x1 是无所不知的。那么机器人跟 Bob 一样,也和 Alice 运行一个协定。因为机器人晓得 x0,所以它能够把 x0 加密。而后它不晓得 x1,那就弄一个随机数发过来。Alice 拿到这个机器人的两个数,又拿到了 Bob 的两个数。到底哪两个数是 Bob 发来的,哪两个数是模拟器发来的,Alice 是辨别不进去的。因为这个 h1r1 和随机数是不可辨别的。
这个就叫做 real world 和 ideal world,real world 就是实在在产生的事件。ideal world 就是模拟器在做的事件。基于模仿的证实形式就是证实攻击者没方法辨别 real word 和 ideal word。当然这只是半诚恳模型,如果是歹意模型,那么这个证实会十分的简单,只能说 do not try this at home,把它交给明码学家去证实。
咱们方才只是证实了一个 paillier 和 OT,那么 如何证实整个计划的安全性 ?
首先,要证实整个计划的每个局部都是平安的 ,比方加法是平安的,乘法是平安的,relu 是平安的。 第二步,要判断各个模块的运行形式,如果模块之间是串行运行的话,那么整个计划能够满足可证实平安,因为可证实的平安模块之间是 sequential composable 的。如果不是串行运行,那还须要每个模块都满足 UC 个性才行。这里不做解说了,对密码学有趣味的同学能够去看一看。个别的单个建模工作,咱们能够认为它是串行的,不须要思考 UC 的问题。
讲一下谬误的打开方式,比方有人说我的算法应用了 paillier 加密,paillier 是可证实平安的,所以我的算法是平安的。这个说法必定是谬误的,好比须要大厦的每块砖都是可证实平安的才行,不能说用了一块可证实平安的砖,所以整个大厦都是平安的。例如很多联邦学习算法,两头信息是 Alice 用 paillier 加密发给 Bob,这步是没问题,但 Bob 计算完之后就发回去 Alice 解密持续做其余的计算。这一步解密产生的信息泄露如果没有论证,其危险就是未知的。
另一个谬误的打开方式是只有不能反推原始数据就是平安的。首先一个问题就是很难定义什么叫反推原始数据,不具可操作性。例如要测试哪些反推算法,这是没法穷举的。有的泄露一开始认为不能反推,但过了几年大家发现能够反推了,比方 deep leakage from gradients 这篇文章,就是联邦学习中的梯度,大家开始认为梯度不是原始数据,传了没问题。但起初有人发现一种攻打算法能够从梯度推出原始数据。那如果再进攻一下,给计划打个补丁行不行呢?再爱护也只能针对某种特定的攻打,永远是道高一尺,魔高一丈,是不可证实的,永远无奈在 Y 轴中确定计划的地位。只有谨严的正向论证,才是可证实平安。
还有一个可能性就是计划的确没有泄露原始数据,然而泄露了原始数据的一个函数束缚。例如攻击者的确推不出张三的年龄,也推不出张三的工资,然而能够推出张三的年龄和工资之和是 25,000。能够看出这个论断曾经对攻击者很有价值了,如果攻击者未来晓得了张三的年龄,工资就进去了;或者攻击者基本就不须要具体数值,只须要晓得他的工资是在这个范畴就行了。所以仅仅形容“不能反推原始数据”是不够的,还得把泄露的具体函数束缚通过可证实的形式勾画进去。
有人说这些密码学证实太难了,还有别的办法能够证实吗?好消息是有,坏消息是也很难,并不比密码学可证实容易。这个办法就是 差分隐衷。差分隐衷跟后面的证实办法有一些区别,也有一些分割。假如 Bob 有两个数据集,两个数据集的惟一区别是其中一个外面没张三,另一个数据集外面有张三。而后 Bob 跟 Alice 进行交互。如果对于任意的张三,两个数据集的交互信息的散布都十分靠近,阐明这一交互过程对 Bob 数据集里所有的行都是爱护的,因为 Alice 连张三在不在外面都不晓得,必定是推不出张三的信息。
如何实现差分隐衷?以 DP-SGD 为例,SGD 是机器学习外面的一个梯度降落算法,它对每份训练数据计算一个梯度,而后把梯度加到模型下来。DP-SGD 就是首先把这个梯度裁剪到一个适合的大小,往里面加上一个 noise,之后任意一条数据减掉或者加起来都对总体散布区别不大了,所以能够满足差分隐衷。DP-SGD 计算要比通常的 SGD 慢一点,因为它要对每条梯度进行裁剪、加噪。在 tensorflow 外面,它集成了相干的算法,这个算法能够非常容易地用于横向宰割的联邦学习。
DP 也能够用在 MPC,例如 PSI 隐衷求交加,大家可能常常会用到分桶来做 PSI,因为整个选集都跟对方一一比拟性能太低了,所以个别都是分成好几个桶,比方尾号是 1 的一起比一下,尾号是 2 的一起比一下,这样会比拟快,也便于并行。然而这样可能会泄露一个信息,就是尾号是 1 的数据量,这是属于 ideal world 没有的额定信息,因而是须要爱护的,个别的 PSI 解决这个问题是通过 padding 填充,例如 Alice 原来尾号是 1 的有两个数据,当初把它填到四条,Bob 也不晓得 Alice 到底有多少条数据尾号是 1。然而 padding 填充是会影响性能的。PETS 上就有一篇工作是引入 DP 来增加 padding,这样整体的 PSI 性能就会晋升。
总而言之 DP 能够用于各种场景,和各种平安技术进行叠加。然而 DP 也存在一些 挑战 ,首先就是 它会大幅影响数据分析的准确率。例如 Google 的一篇最新的文章,在 imagenet 上训练一个神经网络。没有 DP 的话,准确率能够达到 60% 到 70%。然而开了 DP 之后,准确率就跌到 3%~10%。所以在这种大规模数据建模场景中,如何应用差分隐衷又不影响性能,是一个十分有挑战的问题。
第二个挑战是当初 DP 的研究成果次要是用在横向宰割,因为横向宰割和 DP-SGD 的联合是十分直观的。然而DP 在纵向宰割方面的利用钻研不多。纵向建模是曾经把样本对齐了的,也就是 Alice 曾经晓得 Bob 有张三的数据了,当初爱护的指标不是张三的数据在不在,而是张三的特色是多少,这须要新的 DP 办法,但这方面的钻研目前还不多。国内的次要利用场景都是纵向的,所以纵向怎么加 DP,有待从业者来投入精力去钻研。
总结一下,本文分享了两种可证实平安的办法。第一种是基于游戏或者模仿的密码学证实形式,其指标是刻画信息的整体泄露边界,证实在这个边界之外的信息是相对不泄露的。第二种是基于差分隐衷的证实形式,指标是避免攻击者重辨认到单条数据,而不关注数据集整体泄露的信息量多少。这两种都是曾经失去了业界宽泛认可的平安证实形式。呐喊隐衷计算业界可能做好可证实平安,让计划的安全性能够看得见摸得着。明天的分享就到这里,谢谢大家。
🏠 隐语社区:
https://github.com/secretflow
https://gitee.com/secretflow
https://www.secretflow.org.cn(官网)
👇欢送关注:
公众号:隐语的小剧场
B 站:隐语 secretflow
邮箱:secretflow-contact@service.alipay.com