Bagaimana kata sandi Gmail disimpan di Android - dan di mana?

37

Saya telah melihat sekeliling dan tidak menemukan informasi tentang bagaimana Android mengelola untuk menyimpan kata sandi pada perangkat. Terutama kata sandi Gmail. Saya ingin mempelajari cara Android mengenkripsi dan menyimpan kata sandi? Kunci apa yang digunakan dan di mana kunci ini disimpan, dan algoritma enkripsi apa yang digunakannya.

asudhak
sumber
1
Mengapa kata sandi yang disimpan harus dienkripsi dengan kunci? Ini hanya berarti bahwa kita harus memasukkan kunci setiap kali password diperlukan, maka Anda bisa hanya tidak menyimpan password dan masukkan setiap kali.
Aliran
Um, kuncinya bisa spesifik perangkat, diperoleh dari ponsel IMEI atau apalah. Yang berarti, perangkat lunak bisa mendapatkan kunci tanpa harus pengguna mengetikkannya setiap saat.
asudhak
1
Apa yang mencegah perangkat lunak lain yang berjalan pada ponsel untuk mendapatkan kunci? Pendekatan ini tidak menambah lapisan keamanan tambahan
Flow

Jawaban:

36

Aplikasi resmi Gmail tidak menyimpan kata sandi di perangkat Anda. Kata sandi Anda 100% aman jika Anda menggunakan aplikasi ini.

Beginilah cara kerjanya: Sandi digunakan oleh server otentikasi Google untuk pertama kalinya SAJA. Setelah otentikasi pertama berhasil, sebuah Auth Tokendiunduh ke perangkat yang disimpan dalam accounts.dbfile sebagai teks biasa. Untuk semua login berikutnya, ini Auth Tokendigunakan, BUKAN kata sandi asli Anda.
Jadi, jika perangkat Anda dicuri, yang dapat diperoleh siapa pun adalah Auth Tokenyang menjadi tidak valid setelah Anda mengubah kata sandi. Jadi, Anda akan berada di komando utama.
Untuk keamanan tertinggi, saya sarankan Anda untuk mengaktifkan 2-Factor Authentication& membuat Device Specific Passworduntuk perangkat Anda. Setelah kehilangan perangkat, yang Anda butuhkan adalah menonaktifkan perangkat itu. Anda bahkan tidak perlu mengubah kata sandi utama.

Catatan: Semua ini tidak benar jika Anda menggunakan aplikasi email pihak ketiga untuk Gmail yaitu. Aplikasi Email Stock, K-9 Mail dll. Protokol IMAP atau POP membutuhkan kata sandi asli untuk mengotentikasi pengguna setiap saat. Jadi, kata sandi biasa harus tersedia untuk aplikasi email sebelum mengirimnya ke server. Jadi, sebagian besar aplikasi email menyimpan kata sandi dalam teks biasa (hashing / enkripsi tidak berguna karena hashing / kunci enkripsi perlu disimpan secara lokal). Dalam hal ini, saya sarankan Anda untuk mengaktifkan 2-Factor Authentication& membuat Device Specific Passworduntuk perangkat Anda. Setelah kehilangan perangkat, yang Anda butuhkan adalah menonaktifkan perangkat itu.

Pembaruan:
Secara teknis, dimungkinkan untuk menyimpan kata sandi secara lokal dalam bentuk terenkripsi / hash tanpa menyimpan kunci enkripsi / kunci hashing dalam teks biasa secara lokal. Terima kasih kepada @JFSebastian karena menunjukkannya. Sayangnya, implementasi untuk Android belum tersedia. Mulai ICS, Android menyediakan API KeyChain yang digunakannya suatu aplikasi dapat menyimpan kata sandi secara lokal dalam bentuk yang aman. Aplikasi menggunakan KeyChain API jarang terjadi, tetapi aplikasi stok email menggunakannya (Terima kasih kepada @wawa untuk info ini). Jadi, kata sandi Anda akan aman dengan aplikasi email stok selama layar Anda terkunci. Ingat, KeyChain tidak aman jika perangkat di-rooting dan tidak tersedia pada perangkat pra-ICS.

Android Quesito
sumber
6
@ JF Sebastian: bahkan dengan asumsi bahwa Anda sepenuhnya mempercayai pihak ketiga yang menyimpan kata sandi Anda, itu hanya sedikit lebih aman daripada hanya menyimpan kata sandi di perangkat itu sendiri. Perangkat masih harus dapat mengambil teks biasa kata sandi dari penyimpanan cloud dan perangkat masih harus men-cache kata sandi secara lokal karena Anda tidak ingin harus menyambungkan kembali dongle Anda setiap kali masuk ke terowongan atau area dengan penerimaan lemah. Hal terburuk yang harus dilakukan dalam keamanan adalah memberikan rasa aman yang salah.
Lie Ryan
4
@JFSebastian: sebagai kesimpulan, satu-satunya cara otentikasi yang benar-benar aman adalah melakukan apa yang Google lakukan dengan aplikasi Gmail, yaitu menggunakan skema otentikasi non-standar dengan token auth. Bahkan jika seseorang berhasil mencuri token autentikasi Anda, Anda dapat membatalkan token dari jarak jauh, dan Anda tidak perlu mengubah kata sandi karena plaintext kata sandi tidak pernah diganggu. Cara aman lainnya adalah menggunakan dongle tanpa sesi; baik, Anda tahu apa yang terjadi ketika Anda melakukan itu, pengguna Anda hanya akan membiarkan dongle terpasang secara permanen.
Lie Ryan
5
@ JSFSebastian: Saya pikir Anda tidak mengerti intinya. Mengenkripsi kata sandi tidak lebih aman daripada hanya menyimpannya dalam teks biasa, bahkan tidak sedikit pun. Penyerang yang berhasil menyalin akun. Db juga dapat menyalin kunci dekripsi bersamanya; Satu-satunya hal yang diberikan enkripsi kepada Anda adalah rasa aman yang salah , yang lebih buruk daripada tidak ada keamanan. Ya, ada solusi yang jauh lebih baik daripada menyimpan kata sandi teks biasa, tetapi semuanya membutuhkan perubahan pada protokol email, jadi kami harus hidup dengan apa yang saat ini kami miliki. Atau lakukan dengan benar dengan cara yang tidak standar seperti yang dilakukan Gmail.
Lie Ryan
3
@JFSebastian Apples keychain service atau yang disediakan oleh kernel Linux bukanlah opsi yang lebih aman. Kata sandi masih tersimpan di memori dan jika gantungan kunci tidak dikunci bahkan tidak dienkripsi. Jadi sepertinya hanya sedikit lebih sulit untuk mendapatkannya karena root hanya dapat dibaca .db file. Google menerapkan solusi praktis terbaik yang mungkin dengan menggunakan token auth yang dapat dibatalkan jika perangkat terganggu. Opsi selanjutnya yang lebih aman adalah memasukkan kata sandi setiap kali atau hanya menghindari menggunakan e-mail sama sekali.
Aliran
4
@ LieRyan Pada ICS, aplikasi Email stok sebenarnya menggunakan api KeyStore bukan teks biasa. android-developers.blogspot.com/2012/03/...
Wesley Wiser
12

Kata sandi Android yang digunakan dengan aplikasi Email bawaan disimpan dalam teks biasa di dalam Database SQLite. Ini berbeda dengan aplikasi Gmail , yang menggunakan Token Auth sebagaimana dijelaskan dalam jawaban Sachin Sekhar .

Untuk Jelly Bean, lokasi basis datanya adalah:

/data/system/users/0/accounts.db

Lokasi di atas bervariasi dengan versi Android

Lokasi ini pada perangkat yang tidak di-rooting diamankan dan dilindungi oleh Sistem Operasi.
Pada perangkat yang di-rooting, pengguna secara teknis telah meretas keamanan mereka sendiri, dan bahkan jika itu tidak ada dalam teks biasa itu akan tetap sepele untuk mendekripsi karena kunci harus ada di suatu tempat pada perangkat untuk melakukannya.

Seorang anggota dari Tim Pengembangan Android memposting penjelasan bahwa hingga hari ini masih berlaku:

Sekarang, sehubungan dengan keprihatinan khusus ini. Hal pertama yang harus diklarifikasi adalah bahwa aplikasi Email mendukung empat protokol - POP3, IMAP, SMTP, dan Exchange ActiveSync - dan dengan sangat sedikit pengecualian yang sangat terbatas, semua ini adalah protokol yang lebih lama yang mengharuskan klien menyajikan kata sandi ke server di setiap koneksi. Protokol-protokol ini mengharuskan kami untuk mempertahankan kata sandi selama Anda ingin menggunakan akun di perangkat. Protokol yang lebih baru tidak melakukan ini - ini sebabnya beberapa artikel berbeda dengan Gmail, misalnya. Protokol yang lebih baru memungkinkan klien untuk menggunakan kata sandi satu kali untuk menghasilkan token, menyimpan token, dan membuang kata sandi.

Saya mendorong Anda untuk meninjau artikel yang ditautkan di komentar # 38 , yang ditulis dengan baik dan cukup informatif. Ini memberikan latar belakang yang sangat bagus tentang perbedaan antara kata sandi "tersembunyi", dan membuatnya benar-benar "aman". Cukup mengaburkan kata sandi Anda (misalnya base64) atau mengenkripsi dengan kunci yang disimpan di tempat lain tidak akan membuat kata sandi Anda atau data Anda lebih aman. Seorang penyerang masih dapat mengambilnya.

(Secara khusus, beberapa klaim telah dibuat tentang beberapa klien email lain yang tidak menyimpan kata sandi dalam teks-jelas. Bahkan di mana ini benar, itu tidak menunjukkan bahwa kata sandi lebih aman. Tes sederhana: jika Anda dapat mem-boot perangkat dan itu akan mulai menerima email pada akun Anda yang dikonfigurasi, maka kata sandi tidak benar-benar aman. Entah itu dikaburkan, atau dienkripsi dengan kunci lain yang disimpan di tempat lain.)

Selain itu, karena masalah ini tampaknya mengganggu banyak pengguna Android, Anda juga dapat mengikuti diskusi ini di Slashdot - Data Kata Sandi Android Disimpan Dalam Teks Biasa .

Zuul
sumber
Wow. Itu mengherankan saya. Saya tidak menyadari fakta bahwa itu disimpan dalam teks biasa. Lupa di-root atau tidak di-root. Jika perangkat Anda dicuri, orang yang tidak bermoral dapat dengan mudah memperoleh kredensial Anda, bahkan jika Anda mengunci ponsel dengan kunci keamanan. Mengingat fakta ini, apakah Anda juga mengetahui adanya mekanisme enkripsi disk lebar.
asudhak
1
Apa pun itu, itu adalah sesuatu yang dapat digunakan untuk mendapatkan akses ke akun. Tapi, @SachinShekhar, yang accounts.dbberkas ini dilindungi dari sedang dibaca oleh account selain system.
Wyzard --Hentikan Harming Monica--
1
Zuul, saya menghargai usaha Anda memasukkan jawaban tetapi saya pikir jawaban ini sangat menyesatkan. Jika Anda membaca kutipan yang telah Anda kutip lagi, aplikasi Gmail tidak menyimpan kata sandi. --Edit periksa jawaban @SachinShekhar juga.
roxan
2
@asudhak Jika ada aplikasi yang menggunakan kata sandi asli, TIDAK ada cara untuk melindunginya. Seorang hacker dapat mendekodekan string yang disandikan dari accounts.db setelah menemukan kunci enkripsi / hashing yang perlu disimpan secara lokal karena aplikasi email akan memerlukan kunci ini untuk mengkompilasi kata sandi asli sebelum mengirimnya ke server.
Android Quesito
2
@roxan Saya tidak dapat menemukan apa pun yang mengarah ke kata sandi yang tidak disimpan oleh aplikasi Gmail. Bisakah Anda memberikan penawaran atau tautan?
Aliran