认证与密码

暴力破解攻击

约 4 分钟阅读

什么是暴力破解攻击

暴力破解攻击 (穷举攻击) 是一种逐一尝试密码或加密密钥的所有可能组合来找到正确答案的攻击手法。正如其名 "brute force (蛮力)",这是一种不依赖智能推测而是依靠计算能力的原始但可靠的方法。

理论上,只要有足够的时间和计算资源,任何密码都可以被破解,但所需时间随密码长度和复杂度呈指数级增长。使用现代 GPU,8 位字母数字密码可在数小时内破解,但 12 位以上的随机密码在现实时间内难以破解。

密码长度与破解时间估算

以下是按密码字符集和长度的破解时间估算 (使用最新 GPU 集群的估算值)。

  • 6 位 (仅小写字母):数秒内
  • 8 位 (大小写字母 + 数字):约 1 小时
  • 8 位 (大小写字母 + 数字 + 符号):约 8 小时
  • 10 位 (大小写字母 + 数字 + 符号):约 5 年
  • 12 位 (大小写字母 + 数字 + 符号):约 3.4 万年
  • 16 位 (大小写字母 + 数字 + 符号):实际上无法破解

这些数值是纯穷举的情况。结合字典攻击或规则攻击时,字典中的单词和常见模式 (末尾加数字、首字母大写等) 的破解速度会快几个数量级。使用密码管理器生成的随机字符串是最佳防御。

暴力破解的变体手法

除纯穷举外,还存在提高效率的变体手法。

  • 字典攻击:优先尝试字典中的单词和常用密码。"password"、"123456"、"qwerty" 等常见密码会被瞬间突破
  • 规则攻击:对字典单词应用转换规则 (首字母大写、末尾加数字、l 替换为 1 等)。对 "Password1"、"p@ssw0rd" 等变形模式有效
  • 彩虹表攻击:使用预先计算的哈希表从哈希值反查密码。对使用盐 (随机附加数据) 的哈希无效
  • 反向暴力破解:对大量账户尝试单个密码 (如 "123456")。与凭证填充类似,但使用的是猜测密码而非泄露数据

有效的防御策略

暴力破解攻击的防御需要从用户端和系统端两方面采取对策。

用户端

  • 12 位以上的随机密码:使用密码管理器生成的包含大小写字母、数字和符号的随机字符串
  • 启用双因素认证:即使密码被破解,第二认证因素也能阻止未授权登录
  • 使用密码短语:将 4-5 个随机单词组合的密码短语 (如 "correct horse battery staple") 既容易记忆又能确保足够长度

系统端

  • 账户锁定:登录失败达到一定次数后临时锁定账户。但可能被用于 DoS 攻击,因此逐步延长锁定时间的设计更为理想
  • 速率限制:按 IP 地址或会话限制登录尝试次数
  • CAPTCHA:多次失败后显示 CAPTCHA,抑制自动化工具的尝试
  • 适当的哈希算法:使用 bcrypt、scrypt、Argon2 等故意提高计算成本的哈希函数,降低离线破解速度
  • 引入 WAF:通过 Web 应用防火墙检测和阻止异常登录模式

常见误解

复杂的密码即使很短也是安全的
即使包含符号的 8 位密码,使用最新 GPU 集群也能在数小时内破解。密码强度最重要的因素是长度,建议 12 位以上。长而随机的密码比短而复杂的密码更安全。
暴力破解攻击已经过时,不是现实威胁
GPU 性能的提升使暴力破解的执行速度逐年加快。此外,对泄露的密码哈希进行的离线暴力破解不受速率限制或账户锁定的影响,仍然是严重威胁。
分享

相关术语