Paper reading:Authenticating Top-k Queries in Location-based Services with Confidentiality

Authenticating Top-k Queries in Location-based Services with Confidentiality

读后总述:这篇论文主要针对LBS的应用涉及到的 验证,隐私,这个两个问题给出一个解决方案。用到了加密技术,和空间数据索引技术。

问题描述

智能手机已经非常非常流行了(今年2015年,10年后肯定不再是smart phone)。 LBS相关商业业务一片繁荣(prosperity),各种团购,各种外卖,各种附近的。。。。

从简单的例子引出问题。

例1:我用美团在新街口,查询3公里范围内所有的饭馆。结果由距离升序排序。(或者综合客户评分值)

例2:我用QQ查询附近的好友,可以限定是male ,female。

问题A:例1中,我用手机发送请求,如果网络中间有人篡改(tampered)了返回的数据怎么办。篡改人的目的很简单,将返回的数据中的那些商家,“赞助”过他们的,对他们有利的留下来,并且提高排名。那些没有交“赞助”费的直接从数据中删掉。--现实的社会。

问题A:例2中,如果查找附近的好友,直接返回具体的坐标,显然是不合理的。具体位置信息是隐私信息。如果位置信息被用于非法目的,比如蹲点打劫,那后果也是非常严重的。

现有工作

问题A:解决方法是在发送查询结果的同时,返回一个验证信息。(Verification Object)VO。返回的数据从 Query results 变成 Query results + Verification Object

现有的生成 VO 的方法。

<a> 签名链  要对所有的节点进行签名,计算量和VO的数据都比较大。

<b>  h(d) :one way function  是d的摘要的单向函数,只要传输root 节点作为VO就可以了。

主要贡献

1、开创新(this is the first work that address privacy-preserving top-k query authentication)

2、两种保护隐私的比较方法 PPB,PLB

3、两种查询空间数据索引的方法 R-Tree,Power Diagram indexes

数学化问题描述

Without loss of generality, we model a d-dimensional dataset D in an integer-domain space. For ease of presentation, we assume each object pi ∈ D is a pair ?λ,ω?, where λ is pi’s location vector and ω is its non-spatial score. The results of a top-k query Q = ?q, k? (where q is the query point) are R = {r1,r2,··· ,rk},1 where ri is the id of the ith ranked object in D with respect to the following ranking function (known as Euclidean scoring function [1]):

rank(ri, q) = ∥ri.λ − q.λ||2 + ri.ω2,

定义:每一个空间数据集D,每个数据pi∈D,pi定义为?λ,ω?,λ为是坐标向量,可以是二维,也可以是三维等。ω是当前数据的一个分值。 在实际的应用中可能有其他的数据,这个是最简的模型。 查询结果R,R = {r1,r2,··· ,rk} 。q为查询点。

定义rank为

rank(ri, q) = ∥ri.λ − q.λ||2 + ri.ω2,

右边前面一项为 q与ri 之间的欧氏距离。后面一项是ri的分值。

问题转化为4个约束条件。

1,None of the locations, scores, and ids of the result objects in R are tampered with; ?

2,None of the locations, scores, and ids of the result objects in R are tampered with;   --1,2满足数据真实性问题?

3,∀ri ∈ R, rank(ri, q) ≤ rank(rk, q);3 ?

4,∀ri ∈ D − R, rank(ri, q) ≥ rank(rk, q).  –3,4满足top-k的要求

工作1: 为了解决3,4,在不用知道R中具体的location和score 也能比较rank大小

工作2为了解决2,4 ,因为D-R的数据集非常大,所以不可能全部遍历他们,需要建立索引机制。

工作1 privacy-preservation

这里和计算机安全相关。是同态加密算法Paillier的应用。主要思想是,你可以用我的数据进行一些处理,但是你并不知道我的数据是什么[1]。

带入到这篇论文,就是可以比较rank的大小,但是不知道location是多少,score是多少。

论文中进行了一些数学推导。Paillier对加法同态。

这样就达到了隐私保护的目的。

文中提到了Semantic security 一个相对于Perfect secrecy的概念。

[WIKI]Semantic security implies that any information revealed cannot be feasibly extracted

Perfect secrecy means that the cipher text reveals no information at all about the plaintext

文中提到,如果用户发出连续的请求,而用户的位置在刻意地改变。那么用户根据每次返回的结果,发现某些结果总在这个区域中,就间接地知道了location。通过范围框的方法解决。

图来自于[1] figure 10

每一个pi有一个sphere,至少包含到两个点的距离。Callded “privacy sphere”半径阀值为γ。

当有一个新的查询q来的时候,加入q到pi 中,重新计算的sphere,如果有的sphere小于阀值γ (可以唯一确定目标),则服务器拒绝这次的请求。

工作2 AUTHENTICATING TOP-K QUERIES WITH- OUT COMPROMISING PRIVACY  不暴露隐私的前提下进行验证top-k查询

R-Tree (1984,还没出生的年代)介绍[2]

主要理解 bounded box 。可以是 2维,3维,n维的box。

加入数据原则 添加到FI 后,FI的面积增加最小。添加一个点,那个bounded box的面积增加最小,也就是最点靠近那个bounded box。理解合理。

其他平衡,分拆,具体算法参考[2]论文。

图来自[3]

二维表示 (可以是经纬度2维数据)

图来自[3]

三维表示 (x,y,score 三维数据)

图来自[1] figure5

四维:已经画不出来了。只可概念上想象,数学上存在。

通过R-Tree 只要查询比较小的一部分数据,就可以解决4个约束中的2,4.两项

进一步工作

文中的数学模型是最简模型,需要根据实际应用场景,具体化。

LBS的距离衡量,不是空间的欧氏距离,而是实际的多少米,多少公里。需要改进。

读后总结

国内的微信,美团,饿了么,大众点评,后台的隐私保护,和查询验证的具体算法不知道具体是什么,应该有相应的实现,没有的话就是随意暴露用户隐私,容易被他人利用。这篇论文具有工程应用价值。

引用

[1] Q. Chen, H. Hu, and J. Xu. "Authenticating Top-k Queries in Location-based Services with Confidentiality."Proceedings of the VLDB Endowment (PVLDB ‘14), Hangzhou, China, September 2014.

[2] http://blog.csdn.net/yuanchuanghhhh/article/details/6786825

[3] RTree – A dynamic index structure for spatial searching, SIGMOD (1984)

时间: 2024-08-12 12:14:42

Paper reading:Authenticating Top-k Queries in Location-based Services with Confidentiality的相关文章

排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中"选择"出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插

Top k 问题

Top K的问题: 给出大量数据,找出其中前K个最大(小)的数,或者在海量数据中找到出现频率最好的前K个数. 一.给出大量数据(N个),找出其中前K个最大数(没有其他资源上的限制) 1.使用排序算法 直接使用排序算法,如快速排序,然后遍历找到最大的K个数.时间复杂度为O(NlogN): 2.部分排序 因为,只要求出前K个最大值,所以我们不必全部排好.思路是:随意选出K个数形成一个数组,然后按从大到小进行排序,再从剩下的数中,选取一个数和数组中的最小值进行比较,若小于最小值,则取下一个数继续比较:

347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2,2,3] and k = 2, return [1,2]. Note: 347. Top K Frequent ElementsYou may assume k is always valid, 1 ≤ k ≤ number of unique elements. Your algorithm's

Top K Frequent Words

Given a list of words and an integer k, return the top k frequent words in the list. Given [ "yes", "lint", "code", "yes", "code", "baby", "you", "baby", "chrome", &

Spark 编程实战之经典算法TOP K

Top K Top K算法有两步,一是统计词频,二是找出词频最高的前K个词. 1.实例描述 假设取Top 1,则有如下输入和输出. 输入: Hello World Bye World Hello Hadoop Bye Hadoop Bye Hadoop Hello Hadoop 输出: 词Hadoop 词频4 2.设计思路 首先统计WordCount的词频,将数据转化为(词,词频)的数据对,第二个阶段采用分 治的思想,求出RDD每个分区的Top K,最后将每个分区的Top K结果合并以产生新的集

Top K问题!!!!!!!!!!!!!

转:http://blog.csdn.net/boo12355/article/details/11788655 Top K 算法详解应用场景: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节.        假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个.一个查询串的重复度越高,说明查询它的用户越多,也就是越热门.),请你统计最热门的10个查询串,要求使用的内存不能超过1G. 必备知识:什么

Top k问题的讨论(三种方法的java实现及适用范围)

在很多的笔试和面试中,喜欢考察Top K.下面从自身的经验给出三种实现方式及实用范围. 合并法 这种方法适用于几个数组有序的情况,来求Top k.时间复杂度为O(k*m).(m:为数组的个数).具体实现如下: /** * 已知几个递减有序的m个数组,求这几个数据前k大的数 *适合采用Merge的方法,时间复杂度(O(k*m); */ import java.util.List; import java.util.Arrays; import java.util.ArrayList; public

Top K and Quick Selection

The common solutions for top k problem are heap (priority queue) and quick selection. Using heap is very straight-forward, while quick selection with partition is more complicated and I didnot find any satisfying code online, so document as following

Top k Largest Numbers

Given an integer array, find the top k largest numbers in it. Example Given [3,10,1000,-99,4,100] and k = 3.Return [1000, 100, 10]. 思路:由于需要按从大到小的顺序,因此直接用PriorityQueue即可,用Partition的方法的话还需要排序.直接用PriorityQueue 写的代码量少. 1 class Solution { 2 /* 3 * @param