课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的安装和部署
801 3
|
安全 算法 Oracle
「隐语小课」Blazing Fast PSI 协议解读
「隐语小课」Blazing Fast PSI 协议解读
1433 0
|
数据采集 缓存 安全
隐语小课|非平衡隐私集合求交(Unbalanced PSI)协议介绍
隐语小课|非平衡隐私集合求交(Unbalanced PSI)协议介绍
1322 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协议。
1347 0
|
机器学习/深度学习 算法 安全
隐私计算训练营第三讲-详解隐私计算的架构和技术要点
SecretFlow 是一个隐私保护的统一框架,用于数据分析和机器学习,支持MPC、HE、TEE等隐私计算技术。它提供设备抽象、计算图表示和基于图的ML/DL能力,适应数据水平、垂直和混合分割场景。产品层包括SecretPad(快速体验核心能力)和SecretNote(开发工具)。算法层涉及PSI、PIR、数据分析和联邦学习(水平、垂直、混合)。此外,SecretFlow还有YACL密码库和Kusica任务调度框架,Kusica提供轻量化部署、跨域通信和统一API接口。
612 0
|
人工智能 开发者
通义千问三款主力模型再降价,最高降幅85%
通义千问三款主力模型再降价,最高降幅85%
2861 12
通义千问三款主力模型再降价,最高降幅85%
|
API 数据库
课6-匿踪查询和隐语PIR的介绍及开发实践
隐匿查询(PIR)允许用户从服务器检索数据而不暴露查询内容。类型包括单服务器与多服务器方案,以及Index PIR和Keyword PIR。隐语支持SealPIR用于单服务器Index PIR,压缩查询并支持多维和多查询处理。另外,它采用Labeled PSI实现单服务器Keyword PIR,优化了计算和通信效率,基于微软代码并扩展了功能,如OPRF、特定ECC曲线支持和预处理结果保存。隐语提供的PIR相关API包括`spu.pir_setup`和`spu.pir_query`。
课6-匿踪查询和隐语PIR的介绍及开发实践
|
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工具,实现多节点代码自动执行和跟踪。
|
机器学习/深度学习 SQL 人工智能
隐私计算框架“隐语”介绍及展望(附ppt)
隐私计算框架“隐语”介绍及展望(附ppt)
1088 0
|
SQL JavaScript 前端开发
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
这篇文章详细介绍了如何在Vue.js中使用分页组件展示从数据库查询出来的数据,包括前端Vue页面的表格和分页组件代码,以及后端SpringBoot的控制层和SQL查询语句。
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)