开源隐私计算SecretFlow|基于同态的隐私信息检索协议-SealPIR介绍
打开链接点亮社区Star,照亮技术的前进之路。
每一个点赞,都是社区技术大佬前进的动力 Github 地址: https://github.com/secretflow/secretflow
隐私信息检索(Private information retrieval PIR)也称为隐匿查询或匿踪查询,在医疗、股票、金融、社交等领域中都有大量应用场景。
近年来PIR技术研究逐渐丰富,行业对应用PIR实现隐私保护的呼声也随之高涨。
引言
[SealPIR][1]是微软开源的PIR实现,实现了2018年发表在IEEE S&P的论文[ACLS18][2]中的PIR方案。论文题目《PIR with Compressed Queries and Amortized Query Processing》已经包含了两个主要的贡献点:
-
对查询进行了压缩,通信量降低了274倍;
-
通过概率批量编码(probabilistic batch codes PBCs)可以同时执行多个查询,分摊查询处理的开销。
在近年的PIR协议研究中,特别是基于HE的PIR协议有很多进展,且大多数都是和SealPIR进行对比,因此理解SealPIR的原理也就有助于理解和跟踪he-based PIR近年来的发展。
本文将为小伙伴们介绍基于同态的隐私信息检索协议-SealPIR,欢迎大家在本文留言讨论。
1.PIR定义及分类
1.1 PIR定义
隐私信息检索(Private information retrieval PIR)是对信息检索(information retrieval IR)的一种扩展,最早在[CKGS95][3]中提出,用于保护用户查询信息,防止数据持有方得到用户的检索条件。
PIR协议目标可以定义为:Alice有共N行的数据库D,每一行的数据大小为L。Bob希望查询获得其中指定位置的某一行,但是不想告诉Alice自己查询的是哪一行。
隐私信息检索协议(PIR)需要满足正确性和安全性两方面的要求:
-
正确性:用户得到要查询的数据
-
安全性:服务端 无法知道 用户查询的是哪条数据
1.2 PIR分类
1.2.1 服务器数量分类
按照服务器数量分类可分为多服务器PIR和单服务器PIR。
- 多服务器PIR(MultiServer-PIR)
多服务器PIR一般基于信息论安全(Information-theoretic security)的密码技术,例如:基于函数密码分享(Function Secret Sharing)[BGI16][4]方案,也称为:IT-PIR。
多服务器PIR协议大体流程如下:
-
客户端生成查询条件的分量,发送给不同的服务器;
-
服务器收到查询条件的分量后进行相应的计算,返回给客户端;
-
客户端接收到所有服务器的响应后,将服务器查询响应看做秘密共享的分量进行合成,得到查询结果。
为了保护查询信息的安全,多服务器PIR方案中要求服务器之间是不能合谋的,增加了系统实现和部署的难度。
多服务器PIR方案中计算量相对较小,但通信量一般很大,大体规模是𝑛𝑜 (1)。
- 单服务器PIR(SingleServer-PIR)
单服务器PIR一般基于公钥密码方案,特别是同态性质的公钥密码方案,安全性基于计算复杂理论,也称为CPIR。
基于同态的单服务器PIR方案,大体流程如下:
-
客户端生成加密的查询向量,发送给服务端;
-
服务端接收到查询向量后,在本地执行同态运算,将结果返回给客户端;
-
客户端收到响应后,解密得到查询结果。
单服务器PIR方案一般通信量较少,但计算量较大,且容易部署。
1.2.2 按照检索条件分类
- Index PIR/Dense PIR
服务端有n个元素的数据库𝐷={𝐷1,𝐷2,...,𝐷𝑛},用户查询第𝑖个元素,通过执行PIR协议,用户得到𝐷𝑖,服务端不知道用户查询𝑖的信息。由于用户的查询条件在一个连续的集合[1...𝑛],Index PIR也称为Dense-PIR。
- Keyword PIR/Sparse PIR
服务端的数据是(key,value)对构成的n个元素的数据库,用户选择自己要查询的key,通过执行PIR协议,用户得到key对应的value。这里查询条件key不能覆盖一个连续集合,例如:手机号或身份证,也称为Sparse PIR。
1.3 PIR性能指标
PIR的性能指标主要包括计算量和通信量。
-
计算量:计算量一般指的是服务端的计算量。
-
通信量:通信量可细分为查询请求的通信量和响应的通信量。
Trivial PIR中服务端没有计算量,将数据全部发给客户端,客户端在本地查询,通信量跟数据库中数据量n相关。
因此PIR的通信量要求小于数据库的容量。对比IT-PIR和CPIR的计算量和通信量可以看到,IT-PIR在计算量较少,但通信量较大;CPIR计算量较大,但通信量较小。
除了计算量和通信量两个指标外,有些论文里还引入了成本(monetary)作为指标,成本(monetary)指标实际上是对计算量和通信量平衡得到的指标,更适用于实际业务需求。
2.基础知识
目前Single-PIR
最好的协议大多基于近似同态算法(Somewhat homomorphic encryption SHE)设计的,SealPIR中用到的是[BFV12]
[5]算法。
2.1 BFV方案
[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+2𝑥3,𝑆𝑢𝑏(𝑐,3)得到𝑝(𝑥3)=7+{𝑥3}2+2{𝑥3}3=7+𝑥6+2𝑥9的密文。
SHE的同态运算会引起噪声的增长,当噪声超过一定限制时,无法解密得到明文,所以要适当选择SHE算法的参数,及控制同态运算的噪声增长。
2.2 HE-based PIR
HE-based PIR基本原理如下图所示:
假设服务端数据量为𝑛,基本流程如下
-
客户端生成BFV算法的私钥和公钥(𝑠𝑘,𝑝𝑘);
-
客户端生成查询𝑛维0-1向量(0,...,0,1,0,...,0),其中查询index 𝑖的位置位1,其它位置为0;
-
客户端使用公钥加密查询向量的每个分量,得到(𝐸(0),...,𝐸(0),𝐸(1),𝐸(0),...,𝐸(0)),发送给服务端;
-
服务端接收到密态查询向量后,和本地数据构成的𝑛维向量(𝐵1,𝐵2,...,𝐵𝑛),进行点乘,得到𝐸(0·𝐵1+...+0·𝐵𝑖-1+𝐵𝑖+0·𝐵𝑖+1+...+0·𝐵𝑛),发送给客户端;
-
客户端对查询响应密文解密,得到待查询的数据𝐵𝑖。
HE-based PIR协议可以抽象为四个子算法,即(Setup,Query,Answer,Extract)。
如下图所示:
-
SETUP: 服务端 将数据库中的数据转换为HE明文
-
QUERY: 客户端根据查询index,生成密态查询向量
-
ANSWER: 服务端计算明文向量和密文向量的内积
-
EXTRACT: 客户端使用私钥解密查询响应密文,得到查询数据
3.SealPIR协议
HE-based PIR基本原理中的协议,存在的问题是
-
查询请求的计算量和通信量都大,需要生成和发送𝑛个密文;
-
服务端每个数据表示为一个HE明文,需要计算n为向量的内积,容易导致噪声太大,无法解密
SealPIR论文给出了解决上面的问题的办法:
3.1 将多个数据pack到一个HE明文
查询的db\_index
需要转换为plaintext\_index
假设数据库中数据长度为288字节(SealPIR论文中给出的长度),BFV参数选择:多项式次数8192,明文模16bit,举例说明一下pack的效果:
-
数据库中每条数据,需要HE 明文多项式中个系数来表示𝐶𝑒𝑖𝑙(288*8/16)=144。
-
HE 一个明文多项式可以包含𝐹𝑙𝑜𝑜𝑟(8192/144)=56调数据库数据。
-
对数据库的查询db_idx,需要转换为明文的查询plain_index=𝑑𝑏𝑖𝑑𝑥/56。
-
用户得到查询相应密文,通过私钥进行解密,得到HE明文,将HE明文对应的系数进行组合,得到真正查询的数据。
3.2 将查询向量压缩到一个密文
显著减少通信量,服务端增加一个额外的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]论文中的内容。
3.3 将数据库一维向量转换为多维向量
二维查询时将数据库数据表示为√𝑛*√𝑛的矩阵,减少查询向量
以上面packing的参数举例,将数据库表示为2维数据时,通过两个查询密文可以查询的数据量是8192*8192*56≈37亿,已经能满足绝大多数的数据库查询任务。
数据库数据量为𝑛,通过packing后得到HE明文数量为𝑛′,𝐹是密文扩张因子,二维查询流程如下:
服务端:
-
将HE明文表示为√𝑛′*√𝑛′的矩阵𝑀,其中√𝑛′<8192。
-
𝑉𝑐是密文查询列向量,𝐴𝑐=𝑀·𝑉𝑐,其中𝐴𝑐是√𝑛′ * 1的密文列向量。
-
将𝐴𝑐中每个密文拆分为𝐹份明文多项式,得到√𝑛′ * 𝐹矩阵𝐴𝑆𝑐。
-
𝑉𝑟是密文查询行向量,𝐴𝑆𝑇𝑐·𝑉𝑟,𝐹 * 1得到的密文向量。
客户端:
- 客户端收到𝐹个密文向量,使用私钥𝑠𝑘解密,将其组合成密文𝐸𝑛𝑐(𝑀[𝑟,𝑐]),对使用私钥𝑠𝑘解密𝐸𝑛𝑐(𝑀[𝑟,𝑐])得到真正的查询HE明文𝑀[𝑟,𝑐],对HE明文𝑀[𝑟,𝑐]中对应的系数进行组合,得到真正查询的数据。
服务端为了避免进行密文乘以密文的同态运算,第3步中将密文拆解成𝐹个明文进行操作,最后服务端发给客户端的查询响应是𝐹个密文,在多项式次数8096时,𝐹≈26,因此,服务端发给客户端的查询响应消息太大,这也是SealPIR主要的问题,后续的文章,主要目标是减少查询响应消息,在后面的性能对比中可以看到。
3.4 通过一次进行多个查询降低整体性能开销
SealPIR论文中还给出了通过PBC(probabilistic batch code)将数据库中的内容分成若干batch,同时执行k个查询时,分别对不同的batch进行查询,降低整体的性能开销。论文给出了基于CuckooHash的PBC构造方案。
CuckooHash的hash数为3,bin数量为1.5𝑘,k为同时查询的数量。
服务端 预处理:
- 对DB中n个index,分别计算cuckooHash的3个Hash,得到3个bin_index,将(db_index, data)插入到3个bin_index中。
客户端 预处理:
-
对DB中n个index,分别计算cuckooHash的3个Hash,得到3个bin_index,将(db_index)插入到3个bin_index中。
-
将k个查询,通过cuckooHash,插入到𝑏=1.5𝑘个bin中,对空的bin进行随机填充。
-
对每个bin执行PIR,共计b个PIR,每个PIR的index,是客户端实际查询的data_idx,在bin中的索引。
从上图中可以看到,客户端生成的是CuckooHashTable
和SimpleHashTable
两张表,服务端生成的SimpleHashTable
。
客户端和服务端SimpleHashTable
的差别在于,服务端SimpleHashTabl
e有实际待查询的数据,服务端SimpleHashTable
只是模拟了服务端插入过程,bin中有db_index。
3.5 SealPIR的性能
SealPIR论文Figure里给出single_query
和multi-query
的性能数据,多项式次数是2048,明文模式20bit,密文模式60bit,数据长度288字节,数据量220。
从上面可以看到,对于百万数据(220)单个查询的时间是3.3秒 左右,多个查询(256)性能可以降到0.1秒左右。
4.其它改进协议
这里介绍一下2021年的两篇PIR方面的文章:
-
发表在USENIX21年的[ALP+21][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分钟点个 Star 再走吧!开源不易,每个人的点赞,都是社区技术大佬前进的动力~
打开链接即可点亮社区Star,照亮技术的前进之路。
Github 地址:https://github.com/secretflow/secretflow
参考文献
[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.
本文由隐语社区统一发布,欢迎大家点 Star

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
引言 在上一篇文章《Apache Doris 4.0 AI 能力揭秘(一):AI 函数之 LLM 函数介绍》中,我们介绍了 Apache Doris 4.0 如何通过原生集成 LLM 函数,将大语言模型的强大能力引入 SQL 分析场景,实现文本处理的智能化与内部分析的无缝化。这一能力不仅拓展了数据库的边界,也为数据密集型业务注入了全新的智能维度。 然而,技术能力的落地并不止于功能实现,真正的价值在于其在企业复杂场景中的稳定、高效与可管理的实践。随着 AI 函数在更多业务线中使用,如何将其从“可用”推进到“好用”、“可控”、“可规模化”,成为企业级应用的关键挑战。 在本篇文章中,我们将深入探讨在真实生产环境中应用 AI 函数的核心考量:Apache Doris LLM Function 的技术架构、核心功能特性、典型应用场景及性能优化策略,为相关技术实践提供参考。 LLM Function 核心价值 在传统的企业级数据分析架构中,文本数据的 AI 处理通常采用分离式模式:数据从数据库导出,应用层调用外部 AI API 进行处理,然后将结果写回数据库。这种架构模式在实际生产环境中面临数据一...
-
下一篇
NJet支持使用json格式的配置文件了
简介 目前NJet的配置文件与Nginx的配置文件格式相同。这种配置文件的格式对我们阅读比较友好。但是对一些自动化配置的需求来说,处理起来就很困难。为了以后能够对NJet的配置通过自动化工具来进行维护,NJet增加了对json格式配置文件的支持。目前这种支持是很基本的,只是支持主配置文件为json格式,里面include的文件的格式还是与之前相同。 json格式 目前NJet支持的json文件的配置格式如下,参考了开源项目https://github.com/nginxinc/crossplane中的格式,并做了一些修改。 最外层 parsed的内容是一个数组,数组的每一项都是一个对象,这个对象对应着一条NJet命令,或者对应着一个NJet的block。 { "parsed":[ {}, ... {} //每一个obj对应一条cmd或一个block ], "file": "/usr/local/njet/njet.conf" // 这是对应原有格式的配置文件,类似于description } 一条指令 一条指令中包含两个键值,cmd为一个字条串,对应的指令的名称,ar...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题