SPU执行PSI实践

yyf511 2024-03-25 17:46:40

安装环境

docker pull secretflow/secretflow-anolis8:latest

启动2个实验容器

docker run -d -ti --net="host" --name=lianxi --shm-size=10.24gb secretflow/secretflow-anolis8:latest bash
docker run -d -ti --net="host" --name=lianxi2 --shm-size=10.24gb secretflow/secretflow-anolis8:latest bash

模拟alice、bob两方

准备spu的psi代码

# -*- coding: UTF-8 -*-
"""
@Name: psi.py
@Auth: yaoyf
@Date: 2024/3/25-16:57
@Desc: aa
@Version: 0.1
"""

# system lib


# third lib
import os

import spu
import secretflow as sf
import argparse

# user lib


if __name__ == '__main__':
    cluster_config = {
        "parties": {
            "alice": {
                "address": "10.1.251.74:9301",  # proxy的ip
                "listen_addr": "10.1.251.74:9301",
            },
            "bob": {
                "address": "10.1.251.75:9301",  # porxy的ip
                "listen_addr": "10.1.251.75:9301",
            },
        },
        "self_party": "alice",
    }
    spu_config = {
        "nodes": [
            {"party": "alice", "id": "alice", "address": "10.1.251.75:9302"},   # spu的ip
            {"party": "bob", "id": "bob", "address": "10.1.251.75:9302"},
        ],
        "runtime_config": {
            "protocol": spu.spu_pb2.SEMI2K,
            "field": spu.spu_pb2.FM128,
        },
    }

    sf.init(address="10.1.251.74:9001",   # ray集群
            cluster_config=cluster_config,
            ignore_reinit_error=True,
            cross_silo_comm_backend="brpc_link",
            cross_silo_comm_options={"connect_retry_times": 60,
                                     "connect_retry_interval_ms": 5000})
    alice = sf.PYU("alice")
    bob = sf.PYU("bob")
    spu = sf.SPU(spu_config,
                 link_desc={"connect_retry_times": 60,
                            "connect_retry_interval_ms": 5000})
    input_path = {
        alice: "/opt/alice.csv",
        bob: "/opt/bob.csv",
    }
    output_path = {
        alice: "/opt/alice_psi.csv",
        bob: "/opt/bob_psi.csv",
    }
    select_keys = {
        alice: "id",
        bob: "id",
    }
    spu.psi_csv(key=select_keys,
                input_path=input_path,
                output_path=output_path,
                receiver='bob',  # 可以哪一方可以获得交集
                protocol="ECDH_PSI_2PC",
                curve_type="CURVE_FOURQ",
                sort=False,
                broadcast_result=False,
                precheck_input=False)

启动ray集群

docker exec -ti lianxi bash
ray start --head --node-ip-address=10.1.251.74 --port=9001 --include-dashboard=True --disable-usage-stats

2方相同的操作,相同的代码,只是连接的ray集群和party换成执行方

制作数据集

在每一方制作一个只有id列的数据集即可。

执行求交

python3.8 psi.py

img

alice方

img

img

bob方

结果展示

img

alice

img

bob

img

交集

...全文
84 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

574

社区成员

发帖
与我相关
我的任务
社区描述
隐语开源社区,隐私计算开发者交流和讨论的平台。
密码学可信计算技术安全 企业社区
社区管理员
  • 隐语SecretFlow
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

【最新活动】

3月18日:隐私计算实训营第一期

试试用AI创作助手写篇文章吧