PSI协议(隐私集合求交,Private Set Intersection)用于在不显示元素或数据集内容的前提下,判断目标元素是否存在于对方数据集中。适用于两方不可交换明文集合的情况,例如联系人匹配、好友推荐等。
通过PSI协议进行隐私集合求交,包含生成隐私目标genPrivacyTarget、隐私搜索privacySearch、获取搜索结果getSearchResult三个步骤。PSI协议仅返回是否命中,不返回附加值;如需检索匹配项的附加值,请使用PIR协议。
接口所需模块导入。
import { privacyComputation } from '@kit.DataProtectionKit'; 发起端生成隐私目标。
构造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); 响应端执行隐私搜索。
构造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); 发起端获取最终结果。
将privacySearch返回的结果传入getSearchResult,解密得到SearchResult。matchedResult指示目标元素是否存在于数据集中。
const result: privacyComputation.SearchResult =
await privacyComputation.getSearchResult(searchResult, privacyProtocol);
console.info('matched: ' + result.matchedResult);