隐语隐私计算实训营「数据分析」第 5 课:隐语PSI介绍及开发实践

深入理解隐语(SecretFlow)中的PSI技术

隐私集合求交(Private Set Intersection, PSI)是隐私计算中的一个重要技术,它允许多方在不泄露自己数据的前提下找出共同的数据交集。在本文中,我们将深入探讨SecretFlow(隐语)中PSI的实现和应用。

PSI的基本概念

PSI是一种特殊的安全多方计算(MPC)协议。假设Alice持有数据集X,Bob持有数据集Y,通过PSI协议,他们可以计算出X∩Y,而不泄露交集之外的任何信息。

PSI可以分为以下几类:

  • 2方PSI / 多方PSI
  • 平衡PSI / 不平衡PSI
  • 半诚实模型PSI / 恶意模型PSI
  • 带计算的PSI:如PSI-CA(基数)、PSI-Payload分析、Circuit PSI等

SecretFlow中的PSI实现

SecretFlow实现了多种PSI协议,主要包括:

  1. ECDH-PSI
  2. KKRT16 PSI
  3. BC22 (PCG-PSI)
  4. EC-OPRF PSI (不平衡PSI)
  5. DP-PSI
  6. ECDH 3方PSI(可扩展到多方)
  7. Mini-PSI(适合小数据集)

ECDH-PSI

ECDH-PSI是一个简单易懂、易于实现的协议。它具有最佳的通信成本,但计算成本较高。ECDH-PSI易于扩展,可以修改为计算交集大小(PSI-CA)。

SecretFlow的ECDH-PSI实现支持25519和FourQ曲线,并增加了Intel-crypto multi-buffer支持以提升性能。同时,为了满足国内合规需求,还增加了SM2曲线支持。

KKRT16 PSI

KKRT16是一个基于不经意传输(OT)扩展的PSI协议。它的主要优点是运行速度快,但缺点是内存占用大、通信量大。

SecretFlow对KKRT16做了多项优化:

  • 使用Bit Matrix Transpose提高性能
  • 采用Pipeline/Vector AES加速
  • 使用无存储的CuckooHash

BC22 PCG-PSI

BC22是基于伪随机相关生成器(PCG)的PSI协议。它在通信量和运行时间上都有优势。

SecretFlow的实现采用了(3,2)广义CuckooHash,并使用了emp-zk中的WYKW21 Wolverine方案作为VOLE实现。

PSI在SecretFlow中的架构

SecretFlow对PSI进行了多层封装,以提供易用的接口:

  1. 底层: 各种PSI协议的核心实现
  2. 操作符层: 提供统一接口,便于接入工程化封装
  3. 内存PSI层: 提供算法内核级的性能和统一易用的接口
  4. 分桶PSI层: 支持海量数据,覆盖生产级全流程

【课程作业】使用 SecretFlow进行PSI

实训平台教程




PSI 作业内容

将 payment.csv 和 record.csv, 求交键为 uid, 两份文件交集大小为?

创建节点
文件准备
notebook运行
初始化 SecretFlow

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

python 复制代码
import secretflow as sf
import spu
import os

network_conf = {
    "parties": {
        "alice": {
            "address": "172.16.0.6:8000",
        },
        "bob": {
            "address": "172.16.0.15: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 里的端口一样。
python 复制代码
alice, bob = sf.PYU("alice"), sf.PYU("bob")
spu_conf = {
    "nodes": [
        {
            "party": "alice",
            "address": "172.16.0.6:8001",
            "listen_addr": "172.16.0.6:8001",
        },
        {
            "party": "bob",
            "address": "172.16.0.15:8001",
            "listen_addr": "172.16.0.15: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_csv 将 csv 文件作为输入,并在求交后生成 csv 文件。默认协议为 KKRT

python 复制代码
psi_csv(
    key: str | List[str],
    input_path: str,
    output_path: str,
    receiver: str,
    protocol="KKRT_PSI_2PC",
    precheck_input=True,
    sort=True,
    broadcast_result=True,
    bucket_size=1048576,
    curve_type="CURVE_25519",
    preprocess_path=None,
    ecdh_secret_key_path=None,
    dppsi_bob_sub_sampling=0.9,
    dppsi_epsilon=3,
    progress_callbacks: Callable[[str, ProgressData], None] | None = None,
    callbacks_interval_ms: int = 5000,
    ic_mode: bool = False,
)
python 复制代码
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")

未来展望

SecretFlow团队对PSI技术有着雄心勃勃的计划:

  1. 协议开发: 实现更多先进的PSI协议,如RS22 Blazing Fast、Circuit PSI、多方PSI和恶意模型PSI等。
  2. 调用框架优化: 开发独立的PSI代码库,优化入口函数和参数,改进协议封装架构。
  3. 产品化: 实现轻量化部署,开发算法原理可视化工具。

通过不断创新和优化,SecretFlow致力于为用户提供更高效、更安全的PSI解决方案,推动隐私计算技术的发展与应用。

相关推荐
AIGC大时代41 分钟前
对比DeepSeek、ChatGPT和Kimi的学术写作关键词提取能力
论文阅读·人工智能·chatgpt·数据分析·prompt
东方佑6 小时前
OpenAI承认开源策略错误,考虑调整策略并推出o3-mini模型
开发语言·数据分析
程序猿阿伟9 小时前
《数据可视化新高度:Graphy的AI协作变革》
人工智能·信息可视化·数据分析
遗落凡尘的萤火-生信小白1 天前
单细胞-第四节 多样本数据分析,下游画图
windows·数据挖掘·数据分析
一名技术极客1 天前
Python 数据分析 - Matplotlib 绘图
python·数据分析·matplotlib
AIGC大时代1 天前
学术方向选则与规划DeepSeek、ChatGPT和Kimi对比
论文阅读·人工智能·chatgpt·数据分析·prompt
说私域1 天前
对顾客行为的数据分析:融入2+1链动模式、AI智能名片与S2B2C商城小程序的新视角
人工智能·小程序·数据分析·开源
灰灰老师1 天前
数据分析系列--②RapidMiner导入数据和存储过程
机器学习·ai·数据挖掘·数据分析·rapidminer
灰灰老师2 天前
数据分析系列--⑥RapidMiner构建决策树(泰坦尼克号案例含数据)
机器学习·ai·数据挖掘·数据分析·rapidminer
遗落凡尘的萤火-生信小白2 天前
【单细胞-第三节 多样本数据分析】
数据挖掘·数据分析