在保留唯一ID的同时安全地去识别

时间:2011-04-03 17:55:57

标签: database security hash data-warehouse

我正在创建一个客户数据的数据仓库。这涉及阅读包含各种信息的CSV:

cell      email         gender  language  transaction
5551212   foo@bar.com     M        E         005

我通过使用单元格+电子邮件来识别客户(我知道这不是很好,单独的问题),我有兴趣去除这些数据,以便我删除单元格和电子邮件,同时保留匹配非与特定客户的未来记录的可识别信息。

我考虑过的一种方法是使用像SHA2这样的安全散列算法散列单元格+电子邮件。所以存储的数据将是:

uid         gender  language  transaction
aW51SGvswX...     M        E         005

当我收到其他记录时,我会使用单元格+电子邮件。如果它是新的,我创造新的客户。如果存在哈希,则在客户上增加事务计数器。

如果攻击者窃取了数据库,他们需要散列电子邮件+单元格的各种组合以恢复交易历史记录。

我已阅读How to separate a person's identity from his personal data?,当然我意识到如果攻击者可以长时间访问系统,那么在此期间观察到的所有记录都会受到影响。我希望避免的具体方案是一次性盗窃数据库。

我假设keystretching哈希是一个好主意。我不相信它可以使用盐来防止彩虹表,因为我需要预先计算和存储盐,并查看它,我不能没有哈希。

该系统的任何替代方案? 我忽略了什么?

谢谢,

贾斯汀

2 个答案:

答案 0 :(得分:3)

这是代理密钥(例如身份或自动编号列)有用的地方。我没有对现有数据进行散列以将其识别回原始行,而是向源表添加代理键,或者创建代理键到单元格+电子邮件的映射表,并在我的数据中使用代理键仓库。如果数据仓库受到攻击,则攻击者只有一个任意引用值。使用代理键的一个重要原因是对数据仓库的查询性能应明显优于散列值。

顺便说一下,这个解决方案的假设是只有数据仓库受到了损害。假设通过加密或其他方式保护源数据库免受攻击。

答案 1 :(得分:1)

您可以在对其进行哈希处理之前使用对称密钥对单元格+电子邮件进行加密。这将使彩虹表中的成功查找不太可能。但是,如果数据库受到攻击,攻击者很可能也可以访问对称密钥。