第6讲:隐语PIR介绍及开发实践

1.PIR定义

隐私信息检索(Private information retrieval, PIR)是对信息检索(information retrieval, IR)的一种扩展,最早在[CKGS95]中提出,用于保护用户查询信息,防止数据持有方得到用户的检索条件。
PIR协议目标可以定义为:Alice有共 N N N行的数据库D,每一行的数据大小为 L L L。Bob希望查询获得其中指定位置的某一行,但是不想告诉Alice自己查询的是哪一行。
隐私信息检索协议(PIR)需要满足正确性和安全性两方面的要求:

  • 正确性:用户得到要查询的数据
  • 安全性:服务端 无法知道 用户查询的是哪条数

PIR按服务器数量可以分类为单服务器(Single Server)和多服务器(Multi-Server)方案,按查询类型可以分为Index PIR和Keyword PIR。

2.隐语实现PIR情况

隐语目前支持的PIR有:

  • Single Server Index PIR: SealPIR
  • Single Server Keyword PIR: Labeled PSI

隐语PIR实现位置

2.1 spu pir api
pir_setup(
	key_columns (str, List[str])Column(s) used as pir key
	label_columns (str, List[str])Column(s) used as pir label
	oprf_key_path (str) – Ecc oprf secret key path, 32B binary format. Use an absolute path.
	setup_path (str) – Offline/Setup phase output data dir. Use an absolute path.
	num_per_query (int) – Items number per query.
	label_max_len (int) – Max number bytes of label, padding data to label_max_len Max label bytes length add 4 bytes(len).
)
pir_query(server: str, config: Dict, protocol='KEYWORD_PIR_LABELED_PSI')

{
    # client config
    alice: {
        'input_path': '/path/intput.csv',
        'key_columns': 'id',
        'output_path': '/path/output.csv',
    },
    # server config
    bob: {
        'oprf_key_path': '/path/oprf_key.bin',
        'setup_path': '/path/setup_dir',
    },
}
pir_memory_query(server: str, config: Dict, protocol='KEYWORD_PIR_LABELED_PSI')

{
    # client config
    alice: {
        'input_path': '/path/intput.csv',
        'key_columns': 'id',
        'output_path': '/path/output.csv',
    },
    # server config
    bob: {
        'input_path': '/path/server.csv',
        'key_columns': 'id',
        'label_columns': 'label',
        'num_per_query': '1',
        'label_max_len': '20',
    },
}
2.2 Index PIR-SealPIR 介绍

BFV SHE方案定义在固定多项式环 R = Z / ( x n + 1 ) R=\mathbb{Z}/(x^{n}+1) R=Z/(xn+1)上,明文是 R t = Z t / ( x n + 1 ) R_t=\mathbb{Z_t}/(x^n+1) Rt=Zt/(xn+1)中的多项式即: a 0 + a 1 x + ⋯ + a n − 1 x n − 1 + a n − 1 x n − 1 a_0+a_1x+\dots + a_{n-1}x^{n-1}+a_{n-1}x^{n-1} a0+a1x++an1xn1+an1xn1

  • 多项式次数: n n n
  • 明文系数模: t t t,素数
  • 密文系数模: q q q,若干素数的乘积

在BFV SHE方案中,密钥 s s s是一个从二项多项式(系数为0或1)采样的多项式。密文包括两个来自环 R q = Z q ( x n + 1 ) R_q=Z_q(x^n+1) Rq=Zq(xn+1)的多项式, ( c 0 , c 1 ) = ( a , b + e + m ) (c_0,c_1)=(a,b+e+m) (c0,c1)=(a,b+e+m),其中 a a a是从 R q R_q Rq中均匀采样的, b = a ⋅ s + e b=a\cdot s+e b=as+e e e e是一个表示噪声的多项式,它的系数是从有界高斯分布里采样出来的。可以通过计算 u = c 1 − c 0 ⋅ s = e + m u=c_1-c_0\cdot s=e+m u=c1c0s=e+m来解密, e e e是很小的噪声,这样就可以恢复出原文 m m m
密文扩展因子 F F F:密文大小与明文大小之间的比率:
F = 2 l o g q l o g t F=\frac{2logq}{logt} F=logt2logq
SHE的同态运算会引起噪声的增长,当噪声超过一定限制时,无法解密得到明文,所以要适当选择SHE算法的参数,及控制同态运算的噪声增长。
密文是一对模 q q q的多项式,而明文是模 t t t的多项式。密文扩展因子直接影响PIR的响应大小。PIR的主要任务之一就是减少 F F F

在这里插入图片描述
BFV方案中,执行密文乘法运算时噪声增长很快,因此要避免使用密文乘法操作。

在这里插入图片描述

HE-Based PIR的原理就是将查询向量使用HE加密后发送给服务端,服务端使用该加密向量与服务器数据做内积运算并返回带查询数据的加密结果给客户端,最后由客户端解密返回结果获取PIR结果。
请求消息报文太大,包含n个密文向量。
在这里插入图片描述

2.2.1 SealPIR的主要贡献

在这里插入图片描述

将多个数据pack到一个HE明文
在这里插入图片描述
假设数据库中数据长度为 288 288 288字节(SealPIR论文中给出的长度),BFV参数选择:多项式次数 8192 8192 8192,明文模 16 16 16bit,举例说明一下packing的效果:

  • 数据库中每条数据,需要HE明文多项式中 C e i l ( 288 × 8 / 16 ) = 144 Ceil(288 \times 8 / 16) = 144 Ceil(288×8/16)=144个系数来表示。
  • HE一个明文多项式可以包含 F l o o r ( 8192 / 144 ) = 56 Floor(8192 / 144) = 56 Floor(8192/144)=56条数据库数据。
  • 对数据库的查询 d b i d x db_{idx} dbidx,需要转换为明文的查询 p l a i n i n d e x = d b i d x / 56 plain_{index} = db_{idx} / 56 plainindex=dbidx/56
  • 用户得到查询响应密文,通过私钥进行解密,得到HE明文,将HE明文对应的系数进行组合,得到真正查询的数据。

将查询向量压缩为一个密文
为了显著减少通信量,SealPIR方案在服务端添加一个额外的Expand操作得到查询密文向量。查询向量 ( 0 , … , 0 , 1 , 0 , … , 0 ) (0, \ldots, 0, 1, 0, \ldots, 0) (0,,0,1,0,,0) 压缩到一个HE明文多项式为例,查询向量中的每个分量对应为HE明文多项式中的系数。
a 0 + a 1 x + ⋯ + a N − 2 x N − 2 + a N − 1 x N − 1 = E ( x query index ) a_0 + a_{1^x} + \cdots + a_{{N-2}^{x^{N-2}}} + a_{{N-1}^{x^{N-1}}} = E(x^{\text{query}_{\text{index}}}) a0+a1x++aN2xN2+aN1xN1=E(xqueryindex)其中:
a i = 0 , if  i ≠ q u e r y i n d e x , a_i = 0, \quad \text{if } i \neq query_{index}, ai=0,if i=queryindex,
a i = 1 , if  i = q u e r y i n d e x a_i = 1, \quad \text{if } i = query_{index} ai=1,if i=queryindex
对查询明文进行加密,得到
E ( a 0 + a 1 x + … + a N − 2 x N − 2 + a N − 1 x N − 1 ) = E ( x query index ) E\left(a_0 + a_{1^x} + \ldots + a_{{N-2}^{x^{N-2}}} + a_{{N-1}^{x^{N-1}}}\right) = E(x^{\text{query}_{\text{index}}}) E(a0+a1x++aN2xN2+aN1xN1)=E(xqueryindex)
服务端接收到查询密文后,执行Expand算法,得到查询密文向量:
( E ( 0 ) , … , E ( 0 ) , E ( 1 ) , E ( 0 ) , … , E ( 0 ) ) (E(0), \ldots, E(0), E(1), E(0), \ldots, E(0)) (E(0),,E(0),E(1),E(0),,E(0))

还是以上面packing的参数举例,每个HE明文可以pack 56 56 56条数据库数据,客户端查询时,将 d b i d x db_{idx} dbidx转换为 p l a i n i n d e x plain_{index} plainindex,即对HE明文数据库进行查询,最多可以查询 8192 8192 8192个HE明文,转换成数据库数据,最多可以查询 8192 × 56 = 458 , 752 8192 \times 56 = 458,752 8192×56=458,752条数据,不能满足实际业务中的需求。
为了满足实际将查询向量压缩到多个HE明文来表示查询向量,对于百万数据来讲,需要 c e i l ( 1000000 / 8192 ) = 123 ceil(1000000/8192)=123 ceil(1000000/8192)=123个HE明文,对应 123 123 123个HE密文,才能表示百万数据的查询向量。为了进一步压缩查询密文的数量,可以使用下面的多维表示方法。

Expand算法的详细描述和证明可以参考[SealPIR]论文中的内容。

将数据库一维向量转换为多维向量
查询时将数据库表示为 n ∗ n \sqrt{n}\ast \sqrt{n} n n 的二维矩阵,减少查询向量的长度。
在这里插入图片描述
以上面packing的参数为例,将数据库表示为 2 2 2维数据时,通过两个查询密文可以查询的数据量是 8192 × 8192 × 56 ≈ 37 8192 \times 8192 \times 56 \approx 37 8192×8192×5637亿,已经能满足绝大多数的数据库查询任务。数据库数据量为 n n n,通过packing后得到HE明文数量为 n ′ n' n F F F是密文扩张因子,二维查询流程如下:

服务端:

  • 将HE明文表示为 n ′ × n ′ \sqrt{n'} \times \sqrt{n'} n ×n 的矩阵 M M M,其中 n ′ < 8192 \sqrt{n'} < 8192 n <8192
  • V c V_c Vc是密文查询列向量, A c = M ⋅ V c A_c = M \cdot V_c Ac=MVc,其中 A c A_c Ac n ′ × 1 \sqrt{n'} \times 1 n ×1的密文列向量。
  • A c A_c Ac中每个密文拆分为 F F F份明文多项式,得到 n ′ × F \sqrt{n'} \times F n ×F矩阵 A S c A_{S_c} ASc
  • V r V_r Vr是密文查询行向量, A S c T ⋅ V r A_{S_c}^T \cdot V_r AScTVr,得到维度为 F × 1 F \times 1 F×1的密文向量。

客户端:

  • 客户端收到 F F F个密文向量,使用私钥 s k sk sk解密,将其组合成密文 E n c ( M [ r , c ] ) Enc(M[r,c]) Enc(M[r,c]),使用私钥 s k sk sk解密 E n c ( M [ r , c ] ) Enc(M[r,c]) Enc(M[r,c])得到真正的查询HE明文 M [ r , c ] M[r,c] M[r,c],对HE明文 M [ r , c ] M[r,c] M[r,c]中对应的系数进行组合,得到真正查询的数据。
    服务端为了避免进行密文乘以密文的同态运算,第3步中将密文拆解成 F F F个明文进行操作,最后服务端发给客户端的查询响应是 F F F个密文,在多项式次数 8192 8192 8192时, F ≈ 26 F \approx 26 F26,因此,服务端发给客户端的查询响应消息太大,这也是SealPIR主要的问题,后续的文章,主要目标是减少查询响应消息。

支持多查询
在这里插入图片描述

2.2.2 Keyword PIR-Label PSI介绍

基本原理:点值表示得到插值多项式系数表示。
在这里插入图片描述
客户端可以通过窗口技术,服务端采用分区技术减少乘法计算次数。
在这里插入图片描述

使用extremak postage stamp bass 减少通信开销

在这里插入图片描述

Paterson-Stockmeyer 算法减少密文乘法
在这里插入图片描述

隐语Label PSI 主要工作

  • 以微软开源代码功能为核心
  • OPRF采用隐语的实现
    • 支持的ecc曲线包括:FourQ、Secp256k1、SM2
  • Label的自动填充
  • 增加了服务的预处理结果保存功能
  • 可以至此离线和查询(多次)两个阶段

setup阶段

  1. 选择参数。
  2. 对id数据进行PRF计算,前128bit根据截取用于匹配,后128bit作为对称算法密钥加密label。
  3. 根据PRF前128bit将数据插入Simple Hash。
  4. 对Simple Hash 每一行分别划分bin bundle,并计算matching polynomial 和label polynomial。
  5. 将插值多项式系数packing到同态算法明文。

Query 阶段
在这里插入图片描述

  1. 请求参数。
  2. 执行OPRF。
  3. 计算查询值得同态密文幂集合。
  4. 使用同态私钥解密服务端返回的同态密文。
  5. 满足匹配条件时,使用OPRF的后128bit解密得到label。

隐语Label PSI的主要参数
在这里插入图片描述

3.隐语PIR后续计划

在这里插入图片描述

  • 32
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
隐语框架与TEE(可信执行环境)的配合可以实现数据加密。隐语框架主要解决的是数据隐私保护和安全计算的问题,而TEE是一种安全的硬件或软件环境,可以提供可信的执行环境来保护数据和计算过程的安全性。通过将隐语框架与TEE结合,可以实现数据在计算过程中的加密和保护。 在隐语框架中,数据可以使用全密态计算或明密文混合计算的方式进行加密。全密态计算是一种在密文环境中进行计算的方式,数据在计算过程中一直保持加密状态,可以使用Secure Aggregation算法、MPC密态引擎、同态加密等技术来进行计算。而明密文混合计算则是将部分计算从密文环境搬到明文环境,在明文环境中进行计算可以提升计算的性能,同时通过安全退让来保证数据的安全性。 TEE提供了一个可信的执行环境,可以保护计算过程中的数据和代码安全。在隐语框架中,可以使用TEE来实现数据的加密和解密操作,以及进行安全计算。TEE可以提供硬件级的安全保护,例如Intel SGX和ARM TrustZone等,也可以通过软件模拟的方式提供安全执行环境。 通过隐语框架配合TEE实现数据加密,可以在保护数据隐私的前提下,进行安全的计算和数据交换。这种组合可以应用于各种场景,例如联邦学习、数据交易市场等,为数据安全和隐私保护提供了一种可行的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [隐私计算技术|深度解读可信隐私计算框架“隐语”](https://blog.csdn.net/m0_69580723/article/details/126662952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值