我正在特洛伊亨特的博客(https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/)上阅读一篇文章,内容是一个名为“Pwned Passwords”的功能,用于检查您的密码是否存在于泄密密码超过10亿的数据库中。
要在不传递密码的情况下进行此检查,客户端代码将其哈希并仅传递此哈希的前五个字符,后端将返回以您传递的前缀开头的密码的所有sha1哈希值。然后,要检查密码的哈希值是否在数据库中,请对客户端代码进行比较。
他提供了一些关于这些散列密码数据的信息......
- 从00000到FFFFF的每个哈希前缀都填充了数据(16 ^ 5种组合)
- 返回的平均哈希值为478
- 最小的是381(哈希前缀“E0812”和“E613D”)
- 最大的是584(哈希前缀“00000”和“4A4E8”)
醇>
在评论中,人们想知道这个“00000”的存在是巧合还是数学......
有人了解SHA1算法可以向我们解释吗?
答案 0 :(得分:12)
好吧,由于密码最初来自数据泄露,我最好的猜测是,其中一个违规系统中的密码表是由(未加密的 - 那些人们将其密码被盗的人)排序或聚集的密码的SHA1哈希值。当系统被破坏时,攻击者开始使用“00000”哈希,并且没有完全通过......
或许特洛伊使用的列表包括SHA1彩虹表的第一部分(https://en.wikipedia.org/wiki/Rainbow_table)......
或类似的东西。基本思想是密码的SHA1哈希是密码选择过程的一部分。
答案 1 :(得分:8)
在获取或汇编结果以供发布时,这可能是巧合,也可能是(不太可能)伪影/错误。
不是它看起来像一个重要的异常值。所描述的传播(381分钟,平均478,最大值584)似乎是样本大小的均匀分布。整个语料库的图形可能看起来很随机。
与任何合理构造的散列算法一样,SHA1结果中的字符频率应随机分布。 (如果SHA1有某种偏见,这将是数学和密码学/密码学界的重大新闻!)
答案 2 :(得分:1)
有人需要根据sha1算法检查我的猜想(并且troy可能已经对它进行了揭穿,因为按照他的博客回答,他“在[纯文本]密码上达到了峰值),但是由于密码只是字母/数字和ASCII中描述的有限符号创建哈希将始终以零的第一位开始工作(ascii为0-255,但所使用的字母数字和符号在32-98范围内,因此每8位的第一位始终为零)虽然这是哈希函数的功能,但我怀疑可预测的位定位并不像人们期望的那样难混淆。虽然它与4关联,但0是位形式的00000000,而4是00000100,所以两者都首先五位为0,
还请注意,两个最不常用的哈希标头均以E开头,二进制形式为11111110,因此它们在结构(1与0)和频率(低与高)方面几乎完全相反,这意味着可能存在零位完全是算法的(可疑的)副作用,或者是算法的功能对约定偏斜的有限子集的副作用,也就是说,字母和数字仅占ASCII所描绘的整个范围的1/3-1/4。最可能
当然,我们可以使用这个工具来“戴上锡箔纸帽子”,但我敢打赌,巧合和ASCII比那个人更多地责怪了草皮的丘陵