用于隐藏日志文件中字符串的人为可读的短单向哈希?

时间:2015-06-25 19:29:12

标签: string hash

我需要对数据库日志文件进行大规模匿名化。

部分内容涉及模糊各种字段名称(字符串)以及IP地址。

1。字段名称

例如,我们可能有字符串BusinessLogic.Categorisation.ExternalDeals。在匿名版本中,我们希望它类似于Jerrycan.Doorway.Fodmap(或者是胡言乱语,但仍然“可发音”)

目的只是隐藏原始字符串 - 但是,我们仍然希望能够在不同的日志文件中匹配这些字符串的出现。

哈希的要求是:

  • 可重复 - 也就是说,每次传递的相同输入总是会产生相同的输出。我们需要能够匹配不同日志文件之间的字段(我们试图阻止的是有人派生原始字符串)。
  • 单向 - 无法反转输出以产生输入。
  • 碰撞的可能性很小 - 如果两个字段映射到同一输出,它将搞乱我们的分析。
  • 人类可读(或可发音) - 用手扫描日志文件的人应该能够制作字段,并在视觉上匹配它们。或者如果需要,请通过电话阅读。
  • 短字符串 - 我确实理解这与可用熵之间存在权衡,但理想情况下,像HumanReadable这样的字符串应该映射到类似LizzyNasbeth的字符串。

我环顾四周,发现https://github.com/zacharyvoase/humanhash(输出哈希比我想要的要长一些)和https://tools.ietf.org/html/rfc1751(不是真正的“代词” - 理想情况下,我们想要一些东西看起来像是一个英语人类的单词,但实际上并不是 - 而且,再一次,有点长。)

这个问题有哪些算法或方法?或者您可以推荐的任何库或实现?

2。 IP地址

对于IP地址,我们需要一种方法来屏蔽它们(即外部观察者无法获得原始IP地址),但仍然可以在不同的日志文件中重复(即相同的输入始终产生相同的输出) )。

理想情况下,输出仍然“看起来”像IP地址。例如,也许192.168.1.55将映射到33.41.22.44(或者我们也可以使用字母代码,如果这更容易)。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

我正和一位同事讨论,他提出了一种方法。

  1. 获取字段名称 - 并将其传递给标准的单向哈希(例如MD5)。
  2. 使用生成的摘要作为索引,以映射到英语单词词典(例如,使用mod)。
  3. 这解决了它总是可重复的问题 - 每次哈希相同的词总是映射到相同的英语单词(假设你的词典列表不会改变)。

    如果个人公司担心字典攻击(即字段名称"名字和#34;总是映射说" Paris"),那么我们也可以使用公司特定的密钥文件来盐哈希。这意味着对于来自它们的匿名日志文件是可重复的(即"名字和#34;可能总是映射到"图卢兹"对于他们),但它与其他公司不同使用其他密钥文件。

    我仍然非常希望看到其他人可以提出什么建议,或者他们是否对上述内容有任何想法。

答案 1 :(得分:1)

您可以使用codenamize

$ codenamize BusinessLogic -j "" -c
AbsorbedUpper

您可以在命令行或Python库中使用它。

(免责声明,我写了)。