匿踪查询教你“悄咪咪的网上冲浪”
趣链科技前言
之前,我们介绍了一种简洁高效的「多方隐私集合求交协议」,该协议是针对多方隐私集合求交场景设计的,解决了基于两方协议简单扩展到多方时产生的数据安全问题,详见前文《叮!多方隐私集合求交发来“会议邀请”》。
本文将介绍另一种使用广泛的隐私计算技术--匿踪查询。匿踪查询顾名思义就是查询方的查询记录是隐藏的,数据方不知道查询方查了哪条数据。具体定义是查询方向数据方发送要查询的id,通过交互使得数据方返回给查询方该id的对应信息,如果未查到则返回空,在整个过程中查询方无法知道查询id之外的数据,数据方也无法知道查询方查询的是哪个id。
例如:现在有个股神,很多人都关注他炒股的一举一动,把他关注的股票作为购买的参考,但是股神不想泄露这些信息以免影响股票价格,这个时候,股神就可以使用「匿踪查询技术」来查询股票信息,保证他查询数据时的隐私性。
知识点科普
不经意传输-OT Oblivious transfer? ? ? ? ? ? ? ? ? ???
不经意传输:接收方想要获取发送方n个数据里的第i个,但是需要保证接收方只能拿到第i个数据,无法拿到其他数据,发送方也无法知道接收方拿的是第几个数据。
从不经意传输的定义来看和匿踪查询是比较接近的,但是不经意传输是需要查询者知道自己要查询的数据是在哪个位置,通常情况下查询者在查询前是无法知道具体要查询的位置。
隐私信息检索-PIR Private Information Retrieval?
隐私信息检索:查询方向数据库请求查询指定位置的数据,但需要保护查询方的查询位置不被数据库感知。和不经意传输技术不同的是,隐私信息检索是无需保护数据库的隐私的,数据库对于查询方来说是公开的,相当于是安全性弱化的不经意传输。
除开安全性的区别外,隐私信息检索的一个侧重研究目标就是减少通信量,根据上面的定义可以看出隐私信息检索的一种最简单实现就是数据库直接将所有数据发给查询方,查询方本地查询获取数据就行,但是这种方案效率太低了,特别是数据库数据量比较大时,数据传输时间太长,长到查询方的本地查询时间都可以忽略不计。因此现在有很多研究都是建立在多数据库服务副本的前提下去做查询时数据传输量的优化,以减少查询时间。
匿踪查询算法流程解读
一种比较简单的、实现匿踪查询的思路:先通过某种方法定位到要查询的数据在查询方数据集里的哪个位置,然后通过不经意传输技术根据这个位置去拿要查询数据key对应的value。定位查询数据位置的方法,有一种方案是通过执行隐私集合求交算法,这样查询方就可以定位到查询数据对应的位置或者确定本次查询是否命中了。
接下来介绍另一种基于同态加密和多项式的匿踪查询算法流程[1],查询方拥有查询数据q,数据方拥有键值对,,...,。
- 数据方将键值数据使用插值法构造出多项式H(x),将所有键看出x轴坐标构建出F(x),并生成随机数r,计算出多项式G(x)=H(x)+r*F(x),易看出G(x)和H(x)的性质是一样的,带入键值对中的健可以算出对应值,带入其他数据算出的就是随机数了:
- 查询方生成全同态加密的秘钥对,将查询数据q使用公钥进行加密后,和公钥一起发送给数据方;
- 数据方使用公钥将加密后的数据q带入到F(x)和G(x)中计算,计算Enc(F(q))和Enc(G(q))并发送给查询方;
- 查询方使用私钥解密出F(q)和G(q),如果F(q)为0则说明查询命中了,G(q)就是查询到的数据,如果不为0则说明未查询到数据,G(q)就是随机值。
正确性分析
通过基于键值对来构造多项式的方式来构造两个不同作用的多项式,F(x)用于查询方来判定该次查询是否命中,G(x)用于查询方在确定查询命中后,拿到查询到的数据。
安全性分析
对于查询方来说:他的查询数据是通过自己生成的秘钥对中的公钥加密后发送给数据方的,数据方是无法解开拿到查询数据的,只能通过同态加密的性质进行计算。
对于数据方来说:他的数据未直接发送给参与方,而是将加密后的查询数据带入到多项式中进行同态计算,再将两个多项式分别计算后的结果发送给查询方,查询方未拿到其他数据的相关信息,也就无法进行反推。
总结
「匿踪查询」本质是在传统的key-value查询的基础上,加入了隐私保护,使得查询方无法拿到数据方其他数据,数据方也无法知晓查询方查的是哪个key,实现了双向隐私保护,且可以通过提前hash取模分桶预处理的方式,在数据量比较大的时候通过离线预处理操作可以极大提高在线查询时的效率,能做到毫秒级响应,在金融、政务等跨机构数据共享计算的实际场景中有广泛应用前景。
[1]Fast private set intersection from homomorphic encryption.