2

我询问了对社会安全号码的哈希进行原像攻击的成本。我得到的最佳答案是,社会安全号码的类型只有 366,000,000 个哈希值,这很容易进行原像攻击。

我现在的问题是是否有可能完全避免原像攻击。我的场景是多个客户需要将社会安全号码存储在中央服务器上。散列必须在客户端之间保持一致。客户端可以与在线网络服务进行通信。

4

1 回答 1

1

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

使用低熵密钥时,有两种互补的方法可以降低风险:

  • 使用迭代/重复散列使攻击者的每个“猜测”成本更高。
  • 使用盐来防止成本分摊。攻击者应对每一个被攻击的密码/SSN 支付全字典搜索攻击。

使散列变得更昂贵的一种方法是对n个数据副本的连接进行散列,其中n尽可能大(取决于客户端的计算能力,最终取决于用户的耐心)。例如,对于(虚拟)SSN "123456789",使用H(123456789123456789123456789...123456789)。你会在这里数以百万计的n;在一台基本的 PC 上,SHA-256 每秒可以轻松处理一百兆字节。

是一段公共数据,用于散列数据(SSN),每个用户都不同。盐不必保密,但不应重复使用(或至少不经常重复使用)。由于 SSN 往往是永久性的(一个人一生都有一个唯一的 SSN),那么您可以将用户名用作 salt(这与密码形成对比,用户可以更改他的密码,并且应该为每个人使用一个新的 salt新密码)。因此,如果用户 Bob Smith 的 SSN 为 123456789,您最终将使用:H("Bob Smith 123456789 Bob Smith 123456789 Bob Smith 123456789... Smith 123456789")重复次数足以使过程足够慢。

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

于 2010-11-29T16:08:48.357 回答