【问题标题】:How To Hash Social Security Numbers When Used As Identifiers用作标识符时如何散列社会安全号码
【发布时间】:2018-05-14 07:01:00
【问题描述】:

我有一项服务,让用户可以在线存储他们的大家庭的信息(例如消息、视频等),以便在他们去世时共享。前 - 当我路过告诉他我爱他时,将此视频发送给我的侄子。

我有一个 JSON 结构化数据库,该数据库将用户的社会保险号存储为他们个人资料的标识符。

 $salted_hashed_ssn: {
    //important information for extended family such as vidoes and email addresses
   }

当用户去世时,他们最亲近的家人会访问我的网站并输入死者的社会安全号码。然后我对它们进行哈希处理,看看是否在我的数据库中进行了匹配。如果匹配成功,我们将运行函数为大家庭共享重要信息。

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

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

让 salted_hashed_ssn = SHA256(SSN 的前 4 个字符) + SHA256(SSN) ?

您建议如何设置 salt 和 hash?

【问题讨论】:

    标签: encryption hash sha256 sha


    【解决方案1】:

    您可以像对待密码一样对待您的 SSN。请记住,盐不必是秘密的,它只需要对每个条目不同。因此,只需将盐与哈希一起存储,这是非常安全的。

    不过,我不建议在此处使用 SHA256。请改用bcrypt。它为您处理盐,这意味着您无论如何都不必担心上述建议。它也更能抵抗暴力破解。 SHA 系列不是为您使用它的方式而设计的。

    【讨论】:

    • 在这种情况下,我认为盐对你没有任何好处。不过,迭代计数会有所帮助。
    • 谢谢卢克。我遇到的问题是我无法将盐存储在用户名下,因为在此人去世后,他的家人使用我的网站添加 SSN,我不知道输入的 SSN 适用于哪个用户。我拥有的唯一值是 SSN,以及 salted_hashed SSN 列表,我看不到当前 SSN 使用了哪种盐。但是,感谢分享 bcrypt。当我“解密”时,我是否必须存储和重复使用相同的盐?还是 bcrypt 会自动应用和使用盐?
    • 啊,我误解了你原来问题的一部分。最好使用 SHA256 和 James 建议的迭代计数。看看 PBKDF2。有足够高的迭代计数,计算大约需要 100-200 毫秒,以避免有人暴力破解您的数据库,如果它泄漏。
    • 谢谢卢克。我真的很感激帮助。我还需要含 PBKDF2 的盐吗?我不需要在两个 ssns 上使用相同的盐来获得相同的最终结果吗?
    • 是的,为此需要为 PBKDF2 提供静态盐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2015-11-09
    • 2016-03-19
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多