文章目录
- Pre
- Hufu
- One Round
- Multi Round
Pre
安全操作参考链接
Hufu
hufu算法详细信息。Alg.1 示出了对联合kNN查询的分解。line 1-8得出半径。我们初始化半径的下界(l=0)和上界(u=v0),其中v0可以设置为区域的直径或由用户定义。然后,我们在第2-8行执行二进制搜索,其中ε0是距离的精度下限,可以设置为位置坐标的精度。在每次迭代中,第3行中的thres设置为(l+u)/2。对于当前的半径thres,我们在第4行中对每个data silo执行明文范围计数(plaintext),并在第5行中对各个silo的计数之和(βi)和整数k进行安全比较。第6-8行调整搜索半径的边界。如果总计数小于k,则当前半径太短,并且我们将l更新为thres作为新的下界(第6行)。如果总计数大于k,则意味着thres内有足够的点,并且我们将上界u更新为第7行中的thres。二进制搜索保证thres足够接近第k个最近距离。在最后一轮(第9-10行)中,对每个silo执行明文范围查询(plaintext range query)PRQFi(circle(p,thres)),我们使用secure set union来获得最终结果。
One Round
Alg。1说明了详细的过程。在第1-2行中,每个数据所有者执行其本地kNN。在第3-5行中,我们使用半径ri表示到查询位置lq的第k个最近距离,使用areai表示到中心lq的半径为ri的圆的面积。然后,数据所有者Si的局部kNN对最终结果的贡献率ratei与areai成反比。为了计算ratei,我们首先通过安全求和运算SecureSum()计算
,然后每个数据所有者Si可以将ratei计算为
。因此,Si提供top(ratei×k)NN作为部分结果resi。最后,空间数据联邦在这些部分结果res1、res2、··、resn之间执行安全联合SecureUnion(),以收集最终结果。
Multi Round
Alg。2说明了详细的过程。在第1-3行中,每个数据所有者Si维护包含候选对象的集合UnadSeti和包含所选对象的集合AdSeti。Si的局部kNN被放入UnadSeti中作为初始化。与Alg.1 不同。Alg.2采用W(W>1)个循环来计算第4-8行中的最终结果,并且每个循环决定k/W个最近邻居(k/W NN)。具体来说,对于每一轮w,我们估计UnadSet1、UnadSet2、··、UnadSetn在这一轮中对k/w NN的贡献率,这与一轮算法类似。注意,在第w(w≥2)轮中,我们将areai微调为π[(ri)2−(r′i)2],其中ri定义为Alg.1的第4行。r′i是第(w−1)轮中ri的缓存值。Si的选定对象将从UnadSeti移除到AdSeti。在第9行中,最终结果由AdSet1、AdSet2、··、AdSetn上的安全集并集计算。