Facebook 是否存储纯文本密码?
让我们希望并假设 Facebook 只存储当前密码的哈希值(可能还有以前的密码)。
这是他们可以做的:
用户将第一个密码设置为“first”,fb 存储散列(“first”)。
稍后,用户重置密码并被要求提供新密码“First2”
Facebook 可以生成一堆密码(类似于新的):["First2", "fIrst2", "firSt2", ... "first2", ... "first", ... ] 然后比较 hash每个都带有存储的哈希值。
这是我想到的唯一解决方案。任何其他?
我不知道他们是否这样做(甚至不使用 Facebook),但他们也有可能使用硬件安全模块 (HSM)进行加密处理,不存储散列密码,而只是对它们进行可逆加密。鉴于他们必须处理大量的授权请求,这将是完全合理的,因为它比安全(阅读:慢)密码散列快几个数量级,同时仍然提供安全的密码存储。
然后可以对 HSM 进行编程,将存储的密码和新密码作为其功能之一的输入进行比较,并仅返回结果(在我们的例子中甚至可以是布尔值),原始密码甚至从未以明文形式传输或存储在任何地方,除了它们的内部存储器(这是防篡改的)。这通常称为板载安全密钥和应用程序存储/处理。
顺便说一句,许多银行使用 HSM,因为它的正确实施还需要设备本身的物理安全以及访问它们的方式(另外,它们相当昂贵),但这显然提供了更大的灵活性方式密码可以被安全地处理而不会被泄露。
这个问题只有一个正确答案。没有人知道(Facebook 除外)。
Facebook 可以以明文形式存储您的 Facebook 密码,但也可能存在一些使用模糊哈希或类似密码的预先计算哈希的方案。
除非我们闯入 Facebook 并审计他们的所有资产,否则我们真的无法知道。
另一种可能性是 Facebook 会存储您密码的哈希值和密码SOUNDEX的哈希值。然后,当您输入新密码时,它可以将其 SOUNDEX 的哈希值与之前存储的哈希值进行比较,并响应密码太相似。
当然,这纯粹是猜想。