导语: 为了方便大家了解隐语的Benchmark,本文设计了10分钟上手手册,包含了亮点介绍、SecretFlow集群的易用搭建、Benchmark脚本、两方和三方的Benchmark,使相关业务方做调研时方便拿到可度量的性能数据和可复现的路径。

隐语PSI亮点

隐私集合求交(Private Set Intersection,PSI)是一类特定的多方安全计算(Multi-Party Computation, MPC)问题,其问题可以简单理解为:Alice 输入集合 X,Bob 输入集合 Y,双方执行 PSI 协议可以得到 Alice 和 Bob 两者的交集,同时不在交集范围内的部分是受保护的,即 Alice 和 Bob 无法学习出交集以外的任何信息。

隐私集合求交(PSI)协议有很多分类方法,按照底层依赖的密码技术分类主要包括:

  • 基于公钥密码的PSI方案,包括:基于判定型密钥交换(Decisional Diffie-Hellman,DDH)的PSI方案和RSA盲签名的PSI方案;
  • 基于不经意传输(Oblivious Transfer,OT)的PSI方案;
  • 基于通用MPC的PSI方案,例如基于混淆电路(Garbled Circuit,GC)的PSI方案;
  • 基于同态加密(Homomorphic Encryption,HE)的PSI方案。

隐私集合求交(PSI)协议按照参与方的数量进行分类,可分为:

  • 两方PSI:参与方为2个;
  • 多方PSI:参与方>2个。

隐私集合求交(PSI)协议按照设定安全模型分类,可分为:

  • 半诚实模型的PSI;
  • 恶意模型的PSI。

SecretFlow SPU 实现了半诚实模型下的两方和三方PSI协议,密钥安全强度是128bit,统计安全参数是40bit。

两方PSI协议:

  • 基于DDH的PSI(Private Set Intersection)协议

基于DDH的PSI协议先对简单易于理解和实现,依赖的密码技术已被广泛论证,通信量低,但计算量较大。

隐语实现了基于椭圆曲线(Elliptic Curve)群的DDH PSI协议,支持的椭圆曲线类型包括:Curve25519,SM2,Secp256k1。本次benchmark选用的曲线是Curve25519。

  • 基于OT扩展的KKRT16

KKRT16是第一个千万规模(224)求交时间在1分钟之内的PSI方案,通信量较大;

隐语实现了KKRT16协议,并参考了进年来的性能优化和安全改进方案,例如:stash-less CuckooHash,[GKWW20]中 FixedKey AES作为 correlation-robust 哈希函数。

  • 基于PCG的BC22

BC22 PSI依赖的PCG(Pseudorandom Correlation Generator)方案是近年来mpc方向的研究热点,相比KKRT16计算量和通信两方面都有了很大改进,从成本(monetary cost)角度更能满足实际业务需求。PCG实现依赖LPN(Learning Parity with Noise)问题,由于是2022年最新的协议,协议的安全性还需要更多密码专家的分析和论文。

隐语v0.7中实现了BC22 PSI方案,其中的PCG/VOLE使用了emp-zk中的[WYKW21]实现,欢迎大家审查和进一步改进;

三方PSI(Private Set Intersection)协议

  • 基于DDH的三方PSI协议

隐语实现了自研的基于 ECDH 的三方 PSI 协议,注意我们实现的这个协议会泄漏两方交集大小,请自行判断是否满足使用场景的安全性,本次benchmark选用的曲线是Curve25519。

复现方式

一、测试机型环境

  • Python:3.8
  • pip: >= 19.3
  • OS: CentOS 7
  • CPU/Memory: 推荐最低配置是 8C16G
  • 硬盘:500G

二、安装conda

使用conda管理python环境,如果机器没有conda需要先安装,步骤如下:

# 分别在三台机器的root目录下执行
# sudo apt-get install wget
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh# 安装
bash Miniconda3-latest-Linux-x86_64.sh# 一直按回车然后输入yes
please answer 'yes' or 'no':
>>> yes# 选择安装路径, 文件名前加点号表示隐藏文件
Miniconda3 will now be installed into this location:
>>> ~/.miniconda3# 添加配置信息到 ~/.bashrc文件
Do you wish the installer to initialize Miniconda3 by running conda init? [yes|no]
[no] >>> yes# 运行配置信息文件或重启电脑
source ~/.bashrc# 测试是否安装成功
conda --version

三、安装secretflow

# 分别在三台机器的root目录下执行
# 创建干净的python环境
conda create -n sf-benchmark python=3.8# 进入benchmark 环境
conda activate sf-benchmark# 安装secretflow
pip install -U secretflow# 创建一个sf-benchmark目录
mkdir sf-benchmark
cd sf-benchmark

1.验证安装是否成功

root目录下输入python然后回车

# 依次执行,每执行一条回车一次>>> import secretflow as sf
>>> sf.init(['alice', 'bob', 'carol'], num_cpus=8, log_to_driver=True)
>>> dev = sf.PYU('alice')
>>> import numpy as np
>>> data = dev(np.random.rand)(3, 4)
>>> sf.reveal(data)

如下图所示就代表环境搭建成功了

四、创建节点并启动集群

1.创建ray header节点

创建ray header节点,选择一台机器为主机,在主机上执行如下命令,ip替换为主机的内网ip,命名为alice,端口选择一个空闲端口即可注意:192.168.0.1 ip为mock的,请替换为实际的ip地址

# alice机器执行RAY_DISABLE_REMOTE_CODE=true \
ray start --head --node-ip-address="192.168.0.1" --port="9394" --resources='{"alice": 8}' --include-dashboard=False

2.创建从属节点

创建从属节点,在bob机器执行如下命令,ip依然填alice机器的内网ip,命名为bob,端口不变

# bob机器执行RAY_DISABLE_REMOTE_CODE=true \
ray start --address="192.168.0.1:9394" --resources='{"bob": 8}'

创建从属节点,在carol机器执行如下命令,ip依然填alice机器的内网ip,命名为carol,端口不变

# carol机器执行RAY_DISABLE_REMOTE_CODE=true \
ray start --address="192.168.0.1:9394" --resources='{"carol": 8}'

3.验证节点是否启动

在python中测试节点是否启动成功,任意选一台机器输入python,执行下列代码,参数中address为头节点(alice)的地址,拿alice机器来验证,每输入一行下列代码回车一次:

#alice机器输入python后再执行>>> import secretflow as sf
>>> sf.init(address='192.168.0.1:9394')
>>> alice = sf.PYU('alice')
>>> bob = sf.PYU('bob')
>>> sf.reveal(alice(lambda x : x)(2))
>>> sf.reveal(bob(lambda x : x)(2))

如下图就代表节点创建成功了

同时我们也可以通过ray status去看节点的状态,前提是先进入sf环境(conda activate sf-benchmark)

4.生成数据

把脚本generate_psi.py:https://github.com/secretflow/spu/blob/main/libspu/psi/tools/generate_psi.py
传到alice机器的root目录下

执行如下代码

# 生成三份一千万数据
python3 generate_psi.py 10000000# 生成三份一亿数据
python3 generate_psi.py 100000000

把生成的psi_1.csv cp到benchmark目录下,再通过scp的命令把psi_2.csv/psi_3.csv分别移到bob的benchmark目录下跟carol的benchark目录下

5.限制宽带/延迟

#100Mbps 20ms
tc qdisc add dev eth0 root handle 1: tbf rate 100mbit burst 256kb latency 800ms
tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 20msec limit 8000

  • 清除限制

tc qdisc del dev eth0 root

  • 查看已有配置

tc qdisc show dev eth0

6.Benchmark脚本

支持的PSI协议列表:

  • ECDH_PSI_2PC
  • KKRT_PSI_2PC
  • BC22_PSI_2PC
  • ECDH_PSI_3PC
import sys
import time
import loggingfrom absl import app
import spu
import secretflow as sf# init log
logging.basicConfig(stream=sys.stdout, level=logging.INFO)# SPU settings
cluster_def = {'nodes': [# <<< !!! >>> replace <192.168.0.1:12945> to alice node's local ip & free port{'party': 'alice', 'id': 'local:0', 'address': '192.168.0.1:12945', 'listen_address': '0.0.0.0:12945'},# <<< !!! >>> replace <192.168.0.2:12946> to bob node's local ip & free port{'party': 'bob', 'id': 'local:1', 'address': '192.168.0.2:12946', 'listen_address': '0.0.0.0:12946'},# <<< !!! >>> if you need 3pc test, please add node here, for example, add carol as rank 2# {'party': 'carol', 'id': 'local:2', 'address': '127.0.0.1:12347'},],'runtime_config': {'protocol': spu.spu_pb2.SEMI2K,'field': spu.spu_pb2.FM128,},
}def main(_):# sf init# <<< !!! >>> replace <192.168.0.1:9394> to your ray head# two parties secretflow>=0.7.18b3 need to add <sf.init(parties=['alice', 'bob']>sf.init(parties=['alice', 'bob'], address='192.168.0.1:9394',log_to_driver=True)alice = sf.PYU('alice')bob = sf.PYU('bob')# carol = sf.PYU('carol')# <<< !!! >>> replace path to real parties local file path.input_path = {alice: '/data/psi_1.csv',bob: '/data/psi_2.csv',# if run with `ECDH_PSI_3PC`, add carol# carol: '/data/psi_3.csv',}output_path = {alice: '/data/psi_output.csv',bob: '/data/psi_output.csv',# if run with `ECDH_PSI_3PC`, add carol# carol: '/data/psi_output.csv',}select_keys = {alice: ['id'],bob: ['id'],# if run with `ECDH_PSI_3PC`, add carol# carol: ['id'],}spu = sf.SPU(cluster_def)# prepare datastart = time.time()reports = spu.psi_csv(key=select_keys,input_path=input_path,output_path=output_path,receiver='alice',  # if `broadcast_result=False`, only receiver can get output file.protocol='KKRT_PSI_2PC',    # psi protocolprecheck_input=False,  # will cost ext time if set Truesort=False,  # will cost ext time if set Truebroadcast_result=False,  # will cost ext time if set True)print(f"psi reports: {reports}")logging.info(f"cost time: {time.time() - start}")sf.shutdown()if __name__ == '__main__':app.run(main)

五、Benchmark报告


目前bechmark数据中,bc22 psi的性能还在进一步工程优化, 单测spu中bc22协议内核的性能对比可以参考pcg psi的介绍。

关于隐语SecretFlow

隐语官网:

www.secretflow.org.cn

隐语社区及代码访问:

github.com/secretflow

gitee.com/secretflow

请关注微信公众号:隐语的小剧场,获取更多资讯

隐语 PSI benchmark 白皮书相关推荐

  1. 星河杯“黑名单共享查询”赛题基于隐语实现baseline

    赛题情况介绍 星河杯隐私计算大赛"黑名单共享查询-多方安全计算"赛题,要求参赛者基于多方安全计算技术实现多家企业黑名单数据的安全共享查询功能,完成以下两项任务: 计算两方黑名单ID ...

  2. “星河杯”隐私计算大赛技术分享会成功举办

    3月25日下午,由中国信通院与隐私计算联盟主办,中移动信息技术有限公司.联通数字科技有限公司.天翼电子商务有限公司共同协办,FATE开源社区.隐私计算联盟开源工作组提供技术支持,DataFountai ...

  3. 信用评分卡模型稳定度指标PSI

    由于模型是以特定时期的样本所开发的,此模型是否适用于开发样本之外的族群,必须经过稳定性测试才能得知.稳定度指标(population stability index ,PSI)可衡量测试样本及模型开发 ...

  4. AI周报丨中国信息通信研究院发布《AI框架发展白皮书》;华为开源首个NLP中文数据集-悟空;AAAI2022年度论文公布。

    AI周报丨中国信息通信研究院发布<AI框架发展白皮书>:华为开源首个NLP中文数据集-悟空:AAAI2022最佳论文公布. 2022年2月22日 极链AI云 官网地址 点击注册 更多AI内 ...

  5. 隐私保护集合求交技术 (PSI)

    目录 一.概述 二.实现举例 2.1 百度--基于 MesaTEE 的 PSI 协议 2.2 同盾--样本过滤协议 2.3 微众FATE--基于隐私保护的样本ID匹配 三.Ref 记录下常见的PSI技 ...

  6. (译)云原生安全白皮书

    执行摘要 目的 云原生的开发和部署模式已经成为业界趋势,技术.产品.标准和解决方案的生态系统也在同步的扩张之中,决策者面临着跟进复杂设计的挑战.CISO 要在这个动荡的战场中实践业务价值,这个角色显得 ...

  7. 总结几篇“隐私计算”的白皮书主要内容(2021精简版)

    注: 本篇博文为个人阅读了几篇<隐私计算白皮书(2021)>后记录的一点点学习笔记,具有主观的"偏向性摘录",不代表全局普遍观点.若想了解更详细内容,建议看原报告.(侵 ...

  8. 蓝凌ekp开发_蓝凌EKP8.0产品白皮书(简).doc

    实用标准 精彩文档 蓝凌企业知识化平台 蓝凌企业知识化平台 EKP8.0产品白皮书 版权声明: ?Copyright, All Rights Reserved by Landray, 2009年12月 ...

  9. 【超越白皮书3】DAG技术解析与实测

    本报告由火币区块链研究院出品,作者:袁煜明.胡智威.原文地址 相关报告: [超越白皮书2]EOS主网上线前夕的实测分析与技术建议 [超越白皮书1]EOSIO程序实测分析与技术建议 火币区块链应用研究院 ...

最新文章

  1. 访问支付宝(淘宝)首页IE自动关闭解决方案
  2. 第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
  3. 云开发系列课程让你从入门到精通快速上手Serverless和云开发技术
  4. QTWebEngine的使用
  5. 【CodeForces - 523C】Name Quest (模拟)
  6. Python_百度图片以及百度贴吧图片抓取
  7. php感悟1500,《苏菲的世界》读书笔记及心得感悟1500字
  8. linux服务器学习笔记:linux忘记密码怎么办?
  9. 企业微信 发送或接收 图片失败,怎么办?
  10. 不用U盘,给自己的电脑重装一个win10系统
  11. 从零实现“百度网盘批量重命名”工具
  12. 为什么现代物理学离不开量子论和相对论?
  13. 极客日报:苹果或推出粉色款iPhone 13;拼多多再超阿里
  14. 六、DOM(上) - 章节课后练习题及答案
  15. ubuntu源换成清华源_Ubuntu替换国内源(清华源)
  16. 数据结构1800试题(第四章)
  17. 爱心熊 Game Jam 来啦,30,000 SAND等你们来赢取!
  18. UEFI 2 Overview
  19. py 发送邮件和短信
  20. Lombok使用详解

热门文章

  1. ubuntu下安装npm
  2. 城市交通查询系统的设计与实现
  3. y空间兑换代码_如何用不到 2KB 的 JavaScript 代码写一个 3D 赛车游戏?
  4. iOS开发好不好学?
  5. 专访微软邓力:语音识别与非监督深度学习、增强学习、词嵌入、类脑智能
  6. Unity之在UI界面上显示3D模型
  7. A-Level经济真题每期一练(44)
  8. 萌化电脑之 染成茜色的坂道 あかね色に染まる坂(晒晒大师的桌面:)
  9. 并行通信芯片8255A学习总结
  10. AFNetworking2.0源码解析三