课5-隐私求交和隐语PSI介绍及开发实践

简介: Alice和Bob分别创建了CSV文件`alice_psi_input.csv`和`bob_psi_input.csv`,包含姓名和年龄数据。他们使用SecretFlow库执行隐私保护集合求交(PSI)协议,版本v1和v2,通过ECDH_PSI_2PC或PROTOCOL_ECDH协议,不泄露原始数据。在PSI过程中,双方找出共享的姓名,结果发送给Alice。

csv_data

alice

import pandas as pd

alice_df = pd.DataFrame({
   "name": ["mike", "tony", "john", "kate"],"age": [15,13,20,21]})
alice_df.to_csv(f"./alice_psi_inputt.csv", index=False)

bob

import pandas as pd

bob_df = pd.DataFrame({
   "name": ["alice", "tony", "john", "kitty"],"age": [15,13,20,21]})
bob_df.to_csv(f"./bob_psi_inputt.csv", index=False)

image.png

PSI

https://www.secretflow.org.cn/zh-CN/docs/psi/v0.2.0beta/getting_started
image.png

PSI_v1

alice

import spu
import secretflow as sf

cluster_config ={
   'parties':{
   
                           'alice':{
   
                                   'address': '172.17.0.3:52000',
                                   'listen_addr': '0.0.0:52000'
                                   },
                           'bob':{
   
                                   'address':'172.17.0.4:52000',
                                   'listen_addr': '0.0.0:52000'
                                  }
                            },
                 'self_party':'alice'
                 }

sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)
alice = sf.PYU('alice')
bob = sf.PYU('bob')

cluster_def={
   
           "nodes":[{
   "party": "alice", "address": "172.17.0.3:41805"},
                    {
   "party":"bob", "address": "172.17.0.4:52397"},],
           "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.psi_csv(
    key={
   alice:["name"],bob:["name"]},
    input_path={
   alice:f"/root/psi/data/alice_psi_input.csv", bob:f"/root/psi/data/bob_psi_input.csv"},
    output_path={
   alice:f"/root/psi/data/alice_psi_output.csv",bob:f"/root/psi/data/bob_psi_outpuut.csv"},
    receiver="alice",
    broadcast_result=True,
    protocol="ECDH_PSI_2PC",
    curve_type="CURVE_25519")

bob

import spu
import secretflow as sf

cluster_config ={
   'parties':{
   
                           'alice':{
   
                                   'address': '172.17.0.3:52000',
                                   'listen_addr': '0.0.0:52000'
                                   },
                           'bob':{
   
                                   'address':'172.17.0.4:52000',
                                   'listen_addr': '0.0.0:52000'
                                  }
                            },
                 'self_party':'bob'
                 }

sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)
alice = sf.PYU('alice')
bob = sf.PYU('bob')

cluster_def={
   
           "nodes":[{
   "party": "alice", "address": "172.17.0.3:41805"},
                    {
   "party": "bob", "address": "172.17.0.4:52397"}],
           "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,})
print(dir(spu))

spu.psi_csv(
    key={
   alice:["name"],bob:["name"]},
    input_path={
   alice:f"/root/psi/data/alice_psi_input.csv", bob:f"/root/psi/data/bob_psi_input.csv"},
    output_path={
   alice:f"/root/psi/data/alice_psi_output.csv",bob:f"/root/psi/data/bob_psi_outpuut.csv"},
    receiver="alice",
    broadcast_result=True,
    protocol="ECDH_PSI_2PC",
    curve_type="CURVE_25519")

PSI_v2

alice

import spu
import secretflow as sf

cluster_config ={
   'parties':{
   
                           'alice':{
   
                                   'address': '172.17.0.3:52000',
                                   'listen_addr': '0.0.0:52000'
                                   },
                           'bob':{
   
                                   'address':'172.17.0.4:52000',
                                   'listen_addr': '0.0.0:52000'
                                  }
                            },
                 'self_party':'alice'
                 }

sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)

cluster_def={
   
           "nodes":[{
   "party": "alice", "address": "172.17.0.3:41805"},
                    {
   "party":"bob", "address": "172.17.0.4:52397"},],
           "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.psi_v2(
    keys={
   "alice":["name"],"bob":["name"]},
    input_path={
   "alice":f"/root/psi/data/alice_psi_input.csv", "bob":f"/root/psi/data/bob_psi_input.csv"},
    output_path={
   "alice":f"/root/psi/data/alice_psi_output.csv","bob":f"/root/psi/data/bob_psi_outpuut.csv"},
    receiver="alice",
    broadcast_result=True,
    protocol="PROTOCOL_ECDH",
    ecdh_curve="CURVE_25519")

bob

import spu
import secretflow as sf

cluster_config ={
   'parties':{
   
                           'alice':{
   
                                   'address': '172.17.0.3:52000',
                                   'listen_addr': '0.0.0:52000'
                                   },
                           'bob':{
   
                                   'address':'172.17.0.4:52000',
                                   'listen_addr': '0.0.0:52000'
                                  }
                            },
                 'self_party':'bob'
                 }

sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)

cluster_def={
   
           "nodes":[{
   "party": "alice", "address": "172.17.0.3:41805"},
                    {
   "party": "bob", "address": "172.17.0.4:52397"}],
           "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.psi_v2(
    keys={
   "alice":["name"],"bob":["name"]},
    input_path={
   "alice":f"/root/psi/data/alice_psi_input.csv", "bob":f"/root/psi/data/bob_psi_input.csv"},
    output_path={
   "alice":f"/root/psi/data/alice_psi_output.csv","bob":f"/root/psi/data/bob_psi_outpuut.csv"},
    receiver="alice",
    broadcast_result=True,
    protocol="PROTOCOL_ECDH",
    ecdh_curve="CURVE_25519")

image.png

相关文章
|
Ubuntu 调度 Docker
2024.3.21隐语训练营第4讲笔记:SecretFlow & SecretNote安装部署
本文介绍了SecretFlow和SecretNote的安装和部署
928 3
|
安全 算法 Oracle
「隐语小课」Blazing Fast PSI 协议解读
「隐语小课」Blazing Fast PSI 协议解读
1608 0
|
数据采集 缓存 安全
隐语小课|非平衡隐私集合求交(Unbalanced PSI)协议介绍
隐语小课|非平衡隐私集合求交(Unbalanced PSI)协议介绍
1574 0
|
JSON IDE 机器人
超简单:mac导出微信聊天记录(附上粉丝群全部聊天记录)
今天再给大家讲解一下如何直导出mac版本微信的聊天记录,当然如果你没有mac,那可以直接关闭这篇文章了。
11056 0
超简单:mac导出微信聊天记录(附上粉丝群全部聊天记录)
|
人工智能 C++
ML之FE:Vintage曲线/Vintage分析的简介、计算逻辑、案例应用之详细攻略
ML之FE:Vintage曲线/Vintage分析的简介、计算逻辑、案例应用之详细攻略
ML之FE:Vintage曲线/Vintage分析的简介、计算逻辑、案例应用之详细攻略
|
机器学习/深度学习 算法 安全
隐私计算训练营第三讲-详解隐私计算的架构和技术要点
SecretFlow 是一个隐私保护的统一框架,用于数据分析和机器学习,支持MPC、HE、TEE等隐私计算技术。它提供设备抽象、计算图表示和基于图的ML/DL能力,适应数据水平、垂直和混合分割场景。产品层包括SecretPad(快速体验核心能力)和SecretNote(开发工具)。算法层涉及PSI、PIR、数据分析和联邦学习(水平、垂直、混合)。此外,SecretFlow还有YACL密码库和Kusica任务调度框架,Kusica提供轻量化部署、跨域通信和统一API接口。
769 0
|
算法 安全 大数据
隐私计算实训营第5讲-------隐私求交和隐语PSI介绍以及开发实践
隐私求交(Private Set Intersection, PSI)是利用密码学技术在不暴露数据集以外信息的情况下找到两集合的交集。隐语SPU支持三种PSI算法:ECDH(适合小数据集)、KKRT(基于Cuckoo Hashing和OT Extension,适合大数据集)和BC22PCG(使用伪随机相关生成器)。ECDH基于椭圆曲线 Diffie-Hellman,KKRT利用OT Extension实现高效处理,而BC22PCG通过压缩满足特定相关性的随机数减少通信量。此外,还有基于Oblivious Pseudo-Random Function (OPRF)的PSI协议。
1654 0
|
Ubuntu Linux Docker
课4-隐语SecretFlow、SecretNote安装部署
SecretFlow是支持Python 3.8及以上版本的隐私计算框架,兼容CentOS 7、Anolis8、Ubuntu 18.04等等。它提供两种安装包:所有需求的大体积`secretflow`和仅含基础功能的小体积`secretflow-lite`。用户可通过Docker、pip或源码安装。安装后,可使用Docker镜像在本地部署,并通过Ray进行集群仿真。更多详细信息和部署指南可在官方手册中找到。此外,SecretFlow还提供了类似Jupyter Notebook的SecretNote工具,实现多节点代码自动执行和跟踪。
|
Ubuntu
Ubuntu下载ISO镜像的方法
步骤 1:访问Ubuntu官方网站 打开浏览器,输入Ubuntu的官方网址:https://cn.ubuntu.com/download/desktop 接着,点击“Ubuntu Desktop”或你需要的Ubuntu版本。
7715 6
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
22141 5
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!