隐私计算(六)隐语PIR介绍与开发

隐语实现PIR介绍

隐匿查询(Private Information Retrieval PIR)

用户查询服务端数据库中的数据但服务端不知道用户查询的是哪些数据

分类:

按服务器数量分类:

  • 单服务器方案(Single Server)

  • 多服务器方案(Multi-Server)

按查询类型分类:

  • index PIR

  • Keyword PIR

隐语目前支持的PIR方式:

  • Single server Index PIR : SealPlR

  • Single Server Keyword PIR: Labeled PSI

PIR调用接口:pir_setup

pir_setup 数据预处理,参数说明:

  • input_path:服务端数据文件路径,建议绝对路径

  • key_columns:Key对应的列名

  • label_columns:Label对应的列名,多列,用逗号分隔

  • oprf_key_path::服务端ecc密钥文件,32B,二进制文件

  • mum_per_query:每次查询的id数量

  • label_max_len:Label数据拼接后填充到固定的长度大小

reports=spu.pir_setup(
    server='bob',
    input_path='/path/B_PIR_DATA.csv',
    key_columns='id',
    label_columns=['register_date','age'],
    oprf_key_path='/path/oprf_key.bin',
    setup_path='/path/setup_path',
    num_per_query=1,
    label_max_len=18,
)

pir_setup 单方任务: 可以使用的secretflow单机模拟配置,或者直接调用spu的python接口

PIR调用接口:pir_query

pir_query双方执行查询任务,参数说明:

  • 客户端配置

    • input_path:查询id对应的csv文件路径

    • Key_columns:Key对应的列名

    • output_pathPIR:查询结果输出的文件路径

  • 服务端配置

    • oprf_key_path:服务端ecc密钥文件,32B,二进制文件

    • setup_path:预处理阶段结果输出路径

# client
alice_config ={
    'input_path': '/path/A_PIR ID.CSV',
    "key _columns': 'id',
    'output_path': '/path/sf_pir_out.csv'
# server
bob_config ={
    'oprf_key_path': '/path/oprf _key.bin',
    'setup_path': '/path/setup_path',
query_config ={
    alice: alice_config,
    bob: bob_config,
reports = spu.pir query(
    server='bob',
    config=query_config
)

Index PIR-SealPIR

BFV方案介绍

基于同台密码实现Index PIR的基本原理

SealPIR:

  • 多个数据pack到一个HE Plaintext

    • 查询的db index转换为plaintext index

  • 查询向量压缩到一个密文

    • 显著减少通信量,server端可通过计算expand得到查询密文向量

  • 支持多维查询

    • 2维查询将数据转换为√n*√n的矩阵,减少expand计算量

  • 支持多个查询

    • 使用cuckoo hash支持同时进行多个查询

SealPIR 中给出了通过cuckooHash进行多个查询的算法,可以提高查询效率。cuckooHash选取3个hash,bin的个数为1.5k,具体算法,如下:

server setup 对DB中n个元素,分别计算cuckooHash的3个Hash,得到3个binindex,插入到3个bin index中 client query 将k个查询,通过cuckooHash插入到b=1.5k个bin中,对空的bin进行随机填充

执行每个bin执行一个PIR,共计b个PIR。

Keyword PIR-Labeled PSI

基本原理

核心思想:点值表示得到插值多项式系数表示

隐语label Psl的主要工作

  • 以微软的开源代码功能为核心

  • 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主要参数

PIR测试

初始化Secretflow

与PSI一样,获取未占用的端口

import socket
from contextlib import closing
from typing import cast
​
def unused_tcp_port() ->int:
    with closing(socket.socket(socket.AF_INET,socket.SOCK_STREAM)) as sock:
        sock.bind(('',0))
        sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        return cast(int,sock.getsockname()[1])
​
print(unused_tcp_port())

alice单独执行:

import  secretflow  as  sf
 
cluster_config={
    'parties':{
        'alice':{
            'address':'alice:38635',
            'listen_addr':'0.0.0.0:38635'
        },
        'bob':{
            'address':'bob:52969',
            'listen_addr':'0.0.0.0:52969'
        },
    },
    'self_party':'alice'
}
 
sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)

bob单独执行:

import  secretflow  as  sf
 
cluster_config={
    'parties':{
        'alice':{
            'address':'alice:38635',
            'listen_addr':'0.0.0.0:38635'
        },
        'bob':{
            'address':'bob:52969',
            'listen_addr':'0.0.0.0:52969'
        },
    },
    'self_party':'bob'
}
 
sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)

初始化SPU

import spu
 
cluster_def ={
    'nodes':[
        {
            'party':'alice',
            'address':'alice:38635',#新空闲端口
        },
        {
            'party':'bob',
            'address':'bob:52969',#新空闲端口
        },
    ],
    'runtime_config':{
        'protocol':spu.spu_pb2.SEMI2K,
        'field':spu.spu_pb2.FM128,
    },
}
 
spu=sf.SPU(
    cluster_def,
    link_desc={
        'connect_retry_times':60,
        'connect_retry_interval_ms':1000,
    },
)

建立索引

spu.pir_setup(
    server='alice',
    input_path=f"{str(Path.home)}/workshop/alice/payment.csv",
    key_columns=['uid'],
    label_columns=['credit_card_number','credict_card_provider'],
    oprf_key_path=f"{str(Path.home)}/alice_orpf_key",
    setup_path=f"{str(Path.home)}/workshop/alice/alice_setup",
    num_per_query=1,
    label_max_len=20,
    bucket_size=1000000
)

对指定目录文件的查询

from pathlib import Path
spu.pir_query(
    server='alice',
    client='bob',
    server_setup_path=f"{str(Path.home)}/workshop/pir_server_setup",
    client_key_columns=['uid'],
    client_input_path=f"{str(Path.home)}/workshop/bob/pir_query.csv",
    client_output_path=f"{str(Path.home)}/workshop/bob/pir_outputcsv",
)

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值