它们是否在磁盘中加密?如何加密?它们是否安全,例如,如果有人从 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”的密码。