根据之前的一篇综述,说这篇文章主要针对OT extension+布隆过滤器进行了相关的操作;
本文主要针对于两方模型,主要贡献如下所示:
1.基于混淆布隆过滤器+不经意布隆交集提出了一中新协议;
新协议包括两个版本:基础版,加强版;两者的版本在于两方中是否是半诚实的或者是恶意的;
基础版有现行的复杂度,并且依靠对称加密操作;
加强版和基础版相比,只是增加了一些成本;
相关基础: 布隆过滤器:布隆过滤器简单讲就是使用一系列的Hash函数,将一个集合中的元素哈希化,映射到一个长度为m的向量中,映射到的位置置为1,剩下的为0;
当检测y是否为该集合元素,只要检测对于h个Hash函数映射后,是否有元素为0,只要有一个为0则认为y不属于该集合;
但是这种简单的协议,会存在误判的可能性;
也就是y即使不属于该集合,也有可能存在所有映射后的位都为1的情况;
有一篇文章给予了证明,意为错误率存在一个阈值;
秘密共享:将一个秘密s分割为n份,并且保证只有存在t,当秘密份数小于t的时候,不会泄密,当秘密份数大于等于t的时候,才会泄密;
因此也成为(t,n)秘密共享策略,Shamir‘s共享策略就是在此基础之上;
这里还举了一个经典的例子,在之前的GMW中有所体现;
即当为s按照相同长度生成n-1个随机二进制串,则根据异或可以有以下算式:
则对于s,仅可能通过: 泄密;
所以,这也是当t=n的情况;
Basic Protocol 基础版协议:客户端在自己的集合C上计算一个布隆过滤器,并且服务器在自己的集合S上计算一个混淆布隆过滤器;
之后彼此运行一个OT协议,客户机获得一个交集混淆布隆过滤器,最后获得交集;
何为混淆布隆过滤器(Garbled Bloom Filters):本文称Garbled Bloom Filters为 GBF;
GBF和传统的BF的不同在于GBF使用的一个内部元素是λ-bit的字符串数组,而非一位比特的比特数组;
这是GBF和BF在数据结构方面的根本性区别;
在流程上,GBF则是采用了秘密拆分的思想;
对于k个Hashing函数映射,可以视为生成k份秘密存储在vector中;
查询时,只要这k个哈希字符串异或的结果值能是查询值,则说明该查询值必在该集合内;
对于之前的碰撞流程,则会进行秘密份额替换;
这里文中给了一个例子:
例如,x2的映射,在x1秘密份额占用后,直接采用x1的冲突秘密份额作为自己的秘密份额;
整体例子如下所示:
算法具体流程:
映射流程:
交集查找流程:
求交方法:整个求交过程采用一个GBFs和BFc进行,新的结果存放在GBFC∩S;
GBFs和BFc的索引下的存储空间是否为空必定相同,不同的是存储内的元素;
GBFs存储的是秘密共享,而BFc则是布尔值;
因此可以按照如下算法,求出交集;
整体计算流程:
整体计算流程如下所示:
这里主要针对的是求交集部分;
求交集部分的预防隐私泄漏是通过OT协议来实现的;
当Client的BFc和GBFs构造完成后,按照OT协议来进行,因为有m个元素,需要构成新的GBF集合,因此需要进行m次OT传输;
GBFs提供选择,BFc进行选择,也就是说Client不知道GBFs给出选项的含义,Server也不知道BFc选择了哪个;
原文如上,细细一想,该操作很好的保证了隐私;
首先,由于GBFs的非映射元素位置在最后会随意填充,因此Client也就不知道自己选择的选项到底是无意义的字符串还是真实的秘密成分,从而保护了Server的秘密;
其次,Server也不知道最后选择了什么,也就不知道Client的set成员;
因此,这个方法能很好的在不泄漏交集的情况下,构造出交集GBF;
Enhanced Protocol 强化版协议:这里没太看懂,后面需要补点密码学基础;
大概意思应该是,如果client把所有的标志位全部置1,则可能获得Server的所有交集元素,相当于全集和A求交,则最后获得肯定是交集A;
文中应该是通过强行加密,把时间的复杂度提升了几个量级;
其实没太看懂,惭愧惭愧;



