【发布时间】:2012-06-10 18:40:18
【问题描述】:
在某些情况下,不允许组织使用或存储有用的密钥,例如 SSN 号码、电话号码等。
但是,这些唯一键对于匹配数据非常有用。因此,理论上,如果数据提供者能够为您提供 SSN 的散列值,并且您要存储该散列并使用它进行匹配,那么您将永远不必使用或存储 SSN。
对于像 SSN 这样的东西,什么是合适的散列函数?
【问题讨论】:
标签: .net security hash numbers
在某些情况下,不允许组织使用或存储有用的密钥,例如 SSN 号码、电话号码等。
但是,这些唯一键对于匹配数据非常有用。因此,理论上,如果数据提供者能够为您提供 SSN 的散列值,并且您要存储该散列并使用它进行匹配,那么您将永远不必使用或存储 SSN。
对于像 SSN 这样的东西,什么是合适的散列函数?
【问题讨论】:
标签: .net security hash numbers
您需要像对待密码一样对待 SSN。使用强而慢的散列算法(例如 bcrypt 或 PBKDF2)对它们进行散列,并使用唯一的每条记录前缀和后缀盐。
散列 SSN 的缺点是它们是可预测的,并且熵非常少,这使得明文暴力破解非常容易。如果您负担得起,我建议您为此类事情投资硬件保护(即HSM)。事实上,你应该完全avoid identifying people by their SSN。
【讨论】:
因此,理论上,如果数据提供者能够为您提供 SSN 的哈希值,并且您要存储该哈希值并使用它进行匹配,那么您将永远不必使用或存储 SSN。
这是错误的;设计的哈希不是唯一的,不能用于唯一标识任何东西。如果您必须唯一标识某物,并且不允许使用其他人的标识符,则您必须提出自己的标识符。这就是为什么诸如加油卡、电影租赁卡等之类的东西。带有他们自己的唯一成员身份标识符。
【讨论】: