Enkripsi Disk Penuh

Enkripsi disk penuh adalah proses pengkodean semua data pengguna di perangkat Android menggunakan kunci terenkripsi. Setelah perangkat dienkripsi, semua data yang dibuat pengguna secara otomatis dienkripsi sebelum memasukkannya ke disk dan semua pembacaan secara otomatis mendekripsi data sebelum mengembalikannya ke proses panggilan.

Enkripsi disk penuh diperkenalkan ke Android pada versi 4.4, namun Android 5.0 memperkenalkan fitur baru berikut:

  • Enkripsi cepat dibuat, yang hanya mengenkripsi blok yang digunakan pada partisi data untuk menghindari boot pertama memakan waktu lama. Hanya sistem file ext4 dan f2fs yang saat ini mendukung enkripsi cepat.
  • Menambahkan flag forceencrypt fstab untuk mengenkripsi pada boot pertama.
  • Menambahkan dukungan untuk pola dan enkripsi tanpa kata sandi.
  • Menambahkan penyimpanan kunci enkripsi yang didukung perangkat keras menggunakan kemampuan penandatanganan Trusted Execution Environment (TEE) (seperti di TrustZone). Lihat Menyimpan kunci terenkripsi untuk detail selengkapnya.

Perhatian: Perangkat yang diupgrade ke Android 5.0 dan kemudian dienkripsi dapat dikembalikan ke keadaan tidak terenkripsi melalui reset data pabrik. Perangkat Android 5.0 baru yang dienkripsi pada boot pertama tidak dapat dikembalikan ke keadaan tidak terenkripsi.

Cara kerja enkripsi disk penuh Android

Enkripsi disk penuh Android didasarkan pada dm-crypt , yang merupakan fitur kernel yang bekerja pada lapisan perangkat blok. Oleh karena itu, enkripsi dapat digunakan dengan Embedded MultiMediaCard ( eMMC) dan perangkat flash serupa yang menampilkan dirinya ke kernel sebagai perangkat blok. Enkripsi tidak dimungkinkan dengan YAFFS, yang berkomunikasi langsung dengan chip flash NAND mentah.

Algoritma enkripsinya adalah 128 Advanced Encryption Standard (AES) dengan cipher-block chaining (CBC) dan ESSIV:SHA256. Kunci master dienkripsi dengan AES 128-bit melalui panggilan ke perpustakaan OpenSSL. Anda harus menggunakan 128 bit atau lebih untuk kuncinya (dengan 256 sebagai opsional).

Catatan: OEM dapat menggunakan 128-bit atau lebih tinggi untuk mengenkripsi kunci master.

Pada rilis Android 5.0, ada empat jenis status enkripsi:

  • bawaan
  • PIN
  • kata sandi
  • pola

Saat boot pertama, perangkat membuat kunci master 128-bit yang dibuat secara acak dan kemudian melakukan hash dengan kata sandi default dan garam yang disimpan. Kata sandi defaultnya adalah: "default_password" Namun, hash yang dihasilkan juga ditandatangani melalui TEE (seperti TrustZone), yang menggunakan hash dari tanda tangan untuk mengenkripsi kunci master.

Anda dapat menemukan kata sandi default yang ditentukan dalam file cryptfs.cpp Proyek Sumber Terbuka Android.

Saat pengguna menetapkan PIN/pass atau kata sandi pada perangkat, hanya kunci 128-bit yang dienkripsi ulang dan disimpan. (yaitu perubahan PIN/pass/pola pengguna TIDAK menyebabkan enkripsi ulang data pengguna.) Perhatikan bahwa perangkat yang dikelola mungkin tunduk pada batasan PIN, pola, atau kata sandi.

Enkripsi dikelola oleh init dan vold . init memanggil vold , dan vold menyetel properti untuk memicu kejadian di init. Bagian lain dari sistem juga melihat properti untuk melakukan tugas seperti melaporkan status, meminta kata sandi, atau meminta reset pabrik jika terjadi kesalahan fatal. Untuk menjalankan fitur enkripsi di vold , sistem menggunakan perintah cryptfs alat baris perintah vdc : checkpw , restart , enablecrypto , changepw , cryptocomplete , verifypw , setfield , getfield , mountdefaultencrypted , getpwtype , getpw , dan clearpw .

Untuk mengenkripsi, mendekripsi, atau menghapus /data , /data tidak boleh dipasang. Namun, untuk menampilkan antarmuka pengguna (UI), kerangka kerja harus dimulai dan kerangka kerja memerlukan /data untuk dijalankan. Untuk mengatasi teka-teki ini, sistem file sementara dipasang pada /data . Hal ini memungkinkan Android meminta kata sandi, menunjukkan kemajuan, atau menyarankan penghapusan data sesuai kebutuhan. Hal ini memberikan batasan bahwa untuk beralih dari sistem file sementara ke sistem file /data yang sebenarnya, sistem harus menghentikan setiap proses dengan file yang terbuka pada sistem file sementara dan memulai kembali proses tersebut pada sistem file /data yang sebenarnya. Untuk melakukan hal ini, semua layanan harus berada dalam salah satu dari tiga grup: core , main , dan late_start .

  • core : Jangan pernah mematikan setelah memulai.
  • main : Matikan lalu restart setelah kata sandi disk dimasukkan.
  • late_start : Tidak dimulai sampai /data didekripsi dan dipasang.

Untuk memicu tindakan ini, properti vold.decrypt diatur ke berbagai string . Untuk mematikan dan memulai kembali layanan, perintah init adalah:

  • class_reset : Menghentikan layanan tetapi mengizinkannya dimulai ulang dengan class_start.
  • class_start : Memulai ulang layanan.
  • class_stop : Menghentikan layanan dan menambahkan tanda SVC_DISABLED . Layanan yang dihentikan tidak merespons class_start .

Mengalir

Ada empat aliran untuk perangkat terenkripsi. Perangkat dienkripsi hanya sekali dan kemudian mengikuti alur boot normal.

  • Enkripsi perangkat yang sebelumnya tidak terenkripsi:
    • Enkripsi perangkat baru dengan forceencrypt : Enkripsi wajib saat boot pertama (dimulai di Android L).
    • Enkripsi perangkat yang ada: Enkripsi yang dimulai pengguna (Android K dan versi lebih lama).
  • Boot perangkat terenkripsi:
    • Memulai perangkat terenkripsi tanpa kata sandi: Mem-boot perangkat terenkripsi yang tidak memiliki kata sandi yang ditetapkan (relevan untuk perangkat yang menjalankan Android 5.0 dan lebih baru).
    • Memulai perangkat terenkripsi dengan kata sandi: Mem-boot perangkat terenkripsi yang memiliki kata sandi yang ditetapkan.

Selain alur ini, perangkat juga bisa gagal mengenkripsi /data . Masing-masing aliran dijelaskan secara rinci di bawah ini.

Enkripsi perangkat baru dengan forceencrypt

Ini adalah boot pertama yang normal untuk perangkat Android 5.0.

  1. Deteksi sistem file yang tidak terenkripsi dengan tanda forceencrypt

    /data tidak dienkripsi tetapi perlu dienkripsi karena forceencrypt mengamanatkannya. Lepas /data .

  2. Mulai mengenkripsi /data

    vold.decrypt = "trigger_encryption" memicu init.rc , yang akan menyebabkan vold mengenkripsi /data tanpa kata sandi. (Tidak ada yang disetel karena ini seharusnya merupakan perangkat baru.)

  3. Pasang tmpfs

    vold memasang tmpfs /data (menggunakan opsi tmpfs dari ro.crypto.tmpfs_options ) dan menyetel properti vold.encrypt_progress ke 0. vold menyiapkan tmpfs /data untuk mem-boot sistem terenkripsi dan menyetel properti vold.decrypt ke: trigger_restart_min_framework

  4. Munculkan kerangka kerja untuk menunjukkan kemajuan

    Karena perangkat hampir tidak memiliki data untuk dienkripsi, bilah kemajuan sering kali tidak muncul karena enkripsi terjadi begitu cepat. Lihat Mengenkripsi perangkat yang ada untuk detail selengkapnya tentang UI kemajuan.

  5. Ketika /data dienkripsi, hapus kerangka kerja tersebut

    vold menyetel vold.decrypt ke trigger_default_encryption yang memulai layanan defaultcrypto . (Ini memulai alur di bawah untuk memasang data pengguna terenkripsi default.) trigger_default_encryption memeriksa jenis enkripsi untuk melihat apakah /data dienkripsi dengan atau tanpa kata sandi. Karena perangkat Android 5.0 dienkripsi pada boot pertama, tidak boleh ada kata sandi yang ditetapkan; oleh karena itu kami mendekripsi dan memasang /data .

  6. Pasang /data

    init kemudian memasang /data pada tmpfs RAMDisk menggunakan parameter yang diambil dari ro.crypto.tmpfs_options , yang disetel di init.rc .

  7. Mulai kerangka kerja

    vold menyetel vold.decrypt ke trigger_restart_framework , yang melanjutkan proses boot seperti biasa.

Enkripsi perangkat yang ada

Inilah yang terjadi ketika Anda mengenkripsi perangkat Android K yang tidak terenkripsi atau perangkat sebelumnya yang telah dimigrasikan ke L.

Proses ini dimulai oleh pengguna dan disebut sebagai “enkripsi internal” dalam kode. Saat pengguna memilih untuk mengenkripsi perangkat, UI akan memastikan baterai terisi penuh dan adaptor AC dicolokkan sehingga terdapat cukup daya untuk menyelesaikan proses enkripsi.

Peringatan: Jika perangkat kehabisan daya dan mati sebelum enkripsi selesai, data file akan dibiarkan dalam keadaan terenkripsi sebagian. Perangkat harus direset ke pabrik dan semua data hilang.

Untuk mengaktifkan enkripsi inplace, vold memulai loop untuk membaca setiap sektor perangkat blok nyata dan kemudian menulisnya ke perangkat blok kripto. vold memeriksa apakah suatu sektor sedang digunakan sebelum membaca dan menulisnya, yang membuat enkripsi lebih cepat pada perangkat baru yang memiliki sedikit atau tanpa data.

Status perangkat : Setel ro.crypto.state = "unencrypted" dan jalankan pemicu init on nonencrypted untuk melanjutkan booting.

  1. Periksa kata sandi

    UI memanggil vold dengan perintah cryptfs enablecrypto inplace di mana passwd adalah kata sandi layar kunci pengguna.

  2. Hancurkan kerangkanya

    vold memeriksa kesalahan, mengembalikan -1 jika tidak dapat mengenkripsi, dan mencetak alasan di log. Jika dapat mengenkripsi, properti vold.decrypt akan disetel ke trigger_shutdown_framework . Hal ini menyebabkan init.rc menghentikan layanan di kelas late_start dan main .

  3. Buat footer kripto
  4. Buat file remah roti
  5. Menyalakan ulang
  6. Deteksi file remah roti
  7. Mulai mengenkripsi /data

    vold kemudian mengatur pemetaan kripto, yang menciptakan perangkat blok kripto virtual yang memetakan ke perangkat blok sebenarnya tetapi mengenkripsi setiap sektor seperti yang tertulis, dan mendekripsi setiap sektor saat dibaca. vold kemudian membuat dan menulis metadata kripto.

  8. Saat mengenkripsi, pasang tmpfs

    vold memasang tmpfs /data (menggunakan opsi tmpfs dari ro.crypto.tmpfs_options ) dan menyetel properti vold.encrypt_progress ke 0. vold menyiapkan tmpfs /data untuk mem-boot sistem terenkripsi dan menyetel properti vold.decrypt ke: trigger_restart_min_framework

  9. Munculkan kerangka kerja untuk menunjukkan kemajuan

    trigger_restart_min_framework menyebabkan init.rc memulai layanan kelas main . Ketika kerangka kerja melihat bahwa vold.encrypt_progress disetel ke 0, ia akan menampilkan UI bilah kemajuan, yang menanyakan properti tersebut setiap lima detik dan memperbarui bilah kemajuan. Loop enkripsi memperbarui vold.encrypt_progress setiap kali mengenkripsi persen partisi lainnya.

  10. Ketika /data dienkripsi, perbarui footer kripto

    Ketika /data berhasil dienkripsi, vold menghapus tanda ENCRYPTION_IN_PROGRESS di metadata.

    Ketika perangkat berhasil dibuka kuncinya, kata sandi kemudian digunakan untuk mengenkripsi kunci master dan footer kripto diperbarui.

    Jika reboot gagal karena alasan tertentu, vold setel properti vold.encrypt_progress ke error_reboot_failed dan UI akan menampilkan pesan yang meminta pengguna menekan tombol untuk reboot. Hal ini diperkirakan tidak akan pernah terjadi.

Memulai perangkat terenkripsi dengan enkripsi default

Inilah yang terjadi ketika Anda mem-boot perangkat terenkripsi tanpa kata sandi. Karena perangkat Android 5.0 dienkripsi pada boot pertama, tidak boleh ada kata sandi yang disetel dan oleh karena itu ini adalah status enkripsi default .

  1. Deteksi /data terenkripsi tanpa kata sandi

    Mendeteksi bahwa perangkat Android dienkripsi karena /data tidak dapat dipasang dan salah satu tanda encryptable atau forceencrypt disetel.

    vold menyetel vold.decrypt ke trigger_default_encryption , yang memulai layanan defaultcrypto . trigger_default_encryption memeriksa jenis enkripsi untuk melihat apakah /data dienkripsi dengan atau tanpa kata sandi.

  2. Dekripsi /data

    Membuat perangkat dm-crypt melalui perangkat blok sehingga perangkat siap digunakan.

  3. Pasang /data

    vold kemudian memasang partisi real /data yang didekripsi dan kemudian menyiapkan partisi baru. Ini menyetel properti vold.post_fs_data_done ke 0 dan kemudian menyetel vold.decrypt ke trigger_post_fs_data . Hal ini menyebabkan init.rc menjalankan perintah post-fs-data . Mereka akan membuat direktori atau tautan apa pun yang diperlukan dan kemudian menyetel vold.post_fs_data_done ke 1.

    Setelah vold melihat angka 1 di properti itu, ia menyetel properti vold.decrypt menjadi: trigger_restart_framework. Hal ini menyebabkan init.rc memulai kembali layanan di kelas main dan juga memulai layanan di kelas late_start untuk pertama kalinya sejak boot.

  4. Mulai kerangka kerja

    Sekarang kerangka kerja mem-boot semua layanannya menggunakan /data yang telah didekripsi, dan sistem siap digunakan.

Memulai perangkat terenkripsi tanpa enkripsi default

Inilah yang terjadi ketika Anda mem-boot perangkat terenkripsi yang memiliki kata sandi yang ditetapkan. Kata sandi perangkat dapat berupa pin, pola, atau kata sandi.

  1. Deteksi perangkat terenkripsi dengan kata sandi

    Mendeteksi bahwa perangkat Android dienkripsi karena flag ro.crypto.state = "encrypted"

    vold menyetel vold.decrypt ke trigger_restart_min_framework karena /data dienkripsi dengan kata sandi.

  2. Pasang tmpfs

    init menyetel lima properti untuk menyimpan opsi pemasangan awal yang diberikan untuk /data dengan parameter yang diteruskan dari init.rc . vold menggunakan properti ini untuk menyiapkan pemetaan kripto:

    1. ro.crypto.fs_type
    2. ro.crypto.fs_real_blkdev
    3. ro.crypto.fs_mnt_point
    4. ro.crypto.fs_options
    5. ro.crypto.fs_flags (angka hex ASCII 8 digit diawali dengan 0x)
  3. Mulai kerangka kerja untuk meminta kata sandi

    Kerangka kerja dijalankan dan melihat bahwa vold.decrypt disetel ke trigger_restart_min_framework . Ini memberi tahu kerangka kerja bahwa ia sedang boot pada disk tmpfs /data dan perlu mendapatkan kata sandi pengguna.

    Namun pertama-tama, perlu dipastikan bahwa disk telah dienkripsi dengan benar. Ia mengirimkan perintah cryptfs cryptocomplete ke vold . vold mengembalikan 0 jika enkripsi berhasil diselesaikan, -1 pada kesalahan internal, atau -2 jika enkripsi tidak berhasil diselesaikan. vold menentukan ini dengan melihat metadata kripto untuk tanda CRYPTO_ENCRYPTION_IN_PROGRESS . Jika disetel, proses enkripsi terhenti, dan tidak ada data yang dapat digunakan di perangkat. Jika vold mengembalikan kesalahan, UI akan menampilkan pesan kepada pengguna untuk melakukan boot ulang dan mengembalikan perangkat ke setelan pabrik, dan memberi pengguna tombol untuk ditekan untuk melakukannya.

  4. Dekripsi data dengan kata sandi

    Setelah cryptfs cryptocomplete berhasil, kerangka kerja menampilkan UI yang meminta kata sandi disk. UI memeriksa kata sandi dengan mengirimkan perintah cryptfs checkpw ke vold . Jika kata sandi benar (yang ditentukan dengan berhasil memasang /data yang didekripsi di lokasi sementara, lalu melepasnya), vold menyimpan nama perangkat blok yang didekripsi di properti ro.crypto.fs_crypto_blkdev dan mengembalikan status 0 ke UI . Jika kata sandi salah, ia mengembalikan -1 ke UI.

  5. Hentikan kerangka kerja

    UI memasang grafik boot kripto dan kemudian memanggil vold dengan perintah cryptfs restart . vold menyetel properti vold.decrypt ke trigger_reset_main , yang menyebabkan init.rc melakukan class_reset main . Ini menghentikan semua layanan di kelas utama, yang memungkinkan tmpfs /data dilepas.

  6. Pasang /data

    vold kemudian memasang partisi real /data yang telah didekripsi dan menyiapkan partisi baru (yang mungkin tidak akan pernah disiapkan jika dienkripsi dengan opsi penghapusan, yang tidak didukung pada rilis pertama). Ini menyetel properti vold.post_fs_data_done ke 0 dan kemudian menyetel vold.decrypt ke trigger_post_fs_data . Hal ini menyebabkan init.rc menjalankan perintah post-fs-data . Mereka akan membuat direktori atau tautan yang diperlukan dan kemudian menyetel vold.post_fs_data_done ke 1. Setelah vold melihat 1 di properti tersebut, ia menyetel properti vold.decrypt ke trigger_restart_framework . Hal ini menyebabkan init.rc memulai kembali layanan di kelas main dan juga memulai layanan di kelas late_start untuk pertama kalinya sejak boot.

  7. Mulai kerangka penuh

    Sekarang kerangka kerja mem-boot semua layanannya menggunakan sistem file /data yang didekripsi, dan sistem siap digunakan.

Kegagalan

Perangkat yang gagal mendekripsi mungkin salah karena beberapa alasan. Perangkat dimulai dengan serangkaian langkah normal untuk melakukan booting:

  1. Deteksi perangkat terenkripsi dengan kata sandi
  2. Pasang tmpfs
  3. Mulai kerangka kerja untuk meminta kata sandi

Namun setelah kerangka kerja terbuka, perangkat mungkin mengalami beberapa kesalahan:

  • Kata sandi cocok tetapi tidak dapat mendekripsi data
  • Pengguna memasukkan kata sandi yang salah sebanyak 30 kali

Jika kesalahan ini tidak teratasi, minta pengguna melakukan penghapusan pabrik :

Jika vold mendeteksi kesalahan selama proses enkripsi, dan jika belum ada data yang dimusnahkan dan kerangka kerja aktif, vold menyetel properti vold.encrypt_progress ke error_not_encrypted . UI meminta pengguna untuk melakukan boot ulang dan memperingatkan mereka bahwa proses enkripsi tidak pernah dimulai. Jika kesalahan terjadi setelah kerangka kerja dirobohkan, tetapi sebelum UI bilah kemajuan aktif, vold akan mem-boot ulang sistem. Jika reboot gagal, vold.encrypt_progress disetel ke error_shutting_down dan mengembalikan -1; tetapi tidak akan ada apa pun untuk menangkap kesalahan tersebut. Hal ini diperkirakan tidak akan terjadi.

Jika vold mendeteksi kesalahan selama proses enkripsi, vold.encrypt_progress disetel ke error_partially_encrypted dan mengembalikan -1. UI kemudian akan menampilkan pesan yang mengatakan enkripsi gagal dan menyediakan tombol bagi pengguna untuk mengembalikan perangkat ke setelan pabrik.

Menyimpan kunci terenkripsi

Kunci terenkripsi disimpan dalam metadata kripto. Dukungan perangkat keras diterapkan dengan menggunakan kemampuan penandatanganan Trusted Execution Environment (TEE). Sebelumnya, kami mengenkripsi kunci master dengan kunci yang dihasilkan dengan menerapkan scrypt pada kata sandi pengguna dan garam yang disimpan. Untuk membuat kunci tahan terhadap serangan di luar kotak, kami memperluas algoritme ini dengan menandatangani kunci yang dihasilkan dengan kunci TEE yang disimpan. Tanda tangan yang dihasilkan kemudian diubah menjadi kunci dengan panjang yang sesuai dengan satu aplikasi scrypt lagi. Kunci ini kemudian digunakan untuk mengenkripsi dan mendekripsi kunci master. Untuk menyimpan kunci ini:

  1. Hasilkan kunci enkripsi disk 16-byte (DEK) acak dan garam 16-byte.
  2. Terapkan scrypt ke kata sandi pengguna dan garam untuk menghasilkan kunci perantara 1 (IK1) 32-byte.
  3. Pad IK1 dengan nol byte sesuai ukuran kunci pribadi yang terikat perangkat keras (HBK). Secara khusus, kami mengisi sebagai: 00 || IK1 || 00..00; satu byte nol, 32 byte IK1, 223 byte nol.
  4. Tanda tangani IK1 yang diisi dengan HBK untuk menghasilkan IK2 256-byte.
  5. Terapkan scrypt ke IK2 dan garam (garam yang sama seperti langkah 2) untuk menghasilkan IK3 32-byte.
  6. Gunakan 16 byte pertama IK3 sebagai KEK dan 16 byte terakhir sebagai IV.
  7. Enkripsi DEK dengan AES_CBC, dengan kunci KEK, dan inisialisasi vektor IV.

Mengubah kata sandi

Saat pengguna memilih untuk mengubah atau menghapus kata sandinya di pengaturan, UI mengirimkan perintah cryptfs changepw ke vold , dan vold mengenkripsi ulang kunci master disk dengan kata sandi baru.

Properti enkripsi

vold dan init berkomunikasi satu sama lain dengan mengatur properti. Berikut adalah daftar properti yang tersedia untuk enkripsi.

Properti Vold

Properti Keterangan
vold.decrypt trigger_encryption Enkripsi drive tanpa kata sandi.
vold.decrypt trigger_default_encryption Periksa drive untuk melihat apakah drive tersebut dienkripsi tanpa kata sandi. Jika ya, dekripsi dan pasang, jika tidak, setel vold.decrypt ke trigger_restart_min_framework.
vold.decrypt trigger_reset_main Diatur oleh vold untuk mematikan UI yang meminta kata sandi disk.
vold.decrypt trigger_post_fs_data Diatur oleh vold ke prep /data dengan direktori yang diperlukan, dkk.
vold.decrypt trigger_restart_framework Ditetapkan oleh vold untuk memulai kerangka nyata dan semua layanan.
vold.decrypt trigger_shutdown_framework Diatur oleh vold untuk mematikan kerangka penuh untuk memulai enkripsi.
vold.decrypt trigger_restart_min_framework Ditetapkan oleh vold untuk memulai UI bilah kemajuan untuk enkripsi atau meminta kata sandi, bergantung pada nilai ro.crypto.state .
vold.encrypt_progress Saat kerangka kerja dijalankan, jika properti ini disetel, masuk ke mode UI bilah kemajuan.
vold.encrypt_progress 0 to 100 UI bilah kemajuan harus menampilkan kumpulan nilai persentase.
vold.encrypt_progress error_partially_encrypted UI bilah kemajuan akan menampilkan pesan bahwa enkripsi gagal, dan memberi pengguna opsi untuk mengembalikan perangkat ke setelan pabrik.
vold.encrypt_progress error_reboot_failed UI bilah kemajuan akan menampilkan pesan yang menyatakan enkripsi selesai, dan memberi pengguna tombol untuk melakukan boot ulang perangkat. Kesalahan ini diperkirakan tidak akan terjadi.
vold.encrypt_progress error_not_encrypted UI bilah kemajuan akan menampilkan pesan yang menyatakan terjadi kesalahan, tidak ada data yang dienkripsi atau hilang, dan memberi pengguna tombol untuk mem-boot ulang sistem.
vold.encrypt_progress error_shutting_down UI bilah kemajuan tidak berjalan, jadi tidak jelas siapa yang akan merespons kesalahan ini. Dan hal itu seharusnya tidak pernah terjadi.
vold.post_fs_data_done 0 Ditetapkan oleh vold tepat sebelum menyetel vold.decrypt ke trigger_post_fs_data .
vold.post_fs_data_done 1 Ditetapkan oleh init.rc atau init.rc tepat setelah menyelesaikan tugas post-fs-data .

properti init

Properti Keterangan
ro.crypto.fs_crypto_blkdev Diatur dengan perintah vold checkpw untuk digunakan nanti dengan perintah vold restart .
ro.crypto.state unencrypted Ditetapkan oleh init untuk mengatakan sistem ini berjalan dengan /data ro.crypto.state encrypted . Ditetapkan oleh init untuk mengatakan sistem ini berjalan dengan /data terenkripsi.

ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags

Kelima properti ini disetel oleh init ketika mencoba memasang /data dengan parameter yang diteruskan dari init.rc . vold menggunakan ini untuk mengatur pemetaan kripto.
ro.crypto.tmpfs_options Diatur oleh init.rc dengan opsi yang harus digunakan init saat memasang sistem file tmpfs /data .

Inisiasi tindakan

on post-fs-data
on nonencrypted
on property:vold.decrypt=trigger_reset_main
on property:vold.decrypt=trigger_post_fs_data
on property:vold.decrypt=trigger_restart_min_framework
on property:vold.decrypt=trigger_restart_framework
on property:vold.decrypt=trigger_shutdown_framework
on property:vold.decrypt=trigger_encryption
on property:vold.decrypt=trigger_default_encryption