Outlook 是否存储纯文本密码?

信息安全 密码 哈希
2021-08-17 10:28:14

很久以前,当 Microsoft 将我的电子邮件从 Hotmail 更改为 Outlook 时,密码界面显示我应该只输入密码的前 16 个字符。但是我的密码以前更长。那么他们怎么能找出我密码的前 16 个字符呢?密码是否总是被截断为 16 个字符,然后散列并保存,或者有其他可能的解释吗?

见下图。

Outlook 身份验证表

2个回答

好吧,我们可能永远不会完全确定,因为我们没有代码。但我们可以讨论一些可能性。但首先,

为什么改变,实际上?

无论如何,这种变化的原因可能是什么?一种可能性是情报机构与此有关,例如假设发生在旧版本的A5/1 Comp128v2 中,其中“随机”密钥的前十位始终设置为 0。像这样他们可以,如果他们从 MS 那里得到哈希值,就可以更快地进行暴力破解。
如果您不喜欢阴谋论,另一种选择当然是 MS 不希望您忘记密码。

但让我们看看可能性。

以明文形式存储的密码

MS可能存储了明文密码,但这将是一个巨大的失败,我想(并且真的希望)情况并非如此。

通常,密码会以不可逆的方式进行散列和加盐处理,因此即使 MS 也无法从数据库中的值了解您的密码。那么他们是怎么做到的呢?

并行存储的哈希函数的两个版本

有可能的是,他们已经计划了更长的时间来设置密码的最大长度。然后,他们可以等待您登录,同时检查您是否确实输入了正确的密码并登录,切断您的输入并对其进行加盐和哈希处理并将其存储在其他地方。在他们切换到新系统的那一刻,他们只是复制了新的哈希值。

密码总是被截断 16 个字符

正如 Ajedi32 在评论中指出的那样,密码也有可能总是在 16 个字符之后被截断。(再次,原因可能是情报干扰。)唯一的区别是MS现在不允许你输入更多,因为他们已经懒得自己截断它。

在我看来这不太可能,因为如果这是真的,那么他们为什么现在告诉用户不要输入超过 16 个字符?是的,可能是这样的事情(即 UI 文本在没有实际更改功能的情况下更改)只是发生在一个庞大的组织中。然而,正如 Ajedi32 解释的那样:

也许他们最终意识到不告诉用户如此重要的安全限制是一个坏主意,并决定开始明确执行 16 个字符的限制?或者他们可能正准备在未来解除限制,他们现在需要开始为用户做准备?(因为解除限制意味着“1234567890123456”将不再是与“1234567890123456789”相同的密码)

实际答案

事实证明,Ajedi32 是正确的,并且密码总是被截断,正如这篇 MS 文章中所指出的(学分归 PwdRsch,见评论)。出于理论的原因,其他可能性仍然存在。

也许他们正在使用HSM来存储密码。密码(可能)被加密并存储在服务器场中的特定单元中,因此他们可以实际解密它们并“读取”明文。不同之处在于,使用 hash+salt 您无法解密密码(散列函数是单向函数)。使用加密算法,您实际上可以解密密文并读取明文。