【隐私计算实训营006隐语PIR介绍及开发实践】

1. 隐语实现PIR总体介绍

隐匿查询(Private Information Retrieval PIR)定义
在这里插入图片描述

  • 按服务器数量分类
    • 单服务器方案(Single Server)
    • 多服务器方案(Multi-Server)
  • 按查询类型分类
    • Index PIR
    • Keyword PIR

隐语目前支持:
Single Server Index PIR:SealPIR
Single Server Keyword:Labeled PSI
在这里插入图片描述

1.1 隐语PIR调用接口:pir_setup

reports = spu.pir_setup(server='bob',input_path='/path/B_PIR_DATA.csv',#服务端数据文件路径,建议绝对路径key_columns='id',#Key对应的列名label_columns=['register_date','age'],#Label对应的列名。多列,用逗号隔开oprf_key_path='/path/oprf_key.bin',#服务端ecc密钥文件,32B,二进制文件 setup_path='/path/setup_path',num_per_query=1,#每次查询的id数量 label_max_len=18#Label数据拼接后填充到固定的长度大小
)

1.2 隐语PIR调用接口:pir_query

#client--alice
alice_config={'input_path':'/path/A_PIR_ID.csv',#查询id对应的csv文件路径'key_columns':'id',#key对应的列名'output_path':'/path/sf_pir_out.csv',#PIR查询结果输出的文件路径
}
#server
bob_config = {oprf_key_path='/path/oprf_key.bin',#服务端ecc密钥文件,32B,二进制文件 setup_path='/path/setup_path',#预处理阶段结果输出路径
}
query_config={alice:alice_configbob:bob_config
}
reports=spu.pir_query(server='bob',config=query_config
)

2. Index PIR-SealPIR介绍

Index PIR 是一种隐私信息检索(Private Information Retrieval, PIR)技术,它允许用户从服务器检索特定数据项而不泄露他们所查询的内容。在基于索引的PIR中,用户可以通过索引值来秘密地获取数据库中的记录,而服务器无法知道用户实际请求的是哪个索引对应的记录。

SealPIR 则是一种具体实现隐私信息检索的协议,它基于同态加密(Homomorphic Encryption, HE)技术,特别是在SEAL(Simple Encrypted Arithmetic Library)框架下实现的一种高效PIR方案。SealPIR使得用户可以在不解密服务器数据库的情况下,对加密数据执行查询操作,并获得加密形式的查询结果,然后用户可以安全地解密得到所需的真实数据,整个过程保证了用户的查询隐私。

在这里插入图片描述

SealPIR结合了现代密码学的进步,尤其是同态加密技术的优势,提供了一种更为安全和高效的隐私保护机制,适用于那些对数据隐私有严格要求的场景,比如云存储环境下的数据查询服务等。随着同态加密技术的不断成熟,基于此类技术的PIR协议如SealPIR,在隐私保护和效率之间找到了更好的平衡点,从而推动了隐私计算领域的发展。

3. Keyword PIR-Labeled PSI介绍

Labeled PSI (Private Set Intersection with Labeling) 是Keyword PIR中的一种具体技术实现,主要用于解决两个或多方参与者的私人集合交集问题,但增加了关键词标签的功能。在Labeled PSI中,每个参与者不仅拥有一个元素集合,而且这些元素还带有标签(关键词)。当两个参与者希望找出他们的集合中共有的元素(及对应的标签)时,可以使用Labeled PSI协议来完成这一任务,且过程中不会暴露各自的非共有元素信息。

Labeled PSI通常基于密码学技术,例如基于多方计算(MPC)、同态加密(HE)、混淆电路(Garbled Circuits)或其他零知识证明(Zero-Knowledge Proofs)的方法来设计。其中,某些Labeled PSI方案可能会利用插值多项式或其他数学工具进行优化,以便更高效地处理大规模数据集上的关键词匹配查询。
在这里插入图片描述

例如,Labeled PSI可能的工作流程包括:
用户将关键词加密并构建查询对象。
数据持有者用类似的技术加密其数据库中的关键词。
双方通过交互协议计算出在各自加密数据中有交集的关键词,而不揭露任何一方的具体关键词列表或多余的交集信息。

4. 代码实践

4.1. 查询一个没有使用的端口

import socket
from contextlib import closing
from typing import castdef unused_tcp_port() -> int:"""return an unused port"""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())

4.2. 初始化alice节点

import secretflow as sfcluster_conf = {'parties': {'alice': {'address': 'ip:8000',#对外使用的地址'listen_addr': '0.0.0.0:59181'#对内的},'bob': {'address': 'ip:8001',#对外使用的地址'listen_addr': '0.0.0.0:8001'#对内的},},'self_party': 'alice'
}
sf.shutdown()
sf.init(address='local', cluster_config=cluster_conf)

4.3. 初始化bob节点

import secretflow as sfcluster_conf = {'parties': {'alice': {'address': 'ip:8000',#对外使用的地址'listen_addr': '0.0.0.0:59181'#对内的},'bob': {'address': 'ip:8001',#对外使用的地址'listen_addr': '0.0.0.0:8001'#对内的},},'self_party': 'bob'
}
sf.shutdown()
sf.init(address='local', cluster_config=cluster_conf)

4.4. 初始化spu

import spu
import secretflow as sfspu_conf = {"nodes": [{"party": "alice","address": "alice:8001","listen_addr": "alice:8001",},{"party": "bob","address": "bob:8001","listen_addr": "bob:8001",},],"runtime_config": {"protocol": spu.spu_pb2.SEMI2K,"field": spu.spu_pb2.FM128,"sigmoid_mode": spu.spu_pb2.RuntimeConfig.SIGMOID_REAL,},
}
spu = sf.SPU(cluster_def=spu_conf,link_desc={"connect_retry_times":60,"connect_retry_interval_ms":1000})

4.5.RIP

alice做服务端,bob作为客户端。
进入alice的secretnote服务器端运行命令: openssl rand 32 > ~/alice_oprf_key
准备数据

# alice端
import pandas as pd
from pathlib import Path
alice_df = pd.DataFrame({"name":["alice","bob","carol","tony"],"age":[11,13,14,26]
})
alice_df.to_csv(f"{str(Path.home())}/alice_pir_input.csv",index=False)
# bob端
import pandas as pd
from pathlib import Path
bob_df = pd.DataFrame({"name":["tony","bob"],
})
bob_df.to_csv(f"{str(Path.home())}/bob_pir_query.csv",index=False)
import spu
spu.pir_setup(server="alice",input_path=f"{str(Path.home())}/alice_pir_input.csv",key_columns=["name"],label_columns=["age"],oprf_key_path=f"{str(Path.home())}/alice_oprf_key",setup_path=f"{str(Path.home())}/alice_setup",#中间结果存储路径num_per_query=1,label_max_len=20,bucket_size=1000000
)
spu.pir_query(server='alice',client='bob',server_setup_path=f"{str(Path.home())}/alice_setup",client_key_colums=["name"],client_input_path=f"{str(Path.home())}/bob_pir_query.csv",client_output_path=f"{str(Path.home())}/bob_pir_result.csv",
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/292612.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chrome浏览器 安装Vue插件vue-devtools

前言 vue-devtools 是一个为 Vue.js 开发者设计的 Chrome 插件。它可以让你更轻松地审查和调试 Vue 应用程序。与普通的浏览器控制台工具不同,Vue.js devtools 专为 Vue 的响应性数据和组件结构量身定做。 1. 功能介绍 组件树浏览:这个功能可以让你查…

Map和List输入的两种不同json格式

一、List to json格式 [{"type":"top.lovemom.pojo.ESP8266","devicePosition":"家里的阳台","deviceRemark":"我的设备1","publicIp":"127.0.0.1","userEmail":"123bggb.to…

CCF-CSP认证考试 202212-3 JPEG 解码 100分题解

更多 CSP 认证考试题目题解可以前往:CSP-CCF 认证考试真题题解 原题链接: 202212-3 JPEG 解码 时间限制: 1.0s 内存限制: 512.0MB 问题背景 四年一度的世界杯即将画上尾声。在本次的世界杯比赛中,视频助理裁判&…

【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统概述

系列文章目录 【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统介绍 文章目录 系列文章目录[TOC](文章目录) 前言一、Linux 概述1.1、GNU 与自由软件1.2、Linux是什么1.3、Linux 特色1.4、Linux的优缺点1.4.1、Linux 优点1.4.2、Linux 缺点 二、虚拟机介绍2.1…

SRS OBS利用RTMP协议实现音视频推拉流;WebRTC 屏幕直播分享工具

一、SRS OBS利用RTMP协议实现音视频推拉流 参考:https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started 1)docker直接运行SRS服务: docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.co…

【字节二面】SpringBoot可以同时处理多少请求

目录 一、示例代码二、那么springboot可以处理多少请求?三、maxConnections、maxThreads、acceptCount的关系 一、示例代码 RestController Slf4j public class RequestController {GetMapping("/test")public String test(HttpServletRequest request) …

科技团队治理能力成长路线图

点击👆蓝字 关注我们 本文观点|吴穹 主笔|AI小助手 温馨提示:干货长文,建议收藏阅读喔~ 引言 2024年3月20日,吴穹博士于上海交通大学上海高级金融学院同一众信托行业金融科技管理者进行了《金融…

【JVM】关于JVM垃圾回收

文章目录 🌴死亡对象的判断算法🌸引用计数算法🌸可达性分析算法 🌳垃圾回收算法🌸标记-清除算法🌸复制算法🌸标记-整理算法🌸分代算法🌸哪些对象会进入新生代&#xff1f…

算法学习——LeetCode力扣动态规划篇8

算法学习——LeetCode力扣动态规划篇8 300. 最长递增子序列 300. 最长递增子序列 - 力扣(LeetCode) 描述 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删…

nuxt学习

一、遇到的问题 1、nuxt初始化失败问题解决方案 使用npm和pnpm初始化都失败 原因:主机连不上DNS服务器 解决方案 Step1: 打开文件夹 Windows:路径:C:\Windows\System32\drivers\etc Mac: 路径:/etc/hosts Step2: 使用记事本方式打开 …

游戏领域AI智能视频剪辑解决方案

游戏行业作为文化创意产业的重要组成部分,其发展和创新速度令人瞩目。然而,随着游戏内容的日益丰富和直播文化的兴起,传统的视频剪辑方式已难以满足玩家和观众日益增长的需求。美摄科技,凭借其在AI智能视频剪辑领域的深厚积累和创…

【JavaSE】内部类

目录 前言 内部类 内部类的种类 1. 实例内部类 2 静态内部类 3 匿名内部类 4 局部内部类 结语 前言 内部类是我们前面学习遗留下来的知识点,在学完接口后才能更好的理解它,因此等到现在才讲 内部类 在Java中,我们可以将A类定义在B…

人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍。特征金字塔网络(FPN)是一种深度学习模型结构,主要应用于目标检测任务中&am…

什么是 SSL 证书?

SSL 证书的介绍 SSL(Secure Sockets Layer)证书是一种由数字证书颁发机构(CA)签发的加密证书,用于在 Web 浏览器和服务器之间建立安全连接。SSL 证书能够确保网站和应用程序的数据传输过程中不被窃听、篡改或伪造&…

从0配置React

在本地安装和配置React项目,您可以使用create-react-app这个官方推荐的脚手架工具。以下是安装React的步骤,包括安装Node.js、使用create-react-app创建React应用,以及启动开发服务器。 下载安装node.js运行以下命令,验证Node.js…

系列学习前端之第 7 章:一文掌握 AJAX

1、AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML(中文名:阿贾克斯),就是异步的 JS 和 XML。AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。AJAX 可以在浏览器中向服务器发送异步请求…

Wasm初上手

总之也是为了扩宽技术面吧。。。我也不知道为什么就想试试了,就酱。 参考阅读:极客时间《WebAssembly入门课》 安装wasm的编译器Emscripten。Emscripten 是一个“源到源”语言编译器工具集,这个工具集可以将 C/C 代码编译成对应 JavaScript 代…

AI学习-Pandas数据处理分析

文章目录 1. Pandas概述2. Series用法2.1 Series的创建2.2 Series的取值2.3 Series的相关方法 3. DataFrame用法3.1 DataFrame创建3.2 DataFrame取值3.3 DataFrame相关方法 1. Pandas概述 ​ Pandas 是一个开源的数据分析处理库,它应用在数据科学、统计分析、机器学…

手机短信验证码自动转发到服务器

今天写一个自动化处理程序,需要验证码登录,怎么样把手机收到的短信自动转发到服务器接口呢? 利用ios手机快捷指令的功能 打开快捷指令点击中间自动化点击右上角号选择信息信息包含选取,输入验证码选择立即执行点击下一步按下图配…

程序汪接的4万智慧餐饮项目

本文章来自程序汪背后的私活小团队,开发智慧餐厅的小程序 由于程序汪太忙于是把这个项目让一个靠谱粉丝开发了,当然开发质量和进度我会跟踪,具体分析如下 B站【我是程序汪】 老程序员接了一个4万的智慧餐饮项目,开发周期60天 小程…