目录

使用PSI协议进行隐私集合求交

场景介绍

PSI协议(隐私集合求交,Private Set Intersection)用于在不显示元素或数据集内容的前提下,判断目标元素是否存在于对方数据集中。适用于两方不可交换明文集合的情况,例如联系人匹配、好友推荐等。

通过PSI协议进行隐私集合求交,包含生成隐私目标genPrivacyTarget、隐私搜索privacySearch、获取搜索结果getSearchResult三个步骤。PSI协议仅返回是否命中,不返回附加值;如需检索匹配项的附加值,请使用PIR协议。

开发步骤

  1. 接口所需模块导入。

    import { privacyComputation } from '@kit.DataProtectionKit';
  2. 发起端生成隐私目标。

    构造TargetElement(目标元素原始数据与哈希算法)和PrivacyProtocol(协议类型设为PSI_PROTOCOL),调用genPrivacyTarget生成隐私目标。

    const targetElement: privacyComputation.TargetElement = {
      elemData: new Uint8Array([0x01, 0x02, 0x03]),
      hashAlg: privacyComputation.HashAlg.SHA256
    };
    const privacyProtocol: privacyComputation.PrivacyProtocol = {
      dataSetSize: privacyComputation.DataSetSize.SIZE_512,
      protocolType: privacyComputation.ProtocolType.PSI_PROTOCOL
    };
    const privacyTarget: Uint8Array = await privacyComputation.genPrivacyTarget(targetElement, privacyProtocol);
  3. 响应端执行隐私搜索。

    构造Element数组(数据集元素,包含键与哈希算法),连同隐私目标和协议配置,调用privacySearch执行隐私搜索。

    const elements: privacyComputation.Element[] = [
      { elemKey: new Uint8Array([0x01, 0x02, 0x03]), hashAlg: privacyComputation.HashAlg.SHA256 },
      { elemKey: new Uint8Array([0x07, 0x08, 0x09]), hashAlg: privacyComputation.HashAlg.SHA256 }
    ];
    const searchResult: privacyComputation.PrivacySearchResult =
      await privacyComputation.privacySearch(privacyTarget, elements, privacyProtocol);
  4. 发起端获取最终结果。

    将privacySearch返回的结果传入getSearchResult,解密得到SearchResult。matchedResult指示目标元素是否存在于数据集中。

    const result: privacyComputation.SearchResult =
      await privacyComputation.getSearchResult(searchResult, privacyProtocol);
    console.info('matched: ' + result.matchedResult);