WordPress密码安全和散列

已发表: 2017-11-10

密码是一种与用户或进程绑定的身份验证形式。 它们用于根据计算机系统或资源验证用户或进程的身份。 在当今超连接、物联网设备和移动设备的现代网络中,密码安全是一个比以往任何时候都更加严肃的话题。 密码数据库泄露时有发生,LinkedIn、Tumblr 和雅虎等大公司都受到影响。 MacKeeper Security 的 Bob Diachenko 在今年早些时候写了一篇关于在互联网上自由浮动的巨大 5.6 亿电子邮件/密码列表!

因此,在本文中,我们将讨论与密码和 WordPress 相关的三件事:

  1. 强大的密码生成和管理。
  2. WordPress 如何进行密码散列。
  3. 实现您自己的密码哈希。

弱密码和强密码

密码强度(就暴力破解的复杂性而言)是一个备受争议的话题,随着个人可以随时使用更强大的计算资源,密码强度的概念在过去几十年中已在很大程度上被重新定义。 世界著名的安全专家 Bruce Schneier 写了一篇很棒的文章,讨论密码安全以及如何选择安全密码。

在谈论密码强度时,必须包括上下文和威胁级别:

当攻击者试图猜测您的 WordPress 密码时,与他或她已经危及您的安全并有权访问整个散列密码列表相比,这是不同的,而且要困难得多。

在第一种情况下,攻击者会因为短时间内登录尝试次数过多而迅速被身份验证服务阻止。 通常,攻击者通过不同于暴力破解的其他方式发现密码,例如网络钓鱼、恶意软件等。 但是,如果目标使用日期、姓名/姓氏等相对公开的信息选择了密码,那么攻击者就更容易猜到它。

在第二种情况下,如果攻击者可以访问密码文件,这可能只是时间问题,特别是如果使用的哈希函数是 MD5。 很久以前它就被破坏并被证明是不安全的。 攻击者可以使用现代硬件(如 GPU 板)与预先计算的“彩虹”表相结合,在很短的时间内解密整个密码文件。 此外,在某些极端情况下,所有用户的密码都以“明文”形式存储在数据库中。 在这两种情况下,您的密码“强度”都会失效。

如何生成和存储强密码

最好将密码生成和管理留给您信任的计算机,而不是尝试定期考虑强密码。 你是人类,不可避免地会犯错并选择计算机认为是弱选择的东西。

使用密码管理器为每项服务生成和存储密码是高效且威胁最小的。 虽然将所有密码保存在一个地方的想法可能会令人不安,但这实际上是一个优点:通过知道所有密码都在一个地方,您可以更轻松地保护它们。 不再使用随机的纸片或您可以轻松记住但很容易猜到的弱密码的排列。 此外,密码管理器可以帮助您轻松生成强密码。

最受欢迎(也是最昂贵)的选择是 1Password,但您可以尝试使用操作系统中提供的那个(例如 Apple 的 iCloud KeyChain)或使用开源多平台解决方案,例如 KeePass。

使用 Pressidium 托管您的网站

60 天退款保证

查看我们的计划

WordPress密码哈希

密码散列是一种将明文密码传递给散列函数并转换为长字母数字值的技术。 WordPress 使用它来将它们存储在数据库中,防止窥探者直接读取 WordPress 密码。 当您登录 WordPress 并发送密码时,它会计算哈希值并将其与数据库中的哈希值进行比较。 如果相同,则授予您访问权限,否则,您将被拒绝。 此方法有效,因为特定文本字符串(在本例中为 WordPress 密码)将始终生成相同的哈希值。 由于哈希值无法转换回原始文本,WordPress 只能知道您输入了正确的密码,前提是您提供的密码的哈希值与存储在数据库中的密码相同。

默认情况下,WordPress wp_hash_password()函数使用 8-pass MD5 算法来生成哈希。 然而 MD5 已经成功破解,它结合了现代硬件和一种称为彩虹表的技术,该技术保存了大量的预计算值。 这些可以帮助攻击者在一个现代 GPU 上每秒尝试数十亿次组合。

实现您自己的 WordPress 密码哈希

您可以(并且应该)通过将元组 (16, FALSE) 传递给实例化中的 PasswordHash 对象来选择不同的实现,例如 Bcrypt。 wp_hash_password()wp_set_password()两个函数都是可插入的,因此您可以提供自己的实现。 它们可以在 wp-includes/pluggable.php 下找到。

Roots.io(Trellis、Bedrock 和 Sage 样板 WordPress 系统背后的人)还发布了一个 WordPress 插件,该插件为默认的 WordPress 哈希函数实现了 bcrypt 功能。

结论

为了确保您使用强密码并经常更改它们,最好使用密码管理器。 这有助于将您的所有密码整理在一个地方,并在需要更改密码时提醒您。 当涉及到密码散列时,最好使用像 SHA-2 或 Bcrypt 这样的加密安全算法,而不是回退到 WordPress 的默认值。 最好避免滚动您自己的哈希函数,因为一个错误可能会引入安全问题。