Они зашифрованы на диске? Как? Безопасны ли они, например, в случае, если кто-то загружается с Live CD и монтирует жесткий диск?
Как генерируется ключ шифрования? Отличается ли это в Windows и Linux?
Они зашифрованы на диске? Как? Безопасны ли они, например, в случае, если кто-то загружается с Live CD и монтирует жесткий диск?
Как генерируется ключ шифрования? Отличается ли это в Windows и Linux?
Вы, кажется, любопытно, особенно о ключе, используемом для шифрования паролей в 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
Вы заметите, что пароль - это зашифрованный набор данных. Примерный алгоритм шифрования нового пароля:
И 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. В конце:
Таким образом, единственный способ узнать ваш пароль, если он знает ваш пароль.
Пароли зашифрованы и хранятся в базе данных SQLite:
Важной частью здесь является
CryptProtectData
, которая является функцией Windows API для шифрования данных. Данные, зашифрованные с помощью этой функции, довольно надежные. Он может быть дешифрован только на той же машине и тем же пользователем, который его зашифровал.
Они "зашифрованы", но это обратимое шифрование. Chrome должен отправить необработанный пароль на сайт, для которого он был сохранен, поэтому, если Chrome может расшифровать и использовать его, то же самое могут сделать и другие люди. Хранение паролей никогда не является безопасным на 100%.
Google Chrome шифрует пароли и сохраняет их в БД SQLite, но их можно легко просмотреть с помощью специальных приложений для восстановления паролей, таких как ChromePass (http://www.nirsoft.net/utils/chromepass.html) или SecurePassword Kit (http://www.getsecurepassword.com/)
На Mac эквивалентом функции CryptProtectData в Windows является доступ к паролю для "Chrome Safe Storage" в связке ключей OS X.