lmc*_*iro 7 passwords algorithm hash sha1
我正在Troy Hunt的博客(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算法的人能解释一下吗?
Mat*_*ans 13
好吧,由于密码最初来自数据泄露,我最好的猜测是,其中一个被破坏的系统中的密码表被排序或聚集(未加密的 - 那些人们被他们的密码窃取的人)SHA1哈希密码.当系统遭到攻击时,攻击者开始使用"00000"哈希,并且没有完全通过......
或许Troy使用的列表包括SHA1彩虹表的第一部分(https://en.wikipedia.org/wiki/Rainbow_table)......
或类似的东西.基本思想是密码的SHA1哈希是密码选择过程的一部分.
在获取或汇编结果以供发布时,这可能是巧合,也可能是(不太可能).
并不是说它看起来像一个重要的异常值.所描述的传播(381分钟,平均478,最大值584)似乎是样本大小的均匀分布.整个语料库的图形可能看起来很随机.
与任何合理构造的散列算法一样,SHA1结果中的字符频率应随机分布.(如果SHA1有某种偏见,这将是数学和密码学/密码学界的重大新闻!)
小智 2
有人需要根据 sha1 算法检查我的猜测(特洛伊可能已经揭穿了它,因为根据他的博客回答,他“在[纯文本]密码上达到了峰值),但由于密码只是字母/数字和有限的符号,如在 ASCII 中描述的创建散列将始终从第一位零开始工作(ascii 是 0-255,但我相信使用的字母数字和符号在 32-98 范围内,因此每 8 位的第一位始终为零),而它是散列函数来掩盖这一点,我怀疑可预测的位定位并不像人们预期的那么容易混淆。虽然它与 4 相关,但 0 是位形式的 00000000,4 是 00000100,所以两者都有前五位0,
另请注意,两个最不频繁的哈希头都以 E 开头,二进制形式为 11111110,因此它们在结构上几乎完全相反(1 与 0)和频率(低与高),这意味着零位的存在可能是一方面算法的直接影响(值得怀疑)或算法的函数对按照惯例倾斜的有限子集的影响,换句话说,字母和数字仅占据 ASCII 描述的最有可能的全范围的 1/3 - 1/4
当然,我们可以在这个车队中戴上“锡箔帽”,但我敢打赌巧合和 ASCII 比草丘上的那个人更应该受到指责