Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 储存混乱的社会安全号码_Security_Encryption_Encoding_Scramble - Fatal编程技术网

Security 储存混乱的社会安全号码

Security 储存混乱的社会安全号码,security,encryption,encoding,scramble,Security,Encryption,Encoding,Scramble,我需要在唯一的混乱状态下储存一个社会保险号码 原因是:我需要社会号码,但我不想把它们打开存储,以防数据库被破坏 我想把社会保险号转换成字母数字串,我更喜欢这是一个单向过程。(不可逆) 然后,当我搜索现有的SSN号码时,我会再次使用相同的算法进行用户输入,对SSN进行置乱,并使用字母数字字符串搜索数据库 在php中,我可以做类似的事情 function maskSSN($SSN) { $salt = sha1(md5($SSN)); $SCRAM = md5($SSN . $sal

我需要在唯一的混乱状态下储存一个社会保险号码

原因是:我需要社会号码,但我不想把它们打开存储,以防数据库被破坏

我想把社会保险号转换成字母数字串,我更喜欢这是一个单向过程。(不可逆)

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

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

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

但我不认为这会产生像SSN一样熵很小的唯一值,我不建议将它们不加密或散列存储。如果攻击者窃取了您的数据库,那么暴力使用SSN是非常可行的


相反,您应该使用AES-256或更好的加密SSN。查看此SO问题,了解有关加密密钥正确存储的更多信息:

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

为了防止散列被强制使用,请使用HMAC-Sha1或HMAC-Sha256以及密钥。下面是一个相关的答案,涉及电话号码和匿名数据

如果不进行解密,AES-256结果将无法在以后使用,因为正确且安全地使用AES-256会为同一输入生成不同的结果。但是,它可以合理地用于一个关系表中,在该关系表中,您的ssn是根据主键加密和存储的,而其他表则引用该键


后一个选项也允许您随着时间的推移非常简单地旋转键。

任何哈希函数都有冲突。SSN编号的格式是什么?每个SSN编号都是唯一的,并且有9个数字。当您知道哈希函数时,很容易以任何形式强制执行。在9位SSN上不太可能发生碰撞。您可以强制执行所有SSN编号并检查结果是否为唯一,但如果数据库被盗怎么办?那么HMAC对暴力强迫是无用的。请注意,HMAC的设计只是为了保持完整性和身份验证,而不是保密性。使用HMAC,数据库被盗,除非您也获得了密钥,否则您无法使用暴力,就像使用AES一样,如果您也拥有密钥,那么您只拥有数据。但是,我认为这是一个无关紧要的区别,因为强制SSN比aes解密稍微简单一些。此外,Hmac被设计为一个,所以它实际上被设计为专门不泄露有关明文的信息。此外,OP主要关注搜索,而AES(impl.security)在这方面的效率要低很多。