为什么哈希(SHA1)密码最常见的前缀是"00000"?



我正在阅读Troy Hunt博客(https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/(称为" PWNED密码",该密码是否在数据库中,密码超过10亿个密码。

要执行此检查而不传递密码,客户端代码哈希并仅通过此哈希的前五个字符,后端返回密码的所有SHA1哈希,从您传递的前缀开始。然后,要检查密码的哈希是否在数据库中,请在客户端代码上进行比较。

他提供了一些有关这些哈希密码数据的信息...

  1. 从00000到FFFFF的每个哈希前缀都有数据(16^5组合(
  2. 返回的平均哈希数为478
  3. 最小的是381(哈希前缀" e0812"one_answers" e613d"(
  4. 最大的是584(哈希前缀" 00000" 和" 4A4E8"(

在评论中,人们想知道这个" 00000"的存在是巧合还是数学...

一个了解SHA1算法的人可以向我们解释吗?

好吧,由于密码最初来自数据泄露,我最好的猜测是,其中一个漏洞系统中的密码表被分类或被群集(无盐 - - 在被盗的密码的人们中(sha1 hash of密码。当系统被破坏时,攻击者以" 00000"开始。哈希,只是没有通过...

一直到达

或Troy使用的列表包括SHA1彩虹表的第一部分(https://en.wikipedia.org/wiki/rainbow_table(...

或类似的东西。基本思想是密码的sha1哈希是密码选择过程的一部分。

它是巧合,或者(较小的(伪像/错误获取或组装结果以进行发布。

并不是说它看起来像一个很大的离群值。所描述的传播(381分钟,平均478,最大584(似乎是样本量的均匀分布。整个语料库的图可能看起来很随机。

像任何合理构建的哈希算法一样,SHA1结果中的字符频率应随机分布。(如果SHA1有某种偏见,这将是数学和加密/密码学社区的主要新闻!(

有人需要检查我对SHA1算法的猜测(Troy可能已经揭穿了它,因为根据他的博客答案,他"在[纯文本]密码上达到了顶峰(由于密码仅是alpha/numeric和有限的符号,如ASCII创建HASH所示,始终将开始使用零的第一位(ASCII为0-255,但我相信使用的字母编号和符号在32-98范围内,所以首先每8位的位总是为零(,虽然它是一个掩饰的功能,但我怀疑可预测的位定位并不像人们期望的那样容易。和4是00000100,因此两个位均为0,

还要注意,两个最不常见的哈希标头均以E开头,即二进制为11111110,因此它们在构造(1 vs 0(和频率(低与高(中几乎完全相反,这可能意味着零位的存在可能在限制偏斜的子集上,算法(可疑(的算法(可疑(或算法的函数是公约偏斜的副作用,换句话说,字母和数字仅占据1/3-1/3 -1/1/4,占ASCII所描绘的完整范围的1/4是最可能的

当然,我们可以用这次练习来"锡箔帽",但我只是敢打赌,巧合和ascii比那个男人在草地上更责备

最新更新