传统的密码建议鼓励使用长密码,理由是散列整个密码空间(彩虹表或暴力破解)需要更长的时间添加每个字符。
使用当前/安全的散列算法、bcrypt 或类似算法以及动态盐,“超长密码短语,易于记忆!”是否有可能实现?可以通过蛮力破解,因为“Rand0m”巧合地产生相同的哈希?
我知道这在统计上超出了与同事相同的哈希值。我想知道是否有任何密码散列算法曾被证明可以为不同的熵级别产生相同的散列,因此使一个非常强的密码可能通过较弱的密码被蛮力破解,并且现代算法是否积极地防止这种情况发生。
传统的密码建议鼓励使用长密码,理由是散列整个密码空间(彩虹表或暴力破解)需要更长的时间添加每个字符。
使用当前/安全的散列算法、bcrypt 或类似算法以及动态盐,“超长密码短语,易于记忆!”是否有可能实现?可以通过蛮力破解,因为“Rand0m”巧合地产生相同的哈希?
我知道这在统计上超出了与同事相同的哈希值。我想知道是否有任何密码散列算法曾被证明可以为不同的熵级别产生相同的散列,因此使一个非常强的密码可能通过较弱的密码被蛮力破解,并且现代算法是否积极地防止这种情况发生。
MD5有许多冲突问题,甚至有人能够为 Windows 创建有效的代码签名证书。但即便如此,碰撞也是有意制造的。在检查明文密码转储时,您会发现密码的种类并不多:它们往往使用大量小写拉丁字符,最多 12 个左右(或在可预测的位置包含数字,如1
末尾) . 这并不能很好地随机产生碰撞,因为您的输入集相当小。也就是说,虽然研究人员可能会找到两个映射到相同 md5 哈希的英语短语,但其中任何一个(更不用说两者)被用作密码的可能性非常小。
使用更现代的算法,如 SHA-2、SHA-3、bcrypt 等,我们没有任何已知的会导致产生哈希冲突的好的弱点。此外,摘要大小要大得多(MD5 产生 128 位散列,而 SHA-256 产生,顾名思义,256 位散列),这大大降低了冲突的机会。您可以将其与简单的校验和哈希算法(如CRC )进行比较,该算法通常与 32 位摘要一起使用。具有极低的散列冲突概率是密码散列函数的重要属性之一,它将它与更一般的散列函数类别分开。