如果我只被要求提供许多字符中的 5 个,有什么方法可以对我的密码进行哈希处理?

信息安全 密码 哈希
2021-08-10 07:46:30

有一个系统,在登录表单上,显示大约 40 个密码字母框(隐藏密码的实际长度),只有随机的框(每次相同的数量)是可编辑的。解释是 - 保护我免受键盘记录器的侵害。似乎合法。但这是否意味着我的密码以纯文本形式保存?或者是否有任何已知的哈希算法允许这样做?

截屏

注意:我不是在问这是一个好还是坏的做法,我问的是散列的可能性/可行性/方法。

4个回答

- 在这种情况下,没有实用的方法来散列您的密码。

为了使网站以这种方式工作,哈希必须允许您验证密码的 5 个字符子集是否与某个值匹配。这意味着你可以自己暴力破解这 5 个字符,这很实用,一旦你知道了 5 个字符,就很容易暴力破解其余的字符。这有点类似于 LANMAN 密码的弱点。

部分密码确实具有安全优势,尤其是针对键盘记录器。银行应用程序有时有一个在服务器上散列的普通密码,以及一个额外的验证码,你只输入一部分,而不是在服务器上散列。这被认为是完全可以接受的,但由于多因素身份验证是更好的解决方案,因此变得不那么普遍了。

在这种特殊情况下,不清楚这是一个坏主意。您需要权衡服务器受损的风险与客户端键盘记录器的风险。事实上,风险更大的是客户。因此,尽管违背了正常的最佳实践,但这个网站毕竟不是那么愚蠢。

正如其他人所说,任何用散列算法解决这个问题的尝试都注定要失败。

但是,我认为值得讨论 ING 如何解决这个问题。(免责声明:我从未在 ING 工作过,但我曾在其他大型银行工作过)。

ING 可能会将您的密码存储在硬件安全模块中。这是一种防篡改硬件,其设计目的是即使系统操作员也无法提取您的密码哈希。在内部,它可能以明文(或接近明文的方式)存储您的密码,但仅通过“请输入字符 x、y 和 z”操作与外界通信,并限制允许的尝试次数。

在这种情况下,密码的安全性取决于 HSM 的防篡改能力。已经发布了对 HSM的攻击,但与存储在 RDBMS 中的哈希相比,攻击面减小了。

一种可以实现的方法是存储大约一百个部分密码的哈希值。每次用户使用部分密码登录时,都会被标记为已使用。每次您需要输入完整密码时,都可以重新生成哈希列表。

这种方案确实削弱了针对暴力破解或密码分析的安全性,但如果您经常需要从不受信任的机器登录,它可以保护您免受键盘记录器的影响。

我在旅行钱卡上看到过这种方案,因为旅行者可能经常需要从公共计算机上使用该帐户。不过,对于普通银行业务,我认为这只会削弱安全性。如果您的常规个人计算机感染了键盘记录器,则只需登录几次即可从部分密码中收集完整密码。

为了从密码分析和暴力攻击中加强这个方案,部分密码需要以非常慢的散列存储,比如 PBKDF2 有很多轮。并且为了阻止攻击者同时暴力破解哈希值,您需要强制部分密码按照创建它们的特定顺序使用。例如,使用第 n 个部分密码加密数字列表和第 n+1 个部分密码的 salt 将迫使攻击者在开始处理第 n+1 个部分密码之前解决第 n 个部分密码th。

的 - 他们有可能只是简单地散列他们将向您展示的所有组合。

虽然我认为他们没有实现这一点并且正在存储您的密码,可能是加密的,但没有散列。

在注意存储空间的同时使用此方法获得更好的安全性组合:

  1. 加密明文密码并放置在某种冷存储中。
  2. 定期解密密码以创建新的组合并对它们进行哈希处理。

这样存储空间保持合理。并且您的未散列密码应该位于系统的更安全层中。