技术细节

技术细节

它们是否在磁盘中加密?如何加密?它们是否安全,例如,如果有人从 Live CD 启动并安装硬盘?

加密密钥是如何生成的?在 Windows 和 Linux 中有什么不同吗?

答案1

您似乎对用于加密 Chrome 中密码的密钥特别好奇。

答案是:

每个密码都用不同的随机密钥加密。

然后将加密的密码存储在SQLite数据库文件中:

%LocalAppData%\Google\Chrome\User Data\Default\Login Data

你可以使用类似SQLite 数据库浏览器或者SQLite 大师查看它。以下是我的Login Data文件中的片段:

origin_url                                username_value               password_value
========================================  ==============               ========================
http://thepiratebay.org/register          [email protected]  01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

您会注意到密码是加密的数据块。加密新密码的近似算法是:

  • 生成新的随机会话密钥
  • 使用会话密钥加密密码
  • 使用用户的 RSA 公钥加密会话密钥
  • 为加密数据生成消息认证码 (HMAC)
  • 将加密的会话密钥、加密的密码和 MAC 连接起来

Chrome 将该 blob 保存到其 SQLite 数据库中。

但要回答你的问题:加密密钥来自哪里?

每个密码都使用不同的随机生成的密钥加密

技术细节

当然,我省略了技术细节。Chrome 本身不会加密您的密码。Chrome 没有用于加密任何内容的主密钥。Chrome 不进行加密。Windows 会。

有一个 Windows 功能,CryptProtectData,用于加密任意数据。调用它的细节并不重要。但如果我发明一种伪语言,可以像任何编程语言一样被解密,Chrome 就会调用:

CryptProtectData(
      { cbData: 28, pbData: "correct battery horse staple" },
      "The password for superuser.com and all the glee therein",
      null, //optional entropy
      null, //reserved
      null, //prompt options
      0, //flags
      { cbData:   pbData:  }); //where the encrypted data will go

密码为:

  • 纯文本correct battery horse staple
  • 加密01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

您会注意到我从来不需要提供密码。这是因为 Windows 会处理好这一切。最后:

  • 生成随机密码来加密密码
  • 该密码是使用随机密码加密的
  • 该密码已使用您的 Windows 密码加密

因此,别人知道您的密码的唯一方式就是他们知道您的密码。

笔记:这是不言而喻的,但我还是要说:这仅适用于在 Windows 上运行的 Chrome。

答案2

密码已加密并存储在 SQLite 数据库中:

这里最重要的部分是CryptProtectData,这是一个用于加密数据的 Windows API 函数。使用此函数加密的数据非常可靠。它只能由最初加密它的同一台机器和同一用户解密。

答案3

它们是“加密的”,但是一种可逆加密。Chrome 必须将原始密码发送到存储密码的网站,因此如果 Chrome 可以解密并使用它,其他人也可以。存储密码永远不是 100% 安全的。

答案4

在 Mac 上,与 Windows 中的 CryptProtectData 功能等效的功能是访问 OS X 的 Keychain 中“Chrome Safe Storage”的密码。

相关内容