Joh*_*ohn 2 security passwords
谷歌搜索显示密码破解者可以快速尝试数百万种组合并轻松破解许多密码。
我的研究没有表明他们是否可以在现实世界的攻击中如此迅速地进行如此多的尝试。这些密码破解者实际上如何与服务器交互?他们是否以自动方式填写表格?当我提交密码 IRL 时,需要几秒钟才能得到响应。这将使密码破解所需的时间倍增!这应该为这些密码破解程序提供很多保护!
密码破解者是否在许多机器之间分发密码尝试,以便他们可以同时尝试?对于网站服务器识别为自动攻击,这不是微不足道的吗?是否有一些更快的方法允许破解者进行多次尝试(以及为什么服务器会允许它)?
破解密码的速度因哈希类型、硬件功能、使用的软件和哈希数量而异。随着时间的推移,进攻方和防守方之间的军备竞赛也有起有落,所以你的问题的答案只适用于它所提出的艰难时期。因此,即使已经接受了另一个答案,即使该问题可能是重复的,也值得偶尔重新明确回答。
首先,听起来我们需要澄清在线攻击和离线攻击之间的区别。
如果有人编写软件来自动执行在线攻击过程——针对活动的 Web 界面尝试用户名和密码列表——他们(希望)很快就会遇到旨在阻止这种情况的机制(对于给定的用户名或来自特定时间窗口中的给定 IP 地址等)。
相比之下,大多数密码破解软件都是针对离线攻击的——攻击者获得了存储在后端的哈希密码,并可以将它们移动到自己的平台进行批量攻击。
因此,破解密码的讨论通常围绕离线攻击展开,因为重要的威胁模型是威胁行为者是否窃取了您的哈希值并可以使用他们选择的平台对其进行攻击。
这里的离线破解速度完全取决于多种因素:
密码的存储情况(散列有多“慢”);
攻击者可用的硬件(通常,更多的 GPU = 更好);
对于“加盐”的存储良好的散列,有多少散列被攻击(更少的唯一盐=更快的攻击,因此攻击单个散列比攻击一百万个加盐散列要快得多,等等)
所以给你的问题加上一些实数:
用于比较密码破解性能的最常见基准之一是NTLM(Windows 系统用于存储本地密码的哈希)。它对基准测试很有用,因为它非常常见,在许多攻击模型中都具有很高的兴趣,而且也是一个非常“快速”(更容易破解)的哈希。最近(2018 年 2 月),hashcat 展示了在单个NVIDIA 2080Ti 卡上以每秒1000 亿个哈希的速度破解 NTLM 哈希的能力(披露:我是 Hashcat 团队的成员)。以这样的速度,人们使用的绝大多数密码记住策略很可能被攻击者使用正确的工具和专业知识破解。只有最强的密码(随机或基于随机密码短语 - 并且具有足够的长度/熵)对攻击者来说是遥不可及的。
相比之下,最慢的散列之一(最适合防御者)是bcrypt。Bcrypt 有一个“成本”因素,每次迭代都会使攻击者的成本加倍。建议使用“成本 12”左右的 Bcrypt 哈希,但即使是相对“快速”的 bcrypt 成本(成本 5),在同一个 2080Ti GPU 上,也只能以每秒大约28,000 个哈希的速度被破解。在这个速度下,只有最弱的密码才能被快速破解,中等强度的密码具有“数字强度”并且更难批量破解(但如果针对单个人的哈希值仍然可以破解),以及任何合理强度的密码攻击者通常无法触及。
同样,这些是时间点的答案,必须适应您的特定威胁模型。
另外,请记住密码散列泄漏是永远的。防御者现在应该以一种在未来数年都不会被破解的方式存储密码,包括对未来硬件功能的估计、摩尔定律等。