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

学不会密码学 2024-03-25 18:16:24
加精

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协议。。。。

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

    574

    社区成员

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

    【最新活动】

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

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