Encryption 当用作标识符时,如何散列社会保险号码

Encryption 当用作标识符时,如何散列社会保险号码,encryption,hash,sha256,sha,Encryption,Hash,Sha256,Sha,我有一项服务,让用户在网上为他们的大家庭存储信息(如消息、视频等),以便在他们去世时共享。当我路过告诉我侄子我爱他时,把这段视频发给他 我有一个JSON结构的数据库,它存储了一个用户的社会安全号码,作为其个人资料的标识符 $salted_hashed_ssn: { //important information for extended family such as vidoes and email addresses } 当用户死亡时,他们最亲密的家庭成员会访问我的网站,输入

我有一项服务,让用户在网上为他们的大家庭存储信息(如消息、视频等),以便在他们去世时共享。当我路过告诉我侄子我爱他时,把这段视频发给他

我有一个JSON结构的数据库,它存储了一个用户的社会安全号码,作为其个人资料的标识符

 $salted_hashed_ssn: {
    //important information for extended family such as vidoes and email addresses
   }
当用户死亡时,他们最亲密的家庭成员会访问我的网站,输入死者的社会保险号码。然后我对这些数据进行散列,看看是否在我的数据库中进行了匹配。如果匹配,我们将运行函数来共享扩展族的重要信息

为了做好最坏的准备,我希望尽可能安全地存储社会保险号码。因为我只需要使用社会保险号码作为标识符,所以我不必存储原始/纯文本ssn值。因此,我可以对SSN进行散列,但我需要对它们进行盐分以防止查找表。我的问题是,当用户输入已故用户的社会保险号码时,我无法查看使用了哪个salt密钥

为了使其随机并防止查找表,您建议我如何使用我的社会保险号码?我应该每次只取x个字符吗?Ie-总是抓取社保号码的前4个字符,将它们散列到完整的SSN中,然后重新散列

让salted\u hashed\u ssn=SHA256(ssn的前4个字符)+SHA256(ssn)


您建议如何设置salt和hash?

您可以像对待密码一样对待SSN。记住,salt不一定是秘密的,它只需要对每个条目进行不同的。所以只要把盐放在土豆条旁边就可以了,这是非常安全的


但是,我不建议在这里使用SHA256。改用
bcrypt
。它为你处理盐,这意味着你无论如何都不需要担心上面的建议。它也更能抵抗野蛮的强迫。SHA家族并不是为你使用它的方式而设计的。

在这种情况下,我认为盐买不到任何东西。不过迭代计数会有所帮助。谢谢Luke。我的问题是,我不能将盐存储在用户下,因为在该用户死亡后,他的家人使用我的网站添加SSN,我不知道输入的SSN适用于哪个用户。我唯一拥有的值是SSN,以及一个盐渍SSN列表,我看不出当前SSN使用了哪种盐渍。不过,谢谢分享bcrypt。当我“解密”时,我是否必须存储并重复使用相同的盐?或者bcrypt会自动申请并使用盐吗?啊,我误解了你最初问题的一部分。您最好使用SHA256和James建议的迭代计数。看看PBKDF2。有足够高的迭代次数,计算大约需要100-200毫秒,以避免有人在数据库泄漏时粗暴地强迫数据库。谢谢Luke。我真的很感谢你的帮助。我还需要PBKDF2的盐吗?我不需要在两个SSN上使用相同的盐来获得相同的最终结果吗?是的,对PBKDF2使用静态盐是必要的。