它们在磁盘中加密了吗?怎么样?例如,如果有人从Live CD引导并安装硬盘,它们是否安全?
加密密钥是如何生成的?在Windows和Linux中是否有所不同?
它们在磁盘中加密了吗?怎么样?例如,如果有人从Live CD引导并安装硬盘,它们是否安全?
加密密钥是如何生成的?在Windows和Linux中是否有所不同?
Answers:
您似乎特别对Chrome中用于加密密码的密钥感到好奇。
答案是:
每个密码都使用不同的随机密钥加密。
然后将加密的密码存储在SQLite数据库文件中:
%LocalAppData%\Google\Chrome\User Data\Default\Login Data
您可以使用诸如SQLite数据库浏览器或SQLite Maestro之类的工具进行查看。这是我Login Data
文件中的摘录:
origin_url username_value password_value
======================================== ============== ========================
http://thepiratebay.org/register JolineBlomqvist@example.com 01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA
您会注意到密码是一个加密的数据块。加密新密码的近似算法是:
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会处理所有这些。到底:
因此,某人知道您的密码的唯一方法是他们是否知道您的密码。
%LocalAppData%\Google\Chrome\User Data\Default\Login Data
密码已加密并存储在SQLite数据库中:
这里的重要部分是
CryptProtectData
,它是用于加密数据的Windows API函数。使用此功能加密的数据非常可靠。只能在首先对它进行加密的同一台计算机上以及同一用户对其进行解密。
CryptProtectData
使用Windows凭据(不是密码,而是一些其他数据)作为密钥。AFAIK,它与保护证书,网络凭据和所有其他东西的功能相同。
Encryptor::EncryptString
什么都不做。似乎有使用GNOME密钥环和KDE钱包的代码。
它们是“加密的”,但这是可逆的加密。Chrome必须将原始密码发送到存储密码的网站,因此如果Chrome可以解密和使用它,其他人也可以。存储密码永远不会100%安全。
CryptProtectData
是Windows API,Windows实际上执行所有加密和检索,加密密钥取决于您的用户帐户和系统。
Google Chrome会对密码进行加密并将其存储在SQLite DB中,但是可以使用特殊的密码恢复应用程序(例如ChromePass(http://www.nirsoft.net/utils/chromepass.html)或SecurePassword Kit(http:// www.getsecurepassword.com/)
在Mac上,等效于Windows中的CryptProtectData函数是访问OS X钥匙串中“ Chrome安全存储”的密码。