学习&转载文章:安全多方计算(2):隐私信息检索方案汇总分析
多头贷问题是网络小额贷款平台放款时所要考虑的一个重要问题。假设银行A有一潜在贷款客户小张,银行A为了足够多的了解小张的信用情况,希望向其他多家银行查询小张贷款情况或信用记录。但因为害怕其他银行抢走该客户,所以银行A不希望泄露自己在查询小张这一事实。是否可以通过技术手段解决银行A的诉求?答案是肯定的,即图1漫画中的“隐私信息检索技术”——一种不泄露查询条件和查询结果的加密技术。
图1 隐私信息检索技术应用示例漫画
隐私信息检索(Private InformationRetrieval – PIR,也叫匿踪查询)是安全多方计算中很实用的一项技术,用来保护用户的查询隐私。其目的是保证用户向服务器(数据源方)提交查询请求时,在用户查询信息不被泄漏的条件下完成查询[1]。即整个查询过程中服务器不知道用户具体查询信息及查询出的数据项。
一句话总结就是:不泄漏查询条件和查询结果
通过前面对PIR技术的描述,可知PIR的目的是保护用户查询隐私。提到“保护用户查询隐私”,会有人想到可搜索加密技术,但可搜索加密技术并不能替代PIR技术。
先来简单了解可搜索加密技术。
顾名思义,可搜索加密就是在加密的情况下实现搜索功能,常用于云计算当中。可搜索加密应用示例如图2所示,能够实现将用户的数据进行特殊的加密后上传到云服务器上, 并且可以实现根据关键字进行检索的功能。(更详细内容可阅读本公众号文章:防止云端数据与查询行为泄露—可搜索加密)
图2 可搜索加密应用示例
可搜索加密实现密文检索时,过程示例如图3所示。可简单描述为:检索用户提交密文关键字(keyword3),云服务器将密文关键字与密文数据库比对,比对成功后则将对应的密文数据(数据3)返回给检索用户,最终检索用户对拿到的密文数据进行解密。
图3 可搜索加密密文检索示例
整个过程中云服务器不知道检索关键字(keyword3)和检索结果(数据3)对应的原始明文是什么。但是,数据拥有者(不一定是云服务器)监听到检索结果的话,可以直接解密并得到对应的明文。即可搜索加密技术仅能阻止云服务器获得用户查询隐私,不能阻止数据拥有者获得用户查询隐私(这很正常,云计算环境下,云服务器中一段密文数据的拥有者和检索者,可能是同一用户)。
为了加强保护用户查询隐私,使得查询条件和查询结果仅查询用户可知,安全多方计算中的PIR技术应运而生。目前常见的PIR方案实现有3类,分别是基于不经意传输(Oblivious Transfer,OT)的PIR实现、基于同态加密的PIR实现和keyword PIR实现。
其中基于不经意传输的PIR和基于同态加密的PIR需要检索用户提前知道被检索数据在服务端数据库中索引号。
3类方案的实现过程介绍如下。
基于不经意传输的PIR实现过程如图4所示(不经意传输协议此处不在赘述,更多内容可阅读本公众号文章:安全多方计算(1):不经意传输协议),主要利用的是n选1的OT协议。
图4 基于不经意传输的PIR实现过程
基于OT的PIR实现过程有5个重要步骤:
基于同态加密的PIR实现过程如图5所示,此处采用paillier加法半同态加密算法[2],paillier同态加密算法计算过程参见文献2,此处不赘述,但强调3个paillier算法特点:
paillier具有加法同态性和标量乘法同态性,即
在该方案中,同态计算体现在:\(\sum_{i=1}^nm_i*\nu_i\),是【m*c】和【c+c】,所以预测这里不是paillier,感谢园友的提醒。
(1)可以实现两个密文加法计算【c+c】;
(2)可以实现一个密文与一个明文相乘【c*m】;
(3)由于加密时用到随机数,所以相同的明文、相同的密钥,可以产生很多个不同的密文,这些不同的密文解密后都能得到相同的原始明文。
图5 基于同态加密的PIR实现过程
基于paillier同态加密的PIR实现过程有4个重要步骤:
实际上,在大多数的查询场景中,查询方往往不知道自己要查询的数据的索引号【即要检索的是第几个(索引)】,而大多根据关键词进行查询,此类方案又称keyword PIR,可以利用paillier同态加密和拉格朗日插值多项式实现(拉格朗日插值多项式细节可阅读本公众号文章:秘密共享—隐私计算和区块链共识中的榫卯),具体实现过程如图6所示。
图6 keyword PIR实现过程
keyword PIR实现过程有5个重要步骤:
前文对3类PIR方案实现方法做了描述,此处对3类方法做一个全面的比对分析,方便读者对3类方案有一个更直观的理解。
表1所示的表格,分别从依赖技术、通信开销、计算开销等方面对3类PIR方案特点做了总结。
表1 3类PIR方案特点总结
依赖技术 | 通信量与数据集(n条)关系 | 需要提前知道被检索数据索引号 | 计算开销与数据集(n条)关系 | |
---|---|---|---|---|
基于OT的PIR | 公钥密码,对称密码 | n个RSA公钥n条AES密文 | 是 | n次公钥解密n次对称加密 |
基于同态加密PIR | 同态加密 | n+1条同态密文 | 是 | 3n次同态加密 |
Keyword-PIR | 多项式插值;同态加密 | n+2条同态密文 | 否 | 5n次同态加密2次多项式构造 |
本环节,我们用python代码分别实现了基于OT的PIR和基于同态加密的PIR,让读者对PIR性能有更清晰的了解。我们模拟服务端有一个漏洞库,共有2245条数据(数据为绿盟真实漏洞库数据,原始数据数十万条,此处仅选取一部分用于实验),用户输入“软件名称+具体版本号”可查询对应的漏洞信息,查询过程中不会泄漏检索条件和检索结果。此部分仅展示用户获知检索项在服务端中的索引号后(索引号如何获取非本文重点,此处略过),分别模拟利用基于OT的PIR和基于同态加密的PIR实现漏洞信息检索。
图7 基于OT的PIR代码实验结果
图7为基于OT的PIR代码实现,网络为内部局域网,服务端为低配Ubuntu虚拟机,模拟结果总耗时3.3秒,通信开销RSA公钥传输消耗约0.68MB,全量AES密文传输消耗约5.6MB。
图8 基于paillier同态加密的代码实验结果
图8为基于paillier同态加密的PIR代码实现,相同配置下,计算开销耗时117秒,通信开销密文查询向量消耗约1.3MB网络开销,检索结果传输消耗约0.14MB。可以明显比对出前两类PIR方案在计算开销和网络开销上的差异。
本文介绍了安全多方计算中很实用的一类方案——隐私信息检索方案,此类方案可在保护用户隐私的前提下,实现多方数据安全查询。另外,分别介绍了3种不同的实现方法原理,并对其进行理论对比分析,且对其中的两类方法做了代码实现。通过理论分析和实验对比,能够让读者对隐私信息检索有一个更直观的认识。
[1]https://blog.csdn.net/hellompc/article/details/103784360
[2]Paillier P . Public-key cryptosystemsbased on composite degree residuosity classes[J]. Advances in CryptologyLeurocrypt, 2004.