Security 哈希SSN和其他有限域信息
我目前正在开发一个应用程序,我们可以从中获得私人健康信息。最大的担忧之一是SSN。目前,我们没有将SSN用于任何用途,但将来我们希望能够使用它在多个设施中唯一地识别患者。我能看到的唯一可靠的方法是通过SSN。但是,我们(除了我们的客户之外)确实不想存储SSN 所以很自然,我想把它散列,因为我们只是用它来识别。问题在于,如果攻击者知道问题域(SSN),那么他们可以将注意力集中在该域上。因此,计算10亿个SSN比计算几乎无限数量的密码要容易得多。我知道我应该使用站点salt和每位患者salt,但我还能做些什么来防止攻击者泄露SSN?我计划使用BCrypt而不是SHA,因为Ruby有一个很好的库,它可以自动处理可伸缩的复杂性和saltSecurity 哈希SSN和其他有限域信息,security,encryption,cryptography,hash,privileges,Security,Encryption,Cryptography,Hash,Privileges,我目前正在开发一个应用程序,我们可以从中获得私人健康信息。最大的担忧之一是SSN。目前,我们没有将SSN用于任何用途,但将来我们希望能够使用它在多个设施中唯一地识别患者。我能看到的唯一可靠的方法是通过SSN。但是,我们(除了我们的客户之外)确实不想存储SSN 所以很自然,我想把它散列,因为我们只是用它来识别。问题在于,如果攻击者知道问题域(SSN),那么他们可以将注意力集中在该域上。因此,计算10亿个SSN比计算几乎无限数量的密码要容易得多。我知道我应该使用站点salt和每位患者salt,但我还
它不会被用作密码。从本质上讲,我们从许多机构获得信息,每个机构描述一名患者。唯一接近患者全局唯一标识符的是SSN编号。我们将使用散列来识别多个设施中的同一患者。生成社会安全号码的算法是在现代黑客概念出现之前创建的,因此它们是。使用SSN进行身份验证是一个非常糟糕的主意,它实际上与您使用的加密原语或salt值有多大无关。最终,你试图保护的“秘密”没有多少熵
如果您永远不需要知道纯文本,那么您应该使用SHA-256。SHA-256是一个用于密码的非常好的函数。首先,对于存储SSN的散列,我们表示热烈的掌声和赞扬 似乎您将SSN保留为一种“备份用户名”。在这种情况下,您需要用户名之外的另一种身份验证形式—密码、驾照号码、护照号码、居住证明等 此外,如果您担心攻击者会预测1984年出生于亚利桑那州的患者的前10000个SSN,并尝试每个SSN,那么您可以在应用程序中加入一个成倍增加的速率限制。*以进行额外防御,内置一个通知系统,当出现异常多的登录尝试失败时,会向系统管理员发出警报** *指数递增速率限制器示例: 在每个失败的请求之后,将下一个请求延迟(1.1^N)秒,其中N是来自该IP的失败请求数。在DB表中跟踪IP和失败的登录尝试;不应该根据应用程序的受众(你为谷歌工作吗?)增加太多负载
**如果攻击者可以访问多个IP,该通知将提醒系统管理员,系统管理员可以根据自己的判断判断您是否有愚蠢的用户涌入,或者这是一次恶意尝试。如果您真的想以安全的方式散列一个社会保险号码,请执行以下操作:
- Pro:由于以下原因,SSN的安全哈希 大量哈希冲突
- 赞成:你的散列很短,很容易存储
- 缺点:散列冲突
- 缺点:你不能把它用于一个独特的目的 由于Con#1而导致的标识符
- 赞成者:那很好,因为你真的 确实不需要将SSN用作 除非你是社会的一员 安全管理