有哪些简单有效的模糊点技术?


14

我们正在创建一个网站,该网站将收集用户的位置信息(点)。我们正在探索保护用户位置隐私的技术(例如,用户经常会共享敏感的家庭住址)。我想到的一种选择是在将这些点存储到数据库中之前对其进行混淆或“散列”,从而根本不需要存储这些敏感数据。

我相信我们的基本要求是:

  1. 给定单个混淆点,即使给定与该点关联的所有元数据(即假设整个数据库都已损坏),也无法得出(例如)一公里左右的原始点。

  2. 给定与同一原始点相对应的任意大的混淆点集,仍然不可能导出原始点。(例如,一种简单的技术是在原始点上添加一个随机向量,但是如果您这样做足够多次,则混淆的点将聚集在原始点周围。)

如果可以保留各种统计属性,那很好,尽管我不知道在此阶段哪些属性很重要。例如,我宁愿混淆点以“自然”方式散布,而不是累积到网格中。但是,隐私比这更重要。


您的要求没有提到您希望保持哪种精度,而只关注混淆要求。以下算法可以轻松满足您列出的要求,但是却毫无价值:将每个点映射到0°N,0°东。大概您还想满足一些条件,例如模糊点在实际点的x km以内。
Llaves 2012年

第二个问题:您提到了元数据,并且如果整个数据库都遭到破坏,则能够重建正确的点。如果元数据不允许您标识与同一“真实点”关联的混淆点,那么如果您不能将它们相互关联,那么有人怎么能从重复的随机样本中重建“真实点”?另一方面,如果元数据确实允许您关联这些点,则当要求您再次报告某些已混淆点的位置时,只需返回以前返回的相同的混淆值即可。
拉维斯2012年

您是否需要能够根据散列数据重新创建实际位置,还是仅用于确认某人在他们所说的位置上?如果是后者,则单向哈希,哈希盐+几何的WKT就足够了。如果是前者,则必须在某处具有一些函数来进行哈希函数的逆变换-双向哈希。
MerseyViking

服务是否会将积分与其他用户的数据/其他数据集进行比较?
马修·斯内普

@奴隶,我实际上是:“在一公里左右”。但是我希望混淆级别是算法的参数。关于您的第二条评论,是的,元数据允许点的关联(例如,一个用户可能多次输入相同的点)。在给定相同原始点的情况下产生相同混淆点的算法很好;但是,如果算法不这样做,我将无法恢复原始点(这就是问题的全部原因),以便测试是否应使用相同的混淆点。
Reid 2012年

Answers:


6

看一下:

MP Armstrong,Rushton G,Zimmerman DL。在地理上掩盖健康数据以保护机密性。Stat Med.1999;18:497–525。

引文全文

他们讨论了点数据的不同“地理蒙版”,包括位移,旋转,随机扰动和聚集。尽管他们没有讨论有关如何实现它的特定技术解决方案,但还是有有用的指针指向有关每种方法所能获得/失去的信息的信息。

出于理论上的考虑,请看一下我对类似主题问题的回答


2
很好的参考,这是一个活跃的领域,有很多可用的。我在另一个问题中推荐了概述文章(Mathews&Harel,2011年)。我还相信《国际卫生地理杂志》会不时发表论文(请参阅我的带有geomask标签类库)。虽然我没有遇到任何工具来完成这项工作,但这可能是一项有益的努力。
安迪W

1
@AndyW感谢Andy的指导。确实-随着公共卫生/空间流行病学中使用的高分辨率地理数据的增加,这个问题变得越来越重要。我有一种相同的感觉,即实际的解决方案仍然远远落后于理论上的解决方案-绝对是可以进行一些不错的改进的地方!
radek 2012年

1

您可以尝试使用Perlin噪声将点随机移动,但是这样做的好处是,彼此靠近的点将保持彼此靠近,但是这种相似性会随着距离而降低。如果噪声函数以0为中心,由于Perlin噪声(尤其是2002版)是大致高斯分布的,因此统计分析仍应返回与源相似的数据。


如果我移动同一点的许多副本,可以通过分析移动的点来恢复原始点吗?
Reid 2012年

按照我的想象,您可以将点的坐标用作对噪声函数的查找。因此,两个相同的点将保持一致。您可以使用第三个值,例如,将点的创建日期作为对3D Perlin噪波函数的查找。然后(我不是统计学家),除非知道您选择的随机种子和噪声的大小,否则重建源数据将是不切实际的。即使那样,我也不确定它是否切实可行。
MerseyViking

啊,所以要把它变成一个哈希函数。但是,假设随机种子和规模仍然是秘密可能并不安全;我假设服务器已被完全破坏。
Reid 2012年

!好吧,我喜欢一个挑战:)现在您真的在谈论物理安全。您有一台单独的异地计算机来生成哈希,然后通过安全连接(例如SSL)将其发送。您可以在一个或两个服务器上设置看门狗,这样一来,如果其中一台服务器出现故障,或者您按下红色的大按钮,另一台服务器就会自动关闭。如果您使用的是云实例,那么就没有从其他实例中获取任何东西的实际方法,
除非

因此,您仅应在数据安全上花费尽可能多的数据。有很多,你可以添加到您的安全模型层,但在某些时候,你必须足够的发言权。也许值得将这个问题提交给其他SE网站之一。
MerseyViking

0

这也许比需要的更加复杂和复杂,但是它可能是采取的途径:

创建一个简单的python脚本,该脚本将获取原始输入点,将其缓冲一定可接受的混淆距离,使用缓冲区作为特征约束(例如100)创建n个随机点,然后使用a选择一个点伪随机数生成器用作新的模糊点。也有必要为每个混淆创建一个新的伪随机数。

根据您的方案,可以将其打包在工具箱中,并通过REST端点作为GPService进行访问,因此混淆发生在内存位置,并且只有混淆点才会发布到您的物理数据库中。


1
假定采用ArcGIS实施,但在OP中未提及。仍然是一个有趣的解决方案!
blah238

3
这种自然的解决方案在检查时有一些潜在的缺陷:(1)几个不同的点可能会映射到同一点。(2)如操作说明所示,很容易取消掩盖点。(3)通常,点必须与相关特征保持某种地理关系:例如,房屋位置应靠近街道,而不应位于湖泊或铁路场中。诸如此类的问题使该问题真正变得困难,有趣,并且值得进行GIS分析(否则,可能会在最初将原始坐标输入数据库并对其进行处理时随机抖动原始坐标)。
ub

0

好的,因此我们正在考虑的算法如下:

  1. 将点四舍五入到200米的网格(以补偿地理编码中的变化)。
  2. 使用某种加密哈希算法(例如SHA2)哈希点坐标的文本。
  3. 用散列函数的结果替换点坐标的低位(直到所需的混淆级别1km)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.