Google 如何不关心应用程序专用密码中的“空格”?

信息安全 密码 哈希 密码管理 谷歌
2021-08-30 21:35:24

我最近为我的 Google 帐户设置了“两步验证”。

其中一项功能是能够为不支持两步过程的设备创建“应用程序专用密码”。(Android、BlackBerry 或 iPhone 等智能手机上的应用程序,Microsoft Outlook 等邮件客户端,Google Talk 或 AIM 等聊天客户端)

谷歌图片 1

当您创建其中一个密码时,Google 会告诉您“空格”无关紧要。

谷歌图片 2

这是否意味着……

  • 密码以明文形式发送,因此它们可以去除另一端的空格(我知道邮件客户端可能会这样做,但谷歌产品如 Gmail 和日历或 ActiveSync 会这样做)
  • 他们使用的散列方法去除了空格(但他们无法控制 3rd 方产品的散列方式)
  • 他们在末尾存储了两个密码哈希值,一个带有空格,另一个没有(如果是这种情况,他们是否必须存储两个以上,一个用于可能存在空格的 3 个位置的每个可能组合)
2个回答
  • 密码以纯文本形式发送,这就是您使用 SSL 建立安全连接的原因,因此没有人可以嗅探您的通信。建议您发送一个散列密码,它仍然可以嗅探散列并伪造请求,因为服务器会期望散列而不是密码。(基本上又是一个字符串)
  • 存储哈希主要是为了确保当数据库被黑客入侵/查看时,他们看不到您的密码并尝试在其他帐户/服务上重新使用它。
  • 他们可能会在散列密码之前去掉空格。正如您自己所说,为可能存在空格的每种可能性保留密码的哈希值,将存储多个哈希值。或者密码总是由四组四个字母组成。然后很容易首先删除所有空格,然后再将其分成 4 组,每组 4 个字母。

最有可能的答案是:

密码通过 SSL 加密通道发送到 Google 服务器。因此,Google 服务器会看到客户端提供的密码。Google 服务器在对密码进行哈希处理之前会去除所有空格。因此,您可以将密码视为没有空格(添加空格仅用于显示)。或者,您可以将密码视为有空格,但散列过程会忽略空格。无论哪种方式,它最终都是等价的。

3rd 方哈希无关紧要。哈希是由谷歌服务器完成的,所以重要的是谷歌如何对密码进行哈希处理。