作为安全多方计算领域具有广泛的应用场景的一类协议,隐私保护集合交集技术在近年来得到了极大的优化,达到了在某些场景下与目前正在使用的非安全交集技术同一量级的运行复杂度。
摘要:隐私保护集合交集(Private Set Intersection PSI)计算属于安全多方计算领域的特定应用问题,不仅具有重要的理论意义,也具有很强的应用价值。随着用户数据的隐私保护越来越受到重视,这一方向的研究更是符合人们日益强烈的在享受各类依赖个人信息的业务的便利性的同时最大程度保护个人信息私密性的需要。本文对隐私保护集合交集的问题定义进行了简要的阐述,重点介绍了当前性能(通信和计算负载)最好的 PSI 协议的主要思想与适宜的应用场景,并且在最后对这些协议进行了性能上的比较。
1 引言
作为安全多方计算领域具有广泛的应用场景的一类协议,隐私保护集合交集技术在近年来得到了极大的优化,达到了在某些场景下与目前正在使用的非安全交集技术同一量级的运行复杂度(从计算和通信意义上)。在这一节笔者会将隐私保护集合交集的协议目标进行阐述,并向读者展示其可能的应用场景。
1.1 问题描述
隐私保护集合交集协议允许持有各自集合的两方来共同计算两个集合的交集运算。在协议交互的最后,一方或是两方应该得到正确的交集,而且不会得到交集以外另一方集合中的任何信息。保护集合的隐私性是在很多场景下是自然甚至是必要的需求,比如当集合是某用户的通讯录或是某基因诊断服务用户的基因组,这样的输入就一定要通过密码学的手段进行保护。
值得注意的是虽然 PSI 协议的发展非常迅速,而且对于数据隐私性保护的需求也日益强烈,在目前很多应用场景下,高效而不安全的协议还是主流选择。因此了解 PSI 协议的最新成果以及它们适合的应用场景将会对使用 PSI 协议替换现有非安全协议起到非常大的帮助。
1.2 PSI 的应用场景
PSI 拥有很多实际应用场景,这里只挑选典型的两种应用场景——计算广告的实际效果和寻找联系人。
1.2.1 计算广告的实际效果
线上广告是一种重要的广告形式。对于广告的有效程度的衡量的常见方法是计算所谓的转换率,也就是浏览广告的用户中有多少用户最终浏览了相应的商品页面,或是最终购买了相应的商品或是服务。一种通用的计算方法是由计算浏览广告的用户信息(由广告发送方占有)和完成相应交易的用户信息(由商家占有)的交集来计算(如计算交易总额或是总交易量等)。而与此同时双方的用户信息又是私密的,如果使用不安全的协议会导致一方的信息暴露给另一方,从而造成用户和商家或是广告主的隐私泄露。
注意到现有的很多类似应用场景下,所使用的协议仍然是不安全的,也就是说在计算广告相关数据的同时,隐私信息也受到了严重的威胁。
1.2.2 寻找联系人
当一个用户注册使用一种新的服务(如微信、Whatsapp 等)的时候,从用户的现有联系人中寻找有哪些已经注册了同类的服务是一种在大多数情况下十分必要的操作。通过将用户的联系人发送给服务提供商可以有效地完成这项功能,但是与此同时用户的联系人信息,一种在大多数情况下被认为是隐私的信息,也被暴露给服务提供商。因此在这种场景下,将用户的联系人信息作为一方的输入,将服务提供商的所有用户信息作为另一方的输入来进行PSI 协议可以完成发现联系人的功能,而且可以防止交集以外的信息泄露给任何一方。值得注意的是在这种特定的应用场景下,大多数情况是用户的联系人集合的基数远小于已注册的用户集合的基数。传统的 PSI 协议考虑的是两方集合大小基本相等的情况,在这种场景下大集合将会成为性能瓶颈。一些研究成果集中对于这种比较常见而有实际应用价值的场景做优化,并且取得了较好的成果。
2 符号与定义
在这一节笔者将给出描述协议需要用到的一些基本符号,PSI 协议需要达到的目标,协议中考虑的两类敌手模型,在安全性证明中使用到的假设以及构建 PSI 协议中用到的基础协议。
2.1 符号说明
表1 符号说明
表1 列举了后续协议说明与比较中使用到的符号,并附上了简单的描述。在集合大小不对等的 PSI 协议中,持有较大集合的一方通常被称作发送端(Sender),持有较小集合的一方被叫做接收端(Receiver),此时就满足NX>>NY。这种名称也在集合大小对等的协议描述中作为标准名称使用。
2.2 理想的 PSI 协议
理想的 PSI 协议由一个发送方S 和一个接收方R 参与。其中发送方持有集合X,大小为NX;接收方持有集合Y ,大小为 NY。集合元素是长度为σ 的二进制字符串。在大多数情况下 NX 和 NY 是公开的。(如果需要将这样的信息保密,可以通过补充“哑元”(dummy items)到一个固定大小的方式通过公开集合大小的协议实现交集功能。)理想的 PSI 协议会计算X 和Y 的交集,将X ∩ Y 发送给接收者,不将任何信息发送给发送者。接收者不能获得X Y中的任何信息,发送者也不能获得 Y X 或是 Y的任何信息。
2.3 敌手模型
为了证明某种协议的安全性,敌手的能力和安全性的含义是必须严格定义的。关于安全性的严格定义在不同协议中有着不同的体现,但是思想都基于2.2 节中的理想 PSI 协议的功能。对于敌手定义,密码学中常见的三种定义为:
(1)半诚实模型 (honest but curious adversaryHbC)。协议的各参与方遵守协议的执行过程,但可以在协议执行过程中,根据输入和协议的输出信息推断其他参与者的信息。
(2)恶意模型(malicious adversary Mal)。参与者不遵守协议的执行过程,可能拒绝参与协议、修改隐私的输入集合信息、提前终止协议的执行等,因此需要使用更多的密码协议或技术(位比特承诺协议、零知识证明等)来保证计算结果的正确性。
(3) 隐蔽敌手模型(covert adversary)。是一种安全性介于半诚实模型和恶意模型之间的更符合真实场景的模型,由于担心恶意行为被协议检测出来并受到惩罚,隐蔽敌手使其恶意行为混淆在正常行为中,只能以一定的概率被检测到。
安全多方计算协议一般会存在半诚实模型下安全的版本和恶意模型下安全的版本。虽然半诚实模型对敌手的限制很大,在很多情况下并不是合理的假设,但是首先设计出半诚实模型可以作为设计恶意模型安全协议的第一步(GMW编译器可以实现从半诚实模型到恶意模型的通用、但不高效的转化);其次在某些场景下,半诚实模型中敌手必须按照协议规定进行交互的限制是合理的(比如恶意行为一旦发现就有很严格的处罚的场景);最后恶意模型为了保证安全性会给协议带来一些额外的负担,使得半诚实模型下安全的版本会比恶意模型安全的协议高效很多。
同样,在目前的 PSI 协议中,常见的敌手模型为半诚实模型和恶意模型。而且由于恶意模型中一方可能会刻意获取另一方的信息(通过主动地偏离协议的规定来达到这一目的),协议需要使用额外的手段来防止这类攻击的可能,因此恶意模型下安全的协议的复杂程度和开销一般都大于半诚实模型下安全的协议。
2.4 安全性假设
在协议的安全性证明过程中,有两类非常重要的基础假设或是基础模型,分别是标准模型和随机预言模型。
(1) 标准模型(Standard ModelStd), 指不依赖任何假想模型,仅依赖于被广泛接受的困难性假设(如整数分解、离散对数、格问题等),这些数学难题是攻击者在多项式时间内不可解的。仅使用困难性假设证明安全的机制称为在标准模型下是安全的。
(2) 随机预言模型(Random Oracle ModelROM),比标准模型多了一个随机预言机的假设,随机预言机假设存在一个公共的、随机选择的函数(理论上的黑盒子),只能通过问询的方式进行计算,对每一次查询都从输出域中均匀随机地输出一个响应,对相同的查询总是得到相同的响应。由于现实中没有函数能够实现真正的随机函数,因此随机预言模型下可证明安全的方案在实际应用中通常用 Hash 函数进行实例化。
与之前敌手模型类似,RO 模型由于引入了更多的假设,在 RO 模型下证明安全的协议通常需要加入额外的构造才能被证明是在标准模型下是安全的。值得注意的是为了降低使用假设的数量,一些协议的分析中也使用了一种“关联鲁棒性”(correlation robustness)的假设,作为一种更弱的假设来替代随机预言假设。
2.5 基础协议
基础协议即不同 PSI 协议构造中使用到的密码学基础协议。
2.5.1 不经意传输(Oblivious Transfer)
不经意传输协议(OT)是基于公钥密码体制的密码学基本协议,是安全多方计算的基石。最基本的二选一(1-out-of-2)OT 协议的发送方Bob 输入 2 个随机位串(x0; x1),接收方 Alice输入选择向量 c;协议结束后Alice 获得选择向量对应的位串 xc,对另一个位串 x1-c 一无所知;Bob 的输出为空。1998 年,Impagliazzo和Rudich 证明了从不经意传输协议到单向函数的黑盒式规约蕴含着另一个难以被证明的问题,即 P ≠ NP 的问题,并表示不存在黑盒方式的OT 协议,因此OT 协议通常是基于公钥密码体制来构造。然而在安全多方计算应用中一般需要大量的OT 协议作为子协议,计算复杂的模指数运算,使得OT 协议的实用价值不高。1996年,Beaver 依据混合加密构想提出了第一个非黑盒方式的不经意传输扩展协议,可以执行少数基础OT 协议(传统的基于公钥加密算法的OT协议)来构造大量的OT 协议,然而 Beaver 提出的协议需要计算复杂的伪随机发生器,在实际中也不高效,但是扩展协议的思想具有重要的影响。
基于OT 扩展协议的思想,Ishai 等人在2003 年提出了以黑盒方式构造的OT 扩展协议,将基础OT 协议和随机预言模型相结合,把少量基础OT 的计算代价通过对称加密操作均摊到大量的OT 操作,可以达到一分钟执行数百万次的OT 协议,该协议可以同时满足实用性和安全性需求,具有重要的意义并得到很广泛的应用,例如用于GMW 协议、姚氏混乱电路、PSI 等。随着人们对实用性要求越来越高,OT 扩展协议得到了快速发展,主要包括对N 选一不经意传输扩展协议及随机OT 协议的提出。
2.5.2 混乱电路(Garbled Circuit)
混乱电路(GC)模型最早是由图灵奖获得者姚期智在1986 年提出的半诚实模型下的姚氏电路 用来解决著名的百万富翁问题。姚氏电路主要是将任意功能函数转化为布尔电路,由Alice 生成混乱电路表、Bob 计算混乱电路;针对每一个电路门进行两重对称加密运算,调用二选一OT 协议进行混乱电路表中秘钥信息交换。早期的安全函数计算问题主要采用混乱电路来解决,由于混乱电路对每一位进行电路门计算并且电路门数量巨大,导致计算效率较低,例如计算AES 加密大约需要30000 个电路门,计算50 个字符串的编辑距离大约需要250000个电路门。混乱电路作为通用的安全多方计算工具,可以用来计算任意的功能函数,相对于特定问题的安全协议计算效率较低。针对这些问题,研究者提出了一系列的电路优化策略,包括 Free-XOR、行约减、Half-Gate 技术。此外还提出了新的混乱电路协议,包括由Goldreich 等人提出基于秘密共享和OT 协议的GMW 编译器以及基于剪切- 选择技术(cut and choose)的适用于恶意模型的混乱电路等。
除了对布尔电路的研究人们也提出了算术电路,完成有限域上加法或乘法运算。混乱电路方法作为安全多方计算问题的一般通用解决方法,近年来得到了快速的发展,已经有很多实用的安全多方计算工具,例如 Fairplay、FastGC、Oblivm、SEPIA、VIFF、Sharemind 等。
2.5.3 同态加密(Homomorphic Encryption)
同态加密(HE)是满足同态性质的公钥加密技术,属于语义安全的公钥加密体制范畴。同态加密对密文进行某种算术操作(加或者乘),满足对密文计算结果的解密值与对明文进行同样算术操作的值是相同的性质。由于计算是在密文上进行,因此同态加密是一种常用的实现隐私保护的方法。同态加密可用于实现安全外包计算,比如安全云计算服务。另外它还可以实现安全投票系统,抗碰撞杂凑函数,以及私有信息检索方案等安全系统。现今使用的同态加密方案主要是由 ZvikaBrakerski、Craig Gentry、Vinod Vaikuntanathan 等人提出的,这些方案很大程度上提升了效率,并且在一定程度上实现了支持任意运算的全同态加密(FHE)方案。
2.5.4 秘密共享(Secret Sharing)
秘密共享(SS)将秘密以适当的方式分为n 份,每一份由不同的管理者持有,每个参与者无法单独恢复秘密,只有达到指定数目的参与者才能恢复秘密。构建秘密共享系统的关键是设计好的秘密拆分和恢复方式.第一个秘密共享方案是(t; n) 门限秘密共享方案,由Shamir和Blakley分别在1979 年各自独立提出,他们的方案分别是基于拉格朗日插值法和线性几何投影性质设计的。此后很多研究者提出了不同的秘密共享实现方法,如基于中国剩余定理的秘密共享策略、可验证的秘密共享等。秘密共享在密钥管理分布式数据安全领域有许多应用,如电子投票、密钥托管、电子支付协议等,可以防止密钥存储过于集中,是一种兼顾机密性和可靠性的方法。
3 协议分类
下面在这一节中,笔者将给出PSI 协议的大体分类,其中包括基于Hash 函数、不安全的交集协议,基于公钥加密体系的PSI,基于混乱电路的PSI 以及基于不经意传输协议扩展的PSI。在每一类中阐述相关协议的大体内容、优化过程以及适合的应用场景。
3.1 不安全的交集协议
最基本的交集协议是协议双方SR 都在自己的集合上使用一个商定好的密码学哈希函数计算哈希值,然后R 发送给S 自己的哈希值,S 计算交集。尽管这一协议是十分有效的,但是当输入域很小的时候存在着一方使用暴力破解攻击的可能(一方计算域上所有元素的哈希值,然后进行交集运算,从而得到另一方的所有输入)。当输入集合的取值范围很大时,比较哈希值的协议也可以被证明是安全的。
3.2 基于公钥加密体系的 PSI
Meadow 等人构建了一个使用Diffie-Hellmann密钥协商的PSI 协议。他们的协议可以看作是Diffie-Hellman 密钥协商协议的简单应用,主要的用途是隐私保护场景下选择偏好的匹配,也就是说,两方可以在保护各自输入私密性的前提下验证各自的输入是有某些程度上的匹配。Freedman 等人提出了一种在标准模型下(在基于DH 的协议的分析中需要使用到随机预言假设),针对半诚实或是恶意的敌手安全的PSI协议。他们的协议是构建在多项式插值上的。
Freedman 等人使用了基于模拟器的证明方法证明了这一协议在恶意敌手存在的情况下仍是安全的,并且测试了协议的运行效率。包括使用不经意伪随机函数(Oblivuous Pseudo-Random Function )和使用多项式插值和求导来计算多个集合之间交集的协议方式。
另一种使用盲签名(基于RSA 公钥体系),并且计算和通信复杂度随着集合大小线性增长的 PSI 协议, 包括协议的实现、性能测试和布隆过滤器(Bloom Filter)的使用。实现了计算交集、计算交集基数和在交集上可认证计算的PSI 协议。以上协议中,公钥加解密操作的次数与集合大小成线性关系。因此虽然通信复杂度是最小的,但是计算开销远不及后面叙述的基于不经意传输扩展协议的PSI。
使用公钥加密体系的PSI 有另一个优点,就是在双方集合大小相差很大的情况下,花销很大的公钥加密操作可以集中在一方进行。结合这种方案通信复杂度低的优点,Chen 等人提出使用基于RLWE 的同态加密构造的PSI 协议。这两种协议在随机预言假设和半诚实模型下被证明是安全的。这两篇文章中的成果是目前集合大小非对称情况下(比如移动端用户寻找联系人的应用场景下)性能最好的PSI 协议。
3.3 基于电路的 PSI
如第2.5 小节所述,通用的安全多方计算方法在近年来得到了很大的优化。由于PSI 协议解决的就是一类安全多方计算的问题,而且使用通用框架来计算交集有着容易扩展的特性。这是因为使用通用的安全多方计算协议,计算交集的函数是通过电路实现的,而将计算交集的电路的输出连到计算其他电路的输入就可以用来计算集合大小、集合中元素的求和等函数,而且全部过程都满足能够保护输入的隐私性。这种易于扩展的性质是其他基于公钥加密或是基于不经意传输扩展协议的 PSI 所没有的,因此这也是一种有实际应用价值的PSI 方案。Huang 等人在中提出了几种可以用来实现PSI 的布尔电路,并在中通过混乱电路框架测试了这些方案。特别地,Huang 等人的结果表明他们使用 Java 的实现可以在安全参数上的扩展性很好,并且在大安全参数的情况下有着比盲签名方案更好的性能。Pinkas 等人提出了通过哈希表的方法对 Huang 等人的方案做出的优化,并且比较了使用不经意伪随机函数与之前提出的布尔电路的性能比较。
Ciampi 等人给出了基于两方安全计算的PSI协议 ,这一协议拥有比Pinkas 等人给出的优化结果(基于通用框架的协议)更好的性能,是目前使用通用安全多方计算框架下性能最好的协议。
3.4 基于不经意传输扩展协议的PSI
如第2.5 小节所述,不经意传输协议扩展的出现使得OT 协议的性能有了极大的提升。借助这一工具,许多基于OT 协议的PSI 达到了与不安全的哈希协议复杂度在同一量级的性能。Dong 等人提出了使用布隆过滤器和OT 扩展协议的 PSI 协议。构造出的协议拥有可以在亿级规模的集合上操作,并且可以证明是在半诚实模型和恶意模型下是安全的。不过Rindal等人提出使用布隆过滤器的PSI 协议在恶意模型下存在攻击的可能,并给出了如何改进现有的使用布隆过滤器的协议,从而给出了第一个在恶意模型下安全的PSI 协议。改进后的协议可以在约200s 的时间内计算两个大小为一百万的集合的交集。
Rindal 等人给出了之前Pinkas 等人提出的PSI 协议的改进 改进后的协议达到了恶意模型下的安全性。Lambæk 给出了Rindal 的PSI 协议(基于OT 协议)改进,改进后的协议可以在一方是半诚实的,一方是恶意的情况下证明安全性。Rindal 等人给出了使用基于Dual Execution 思想对基于OT 扩展的PSI 协议的安全性加固,加固后的协议具有恶意模型下的安全性。在经过哈希表、Phasing 等方法优化后,协议达到了比之前最好的恶意模型安全PSI 协议 更好的性能(在集合大小对等的情况下)。本文第4 章展现了Rindal 等人给出的测试环境说明以及测试结果。
以上是针对恶意模型的协议改进,在半诚实模型下,由于敌手的能力仅限于在正常的协议交互过程中尽最大程度地获取另一方的输入,这种类型的协议的效率可以达到比之前恶意模型下安全的协议更好的效果。Kolesnikov 等人给出了Pinkas PSI 协议的性能改进,主要的改进方法是使用OT 扩展协议来实现不经意伪随机函数的构造,并且将其中使用到的纠错编码方法改为伪随机编码(因为并不需要配套的解码过程)。性能改进的主要效果是协议的通信复杂度不再依赖于集合元素的长度 。Pinkas 等人继承了Kolesnikov 等人改进方法中体现的使用不经意伪随机函数的思想,但是保留了纠错编码的构造,因此在集合元素长度较小的情况下能达到比使用伪随机编码更好的性能,但是在σ增大的情况下,协议通信复杂度也会随之增大。
Pinkas 和Kolesnikov 等人的结果是在半诚实模型下,集合元素大小对等的场景下性能最好的PSI协议,与不安全的哈希协议的开销在同一量级或是只差一个数量级。(Kolesnikov 等人在中的实验结果表明如此,但是由于缺乏在同一实验环境下的测试数据,在第4 节中并没有给出相应的比较结果。)
3.5 基于全同态加密的PSI
使用全同态方案实现 PSI,需要拥有较小集合大小的一方将数据加密后发送给另一方,另一方利用全同态在交叉电路上计算,然后将结果发回给第一方进行解密。总共的通信量仅为:2× 密文扩展× 较小集的大小。然而,仅仅单纯实现上述想法上述想法非常低效,因为对于所有已知的完全同态加密方案,计算成本不仅随着输入大小(两个集合大小的总和)的增长而增长,也随着电路深度的增长而迅速增长。因此,主要挑战是如何通过各种针对性的优化措施,使解决方案切实可行,甚至在许多情况下,能比最先进的协议还要快。在Hao Chen、Kim Laine 和Peter rindal《同态加密的快速私有集交叉》中构造了一种高效的基于全同态的PSI 协议,该协议拥有很小的通信量方面的代价。该协议尤其适用于寻找联系人的应用场景。
4 性能分析与比较
在这一节中笔者会给出不同PSI 方案在实现中可能会出现的问题,比如内存的消耗和并行计算的可能。除此之外,还会给出相应的性能分析与比较,包括在第3 节中列举出的目前在不同场景下性能最好的PSI 协议。Pinkas 等人在统一的测试环境下,对大部分PSI 协议的性能给出了具有参考性的测试结果,笔者会在这里将结果呈现出来。并对其没有测试的协议,进行补充比较。
4.1 实现 PSI 协议
由于现实情况下PSI 协议通常要在很大规模的集合上操作,因此分析协议实现中可能遇到如内存紧张的情况。Pinkas 等人分析了在实现协议的过程中可能遇到的问题以及一些工程上的优化方法。
4.1.1 内存占用情况的分析
在对协议复杂度分析时,计算和通信复杂度通常是衡量协议效率的指标。此时认为能够使用的随机存取空间是够用的。但是在实现协议的过程中,内存是受限的。因此如果一个协议运行过程中涉及对基数很大的集合进行操作,并且对于内存的需求超出了内存内提供的空间,协议的性能会大幅下降。因此对协议的内存使用情况的研究对于实现协议十分重要。
Pinkas 等人观察到在大集合上进行密码学原语的操作会耗费大量的内存。出于这种原因,很多PSI 协议的实现版本如果不经优化的话会很快地消耗掉所有的内存。将数据存储在硬盘上是一种可行的方法,但是如果需要在数据上做随机访问时这种方法会带来很大的性能损失。下面笔者会分析不同种类的 PSI 协议对内存的消耗情况。
(1)安全性有限的和基于公钥的协议
基于Hash 函数的非安全协议和使用公钥的PSI 协议不会占用大量的内存。这是因为它们每次只对一个元素处理,并且很容易做到流水线操作。在标准的个人电脑上也可以在百万级的集合上运行这类协议。
(2)基于电路的PSI
基于电路的PSI 会占用大量的内存空间,而且姚氏混乱电路相比GMW 的方案,有着更大的内存占用情况,因为每条线路上都要存储κ 个比特,而不是一个比特。电路方案造成大量内存占用的主要原因是计算需要的电路要完整地存储在内存中。为了减少内存的占用,Pinkas 等人给出的基于电路的PSI 实现中,为了减少内存占用情况,求值过并且不会再使用到的电路都会被直接删除。而且Pinkas 等人提出将一个电路重复使用的方法,这种优化方法对于PWC 和OPRF 类型的电路尤其有效,因为在这些情况下所有的数据都是应用于同一电路上的。
(3)基于不经意传输扩展协议的PSI
基于布隆过滤器的PSI 协议 需要将布隆过滤器全部存储在内存中才能进行取交集操作。具体来说,当输入集合有一百万个元素的时候,这些方案要求存储至少875MB 的数据。除此之外,在布隆过滤器上还需要进行随机访问操作,这样一来如果将布隆过滤器存储在硬盘上,性能会有很大的损失。基于OT 协议的PSI的主要内存需求出现在其中使用的哈希表中,尤其是使用了布谷鸟哈希(Cuckoo Hashing)之后,在构建哈希表的时候需要对表进行随机的访问。与布隆过滤器的情况类似,如果将一张很大的表存储在硬盘上会造成很大的性能损失。但是哈希表的实际表现要优于布隆过滤器,对于存储一百万个元素的情况,布谷鸟哈希表需要12MB 的空间,因此要远优于布隆过滤器的方案。
(4)基于全同态加密的PSI
朴素的全同态加密方案,内存的使用只与密文大小有关,所以内存开销非常小。但如果为了提升协议的效率而使用哈希表减少计算复杂度,就涉及要把哈希表存储在内存里。这样内存的开销就与哈希表的选择和设计有关。Chen 等人的协议使用了布谷鸟哈希,发送方和接收方同时需要存储一个大小为 m 的哈希表,其中发送方的表项大小为B(σ-log2m+log2h ),接收方表项大小为σ-log2m+log2h ,式中B 为布谷鸟哈希表的常数。
4.1.2 并行化
当PSI 协议的性能瓶颈出现在计算过程的时候,通过将并行计算来加速计算过程就成为了一种切实可行的加速手段。注意由于对称加密可以通过 AES-NI 指令集快速完成,在这种情况下并行化很可能将性能瓶颈从计算过程转化为通信过程。下面将讨论不同种类协议的并行化可能。
(1)安全性有限的和基于公钥的协议
这两类协议都可以使用并行计算,因为元素的处理是相互独立的。这些协议中主要的性能瓶颈是在协议最后,哈希值上的交集操作。
(2)基于电路的PSI
其会根据底层安全多方计算框架的不同,而有着不同的并行化手段。一方面,GMW 协议使用 OT 扩展来预计算一种称为“multiplicationtriple”的结构。预计算步骤占计算开销的主要部分,并且是可以并行化处理的。但是在GMW 中,电路的计算需要两方顺序地交互,交互次数与电路的深度呈线性关系,是不可以并行化处理的。另一方面,姚氏混乱电路有着常数的交互轮次。协议并行化的能力依赖于底层的电路结构。如果电路可以被划分为许多独立的子电路,比如PWC 和OPRF 电路,那么就可以有效地进行并行处理。如果电路中所有的门都是有关联的,比如SCS 电路,做到并行化就需要和电路结构相关的方法来进行,比如Büscher 等人提出的自动并行化电路编译器。
(3)基于不经意传输扩展协议的PSI
所有基于OT 协议的PSI 都隐藏着并行化的可能,因为底层的OT 扩展协议是可以并行化处理的。不同协议的并行化能力的主要差距体现在将集合中元素映射到相应的数据结构的方法(比如布隆过滤器和哈希表)。在使用布隆过滤器的方案中,X 需要首先提前生成布隆过滤器,这一步骤是不能很好地并行化的。在Pinkas等人的协议中,这一点得到了改善,因为在这一协议中布隆过滤器是通过 OT 扩展协议的输出产生的,因而可以并行化。在Pinkas 等人提出的基于OT 的PSI 协议中,并行化主要的瓶颈存在于布谷鸟哈希的步骤。但是由于在这一协议中布谷鸟哈希是作为预处理步骤进行的,无需和另一方交互,因此在某些应用场景下这一开销可以均摊到多次协议的实例上。
(4)基于全同态加密的PSI
该方案本质也非常简洁,每个元素都是独立的,可以并行操作。另外全同态加密本身有一些并行化技术,比如一种叫“batchin”的操作,可以将n 个消息加密成一个密文,从而使得时间复杂度缩减为原来的 。如果使用哈希表优化的话,也会涉及哈希表上交集操作的问题。在Chen 等人的协议中,他们使用了“windowing”和“partition”技术,利用多线程,大大优化了哈希表上求交集操作。
4.2 PSI 协议的性能分析
不同PSI 协议的计算复杂度和通信复杂度在表2 中有所体现。表中的计算复杂度是通过非对称或是对称密码原语的使用次数衡量的,通信复杂度是通过在信道上传输的比特数衡量的。这里的假设是每完成一次OT 协议花费3 次对称密码操作(对于使用布隆过滤器的花费2.5 次对称密码操作)。计算姚氏电路中的与门使用4次对称密码操作,计算GMW 电路中的与门使用6 次对称加密操作。
在同一类别中的PSI 方案大多数拥有类似的复杂度。朴素哈希方法与服务器辅助的方法需要对每一个元素执行一次对称加密操作(哈希),基于公钥的协议需要对每一个元素执行两次公钥操作,并且需要发送两个密文和一个哈希值。基于电路的方法的计算复杂度与电路中与门的数量成正比,在基于布隆过滤器的协议中,计算复杂度与布隆过滤器的大小成正比。在基于OT 的协议中,基于布隆过滤器的协议,通信复杂度是与安全参数κ 的平方成正比的,但是在Pinkas 等人的协议,通信复杂度是与κ 呈线性关系。
表2 不同 PSI 协议的复杂度比较
其中t=NX+NY m= max(NX; NY),β ≈ λ+ 2 logn-1,ε; k; s; maxb 是哈希函数用到的参数。
标有 * 的是在恶意模型下安全的协议。
4.3 性能测试结果
在这一节中笔者会给出在局域网和广域网场景下不同PSI 协议的性能。衡量性能的指标包括总体的运行时间以及在信道上传输的数据量。这里的测试数据来源于Pinkas 等人Chen 等人在相关协议实验中给出的性能比较。由于不同作者进行的实验环境与软件实现都可能存在差异,因而无法做到并列地比较。但是好在每一组数据中都考虑了足够多的协议种类,可以通过每一组数据的观察来比较相应类别的PSI 协议的特点与适用场景。
4.3.1 测试环境说明
Pinkas 等人在局域网上的测试是在两台通过千兆以太网连接的PC 机(Intel Haswell i7-4770K CPU with 3.5GHz and 16GB RAM) 上进行的,而广域网上的测试是在两台Amazon EC2m3.medium 实例(Intel Xeon E5-2670 CPU with2.6GHz and 3.75GB RAM) 上运行的, 其中一台位于美国西海岸的北弗吉尼亚州,一台在欧洲的法兰克福。两者之间通信网的平均带宽为98Mbit/s,平均的往返延迟为 94ms。
在局域网和广域网的条件下,Pinkas 等人分别运行了测试。在测试中Sender 和Receiver拥有相同数目的输入元素个数,取值范围是
NX ; NY ∈ {28212216220224}
在测试中双方都没有进行预计算。对于基于电路的SCS 和PWC 方案,它们的计算复杂度取决于输入元素的长度。在测试中Pinkas 等人固定σ=32 并给出了IPv4 地址的PSI 的应用场景。对于服务器辅助的PSI,Pinkas 等人的实现方法是在一台机器上运行服务器程序,并在另外一台机器上运行两个希望进行PSI 的客户端程序。
对于协议的实现,基于RSA 的协议和基于布隆过滤器的协议都使用了原作者给出的实现方案,但是在基于RSA 协议的最后一步Pinkas 等人使用了哈希表进行优化(原来的协议是单个元素逐个比较,复杂度与输入元素的个数的平方成正比),在基于布隆过滤器的协议中,使用了Asharov 等人给出的OT 扩展协议来实现原协议中的OT 协议。他们是使用了C++ 实现的, 当时最好的姚氏电路和GMW 协议的ABY 框架用来实现基于电路的协议。对于姚氏电路,Pinkas 等人使用了对于电路尺寸优化的SCS 电路(比较部分的电路的大小和深度为σ);对于GMW 协议,他们使用了对深度优化的电路(比较部分的电路大小为3σ,深度为log2σ)。这两种优化思路来自。他们使用了AES 来作为服务器辅助PSI 中PRP 函数和二选一OT 扩展协议中的CRF 函数,使用SHA-256 作为N 选一OT 扩展协议中CRF函数和随机预言模型的实现。
对于协议中使用到有限域上的密码算法,Pinkas 等人使用了GMP 库(v.5.1.2);对于椭圆曲线上的密码算法,使用了Miracl库(v.5.6.1); 对于对称密码算法使用了OpenSSL 库(v.1.0.1e); 对于OT 扩展协议,使用了Asharov 等人给出的实现。在有限域上的密码算法都是在阶为q 的子群上进行的,其中q 的长度为2κbit。
表3 展现了不同协议的运行时间,表4 展现了不同协议的通信量。其中表3 中的运行时间是从程序开始运行到接收方输出交集结果的时间,所有的运行时间都是10 次运行的算术平均值。下面笔者按类别分析比较的结果。
Chen 等人使用的测试环境如下:基准测试机有两个18 核Intel Xeon CPU E5-2699 v3 @2.3GHz 和256GB RAM,并使用Linux 流量控制器命令模拟网络延迟和带宽。具体来说,LAN设置为双方通过本地主机连接,具有10Gbps 吞吐量和0.2ms 的往返时间(RTT);WAN 设置方面分别考虑了100Mbps,10Mbps 和1Mbps 的带宽,每种设置的RTT 均为80ms。所有数据为10 项试验的平均值。
表5 是Chen 等人在实验中分别基于FHE、电路和不经意传输的PSI 协议运行性能比较。
Rindal 等人在中比较了他们在恶意模型下安全的协议与其他恶意模型下安全的协议的性能,以及与基于OT 扩展的半诚实模型协议的性能。他们的测试环境如下:基准测试机有两个多核的Xeon 处理器,256GB 的RAM。测试中LAN 和WAN 网络都是使用本机loopback结合Linux 流量控制器命令来模拟网络延迟和带宽的。其中LAN 设置具有10Gbps 的吞吐量和小于1ms 的往返时间;而WAN 设置使用的是40Mbps 的吞吐量和80ms 的往返时间。所有的测试都使用了κ=128,λ=40 的安全参数,而且运行时间是10 次运行的算术平均。其中任何可能使用硬件优化的地方都使用了AES-NI指令进行优化。
在实验中,Rindal 等人使用作为不经意编码功能来进行实现,而且使用的编码方式为BCH-(511 76171)。这一模块的输入长度为76bits。为了支持任意长度的输入元素,Rindal 等人使用了Pinkda 等人的变换方法,并配合Phasing(在哈希表插入时进行置换从而减少表元素的长度)使用,最终的元素长度为128bits。在这种情况下,集合大小n 和统计参数的关系为
λ+ logn ≤ 76
对于 RO 和 PRF/PRG,Rindal 等人分别使用了SHA-1 和AES 作为实现(使用PRG 的计数器模式)。
表6 给出了Rindal 等人提出的两种恶意模型下安全的协议、恶意模型下安全的协议以及Kolesnikov 等人给出的一个半诚实模型下安全的协议的比较。
4.3.2 安全性有限的协议
朴素哈希是最高效的协议,比服务器辅助的PSI 快将近两倍。但是这一类中的协议有着更强的安全性假设或是根本就是不安全的。
4.3.3 基于公钥体系的 PSI
基于有限域上DH 的PSI 协议比基于RSA 体系的PSI性能更好,而基于椭圆曲线上 DH 的PSI 协议比基于有限域DH 的PSI 协议的性能又有近两倍的提升。基于椭圆曲线上DH的PSI 协议的主要优势是它拥有最低的通信复杂度,而且协议比较简洁,易于实现。
4.3.4 基于电路的PSI
在表3 中罗列了通过使用姚氏电路和 GMW实现的PWC 电路,SCS 电路和OPRF 电路的性能。比较结果显示使用GMW 实现的协议相比姚氏电路,拥有约两倍的性能提升。PWC 电路在集合基数增大的情况下有比 SCS 和 OPRF 电路更好的性能,例如在集合大小为216 的时候PWC 电路的运行时间至多是其他电路的三分之一。
4.3.5 基于OT 协议的PSI
在使用OT 的PSI 协议中,当在小集合上操作时,使用哈希表的PSI 协议比使用布隆过滤器的协议有着更长的运行时间。这是因为使用哈希表的协议中,基础OT 协议的运行次数为后者的三倍。但是当集合大小增大时,基础OT 协议的开销被分摊到更多的扩展OT 实例中,基于哈希表的PSI 协议的优势也就变得明显了。
Rindal 等人给出的比较表明在超过一百万的集合上进行PSI 操作时,恶意模型下安全的协议要比半诚实模型下安全的协议有至少一个数量级的性能损失。但是在一些对安全性要求非常严格的应用场景下,这些协议可以提供更加可靠的安全保证。
4.3.6 基于FHE 的PSI
与基于电路的方案比较来看,基于FHE 的PSI 协议主要优势在于非对称的场景,不仅对接收方的计算能力有更小的要求,而且在多线程场景下速度有大幅度提升。而在与基于OT 的比较来看,基于 FHE 的PSI 协议的通信量远远小于基于OT 的PSI 协议,所以在WAN 的网络设置下,基于FHE 的PSI 协议将比基于OT 的协议快57 倍以上。
表3 在局域网和广域网场景下的PSI 协议的运行时间
其中运行时间以毫秒计,“-”表示在测试的时候遇到内存不足的情况,实验无法继续。
表4 测试中PSI 协议的通信量
其中通信量以MB 计,“-”表示在测试的时候遇到内存不足的情况,实验无法继续。
表5 基于FHE 的PSI 分别与基于电路和OT 协议的PSI 在通信量(MB) 以及运行时间(s) 方面的比较
其中T( 线程) ∈ {14};λ( 安全参数)= 40σ( 集合元素长度)= 32h(Cuckoo Hashing 参数)= 3.10Gbps的网络并且RT T = 0:2ms.
表6:indal 等人在中给出的实验结果
其中运行时间为总的运行时间,以秒计。中的协议是在半诚实模型下安全的,而表中其他协议是在恶意模型下安全的,前者代表半诚实模型下优化最好的结果。标“-”的表示运行时间超过24h 或者发生了内存溢出。