Как 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 для шифрования данных. Данные, зашифрованные с помощью этой функции, довольно надежные. Он может быть дешифрован только на той же машине и тем же пользователем, который его зашифровал.

sblair
источник
Но как генерируется ключ шифрования? В зависимости от этого я бы посчитал схему более или менее безопасной. А как насчет 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%.

BloodPhilia
источник
Но какой ключ шифрования?
Оскар
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.

Фазал Маджид
источник