存储乱序的社会安全号码

时间:2013-05-09 19:01:24

标签: security encryption encoding scramble

我需要在独特的混乱状态下存储社会安全号码......

原因:我需要社交号码,但我不想将它们保存在打开状态,以防数据库受到损害。

我想将社会安全号码转换为字母数字字符串,我更喜欢这是一个单向过程。(不可逆)

然后,当我搜索现有的SSN号码时,我会再次使用相同的算法进行用户输入,加扰SSN并使用字母数字字符串搜索数据库。

在php中,我可以做类似的事情

function maskSSN($SSN) {
    $salt = sha1(md5($SSN));
    $SCRAM = md5($SSN . $salt);
    return $SCRAM;
}

但我认为这不会产生独特的价值

2 个答案:

答案 0 :(得分:4)

使用与SSN一样少的熵,我不建议将它们存储为未加密或散列。如果攻击者窃取您的数据库,那么强行使用SSN是非常可行的。

相反,您应该使用AES-256或更高版本加密SSN。有关正确存储加密密钥的更多信息,请查看此SO问题:Storing encryption keys -- best practices?

答案 1 :(得分:3)

如果您可以存储完整的哈希值(未截断),则不应使用最安全的哈希值与9位SSN发生任何冲突。

为了防止哈希强暴使用带有密钥的HMAC-Sha1或HMac-Sha256。以下是涉及电话号码和匿名数据https://stackoverflow.com/a/15888989/637783

的相关答案

AES-256结果将无法在以后解密时使用,因为正确且安全地使用的AES-256会为同一输入产生不同的结果。但是,它可以合理地用在一个关系表中,在该关系表中你的ssn被加密并存储在主键上,而其他表正在引用键。

随着时间的推移,后面的选项可以让你非常简单地旋转你的键。