第5讲:隐语PSI介绍及开发实践

本文详细介绍了SPU在实现PSI协议中的作用,包括PSI的分类、不同类型的PSI协议(如ECDH-PSI,KKRT16,BC22等)及其优缺点,以及SecretFlow如何通过封装简化PSI调用。文章还概述了SecretFlow的部署和使用方法,以及后续的发展计划。
摘要由CSDN通过智能技术生成

1、SPU实现的PSI介绍

PSI定义:PSI是安全多方计算中一个比较实用的协议,其允许参与方输入各自的隐私集合并联合计算集合交集,除接收方获取交集结果外不泄露额外信息。

PSI分类:

  • 根据参与方数量可以分为 两方PSI和多方PSI。
  • 根据安全模型可以分为 半诚实PSI和恶意PSI。
  • 根据参与方能力大小是否对称分为 平衡PSI和非平衡PSI。
  • 根据PSI结果的不同有一些扩展协议:PSI-CA(输出交集大小),PSI-payload(与交集元素相关的负载元素的计算),Circuit-PSI(电路PSI,结果通过以秘密分享的方式存储在参与方手中。)

2、SPU PSI调度架构

隐私PSI对功能进行分层,其协议的具体实现在SPU层,在协议实现过程中需要实用的基础密码算子在YACL层,开发者也可利用底层算子设计自己的PSI协议。SPU往上,隐语对PSI做了一个bucket的封装,主要是为了屏蔽不同协议之间的差距,使用户能够统一调用不同PSI协议。secretflow 是python封装层,通过python语法调用PSI,并指定输入文件的格式。

3.SPU已经实现的PSI介绍

1.ECDH-PSI

  • ECDH-PSI通过椭圆曲线乘法运算盲化集合元素,双方通过比较经过两次椭圆曲线点乘法运算后的结果来获得交集。其需要大量的指数运算,随着集合大小的增加,其开销也增大。
  • 隐语实现的优势:使用计算效率更快的椭圆曲线如25519曲线、FourQ曲线,增加了对国密SM2的支持。

2.KKRT16

  • KKRT16论文的贡献主要有
    • 1、通过将kk13中的线性纠错码改为使用伪随机函数实现1-out-of-n (n可以是任意长度)的OT。
    • 2、构造实现了批处理密钥相关的OPRF(BaRK-OPRF)。
  • 协议拥有很高的计算效率,百万数据集只需要3.8s,成为以后与PSI相关论文的比较基准。
  • 缺点:
    • 内存占用大
    • 通信开销大
  • 隐语实现的优势:使用Stash-less 的CuckooHash,使用Eklundh 矩阵转置、使用inter比特转换指令加速的矩阵转置。使用Pipeline AES/ Vector AES 加快数据的AES计算。

3.BC22

  • 使用VOLE实现BaRK-OPRF拥有更高的计算效率和通信效率。 
  • Generalized CuckooHash
  • Permutation-Based Hashing
  • 隐语实现的优势:隐语在实现的过程中,左端插值多项式,论文中给出不做填充的方案,隐语的实现当n<2^20时都填充,当n>=2^20时不做填充。降低了协议的计算量。缺点就是需要额外的F_2 SubField VOLE,判别最高次x^3系数是否为0。

 4.Unbalanced-PSI

EC-OPRF-based

  • 隐语实现的Unbalanced-PSI是基于EC-OPRF 实现,与基于ECDH的PSI相比,小集合的一端不需要对大集合进行指数运算,这减少了一定的计算开销。

SHE-based

  • 基于HE的非平衡PSI是在微软APSI的基础上得来,与EC-OPRF PSI相比不需要将大集合方的数据传输到小集合一方,缺点就是计算量大,运行时间较长。

5.基于ECDH的三方PSI协议

  • 这是隐语自研的三方协议,主要思路就是Alice和Bob先用ECDH的方式计算交集,只是交集结果以shuffle的方式输出给Alice,Alice再与Charlie使用ECDH-PSI计算交集。从上图也可以看出,在求交的过程中会泄露Alice和Bob的交集大小给Alice和Charlie。

6.mini-PSI

  • 这是专门为集合大小小于等于(2^9)设计的PSI协议,使用基于ECDH的一轮密钥交换协议实现,其在小集合下拥有最优的通信开销和计算开销。

4.SecretFlow PSI 调度

  • SPU PSI使用分桶技术(bucket_psi 入口函数)将千万数据的求交任务分为多个百万数据的桶(默认为7个),分别求交后再合并求交结果。

bucket_psi 调用参数:

message BucketPsiConfig {
  //

  ///
  // Basic
  ///

  // The psi type.
  PsiType psi_type = 1;

  // Specified the receiver rank. Receiver can get psi result.
  uint32 receiver_rank = 2;

  // Whether to broadcast psi result to all parties.
  bool broadcast_result = 3;

  // The input parameters of psi.
  InputParams input_params = 4;

  // The output parameters of psi.
  OutputParams output_params = 5;

  ///
  // Advanced
  ///

  // Optional, specified elliptic curve cryptography used in psi when needed.
  CurveType curve_type = 6;

  // Optional, specified the hash bucket size used in psi.
  uint32 bucket_size = 7;

  // Optional,the path of offline preprocess file.
  string preprocess_path = 8;

  // Optional,secret key path of ecdh_oprf, 256bit/32bytes binary file.
  string ecdh_secret_key_path = 9;

  // Optional,params for dp-psi
  DpPsiParams dppsi_params = 10;
}

memory_psi调用参数

message MemoryPsiConfig {
  //

  ///
  // Basic
  ///

  // The psi type.
  PsiType psi_type = 1;

  // Specified the receiver rank. Receiver can get psi result.
  uint32 receiver_rank = 2;

  // Whether to broadcast psi result to all parties.
  bool broadcast_result = 3;

  ///
  // Advanced
  ///

  // Optional, specified elliptic curve cryptography used in psi when needed.
  CurveType curve_type = 4;

  // Optional,Params for dp-psi
  DpPsiParams dppsi_params = 5;
}

5. 隐语PSI开发指南

现有隐语PSI python接口主要是通过secretflow进行调用。secretflow 有集群仿真模式和生产模式两种部署模式。

启动ray集群

初始化secretflow

 初始化secretflow 主要是配置各个参与方的ip地址和监听端口。

  • 启动spu设备

 启动SPU的link和监听端口。

  • 执行PSI
reports=spu.psi(
    key=select_keys, # 指定求交关键字
    input_path=input_path, # 输入文件路径
    output_path=output_path, # 输出文件路径
    receiver='alice', # 指定接收方
    # KKRT_PSI_2PC BC22_PSI_2PC ..
    protocol='ECDH_PSI_2PC' # 选择具体的协议
    curve_type='CURVE_25519' # 选择椭圆曲线类型
    broadcast_result=False,  # 是否将交集结果广播给其他参与方
)

6.隐语PSI后续计划

7. 动手实践

使用secretnote动手开发PSI协议。。。。

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值