【问题标题】:Techniques for data anonymization数据匿名化技术
【发布时间】:2014-02-04 19:23:31
【问题描述】:

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

例如,假设我想按 IP 地址每小时跟踪点击次数,但我实际上并不想存储 IP 地址。

我的第一个想法是只存储 IP 的哈希值(例如 SHA-256)。但是,我不确定这是否提供了足够的安全性。如果攻击者掌握了我们的数据库并决心逆转我们的匿名化,他们可以生成 IP 的彩虹表并相当容易地取回真实的 IP 信息。

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

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

【问题讨论】:

  • 我正在重新审视我的答案,发现我当时给出的答案非常不稳定,所以我用更准确/正确的答案更新了它。

标签: algorithm security hash privacy


【解决方案1】:

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

使用静态盐是一个坏主意,因为盐的全部目的是防止攻击者为您的所有记录生成彩虹表。 唯一性是使盐成为好盐的原因,这是因为盐的目的是使每个哈希值都唯一,无论原始内容是否与另一条记录相同(因此攻击者有义务进行暴力破解)强制每一行找出它的内容)。 另外值得注意的是,盐不需要保密,因此您可以将盐存储在额外的列中。

如果您对该主题有任何疑问,请参阅this nice article 关于加盐和散列。

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

一个潜在的解决方案我可以看到如果你真的需要实现这个是有一个表来存储 IP + 点击计数,然后每 1 小时通过简单地将最后一小时的所有 IP/哈希替换为良好的 RANDOM 值来匿名化数据的过程。这最终意味着您只能在不知道实际 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 点执行了 9 次点击:00 到 19:00。

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

【讨论】:

  • 我现在意识到我的要求确实不一致。如果攻击者掌握了算法和数据,那么对于 IPv4 这样的固定集不可逆的确定性哈希就没有任何意义。
  • 对秘密进行可预测的转换与加盐不同。这属于链接文章特别不鼓励的“古怪哈希函数”类别。
  • @augurar 这是一个旧答案,但是,你是绝对正确的,我已经用更准确的东西更新了这个问题。对于改进版本的任何其他反馈,我们将不胜感激。
【解决方案2】:

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

话虽如此,我认为 IP 的单向哈希就足够了。攻击者必须破解每个 IP 地址。无论您使用什么方法,一旦某个 IP 被破解,该 IP 的所有记录都会被暴露。但是破解一个 IP 对其他任何一个都没有帮助。

【讨论】:

  • 我熟悉这个概念,但我不确定它在这种情况下如何应用。您是否建议每条新记录都会获得随机生成的盐?如果是这样,我将如何进行任何类型的聚合?
  • 如果你不使用唯一的盐,那么破解所有 IP 就比破解一个简单。
猜你喜欢
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
相关资源
最近更新 更多