使用 Have I Been Pwned? 和 pass 检查您的密码安全

定期检查密码是否泄露是帮助在大多数威胁模型中抵御大多数攻击者的绝佳方法。
167 位读者喜欢这篇文章。
Password

freeGraphicToday,通过 Pixabay。CC0 许可。

密码安全涉及广泛的最佳实践,并非所有实践都适合或可能适用于每个人。因此,最佳策略是制定威胁模型,思考您最重要的风险——您要防范谁和什么——然后根据针对这些特定威胁最有效的活动来构建您的安全方法。 电子前沿基金会 (EFF) 有一个 关于威胁建模的精彩系列,我鼓励大家阅读。

在我的威胁模型中,我非常关注我的密码安全,以防范(其中包括)字典攻击,攻击者在字典攻击中使用可能或已知的密码列表来尝试入侵系统。 阻止字典攻击的一种方法是让您的服务提供商在一定次数的失败后限制速率或拒绝登录尝试。 另一种方法是不使用“已知密码”数据集中的密码。

使用 HIBP 检查密码安全

Troy Hunt 创建了 Have I Been Pwned? (HIBP),以便在人们的信息在泄露的数据转储和 breaches 中被发现时通知他们。 如果您尚未注册,则应注册,因为仅仅注册这一行为不会泄露任何信息。 Troy 从这些数据中收集了超过 5.5 亿个真实世界的密码。 这些是真实的人使用过的密码,并且由于数据被盗或意外公开而泄露。

该网站发布纯文本密码列表,但它不必这样做。 顾名思义,此数据已泄露。 如果您曾经重复使用密码或使用“通用”密码,那么您就有风险,因为有人正在构建这些密码的字典以立即尝试。

最近,Firefox 和 HIBP 宣布他们正在 合作 以使 breaches 搜索更容易。 美国国家标准与技术研究院 (NIST) 建议您检查密码是否与已知泄露的密码相同,如果发现相同则更改密码。 HIBP 通过 API 公开的密码检查功能支持此操作,因此易于使用。

现在,向网站发送完整的密码列表将是一个坏主意。 虽然我信任 HaveIBeenPwned.com,但它有一天可能会被攻破。 相反,该网站使用一种名为 k-匿名性 的流程,允许您在不泄露密码的情况下检查密码。 这是一个三步流程。首先,让我们回顾一下步骤,然后我们可以使用 pass-pwned 插件来为我们完成它:

  1. 创建密码的哈希值。 哈希值只是一种将任意数据(您的密码)转换为固定数据表示形式(哈希值)的方法。 加密哈希函数具有抗冲突性,这意味着它为每个输入创建唯一的哈希值。 用于哈希的算法是单向转换,如果您只有哈希值,则很难知道输入值。 例如,使用 HIBP 使用的 SHA-1 算法,密码 hunter2 变为 F3BBBD66A63D4BF1747940578EC3D0103530E21D
  2. 将前五个字符(在我们的示例中为 F3BBB)发送到站点,站点将返回以这五个字符开头的所有哈希值的列表。 这样,站点就无法知道您对哪些哈希值感兴趣。 k-匿名性流程确保有如此多的统计噪声,以至于受攻击的站点很难确定您查询了哪个密码。 例如,我们的查询从 HIBP 返回了 527 个潜在匹配项的列表。
  3. 搜索结果列表,查看您的哈希值是否在那里。 如果在那里,则您的密码已被泄露。 如果不在那里,则密码不在公开已知的数据泄露中。 HIBP 在其数据中返回一个奖励:密码在数据泄露中出现的次数计数。 令人震惊的是,hunter2 已经被看到 17,043 次!

使用 pass 检查密码安全

我使用 pass,这是一个基于 GNU Privacy Guard 的密码管理器。 它有许多扩展程序,这些扩展程序可在 pass 网站 和单独维护的 awesome 风格列表 中找到。 其中一个扩展程序是 pass-pwned,它将使用 HIBP 检查您的密码。 passpass-pwned 都已针对 Fedora 29、30 和 Rawhide 打包。 您可以使用以下命令安装扩展程序

sudo dnf install pass pass-pwned

或者您可以按照各自网站上的手动说明进行操作。

如果您刚开始使用 pass,请阅读 以开源方式管理密码 以获得精彩概述。

以下内容将快速设置 pass 并检查存储的密码。 此示例假设您已拥有 GPG 密钥。

# Setup a pass password store
$ pass init <GPG key email>

# Add the password, "hunter2" to the store
$ pass insert awesome-site.com

# Install the pass-pwned extension
# Download the bash script from the upstream and then review it
$ mkdir ~/.password-store/.extensions
$ wget https://raw.githubusercontent.com/alzeih/pass-pwned/master/pwned.bash -O ~/.password-store/.extensions/pwned.bash
$ vim ~/.password-store/.extensions/pwned.bash

# If everything is OK, set it executable and enable pass extensions
$ chmod u+x ~/.password-store/.extensions/pwned.bash
$ echo 'export PASSWORD_STORE_ENABLE_EXTENSIONS="true"' >> ~/.bash_profile
$ source ~/.bash_profile

# Check the password
$ pass pwned awesome-site.com
Password found in haveibeenpwned 17043 times

# Change this password to something randomly generated and verify it
$ pass generate -i awesoem-site.com
The generated password for awesome-site.com is:
<REDACTED>
$ pass pwned awesome-site.com
Password not found in haveibeenpwned

恭喜,您的密码现在比以前更安全了! 您还可以使用通配符一次检查多个密码

定期检查密码是否泄露是帮助在大多数威胁模型中抵御大多数攻击者的绝佳方法。 如果您的密码管理系统没有这么容易,您可能需要升级到像 pass 这样的系统。

接下来阅读什么
User profile image.
Brian “bex” Exelbierd 是 RHEL 社区业务负责人,致力于通过社区努力为 RHEL 路线图提供信息,并支持操作系统社区。 在 Red Hat,Brian 曾担任技术作家、软件工程师、内容策略师、社区架构师,现在担任产品经理。

2 条评论

考虑后续... 人们抄袭密码是因为好的密码很难[读作:不可能]记住,而那些容易记住的密码[读作:短]通常很糟糕。 所谓的“可发音”密码可以足够长且易于记住。

选择好的密码超出了本文的范围,但是,我倾向于同意您的想法。 既有类似 XKCD 中提出的那种可记忆/可发音的系统,也有完全生成的密码,例如 pass 生成的密码,这些密码往往是随机的。 我个人遵循一个策略,即拥有由我的密码管理器生成的完全随机的密码(只要网站允许)。 我从不直接键入它们,因为密码管理器会为我记住它们。

回复 ,作者:Daniel M St-Andre(未验证)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.