我询问了对社会保险号的哈希进行预先攻击的成本。 出色的答案 我得到的是,社会保险号的类型只有366,000,000哈希,这将使进行预先攻击。

我现在的问题是,是否有可能完全避免发生前攻击。我的情况是,几个客户需要将社会安全号码存储在中央服务器上。客户必须在客户之间保持一致。客户可以与在线Web服务进行通信。

有帮助吗?

解决方案

您的问题类似于使用密码时必须执行的操作。密码适合人的大脑,因此,很难猜测密码。

使用低渗透秘密时,有两种互补的方法可以减轻风险:

  • 使用迭代/重复的散列,使攻击者的每个“猜测”更加昂贵。
  • 使用盐来防止成本分担。攻击者应为每个攻击密码/SSN支付完整的字典搜索攻击。

使哈希更昂贵的一种方法是哈希串联 n 数据的副本,带有 n 尽可能大(取决于客户的计算能力,最终取决于用户的耐心)。例如,对于(虚拟)SSN“ 123456789”,请使用 H(123456789123456789123456789 ... 123456789). 。你会数的 n 在这里数百万;在基本PC上,SHA-256可以轻松地处理每秒一百兆字节。

一种 是沿数据使用的公共数据(SSN),并且每个用户都不同。盐不需要秘密,但不应重复使用(或至少不经常)。由于SSN倾向于永久(个人一生都有独特的SSN),因此您可以将用户名用作盐(这与密码形成对比,用户可以更改他的密码,并且应该为每一个使用新的盐新密码)。因此,如果用户鲍勃·史密斯(Bob Smith)拥有SSN 123456789,则最终将使用: H(“鲍勃·史密斯123456789鲍勃·史密斯123456789鲍勃·史密斯123456789 ...史密斯123456789”) 有足够的重复,使过程足够缓慢。

假设您可以让用户在不太新的计算机上等待一秒钟(很难让用户等待更多),则可以预料,即使是确定的攻击者也会难以尝试超过几百个SSN每秒。破解单个SSN的成本将在数周内计算,并且由于将用户名用作盐的使用,攻击者将没有捷径(例如,盐盐击败预先计算的表格,包括大量大肆宣传的“彩虹桌”) 。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top