隐私计算(五):隐私求交和隐语PSI的介绍及开发实践

SPU实现的PSI介绍

PSI:安全求交集 Private Set Intersection (PSl)

  • 一种特殊的安全多方计算(MPC)协议

  • Alice持有集合X,Bob持有集合Y

  • Alice和Bob通过执行PSI协议,得到交集结果X∩Y

  • 除交集外不会泄漏交集外的其它信息

PSI分类

  • 2-Party/Multi-Party PSI

  • Balanced/Unbalanced PSI

  • Semi-honest/Malicious PSI

  • PSI with computation:

    • PSI-CA (Cardinality)

    • PSI-Payload Analytics

    • Circuit PS

隐语PSI功能分层

SPU实现的PSI

  • 半诚实模型

    • 两方

      • ecdh、kkrt16、bc22(pcg-psi)

      • ec-oprf PSl (Unbalanced Psl)

      • dp-psi

    • 多方

      • ecdh-3-party(可扩展到多方)

  • 恶意模型

    • mini-PSI(适合小数据集)

ecdh-PSI

  • Simple to understand and to explain (to your managers)

  • Simple to implement

  • Best Communication cost, high Computation cost

  • Easy to extend

  • Can be modified to compute intersection size (PS|-CA)>Google private join and compute; Facebook Private-lD

KKRT16-PSI

  • 论文主要贡献

    • Propose a novel extension to lKNP and KK OT protocol achieve an 1-out-of-n OT , for arbitrarily large n

    • Batch, Related-keyOPRF (BaRK-OPRF)

  • 优点:运行时间快

    • 3.8s 2^20(百万)

    • 1m 2^24(1.6千万)最新PSI论文中比较的基准

  • 缺点:

    • 内存占用大

    • 通信量大

BS22 PCG PSI

  • 基于SVOLE的BaRK-OPRF

  • Generalized Cuckoo Hash

  • Permutation-Based Hashing

Unbalanced PSI: ec-oprf based

Unbalanced PSI: SHE-based

APS1与ec-oprf PSl比较:

  • 优点:

    不需要将大数据方的数据传输到小数据方

  • 缺点:

    计算量大,运行时间长

基于ecdh的三方PSI协议

协议流程

  • Alice和Bob先进行交互,得到shuffle后的两方交集

  • Alice将shuffle后两方交集,发给Charlie

  • Charlie加密后的数据依次给Bob和Alice加密

  • Charlie比较密态数据,得到交集

  • 优点:

    基于ecdh-psi,协议简单易于实现

  • 缺点:

    泄漏Alice和Bob两方交集数量

SPU PSI调度封装

SecretFlow psi_csv python api

  • 统一入口

    • 入口函数:bucket_psi

  • 支持分桶求交

    • 通过分桶支持大规模数据(10亿规模)

  • 输入输出处理

    • 检查求交id列是否数据是否完整

    • 检查是否有重复项

  • 输出处理

    • 支持按求交id列排序

    • 输出完整label列

  • bucket_psi:高级API,通过Hash分桶支持海量数据,覆盖生产级全流程(数据查重、分桶求交、结果广播、结果排序)。

  • mem psi:低级API,算法内核级的性能+统一易用的接口

  • Operator:算法接入层,向上提供统一接口接入工程化封装;注册工厂模式,提升协议工程化效率

PSI执行步骤

启动ray集群

alice首先启动ray集群。注意这里的命令是启动Ray的主节点。

ray start --head --node-ip-address="ip" --port="port" --include-dashboard=False--disable-usage-stats

bob首先启动ray集群

ray start --head --node-ip-address="ip"--port="port"--includedashboard=False--disable-usage-stats

初始化SecretFlow

sf _cluster_config ={
    'parties': {
        'alice': {
            # replace with alice's real address.
            'address': "ip:port of alice',
            'listen addr': '0.0.0.0:port
        },
        'bob': {
            # replace with bob's real address.
            'address': 'ip:port of bob',
            "listen _addr': '0.0.0.0:port
        },
    },
'self_party': 'bob'
}
​
tls_config ={
    "ca cert": "ca root cert of other parties ",
    "cert": "server cert of alice in pem",
    "key": "server key of alice in pem"
}
​
sf.init(address='alice ray head node address', cluster _config=sf_cluster _configtls config=tls config)
sf.init(address='bob ray head node address', cluster config=sf cluster_config,tls config=tls config )

启动spu设备

spu_cluster_def ={
    'nodes': [
        #<<< !!! >>> replace <192.168.0.1:12945> to alice node's local ip & free port
        {'party': 'alice','address':'192.168.0.1:12945',"isten_address': '0.0.0.0:12945'
        },
         #<<<!!! >>>replace <192.168.0.2:12946> to bob node's local ip & free port
        {'party': 'bob', 'address':'192.168.0.2:12946',"listen address': '0.0.0.0:12946'
        },
    ],
    'runtime_config': {
        'protocol':spu.spu pb2.SEMI2K,
        'field': spu.spu pb2.FM128,
    },
}
spu = sf.SPU(spu_cluster_def)

执行PSI

reports=spu.psi_csv(
    key=select keys,
    input _path=input _path,
    output_path=output_path,
    receiver='alice', # receiver get output file.
    # psi protocOl KKRT PSI 2PC, BC22 PSI 2PC
    protocol='ECDH_PSI_2PC'
    curve _type='CURVE 25519','CURVE FOURQ','CURVE SM2'
    precheck input=False, # check inputfile duplicate entries
    sort=False, #sort intersection by key ids
    broadcast result=False,#true receiver send intersection toother parties
​
#reports结构
# 输入数据量总数
    int64 original count = 1;
# 交接结果
    int64 intersection count = 2;
    
#PSI交集输出
    output_path ={
        alice:'/data/psi _output.csv',#节点alice端的输出
        bob:'/data/psi_output_bob.csv',#节点bob端的输出
    }

PSI测试

初始化SecretFlow

alice 和 bob 节点都需要初始化 secretflow。首先在两个节点分别选取一个可以被对方访问的地址,注意,端口号要选取未被占用的端口

import secretflow as sf
import spu
import os
​
network_conf = {
    "parties": {
        "alice": {
            "address": "alice:8000",
        },
        "bob": {
            "address": "bob:8000",
        },
    },
}
​
party = os.getenv("SELF_PARTY", "alice")
sf.shutdown()
sf.init(
    address="127.0.0.1:6379",
    cluster_config={**network_conf, "self_party": party},
    log_to_driver=True,
)

初始化SPU

  1. alice 的 address 请填写可以被 bob 访通的地址,并且选择一个未被占用的端口注意不要和 Ray 端口冲突

  2. alice 的 listen_addr 可以和 alice address 里的端口一样。

  3. bob 的 address 请填写可以被 alice 访通的地址,并且选择一个未被占用的端口注意不要和 Ray 端口冲突

  4. bob 的 listen_addr 可以和 bob address 里的端口一样。

alice, bob = sf.PYU("alice"), sf.PYU("bob")
spu_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)

隐私求交

SecretFlow 提供 psi_csv函数,psi_csvcsv文件作为输入,并在求交后生成 csv 文件。默认协议为KKRT

current_dir = os.getcwd()
​
input_path = {
    alice: f"{current_dir}/payment.csv",
    bob: f"{current_dir}/record.csv",
}
output_path = {
    alice: f"{current_dir}/payment_output.csv",
    bob: f"{current_dir}/record_output.csv",
}
spu.psi_csv("uid", input_path, output_path, "alice")
sf.shutdown()

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

余额充值