Как 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 сохраняет этот 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
полковник Паник

8

Пароли зашифрованы и хранятся в базе данных SQLite:

Важным моментом здесь является CryptProtectDataфункция Windows API для шифрования данных. Данные, зашифрованные с помощью этой функции, довольно надежные. Он может быть дешифрован только на той же машине и тем же пользователем, который его зашифровал.


Но как генерируется ключ шифрования? В зависимости от этого я бы посчитал схему более или менее безопасной. А как насчет Linux?
Оскар

@ Óscar: В Windows CryptProtectDataв качестве ключа используются ваши учетные данные Windows (не пароль, а некоторые другие данные). AFAIK, это та же функция, которая используется для защиты ваших сертификатов, сетевых учетных данных и прочего.
Гравитация

3
@ Óscar: В Linux Encryptor::EncryptString ничего не делает . Кажется, есть код для использования GNOME Keyring и KDE Wallet.
Гравитация

Правильный. В Linux вместо этого используется KDE Wallet, GNOME Keyring или другое поддерживаемое хранилище собственных паролей (которое я забыл случайно).
Майкл Хэмптон

1
так ... кажется, что возможно иметь другое отдельное приложение, которое в основном отслеживает ваши пароли Chrome, учитывая, что вы уже вошли в систему и работает как вы?
rogerdpack

4

Они «зашифрованы», но это обратимое шифрование. Chrome должен отправить необработанный пароль на сайт, для которого он был сохранен, так что, если Chrome может расшифровать и использовать его, то могут и другие люди. Хранение паролей никогда не является безопасным на 100%.


Но какой ключ шифрования?
Оскар

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

1
Нет, но если ваш компьютер захвачен / заражен, пароли браузера могут быть легко восстановлены без вашего ведома. Еще раз, все, на что я обращаю внимание, это на 100% отказоустойчивое хранилище паролей для браузеров ... Просто отвечаю на ваш вопрос об их безопасности.
BloodPhilia

1
Там нет "мастер-пароль". CryptProtectDataWindows API, Windows фактически выполняет все шифрование и поиск, ключ шифрования зависит от вашей учетной записи пользователя и системы.
BloodPhilia

1
Это должно предоставить вам объяснение его работы: msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia


1

На Mac эквивалентом функции CryptProtectData в Windows является доступ к паролю для «Chrome Safe Storage» в связке ключей OS X.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.