Bagaimana Google Chrome menyimpan kata sandi?

28

Apakah mereka dienkripsi dalam disk? Bagaimana? Apakah mereka aman, misalnya, dalam hal seseorang boot dari Live CD dan memasang hard disk?

Bagaimana kunci enkripsi dihasilkan? Apakah berbeda di Windows dan Linux?

Óscar
sumber
Perhatikan bahwa Google menolak menerapkan kata sandi master (seperti yang dimiliki Firefox) karena itu akan menciptakan rasa aman yang salah, dan ada alat seperti Chromepass yang dapat mendekripsi basis data kata sandi, asalkan pengguna tersebut login.
Dan Dascalescu

Jawaban:

25

Anda sepertinya penasaran khususnya tentang kunci yang digunakan untuk mengenkripsi kata sandi di Chrome.

Jawabannya adalah:

Setiap kata sandi dienkripsi dengan kunci acak yang berbeda.

Dan kemudian kata sandi terenkripsi disimpan dalam file database SQLite:

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

Anda dapat menggunakan sesuatu seperti SQLite Database Browser atau SQLite Maestro untuk melihatnya. Berikut cuplikan dari Login Datafile saya :

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

Anda akan melihat kata sandi adalah gumpalan data terenkripsi. Algoritma perkiraan untuk mengenkripsi kata sandi baru adalah:

  • menghasilkan kunci sesi acak baru
  • mengenkripsi kata sandi dengan kunci sesi
  • mengenkripsi kunci sesi dengan kunci publik RSA pengguna
  • menghasilkan Kode Otentikasi Pesan (HMAC) untuk data yang dienkripsi
  • menggabungkan kunci sesi terenkripsi, kata sandi terenkripsi, dan MAC

Dan Chrome menyimpan gumpalan itu ke basis data SQLite-nya.

Tetapi untuk menjawab pertanyaan Anda: Dari mana kunci enkripsi itu berasal?

Setiap kata sandi dienkripsi dengan kunci acak yang berbeda

Detail Teknis

Tentu saja saya mengabaikan detail teknisnya. Chrome tidak mengenkripsi kata sandi Anda sendiri. Chrome tidak memiliki kunci master yang digunakan untuk mengenkripsi apa pun. Chrome tidak melakukan enkripsi. Windows melakukannya.

Ada fungsi Windows CryptProtectData,, yang digunakan untuk mengenkripsi data sewenang-wenang yang Anda suka. Rincian panggilan itu kurang penting. Tetapi jika saya menciptakan bahasa pseudo yang agak dapat diuraikan seperti bahasa pemrograman apa pun, Chrome memanggil:

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

Jadi kata sandinya:

  • Plaintext :correct battery horse staple
  • Dienkripsi :01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Anda akan melihat bahwa saya tidak pernah perlu memberikan kata sandi. Itu karena Windows menangani semua itu. Pada akhirnya:

  • kata sandi acak dihasilkan untuk mengenkripsi kata sandi
  • kata sandi itu dienkripsi dengan kata sandi acak
  • kata sandi itu dienkripsi dengan kata sandi Windows Anda

Jadi satu-satunya cara bagi seseorang untuk mengetahui kata sandi Anda adalah jika mereka tahu kata sandi Anda.

Ian Boyd
sumber
Bagaimana cara chrome mengetahui kunci untuk dapat menggunakannya untuk mendekripsikan kata sandi yang disimpan?
brunoais
1
@brunoais Chrome tidak tahu kunci yang digunakan untuk mengenkripsi kata sandi. Chrome tidak mendekripsi mereka - Windows melakukannya.
Ian Boyd
Ah, baiklah. Jadi jika program jahat masuk ke komputer, kata sandi sepenuhnya tersedia untuk program itu, bukan?
brunoais
1
@brunoais Hanya jika Anda mengetik kata sandi. Sayangnya ini adalah batasan mendasar dari enkripsi: sekali data didekripsi maka akan di-dekripsi.
Ian Boyd
Terima kasih. Chrome menghentikan saya mengingat kata sandi saya (masih menawarkan untuk menyimpannya, tetapi tidak pernah mengingatnya), saya pikir basis data kata sandi rusak. Dipecahkan dengan menghapus%LocalAppData%\Google\Chrome\User Data\Default\Login Data
Kolonel Panic
8

Kata sandi dienkripsi dan disimpan dalam database SQLite:

Bagian penting di sini adalah CryptProtectData, yang merupakan fungsi Windows API untuk mengenkripsi data. Data yang dienkripsi dengan fungsi ini cukup solid. Itu hanya dapat didekripsi pada mesin yang sama dan oleh pengguna yang sama yang mengenkripsi itu di tempat pertama.

sblair
sumber
Tetapi bagaimana kunci enkripsi dihasilkan? Tergantung pada ini saya akan mempertimbangkan skema lebih atau kurang aman. Dan bagaimana dengan Linux?
Óscar
@ Óscar: Di Windows, CryptProtectDatagunakan kredensial Windows Anda (bukan kata sandi, tetapi beberapa data lainnya) sebagai kuncinya. AFAIK, itu adalah fungsi yang sama yang digunakan untuk melindungi sertifikat Anda, kredensial jaringan dan semua hal itu.
grawity
3
@ Óscar: Di Linux, Encryptor::EncryptString tidak melakukan apa-apa . Tampaknya ada kode untuk menggunakan GNOME Keyring dan KDE Wallet.
grawity
Benar. Di Linux, KDE Wallet, GNOME Keyring, atau satu penyimpanan kata sandi asli yang didukung lainnya (yang saya lupa begitu saja) digunakan sebagai gantinya.
Michael Hampton
1
jadi ... sepertinya ada kemungkinan untuk memiliki aplikasi lain yang terpisah yang pada dasarnya mengintip kata sandi chrome Anda, mengingat Anda sudah masuk dan sedang berjalan seperti Anda?
rogerdpack
4

Mereka "dienkripsi" tetapi itu adalah enkripsi yang dapat dibalik. Chrome harus mengirim kata sandi mentah ke situs tempat penyimpanannya, jadi jika Chrome dapat mendekripsi dan menggunakannya, demikian juga orang lain. Menyimpan kata sandi tidak pernah 100% aman.

BloodPhilia
sumber
Tapi yang mana kunci enkripsi?
Óscar
2
Periksa jawaban sblair. Perhatikan bahwa ada kemungkinan dekripsi, tidak peduli bagaimana itu disimpan. Dengan perangkat lunak yang tepat, siapa pun dapat mendekripsi. Ketika Anda telah masuk ke akun Windows Anda sampai saat Anda keluar, kata sandi Anda sepenuhnya dapat digunakan dan sepenuhnya dapat dilihat. Hanya menunjukkan bahwa tidak ada solusi 100% aman untuk menyimpan kata sandi browser.
BloodPhilia
1
Tidak, tetapi jika komputer Anda dibajak / terinfeksi, kata sandi browser dapat dengan mudah dipulihkan tanpa Anda sadari. Sekali lagi, yang saya tunjukkan adalah tidak ada 100% penyimpanan kata sandi untuk browser yang anti-gagal ... Hanya menjawab pertanyaan Anda tentang keamanannya.
BloodPhilia
1
Tidak ada "kata sandi utama". CryptProtectDataadalah Windows API, Windows benar-benar melakukan semua enkripsi dan pengambilan, kunci enkripsi tergantung pada akun dan sistem pengguna Anda.
BloodPhilia
1
Ini harus memberi Anda penjelasan tentang cara kerjanya: msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia
1

Di Mac, setara dengan fungsi CryptProtectData di Windows adalah untuk mengakses kata sandi untuk "Penyimpanan Aman Chrome" di Keychain OS X.

Fazal Majid
sumber