Google Chrome浏览器如何存储密码?


28

它们在磁盘中加密了吗?怎么样?例如,如果有人从Live CD引导并安装硬盘,它们是否安全?

加密密钥是如何生成的?在Windows和Linux中是否有所不同?


需要注意的是谷歌拒绝执行主密码(如Firefox的),因为它会造成安全的假象,并有类似的工具Chromepass可以解密密码的数据库,只要用户登录。
达恩·达斯卡莱斯卡

Answers:


25

您似乎特别对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

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

  • 生成一个新的随机会话密钥
  • 使用会话密钥加密密码
  • 使用用户的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密码加密

因此,某人知道您的密码的唯一方法是他们是否知道您的密码。


chrome如何知道能够使用它来解密存储的密码的密钥?
brunoais

1
@brunoais Chrome不知道用于加密密码的密钥。Chrome不会解密它们-Windows会解密。
伊恩·博伊德

喔好吧。因此,如果恶意程序进入计算机,则该程序完全可以使用密码,对吗?
brunoais

1
@brunoais仅当您输入密码时。不幸的是,这是加密的基本限制:一旦解密数据,就将其解密。
伊恩·博伊德

谢谢。Chrome不再记住我的密码了(它仍然提供保存密码,但是从不找回它们),我发现密码数据库已损坏。通过删除解决%LocalAppData%\Google\Chrome\User Data\Default\Login Data
Panic Panic

8

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

这里的重要部分是CryptProtectData,它是用于加密数据的Windows API函数。使用此功能加密的数据非常可靠。只能在首先对它进行加密的同一台计算机上以及同一用户对其进行解密。


但是如何生成加密密钥?以此为基础,我认为该方案或多或少是安全的。那Linux呢?
奥斯卡2010年

@Óscar:在Windows上,CryptProtectData使用Windows凭据(不是密码,而是一些其他数据)作为密钥。AFAIK,它与保护证书,网络凭据和所有其他东西的功能相同。
grawity 2010年

3
@Óscar:在Linux上,Encryptor::EncryptString 什么都不做。似乎有使用GNOME密钥环和KDE钱包的代码。
grawity 2010年

正确。在Linux上,使用KDE钱包,GNOME密钥环或其他受支持的本机密码存储库(我忘记了这些)。
迈克尔·汉普顿

1
所以...似乎有可能有另一个单独的应用程序,该应用程序基本上可以监听您的chrome密码,因为您已经登录并且可以正常运行?
rogerdpack 2012年

4

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


但是哪个是加密密钥?
奥斯卡2010年

2
检查sblair的答案。请注意,无论如何存储,都有解密的可能。使用适当的软件,任何人都可以解密它。当您登录到Windows帐户直到您注销的那一刻,您的密码就完全可用并且完全可见。仅表明没有100%安全的解决方案来存储浏览器密码。
BloodPhilia 2010年

1
否,但是如果您的计算机被劫持/感染,浏览器密码很容易在不通知您的情况下被恢复。再一次,我要指出的是,浏览器没有100%故障保护密码存储...只是回答有关其安全性的问题。
BloodPhilia 2010年

1
没有“主密码”。CryptProtectData是Windows API,Windows实际上执行所有加密和检索,加密密钥取决于您的用户帐户和系统。
BloodPhilia 2010年

1
这应该为您提供其工作方式的解释:msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia,2010年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.