首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据匿名化技术

数据匿名化技术
EN

Stack Overflow用户
提问于 2014-02-04 19:23:31
回答 2查看 4.6K关注 0票数 1

我正在寻找一种在我的数据库中匿名化数据的好方法,同时保留汇总/汇总统计信息的能力。

举个例子,假设我想通过每小时的IP地址来跟踪点击,但实际上我不想存储IP地址。

我的第一个想法是只存储IP的散列(例如SHA-256)。但是,我不确定这是否提供了足够的安全性。如果攻击者获得了我们的数据库,并决心扭转我们的匿名,他们可以生成一个彩虹表的IP's,并获得真正的IP信息相当容易。

我的下一个想法是在散列之前向IP添加一个静态前缀(例如,192.168.1.10变成MY_SECRET_STRING-192.168.1.10)。当然,如果攻击者找到了静态前缀,那么它基本上是无用的。

我一直在为这个问题寻找合理的解决方案,到目前为止,我还没有发现任何我真正喜欢的东西。有什么众所周知的方法来匿名这样的数据吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-04 21:34:53

如果有人可以访问您的salt和数据库,我会说几乎不可能(如果不是不可能的话)阻止他们创建某种碰撞表并“破解”您的散列。你唯一的选择就是让他们的工作变得艰难/昂贵。

不过,使用静态盐是个坏主意,因为salt的全部目的是防止攻击者为所有记录生成彩虹表。唯一性使salt成为一个好的,这是因为salt的目的是使每个散列唯一,而不管原始内容是否与另一个记录相同(因此攻击者有义务蛮力地强迫每一行计算其内容)。还有一点值得注意的是,盐不需要保密,所以你可以把你的盐储存在一个额外的栏里。

如果你对这个话题有任何疑问的话,就有关于盐分和散列的这篇好文章

所描述的方法的问题是,最终,就像攻击者一样,您将无法分辨哪些行是相同的IP。

如果您真的需要实现这个,那么我可以看到的一个潜在解决方案,就是有一个存储is +单击计数的表,然后每1小时就有一个进程来匿名化数据,只需用一个很好的随机值替换最后一个小时的所有is/hash。这最终意味着您只能在不知道实际IP的情况下对每小时的点击进行分组,但是,请注意两件事:

  1. 虽然攻击者永远无法找到过去的数据,但您将拥有1小时的数据,这些数据在任何给定的时间内都不会匿名。这意味着攻击者可以“监视”您,并随着时间的推移存储这些信息,这可能会成为一个比“我们刚刚泄露了1小时的数据”更大的问题。
  2. 你不可能在每小时内区分出同一个IP。例如:如果IP 127.0.0.1从17:00到18:00进行了3次单击,而相同的IP从18:00至19:00进行了6次单击,则无法判断127.0.0.1从17:00至19:00进行了9次单击。

另外,为了使每小时不匿名的IP更难破解,您可以使用一个函数,获取一个IP并生成唯一的盐,然后将该IP的唯一盐缓存到下一个小时,这意味着每个IP每小时都有自己的唯一盐。这样,攻击者就必须每小时为每一行计算一个新的彩虹表,您仍然可以知道要增加哪些IP行来创建。

票数 2
EN

Stack Overflow用户

发布于 2014-02-04 19:51:50

为什么,是的,有。最有名的叫“盐渍”。基本上,与其向所有纯文本添加静态字符串,不如向每个文本添加一个唯一的字符串。该字符串是随机生成或算法生成的,并单独存储。它不会使单个哈希更难破解,但它可以防止使用表破解多个散列。请参阅维基百科关于盐的文章(冷冻术)。

话虽如此,我认为IP的单向散列就足够了.攻击者必须破解每个IP地址。无论您使用何种方法,一旦IP被破解,该IP的所有记录都将被公开。但是破解一个IP对其他任何一个都没有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21561516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档