技术简介:
本专利针对海量用户请求中位置隐私易被暴露的问题,提出基于k-匿名的动态聚类保护方法。通过聚类消息生成匿名域、引入虚假位置、动态调整圆心半径等策略,在满足k-匿名性前提下,减少重复查询带来的计算与通信开销,提升隐私保护效率与服务质量。
关键词:k-匿名,位置隐私保护,匿名域动态调整
技术领域本发明涉及基于位置的服务及安全隐私技术领域,尤其涉及一种面向海量同等请求的k-匿名位置隐私保护方法。
背景技术:随着无线通信技术和移动定位技术的发展,越来越多的移动设备具备GPS精确定位功能,使得位置服务(Location-BasedService,简称LBS)日益风行,成为为移动用户提供的最有应用前景的服务之一。LBS是指基于移动设备的地理位置和其他信息,为移动用户提供的信息和娱乐服务,其典型应用包括地图类应用、兴趣点检索、优惠券或折扣提供、GPS导航和位置感知社会网络等。目前,LBS已被广泛应用在军事、政府产业、商业、医疗、紧急救援、民生等领域。然而,随着移动互联网、社会网络、大数据等新兴技术的发展和广泛使用,LBS在给个人和社会带来巨大好处的同时,也引发了严重的隐私关注。因为用户获取LBS时需要报告他们的位置信息,而位置数据既直接包含了用户的隐私信息,又隐含了用户通常想保护的其他个人敏感信息,如家庭住址、生活习惯、健康状况和社会关系等。因此,这些私人信息的泄露会打开滥用个人数据的大门,对用户各方面的隐私带来严重威胁。例如,从匿名GPS数据中能推断出个人的家庭地址、工作单位和社会关系,预测出用户过去、现在和将来的位置,推断出个人的行踪;甚至可以利用室内位置信息推断出个人的工作角色、年龄、爱好(如是否抽烟)等。因此,对用户的LBS隐私进行保护是一个至关重要的问题。目前,有许多研究者对位置隐私保护相关技术进行了深入研究,主要分为基于启发式隐私度量的位置隐私保护技术、基于概率推测的位置隐私保护技术和基于隐私信息检索的位置隐私保护技术,具体例如k-匿名、匿名框技术、基于隐马尔可夫链的隐私模型、近邻查询中基于隐私信息的检索方法等。国外研究者RezaShokri提出了一种协作机制来提高用户位置的隐私性。在该方案中,移动用户需要位置服务时,先尝试向附近用户请求协助,若没有邻居可共享LBS信息再向LBS服务器请求。研究者Kenta则提出了一种模糊区域和制造虚假节点相结合的方案,在用户数量比较多的地区,由第三方匿名服务器收集足够多的用户,构造成模糊的区域,利用模糊区域向位置服务器发送请求信息,这样,位置服务器就不能知道用户的具体位置,当用户数量比较少达不到要求时,匿名服务器利用算法构造虚假节点,利用虚假节点和相关用户构成匿名区域。然而,上述大多数的方法都依赖于一个可信任的匿名服务器,它通过时空模糊化等机制将用户位置进行变换,实现位置的隐私。然而这些研究方法更多地考虑个体位置隐私变换的安全性和效能,并未考虑大规模的群体位置隐私请求的安全和效率问题。随着大数据时代的到来,用户群可能在同一时段向LBS服务器发送大量的同等请求。在现实生活中不乏这样的例子,例如在北京王府井的平安夜晚上,会有大量的人群集中在王府井区域,当他们同时向“大众点评”等服务商发起请求自身位置附近的美食服务时,匿名服务器如何安全高效地满足这种海量位置隐私同等请求,如何减少重复查询带来的计算消耗,降低通信开销,有效提高服务质量就成为了亟需解决的问题。
技术实现要素:针对上述问题,本发明提供一种面向海量同等请求的k-匿名位置隐私保护方法,结合k-匿名和同等请求的特点,用户可以制定个性化的隐私参数,匿名服务器将这些请求根据位置信息进行聚类形成匿名域,从而保护用户的位置隐私。本发明提出的一种面向海量同等请求的k-匿名位置隐私保护方法的技术方案包括如下步骤:步骤1、以q=(id,loc,t,qry,d,k)的六元组形式表示位于某一特定位置的用户请求消息,其中id是发出请求的用户id,loc是发出请求的位置,含(x,y)分量,t是发出请求的时间,qry是请求查询的POI信息,d是匿名服务器查询到的POI到loc的距离,k是用户指定的匿名参数,类型为整型;步骤2、匿名服务器收到上述用户请求消息q后,对该请求消息进行匿名处理,生成请求消息Q,并发送给LBS服务器;步骤3、LBS服务器根据收到的请求消息Q将查询结果W返还给匿名服务器;步骤4、匿名服务器接收到服务器返还的查询结果W后,根据W对当前簇中各个请求消息进行遍历查询,并根据各个用户的位置过滤出它们各自需要的真实结果返还给各个用户,并且清空当前簇的所有消息。进一步,步骤2中的匿名处理过程包括以下步骤:步骤1、匿名服务器根据用户请求消息q中的qry判断该用户请求消息属于哪种POI类型,根据该POI类型加入请求队列Clu_queue[i]中,若加入成功则跳转执行步骤4,否则说明该POI类型的消息簇目前不存在,继续执行步骤2;步骤2、请求队列中建立新的簇Clu_queue[i](簇中目前只有唯一的请求消息q,并标记其为qi1),簇的属性包括:覆盖所有用户请求消息的匿名域圆心Oi和相应半径ri,簇中各请求消息间的最大距离MAXi和连接该最大距离两端的消息,匿名参数kmax-i,簇中请求消息的个数ni和创建时间Ti;其中,kmax-i等于簇中所有请求消息的k值的最大值,初始值为qi1.k;Ti等于qi1.t且不再改变,其余参数的初始值为:Oi(0,0),ri=0,MAXi=0,ni=1;步骤3、在系统时间阈值到来之前,Clu_queue[i]继续等待下一个用户请求消息,若有消息到来则返回执行步骤1;如果一直没有新的消息加入簇,若当前时间与簇创建时间Ti的差值达到系统时间阀值tout,则判断ri<rl,其中rl为系统设定的匿名域半径的下阀值常量,用于防止匿名域太小而导致的用户位置被攻击者精确定位后的暴露;若成立则将rl赋值给ri,不成立则ri不变;不论ri<rl成立与否,都在匿名域中创建kmax-i-ni个虚假位置,此时跳转执行步骤9;步骤4、若当前簇Clu_queue[i]仅有一个请求消息qi1,即当前消息q为第二个消息,则需要计算其圆心坐标Oi(ai,bi)为两个消息的位置首位相连后直线的中点,相应半径ri为该中点到直线任一端点的距离,MAXi为该直线的长度;若当前簇不止一个请求消息,则忽略该步骤直接执行步骤5;步骤5、计算用户请求消息的位置q.loc到簇Clu_queue[i]圆心Oi(ai,bi)的距离dis(q.loc,Oi),距离计算公式为判断dis(q.loc,Oi)≤ri是否成立,若不成立则说明q的位置在簇外,此时执行步骤6;否则若成立则说明q的位置在簇内或簇边界上,此时跳转执行步骤8;步骤6、计算用户请求消息q与簇Clu_queue[i]中已有的各个用户请求消息间距离的最大值MAX’i=Max(dis(qi1.loc,q.loc),dis(qi2.loc,q.loc),,dis(qi(n-1).loc,q.loc),dis(qin.loc,q.loc),MAXi),其中MAXi为当前请求消息到来前求得的最大值;暂时将请求消息q标记为qi(n+1),同时记下连接最大距离MAX’i两端的请求消息位置qiu.loc和qiv.loc,1≤u,v≤n+1且u≠v;以qiu.loc和qiv.loc的中点muv-i为圆心,为半径作圆,判断其余各请求消息位置到muv-i的距离是否小于等于若成立则说明其余各请求消息在该圆内,此时新的圆心为muv-i,并跳转执行步骤8,否则执行步骤7;步骤7、遍历当前簇中所有的请求消息,找出某个请求消息的位置qiw.loc,该位置将与qiu.loc和qiv.loc形成最小夹角,计算公式为Max((dis(qiw.loc,qiu.loc))2+(dis(qiw.loc,qiv.loc))22(dis(qiw.loc,qiu.loc))(dis(qiw.loc,qiv.loc)));]]>然后以qiw.loc、qiu.loc和qiv.loc三点作外接圆,通过公式:a1=qiv.loc.x-qiu.loc.x,b1=qiv.loc.y-qiu.loc.y,c1=(a12+b12)/2,a2=qiw.loc.x-qiu.loc.x,b2=qiw.loc.y-qiu.loc.y,c2=(a22+b22)/2,e=a1*b2-a2*b1,E.x=qiu.loc.x+(c1*b2-c2*b1)/e,E.y=qiu.loc.y+(a1*c2-a2*c1)/e可以计算出圆心E,半径rE则为dis(qiw.loc,E);判断rE≤rh是否成立,其中rh为系统设定的匿名域半径的上阀值常量,用于防止匿名域过大所导致的LBS服务质量降低;若成立则圆心Oi(ai,bi)替换为E,半径ri=rE,然后执行步骤8;若不成立则以超出匿名范围为由拒绝当前用户请求并告知用户重新发起请求或者重新寻找匿名服务器;步骤8、将当前簇的消息个数ni值加1,并计算k’max-i=Max(kmax-i,q.k),其中kmax-i为请求消息q加入之前以此法计算出的最大值;判断kmax-i>ni是否成立,若成立则说明当前簇Clu_queue[i]未达到匿名参数要求,此时返回执行步骤3,若不成立则说明Clu_queue[i]已经达到匿名参数要求,此时继续执行步骤9;步骤9、匿名服务器创建一条发送消息Q=(ASR,con)发送给LBS服务器,其中ASR是以点Oi为圆心,ri+d为半径的匿名域,con是请求查询ASR范围的POI信息。有益效果:采用本发明的方法,匿名服务器将海量的同等请求根据位置相近度进行聚类形成满足群体用户隐私需求的匿名域,进而大大降低了计算开销;在匿名过程中采用定时器操作,以防数据量较小时长时间无法达到匿名要求而影响服务质量,并使用放大匿名区域的方法解决无法达到匿名隐私程度的问题。本发明的实现较为简单,保护移动用户位置隐私的同时,有效减少了重复查询带来的计算消耗,同时降低了通信开销,有效提高了服务质量。附图说明图1为本发明面向海量同等请求的k-匿名位置隐私保护方法的匿名流程图;图2为本发明匿名服务器生成的匿名域ASR和当前簇匿名域关系图;图3为本发明所用设备的交互示意图。具体实施方式现结合附图及实例,对本发明进行做进一步详细的说明。应当理解,此处所描述的具体实例仅仅用以解释本发明,并不用于限定本发明。我们采用六元组形式q=(id,loc,t,qry,d,k)表示用户的请求消息,其中id是发出请求用户的id,loc是发出请求的位置,含(x,y)分量,t是发出请求的时间,qry是请求查询的POI信息,d是匿名服务器查询POI到loc的范围,k是用户指定的匿名参数,类型为整型。步骤一、发送请求用户Uid想查询附近有哪些酒吧,此时需要知道用户Uid的位置信息,但用户又不想暴露自己的真实位置信息,那么用户Uid就需要按照六元组形式向匿名服务器发出查询服务请求。其请求消息六元组中id填Uid;loc是通过定位装置获取的位置信息,不需要用户设置;t是用户Uid发送请求时的时间,从客户端直接获取;qry指查询附近酒吧;d是匿名服务器查询POI到loc的范围,这里我们指定为1000米;k表示用户Uid指定的匿名参数,为了简单说明,这里k取的较小,例如4;用户将q=(Uid,loc,t,\查询附近的酒吧\,1000米,4)发送给匿名器就完成了请求任务。步骤二、匿名服务器对消息匿名匿名服务器根据请求消息中的位置和查询内容将消息聚类到对应的簇中进行匿名化。具体匿名过程如下:步骤2.1、匿名服务器接收到用户的请求消息q后,根据用户请求消息q中的qry判断该用户请求消息的POI类型为酒吧,如果属于酒吧的请求队列不存在则创建新的酒吧的请求队列簇。假设酒吧的请求队列簇Clu_queue[i]存在,若满足后续条件,则将请求消息q加入到请求队列簇Clu_queue[i]中。假设此时酒吧簇覆盖所有用户请求消息的匿名域圆心为Oi,其相应半径为ri,簇中实体间最大距离MAXi,匿名参数kmax-i=4,簇中请求消息的个数ni=3,分别为qi1=(Uid1,loc1,t1,\查询附近的酒吧\,800米,4),qi2=(Uid2,loc2,t2,\查询附近的酒吧\,1000米,3),qi3=(Uid3,loc3,t3,\查询附近的酒吧\,1000米,3)。步骤2.2、首先计算请求消息的位置q.loc到达簇Clu_queue[i]圆心Oi(ai,bi)的距离为然后判断dis(q.loc,Oi)≤ri是否成立,假设dis(q.loc,Oi)>ri,即q的位置在簇外,此时请求消息q暂时无法直接加到簇中。步骤2.3、首先计算用户请求消息q与簇Clu_queue[i]中已有的各个用户请求消息间距离的最大值,MAX’i=Max(dis(qi1.loc,q.loc),dis(qi2.loc,q.loc),dis(qi3.loc,q.loc),MAXi),其中MAXi为当前请求消息到来前求得的最大值,假设MAX’i=dis(qi1.loc,q.loc);暂时将请求消息q标记为qi4,同时记下连接最大距离MAX’i两端的请求消息位置为qi1.loc和qi4.loc。以qi1.loc和qi4.loc的中点m14-i为圆心,为半径作圆,然后判断请求消息位置qi2.loc和qi3.loc到m14-i的距离是否小于等于假设dis(qi2.loc,m14-i)>MAX,i2,dis(qi3.loc,m14-i)<MAX,i2,]]>请求消息位置qi2.loc在该圆外,此时请求消息q暂时无法直接加到簇中。步骤2.4、比较qi2.loc和qi3.loc与qi1.loc和qi4.loc形成夹角的大小,通过公式Max((dis(qiw.loc,qiu.loc))2+(dis(qiw.loc,qiv.loc))22(dis(qiw.loc,qiu.loc))(dis(qiw.loc,qiv.loc)))]]>可知qi2.loc与qi1.loc和qi4.loc形成夹角的cos余弦值更大,所以其夹角较小,以qi1.loc、qi2.loc和qi4.loc三点作外接圆,通过公式:a1=qi2.loc.x-qi1.loc.x,b1=qi2.loc.y-qi1.loc.y,c1=(a12+b12)/2,a2=qi4.loc.x-qi1.loc.x,b2=qi4.loc.y-qi1.loc.y,c2=(a22+b22)/2,e=a1*b2-a2*b1,E.x=qi1.loc.x+(c1*b2-c2*b1)/e,E.y=qi1.loc.y+(a1*c2-a2*c1)/e可以计算出圆心E,半径rE则为dis(qi4.loc,E);假设rE≤rh,满足系统的设定,圆心Oi(ai,bi)替换为E,半径ri=rE,此时请求消息q可以加到簇中。步骤2.5、将当前簇的消息个数ni值加1变成4,并计算k’max-i=Max(kmax-i,q.k)=Max(4,4)=4,其中kmax-i为请求消息q加入之前以此法计算出的最大值;此时kmax-i=ni均为4,说明当前簇Clu_queue[i]已经达到匿名参数要求。步骤2.6、匿名服务器创建一条发送消息Q=(ASR,con)发送给LBS服务器,其中ASR是以点Oi为圆心,ri+1000米为半径的匿名域,con是请求查询ASR范围内的酒吧信息。步骤三、匿名服务器与LBS服务器通信LBS服务器根据请求消息Q将查询结果W返还给匿名服务器。步骤四、匿名服务器过滤后返还真实结果给用户匿名服务器接收到LBS服务器返还的查询结果W后,根据W对当前簇中请求消息的位置qi1.loc、qi2.loc、qi3.loc、q.loc进行遍历查询,滤出它们各自需要的真实结果返还给各个用户,并且清空当前簇的所有消息。以上所述仅为本发明的一个具体实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。