Jak Google Chrome przechowuje hasła?

28

Czy są szyfrowane na dysku? W jaki sposób? Czy są bezpieczne, na przykład, gdy ktoś uruchomi się z Live CD i zamontuje dysk twardy?

Jak generowany jest klucz szyfrujący? Czy jest inaczej w systemach Windows i Linux?

Arscar
źródło
Pamiętaj, że Google odmówił wprowadzenia hasła głównego (podobnie jak Firefox), ponieważ stworzyłoby to fałszywe poczucie bezpieczeństwa, a istnieją narzędzia takie jak Chromepass, które mogą odszyfrować bazę haseł, pod warunkiem, że użytkownik jest zalogowany.
Dan Dascalescu,
Powiązane: askubuntu.com/q/525019/472560
dskrvk

Odpowiedzi:

25

Wygląda na to, że jesteś ciekawy klucza używanego do szyfrowania haseł w Chrome.

Odpowiedź to:

Każde hasło jest szyfrowane innym losowym kluczem.

A następnie zaszyfrowane hasło jest przechowywane w pliku bazy danych SQLite:

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

Możesz użyć czegoś takiego jak SQLite Database Browser lub SQLite Maestro, aby go wyświetlić. Oto fragment mojego Login Datapliku:

origin_url                                username_value               password_value
========================================  ==============               ========================
http://thepiratebay.org/register          [email protected]  01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Zauważysz, że hasło jest zaszyfrowaną kroplą danych. Przybliżony algorytm szyfrowania nowego hasła to:

  • wygeneruj nowy klucz sesji losowej
  • szyfruj hasło za pomocą klucza sesji
  • szyfruj klucz sesji za pomocą klucza publicznego RSA użytkownika
  • wygeneruj kod uwierzytelnienia wiadomości (HMAC) dla zaszyfrowanych danych
  • konkatenuj zaszyfrowany klucz sesji, zaszyfrowane hasło i MAC

Chrome zapisuje ten obiekt blob w swojej bazie danych SQLite.

Ale żeby odpowiedzieć na twoje pytanie: Skąd pochodzi klucz szyfrujący?

Każde hasło jest szyfrowane innym losowo generowanym kluczem

Szczegóły techniczne

Oczywiście pominąłem szczegóły techniczne. Chrome nie szyfruje samych haseł. Chrome nie ma klucza głównego używanego do szyfrowania czegokolwiek. Chrome nie szyfruje. Windows tak.

Istnieje funkcja systemu Windows CryptProtectData, która służy do szyfrowania dowolnych dowolnych danych. Szczegóły nazywania go są mniej ważne. Ale jeśli wymyślę pseudojęzyk, który w pewnym sensie może być rozszyfrowany jako język programowania, Chrome wywołuje:

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

Więc hasło:

  • Zwykły tekst :correct battery horse staple
  • Szyfrowane :01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Zauważysz, że nigdy nie musiałem podawać hasła. Dzieje się tak, ponieważ Windows zajmuje się tym wszystkim. Na końcu:

  • generowane jest losowe hasło do szyfrowania hasła
  • to hasło jest szyfrowane losowym hasłem
  • to hasło jest szyfrowane za pomocą hasła systemu Windows

Więc jedynym sposobem, aby ktoś zna twoje hasło, jest to, że zna twoje hasło.

Ian Boyd
źródło
Skąd więc chrom zna klucz, aby móc go użyć do odszyfrowania zapisanego hasła?
brunoais,
1
@brunoais Chrome nie zna klucza używanego do szyfrowania haseł. Chrome ich nie odszyfrowuje - Windows to robi.
Ian Boyd,
Ach, okej Więc jeśli złośliwy program dostanie się do komputera, hasła są całkowicie dostępne dla tego programu, prawda?
brunoais,
1
@brunoais Tylko jeśli wpisałeś hasło. Niestety jest to podstawowe ograniczenie szyfrowania: odszyfrowane dane są odszyfrowane.
Ian Boyd,
Dzięki. Chrome przestał pamiętać moje hasła (nadal oferował ich zapisanie, ale nigdy ich nie przywołał), pomyślałem, że baza danych haseł jest uszkodzona. Rozwiązany przez usunięcie%LocalAppData%\Google\Chrome\User Data\Default\Login Data
pułkownik Panic
8

Hasła są szyfrowane i przechowywane w bazie danych SQLite:

Ważnym elementem jest tutaj CryptProtectDatafunkcja Windows API służąca do szyfrowania danych. Dane zaszyfrowane za pomocą tej funkcji są dość solidne. Może być odszyfrowany tylko na tym samym komputerze i przez tego samego użytkownika, który go zaszyfrował.

sblair
źródło
Ale w jaki sposób generowany jest klucz szyfrowania? W zależności od tego uważam ten schemat za mniej lub bardziej bezpieczny. A co z Linuksem?
Óscar
@ Óscar: W systemie CryptProtectDataWindows kluczem są dane uwierzytelniające systemu Windows (nie hasło, ale niektóre inne dane). AFAIK, to ta sama funkcja, która służy do ochrony twoich certyfikatów, poświadczeń sieciowych i wszystkich innych rzeczy.
grawitacja
3
@ Óscar: W systemie Linux Encryptor::EncryptString nic nie robi . Wydaje się, że jest kod do używania kluczy GNOME i portfela KDE.
grawitacja
Poprawny. W systemie Linux zamiast tego używany jest portfel KDE, brelok GNOME lub inny obsługiwany natywny magazyn haseł (o którym zapomniałem od razu).
Michael Hampton
1
więc ... wydaje się, że można mieć inną oddzielną aplikację, która w zasadzie szpieguje twoje chromowane hasła, biorąc pod uwagę, że jesteś już zalogowany i działa jak ty?
rogerdpack
4

Są „szyfrowane”, ale jest to szyfrowanie odwracalne. Chrome musi wysłać nieprzetworzone hasło do witryny, dla której zostało zapisane, więc jeśli Chrome może je odszyfrować i użyć, to inni też mogą to zrobić. Przechowywanie haseł nigdy nie jest w 100% bezpieczne.

BloodPhilia
źródło
Ale jaki jest klucz szyfrujący?
Óscar
2
Sprawdź odpowiedź sblair. Należy pamiętać, że istnieje możliwość odszyfrowania, bez względu na sposób przechowywania. Przy odpowiednim oprogramowaniu każdy może go odszyfrować. Po zalogowaniu się na konto Windows do momentu wylogowania hasła są całkowicie użyteczne i całkowicie widoczne. Wskazując tylko, że nie ma w 100% bezpiecznego rozwiązania do przechowywania haseł przeglądarki.
BloodPhilia
1
Nie, ale jeśli komputer zostanie przejęty / zainfekowany, hasła przeglądarki można łatwo odzyskać bez zauważenia. Po raz kolejny zwracam uwagę na to, że nie ma w 100% odpornego na awarie przechowywania haseł do przeglądarek ... Odpowiadam na twoje pytanie dotyczące ich bezpieczeństwa.
BloodPhilia
1
Nie ma „hasła głównego”. CryptProtectDatato interfejs API systemu Windows, system Windows faktycznie dokonuje całego szyfrowania i pobierania, klucz szyfrowania zależy od konta użytkownika i systemu.
BloodPhilia
1
To powinno ci wyjaśnić jego działanie: msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia
1

Na komputerze Mac odpowiednikiem funkcji CryptProtectData w systemie Windows jest uzyskanie dostępu do hasła „Chrome Safe Storage” w pęku kluczy systemu OS X.

Fazal Majid
źródło