ECDH-PSI 握手过程如下图所示,参与者 A 发送 Request,参与者 B 回复 Response 即可完成。两种发送的算法运行参数和安全参数一一对应,但区别在于,Request 方发送的参数是候选参数列表,Response 方返回的是选中的参数。后面 A 和 B 做 PSI,就直接在 B 选中的参数上运行 PSI 的主题计算即可。
算法主体运行阶段基于握手协商的参数完成 PSI 计算。参与者双方执行的操作具有对称性,此处就参与者 A 进行算法说明,参与者 A 本地生成密钥 KeyA 和集合 {ai}。第一步,通过 hash_to_point() 函数将集合中的值映射到椭圆曲线上的点 Pi,再通过 scalar_mul() 函数将点 Pi 与密钥相乘加密得到新的点 P1i。scalar_mul 代表椭圆曲线上的点乘运算,大家也可以简单理解成是加密运算,之后参与者双方交换 P1,Q1 信息。第二步,再次调用 scalar_mul() 函数对收到的 Q1i 进行基于自己密钥的二次加密得到 Q2i。再次进行信息交互,得到自己的 P2。第三步,A 通过比较集合 P2 和 Q2 即可判断 aj 是否在交集中。如此,便可在不泄露原始信息的前提下,判断二者集合的交集。