对称密钥加密与散列

信息安全 加密 密码 哈希
2021-08-14 12:14:08

这是一个引人入胜的文件:adobe 泄露的前 100 个密码

我对其中的一部分有疑问:

然而,由于 Adob​​e 选择了对称密钥加密而不是散列,选择了 ECB 模式,并为每个密码使用相同的密钥,再加上大量已知的明文和慷慨地在密码提示中向我们提供密码的用户,这并不妨碍我们向您提供 Adob​​e 用户选择的前 100 个密码列表。

所以,因为过去我们允许开发人员使用对称密钥加密而不是密码哈希,而这里他们将“对每个密码使用相同的密钥”视为一个单独的问题,使用对称密钥加密来存储有什么大不了的?密码?我知道可能会影响性能,因为散列的设计考虑到了速度。

3个回答

密码有什么重要的?没有办法解决它。用户重复使用密码。接受。作为负责任的服务提供商,您必须了解这一点并小心处理您的客户密码。

为什么不以明文形式存储密码?因为密码是用来认证的,而基于密码的认证不需要明文密码。密码是敏感信息,需要保密。

为什么不以非明文可逆格式存储密码?如果攻击者破坏了您的系统,他有权访问您的密码存储逻辑,并且他逆转您正在使用的密码修改。这将呈现密码明文。

为什么不用对称密钥加密密码?因为您的应用程序的登录逻辑需要访问该密钥,这会产生密钥管理问题。如果发生泄露,攻击者很可能访问密钥。这使得密码是可逆的。

为什么不使用 MD5/SHA1?因为他们超级快。对你来说超级快意味着攻击者破解的超级快。

那么现在怎么办? 使用强大、不可逆且缓慢的方案(bcrypt. 这没有其他选择。时期。

Adobe 选择了对称加密选项,不仅如此,他们还使用 ECB 错误地实现了它。所以他们拿了一些不好的东西,让事情变得更糟。

从技术上讲,如果散列速度很快,那确实比将密码可逆地存储在数据库中(只要遵循正确的密钥管理)更糟糕(或至少一样糟糕)。

使用加密而不是安全(计算成本高)哈希的问题在于它们可以被反转。有时这可能是必要的,例如如果需要使用密码来访问不支持系统特定访问令牌的第三方系统。然而,问题在于,如果加密密钥被泄露,则可以一次性解码所有密码。

或者,密码派生密钥可以用作可以验证的值的对称加密的密钥,因为这不使用可以解码密码的主密钥(并且很可能根本不存储密码在这种情况下)可以使用对称加密进行密码验证。

同样,使用经过适当加盐的安全哈希,没有好的方法可以攻击离线值来尝试确定密码,并且没有单点故障会导致所有密码都可以访问。

另一方面,Adobe 的系统不仅对所有密码使用相同的密钥(这意味着如果该密钥被泄露,所有密码都立即可用),而且它也不会导致相同的不同实例之间存在任何差异密码被编码,因此您可以告诉所有具有相同密码的用户。更糟糕的是,它们有密码提示,会泄露其中一些重复密码的含义。

使用对称加密存储密码没有任何问题。但是,我想不出 Adob​​e 在任何时候都需要恢复您的密码的任何原因。

最大的问题是密钥管理。Adobe 所做的是将 3DES 与 ECB 模式一起使用并使用相同的密钥。ECB 是一个问题,因为当两个用户使用相同的密码时,它会生成相同的密文。在散列密码或使用 CBC 进行对称加密时,您将使用 salt/IV 来确保每个生成的密文都是不同的。这意味着您永远不会为相同的加密密码获得相同的密文。这与人们使用没有盐的普通哈希算法时的问题相同。

ECB 的另一个问题是,当您有足够的纯文本时,您可能会通过使用明文与密文(理论上)执行分析来破解加密密钥。