Як Google Chrome зберігає паролі?


28

Чи зашифровані вони на диску? Як? Чи безпечні вони, наприклад, якщо хтось завантажиться з Live CD і встановить жорсткий диск?

Як генерується ключ шифрування? Чи відрізняється він у Windows та Linux?


Зауважте, що Google відмовився застосовувати головний пароль (як Firefox), оскільки це створило б помилкове почуття безпеки, і є такі інструменти, як Chromepass, які можуть розшифрувати базу даних паролів за умови входу користувача.
Дан Даскалеску

Пов’язано: askubuntu.com/q/525019/472560
dskrvk

Відповіді:


25

Вам здається цікавим саме ключ, який використовується для шифрування паролів у Chrome.

Відповідь:

Кожен пароль шифрується різним випадковим ключем.

Потім зашифрований пароль зберігається у файлі бази даних SQLite:

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

Ви можете використовувати щось на зразок браузера SQLite Database Browser або SQLite Maestro для його перегляду. Ось фрагмент з мого Login Dataфайлу:

origin_url                                username_value               password_value
========================================  ==============               ========================
http://thepiratebay.org/register          JolineBlomqvist@example.com  01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Ви помітите, що пароль - це зашифрований фрагмент даних. Приблизний алгоритм для шифрування нового пароля:

  • генерувати новий випадковий ключ сеансу
  • зашифруйте пароль ключем сеансу
  • зашифруйте ключ сеансу за допомогою відкритого ключа RSA користувача
  • генерувати код автентифікації повідомлення (HMAC) для зашифрованих даних
  • об'єднати зашифрований ключ сесії, зашифрований пароль та MAC

І Chrome зберігає цю крапку у своїй базі даних 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

Тож єдиний спосіб, коли хтось дізнається ваш пароль, це якщо він знає ваш пароль.


Звідки хром знає ключ, щоб мати можливість використовувати його для розшифрування збереженого пароля?
brunoais

1
@brunoais Chrome не знає ключ, який використовується для шифрування паролів. Chrome їх не розшифровує - це робить Windows.
Ян Бойд

Ну, тоді добре. Тож якщо шкідлива програма потрапляє в комп'ютер, паролі цією програмою повністю доступні, правда?
brunoais

1
@brunoais Тільки якщо ви ввели свій пароль. На жаль, це є основним обмеженням шифрування: після дешифрування даних вони розшифровуються.
Ян Бойд

Спасибі. Chrome зупинив запам'ятовування моїх паролів (він все ще пропонував їх зберегти, але ніколи не відкликав їх), я зрозумів, що база даних паролів була пошкоджена. Вирішено видаленням%LocalAppData%\Google\Chrome\User Data\Default\Login Data
полковник Паніка

8

Паролі шифруються і зберігаються в базі даних SQLite:

Тут важлива деталь CryptProtectData- це функція Windows API для шифрування даних. Дані, зашифровані за допомогою цієї функції, досить солідні. Його можна розшифрувати лише на тій самій машині і тим самим користувачем, який шифрував її в першу чергу.


Але як генерується ключ шифрування? Залежно від цього я б вважав схему більш-менш безпечною. А як щодо Linux?
Оскар

@ Óscar: У Windows CryptProtectDataв якості ключа використовується ваші облікові дані Windows (не пароль, а деякі інші дані). AFAIK, це та сама функція, яка використовується для захисту ваших сертифікатів, мережевих облікових даних та всього іншого.
grawity

3
@ Óscar: У Linux Encryptor::EncryptString нічого не робить . Здається, існує код для використання ключів GNOME та гаманця KDE.
grawity

Правильно. На Linux використовується KDE Wallet, GNOME Keyring або інший підтримуваний накопичувач паролів (який я забуваю назовні).
Майкл Хемптон

1
тож ... мабуть, можливо, є ще один окремий додаток, який, в основному, переносить ваші хромовані паролі, враховуючи, що ви вже ввійшли в систему і працює, як і ви?
rogerdpack

4

Вони "зашифровані", але це зворотне шифрування. Chrome повинен надсилати необроблений пароль на той веб-сайт, на якому він зберігався, тож якщо Chrome може розшифрувати та використовувати його, це може зробити і інші люди. Збереження паролів ніколи не є 100% безпечним.


Але який ключ шифрування?
Оскар

2
Перевірте відповідь sblair. Зауважте, що існує можливість розшифровки, незалежно від того, як вона зберігається. За допомогою належного програмного забезпечення кожен може розшифрувати його. Коли ви увійшли до свого облікового запису Windows до моменту виходу, ваші паролі можна використовувати повністю та повністю переглядати. Просто вказує на відсутність 100% безпечного рішення для зберігання паролів браузера.
BloodPhilia

1
Ні, але якщо ваш комп'ютер викрадений / заражений, паролі веб-переглядача можна легко відновити, не помічаючи. Ще раз все, що я наголошую, - це те, що для браузерів немає 100% відмовного зберігання паролів ... Просто відповідаючи на ваше запитання щодо їх безпеки.
BloodPhilia

1
Немає "головного пароля". CryptProtectDataце API Windows, Windows насправді здійснює все шифрування та пошук, ключ шифрування залежить від вашого облікового запису користувача та системи.
BloodPhilia

1
Це має дати вам пояснення його роботи: msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia


1

На Mac, еквівалент функції CryptProtectData в Windows, є доступ до пароля для "Безпечного зберігання Chrome" в брелоку OS X.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.