加盐密码可以逆转吗?

Can salted passwords be reversed?

我刚刚在 hosting24.com 上按了 'forgot password',结果我的密码以纯文本形式通过电子邮件发送给我(见下图)。我联系了他们的技术支持来质疑这个问题,他们告诉我:

We are using Salt encryption on our website, passwords are not stored in plain text. Please let us know if you have any concerns regarding the security of your data.

我的理解是,密码一旦 'salted' 就无法恢复为纯文本。我也非常担心,考虑到他们的合作伙伴公司 000webhosting 是 massive hacking incident recently 的受害者,这表明他们的安全性低于标准。

谢谢。

编辑:
经过几封激烈的电子邮件后,我终于得到了这样的回复:

Our passwords are encrypted with a secure encryption method in the database. Although we do have a decryption method in place (that is used to prevent fraud), all this is going to change as we are re-designing the project and updating the code to adhere to new age standards. We are sorry to have let you down on this one.

Please contact us with any additional questions. Happy holidays!

'New age'。厉害了。

编辑:
我发送这个 link 的网站来证明一个观点,所以我预计他们的技术支持会投反对票。

不,他们不能没有天文数字的计算能力。我敢打赌他们有第二个明文密码数据库。

加盐 散列密码 不能直接逆向——这就是散列的意义所在。然而,人们总是可以尝试通过暴力恢复它们,尝试所有 possible/likely 密码以查看哈希是否匹配。

这样做的成本取决于所用散列的强度,但您永远不会构建以这种方式存储和解密密码的系统。如果他们说他们只存储加盐哈希值,并且仍然能够向您发送您最初自己设置的密码,那他们显然在撒谎。

虽然他们没有提到散列:

We are using Salt encryption on our website, passwords are not stored in plain text.

“盐加密”不是问题,但让我们在这里尽可能慷慨。

他们的意思可能是他们正在使用带有一些随机元素(变量 IV,或加密消息中的额外数据)的可逆加密,这将确保两个密码不会得到匹配的加密版本(即与哈希运算中的“盐”)。

还可以想象,他们需要可逆密码可能有一些正当理由,例如,如果他们需要使用密码对另一个单独的系统进行身份验证。可以使用可逆密码构建合理的系统,但与 Good Old Bcrypt 相比,以这种方式进行管理需要付出更多的努力(例如,应用程序服务器上的密钥;wide-ranging 管理它的内部策略;HSM;和无懈可击的代码审计)。

假设我们接受这就是他们所做的并且他们已经可靠地实施了它(这是非常值得怀疑的——他们更有可能拥有明文密码或 hacked-up 和易受攻击的 AES) .即便如此,他们还是通过 通过未加密的 public SMTP 基础设施向您发送 邮件中的反向密码,从而搞砸了。

您可以采取一些措施来减轻邮件通道的不可信度,例如发送 single-use 令牌或需要稍后设置新密码的临时密码。但是从来没有充分的理由发送现有密码,该密码将继续在目标站点上工作,并且您可能已经使用它来保护其他服务。 User-set 密码应该永远不会 接触 SMTP。