隐私信息检索(Private information retrieval PIR)也称为隐匿查询或匿踪查询,在医疗、股票、金融、社交等领域中都有大量应用场景。近年来PIR技术研究逐渐丰富,行业对应用PIR实现隐私保护的呼声也随之高涨。
[SealPIR][1]是微软开源的PIR实现,实现了2018年发表在IEEE S&P的论文[ACLS18][2]中的PIR方案。论文题目《PIR with Compressed Queries and Amortized Query Processing》已经包含了两个主要的贡献点:
在近年的PIR协议研究中,特别是基于HE的PIR协议有很多进展,且大多数都是和SealPIR进行对比,因此理解SealPIR的原理也就有助于理解和跟踪he-based PIR近年来的发展。
本文将为小伙伴们介绍基于同态的隐私信息检索协议-SealPIR,欢迎大家在本文留言讨论。
隐私信息检索(Private information retrieval PIR)是对信息检索(information retrieval IR)的一种扩展,最早在[CKGS95][3]中提出,用于保护用户查询信息,防止数据持有方得到用户的检索条件。
PIR协议目标可以定义为:Alice有共N行的数据库D,每一行的数据大小为L。Bob希望查询获得其中指定位置的某一行,但是不想告诉Alice自己查询的是哪一行。
隐私信息检索协议(PIR)需要满足正确性和安全性两方面的要求:
按照服务器数量分类可分为多服务器PIR和单服务器PIR。
多服务器PIR一般基于信息论安全(Information-theoretic security)的密码技术,例如:基于函数密码分享(Function Secret Sharing)[BGI16][4]方案,也称为:IT-PIR。
多服务器PIR协议大体流程如下:
为了保护查询信息的安全,多服务器PIR方案中要求服务器之间是不能合谋的,增加了系统实现和部署的难度。多服务器PIR方案中计算量相对较小,但通信量一般很大,大体规模是(1)。
单服务器PIR一般基于公钥密码方案,特别是同态性质的公钥密码方案,安全性基于计算复杂理论,也称为CPIR。
基于同态的单服务器PIR方案,大体流程如下:
单服务器PIR方案一般通信量较少,但计算量较大,且容易部署。
服务端有n个元素的数据库={1,2,…,},用户查询第个元素,通过执行PIR协议,用户得到,服务端不知道用户查询的信息。由于用户的查询条件在一个连续的集合[1…],Index PIR也称为Dense-PIR。
服务端的数据是(key,value)对构成的n个元素的数据库,用户选择自己要查询的key,通过执行PIR协议,用户得到key对应的value。这里查询条件key不能覆盖一个连续集合,例如:手机号或身份证,也称为Sparse PIR。
PIR的性能指标主要包括计算量和通信量。
计算量:计算量一般指的是服务端的计算量。
通信量:通信量可细分为查询请求的通信量和响应的通信量。
Trivial PIR中服务端没有计算量,将数据全部发给客户端,客户端在本地查询,通信量跟数据库中数据量n相关。因此PIR的通信量要求小于数据库的容量。对比IT-PIR和CPIR的计算量和通信量可以看到,IT-PIR在计算量较少,但通信量较大;CPIR计算量较大,但通信量较小。
除了计算量和通信量两个指标外,有些论文里还引入了成本(monetary)作为指标,成本(monetary)指标实际上是对计算量和通信量平衡得到的指标,更适用于实际业务需求。
目前Single-PIR最好的协议大多基于近似同态算法(Somewhat homomorphic encryption SHE)设计的,SealPIR中用到的是[BFV12][5]算法。
[BFV12]将[Brakerski12][6]中的同态算法从LWE迁移到RLWE,RLWE因为有特殊的结构比LWE性能更好,例如,RLWE选择特定参数时,乘法可以使用NTT(Number Theoretic Transform)。BFV算法的参数包括:
明文空间是=[]/(+1),即:0+1+…+-2-2+-1-1,∈
密文由两个多项式(0,1)构成,0,1∈=[]/(+1)。
密文扩张因子(Ciphertext expansion factor),是指SHE加密后得到密文相对明文的增大的比例,对于BFV算法,密文扩张因子=2()/()。
对于128bit安全,同态加密标准中给出了推荐参数。考虑上面的密文扩展因子,明文模取相对较大时,能获得较小的密文扩张;但进行密文同态计算时,明文模太大时,会导致噪声增长太快,明文模也不能取得太大。
SealPIR中BFV参数中N和q选择举例如下表:
多项式次数 | 明文模 | 密文模 |
---|---|---|
2048 | 54bit | |
4096 | 38bit | 109bit 2*36+37 |
8192 | 17bit | 218bit 243+344 |
SealPIR中用到的同态运算:
密文加法:
明文1(),2()对应的密文是1和2,1+2是1()+2()的密文。
明文乘密文:
明文1()对应的密文是1,2()·1是1()·2()的密文。
替换:
明文()对应的密文是,对于奇数,(,)是()的密文。
例如,()=7+2+23,(,3)得到(3)=7+{3}2+2{3}3=7+6+29的密文。
SHE的同态运算会引起噪声的增长,当噪声超过一定限制时,无法解密得到明文,所以要适当选择SHE算法的参数,及控制同态运算的噪声增长。
HE-based PIR基本原理如下图所示:
假设服务端数据量为,基本流程如下
HE-based PIR协议可以抽象为四个子算法,即(Setup,Query,Answer,Extract),如下图所示:
HE-based PIR基本原理中的协议,存在的问题是
SealPIR论文给出了解决上面的问题的办法:
查询的db_index需要转换为plaintext_index
假设数据库中数据长度为288字节(SealPIR论文中给出的长度),BFV参数选择:多项式次数8192,明文模16bit,举例说明一下pack的效果:
显著减少通信量,服务端增加一个额外的Expand操作得到查询密文向量。
查询向量(0,…,0,1,0,…,0)压缩到一个HE明文多项式为例,查询向量中的每个分量对应为HE明文多项式中的系数。
0+1+…+-2-2+-1-1=_,其中:=0,≠_ , =1,=_。
对查询明文进行加密,得到(0+1+…+-2-2+-1-1)=(_)。
服务端接收到查询密文后,执行Expand算法,得到查询密文向量:((0),…,(0),(1),(0),…,(0))。
还是以上面packing的参数举例,每个HE明文可以pack 56个数据库数据,客户端查询时,将db_index转换为plain_index,即对HE明文数据库进行查询,最多可以查询8192个HE明文,转换成数据库数据,最多可以查询8192*56=458752条数据,不能满足实际业务中的需求。
为了满足实际将查询向量压缩到多个HE明文来表示查询向量,对于百万数据来讲,需要(1000000/8192)=123个HE明文,对应123个HE密文,才能表示百万数据的查询向量。为了进一步压缩查询密文的数量,可以使用下面的多维表示方法。
Expand算法的详细描述和证明可以参考[ACLS18][2]论文中的内容。
二维查询时将数据库数据表示为√*√的矩阵,减少查询向量
以上面packing的参数举例,将数据库表示为2维数据时,通过两个查询密文可以查询的数据量是8192819256≈37亿,已经能满足绝大多数的数据库查询任务。数据库数据量为,通过packing后得到HE明文数量为′,是密文扩张因子,二维查询流程如下:
服务端:
客户端:
服务端为了避免进行密文乘以密文的同态运算,第3步中将密文拆解成个明文进行操作,最后服务端发给客户端的查询响应是个密文,在多项式次数8096时,≈26,因此,服务端发给客户端的查询响应消息太大,这也是SealPIR主要的问题,后续的文章,主要目标是减少查询响应消息,在后面的性能对比中可以看到。
SealPIR论文中还给出了通过PBC(probabilistic batch code)将数据库中的内容分成若干batch,同时执行k个查询时,分别对不同的batch进行查询,降低整体的性能开销。论文给出了基于CuckooHash的PBC构造方案。
CuckooHash的hash数为3,bin数量为1.5,k为同时查询的数量。
服务端 预处理:
客户端 预处理:
从上图中可以看到,客户端生成的是CuckooHashTable和SimpleHashTable两张表,服务端生成的SimpleHashTable。客户端和服务端SimpleHashTable的差别在于,服务端SimpleHashTable有实际待查询的数据,服务端SimpleHashTable只是模拟了服务端插入过程,bin中有db_index。
SealPIR论文Figure里给出single_query和multi-query的性能数据,多项式次数是2048,明文模式20bit,密文模式60bit,数据长度288字节,数据量220。
从上面可以看到,对于百万数据(220)单个查询的时间是3.3秒左右,多个查询(256)性能可以降到0.1秒左右。
这里介绍一下21年的两篇PIR方面的文章:
发表在USENIX21年的[ALP+21]2[7]
发表在CCS21年的OnionPIR:[MCR21][8]
[ALP+21]题目是《Communication–Computation Trade-offs in PIR》是计算量和通信量平衡的PIR方案,该方案显著降低了查询响应的通信量,从成本(monetary)的角度看比SealPIR降低了35%。
OnionPIR利用了somewhat homomorphic encryption(SHE)最新的进展,将两种lattice-based SHE 方案(BFV 和 RGSW)组合在一起,降低了查询响应的大小和计算量。还设计了基于状态(stateful)的PIR。
从上面的数据看到,虽然相应的改进协议对查询响应大小都有较大改进,但整体运行时间方面和SealPIR差别不大,由于引入了更复杂的算法,实现成本也会变得更高,综合来看SealPIR在实际应用中还是相对较好的选择。
[1][SealPIR] SealPIR: A computational PIR library that achieves low communication
costs and high performance, 2020. https://github.com/microsoft/SealPIR.
[2][ACLS18] S. Angel, H. Chen, K. Laine and S. Setty,"PIR with Compressed Queries and Amortized Query Processing,"2018 IEEE Symposium on Security and Privacy (SP), 2018, pp. 962-979, doi: 10.1109/SP.2018.00062.
[3][CKGS95] B. Chor, O. Goldreich, E. Kushilevitz, and M. Sudan"Private information retrieval", in Proceedings of IEEE 36th Annual Foundations of Computer Science, pp. 41-50, Oct 1995.
[4][BGI16] Elette Boyle, Niv Gilboa, and Yuval Ishai.Function secret sharing: Improvements and extensions. In CCS, 2016.
[5][BFV12] Junfeng Fan and Frederik Vercauteren. 2012.Somewhat Practical Fully Homomorphic Encryption.IACR Cryptol. ePrint Arch. 2012 (2012), 144.
[6][Brakerski12] Zvika Brakerski.Fully Homomorphic Encryption without Modulus Switching from Clas-sical GapSVP. IACR Cryptology ePrint Archive, 2012:78, 2012.
[7][ALP+21] Asra Ali, Tancrède Lepoint, Sarvar Patel, Mariana Raykova, Phillipp Schoppmann, Karn Seth, and Kevin Yeo.
Communication-computation trade-o s in PIR. In USENIX Security, 2021.
[8][MCR21] M. Mughees, Hao Chen, Ling RenOnionPIR: Response Efficient Single-Server PIR, CCS’21.
[9][CGN98] Benny Chor, Niv Gilboa, and Moni Naor.
Private information retrieval by keywords.
IACR Cryptology ePrint Archive, 1998:3, 1998.
[10][CHLR18] Hao Chen, Zhicong Huang, Kim Laine, and Peter Rindal.
Labeled PSI from fully homomorphic encryption with malicious security.
In ACM Conference on Computer and Communications Security, pages 1223–1237. ACM, 2018.
P.S.文中素材来自公开发表论文,如有不妥,将立即删除
欢迎关注微信公众号:隐语的小剧场,获取更多隐私计算知识分享!