Enkripsi Disk Penuh

Enkripsi {i>full-disk <i}adalah proses encoding semua data pengguna pada sebuah perangkat Android menggunakan kunci yang dienkripsi. Setelah perangkat dienkripsi, semua data yang dibuat dienkripsi otomatis sebelum memasukkannya ke dalam {i>disk<i} dan semua operasi baca mendekripsi data secara otomatis sebelum mengembalikannya ke proses panggilan.

Enkripsi {i>full-disk<i} diperkenalkan ke Android pada 4.4, tetapi Android 5.0 diperkenalkan fitur baru ini:

  • Enkripsi cepat dibuat, yang hanya mengenkripsi blok yang digunakan pada partisi data menghindari {i>booting<i} pertama yang memakan waktu lama. Hanya sistem file ext4 dan f2fs saat ini mendukung enkripsi cepat.
  • Menambahkan forceencrypt flag fstab untuk dienkripsi saat booting pertama.
  • Menambahkan dukungan untuk pola dan enkripsi tanpa sandi.
  • Menambahkan penyimpanan kunci enkripsi yang didukung hardware menggunakan fitur Tepercaya Kemampuan penandatanganan Execution Environment (TEE) (seperti dalam TrustZone). Lihat Menyimpan kunci terenkripsi untuk informasi selengkapnya spesifikasi pendukung.

Perhatian: Perangkat diupgrade ke Android 5.0 lalu terenkripsi dapat dikembalikan ke keadaan tidak terenkripsi dengan cara reset ke setelan pabrik. Android 5.0 baru perangkat yang dienkripsi saat {i>booting<i} pertama tidak bisa dikembalikan ke keadaan tidak terenkripsi.

Cara kerja enkripsi disk penuh Android

Enkripsi disk penuh Android didasarkan pada dm-crypt, yang merupakan kernel yang berfungsi di lapisan perangkat blok. Karena ini, enkripsi berfungsi dengan Embedded MultiMediaCard (eMMC) dan perangkat flash serupa yang menampilkan {i>kernel<i} sebagai blok perangkat. Enkripsi tidak dimungkinkan dengan YAFFS, yang berkomunikasi langsung dengan dengan chip flash NAND.

Algoritma enkripsinya adalah 128 {i>Advanced Encryption Standard<i} (AES) dengan cipher-block chaining (CBC) dan ESSIV:SHA256. Kunci master dienkripsi dengan AES 128 bit melalui panggilan ke library OpenSSL. Anda harus menggunakan 128 bit atau lebih untuk kunci (dengan 256 bersifat opsional).

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

Dalam rilis Android 5.0, ada empat jenis status enkripsi:

  • default
  • PIN
  • sandi
  • pola

Saat booting pertama, perangkat membuat kunci master 128-bit yang dihasilkan secara acak dan kemudian melakukan {i>hash <i}dengan {i> password<i} {i>default<i} dan {i>salt<i} yang tersimpan. Sandi defaultnya adalah: "default_password" Namun, {i>hash<i} yang dihasilkan juga ditandatangani melalui TEE (seperti TrustZone), yang menggunakan {i>hash <i}dari tanda tangan untuk mengenkripsi kunci utama.

Anda dapat menemukan sandi default yang ditentukan dalam Project Open Source Android cryptfs.cpp .

Saat pengguna menyetel PIN/kartu atau kata sandi pada perangkat, hanya kunci 128-bit dienkripsi ulang dan disimpan. (misalnya perubahan PIN/pass/pola pengguna TIDAK menyebabkan enkripsi ulang data pengguna.) Perlu diketahui bahwa perangkat terkelola mungkin tunduk kepada batasan PIN, pola, atau sandi.

Enkripsi dikelola oleh init dan vold. init memanggil vold, dan vold menetapkan properti yang akan dipicu peristiwa dalam init. Bagian lain dari sistem melihat properti untuk melakukan tugas seperti status laporan, meminta {i>password<i}, atau meminta {i>factory reset<i} jika terjadi error fatal. Untuk memanggil fitur enkripsi di vold, sistem akan menggunakan alat command line Perintah cryptfs vdc: checkpw, restart, enablecrypto, changepw, cryptocomplete, verifypw, setfield, getfield, mountdefaultencrypted, getpwtype, getpw, dan clearpw.

Untuk mengenkripsi, mendekripsi, atau menghapus total /data, /data tidak boleh dipasang. Namun, untuk menampilkan antarmuka pengguna (UI), framework harus dimulai dan framework memerlukan /data agar dapat berjalan. Kepada Untuk mengatasi teka-teki ini, sistem file sementara dipasang di /data. Hal ini memungkinkan Android meminta sandi, menampilkan progres, atau menyarankan data hapus total sesuai kebutuhan. Hal ini memberlakukan 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 ulang proses tersebut proses pada sistem file /data yang sebenarnya. Untuk melakukannya, semua layanan harus berada dalam salah satu dari tiga grup: core, main, dan late_start.

  • core: Tidak pernah mematikan setelah memulai.
  • main: Matikan lalu mulai ulang setelah sandi disk dimasukkan.
  • late_start: Tidak dimulai sebelum /data didekripsi dan dipasang.

Untuk memicu tindakan ini, properti vold.decrypt disetel ke berbagai string. Untuk menghentikan dan memulai ulang 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.

Flow

Ada empat alur untuk perangkat terenkripsi. Perangkat dienkripsi hanya sekali kemudian mengikuti alur {i>boot<i} normal.

  • Mengenkripsi perangkat yang sebelumnya tidak dienkripsi:
    • Enkripsi perangkat baru dengan forceencrypt: Enkripsi wajib saat booting pertama (dimulai di Android L).
    • Enkripsi perangkat yang ada: Enkripsi yang dimulai pengguna (Android K dan yang lebih lama).
  • Booting perangkat terenkripsi:
    • Memulai perangkat terenkripsi tanpa sandi: Melakukan booting perangkat terenkripsi yang tidak memiliki kata sandi yang disetel (relevan untuk perangkat yang menjalankan Android 5.0 dan yang lebih baru).
    • Memulai perangkat terenkripsi dengan sandi: Melakukan booting perangkat terenkripsi yang memiliki {i>password<i} yang telah ditetapkan.

Selain flow ini, perangkat juga dapat gagal mengenkripsi /data. Setiap alurnya dijelaskan secara mendetail di bawah ini.

Mengenkripsi perangkat baru dengan forceencrypt

Ini adalah booting pertama normal untuk perangkat Android 5.0.

  1. Deteksi sistem file yang tidak dienkripsi dengan tanda forceencrypt

    /data tidak dienkripsi, tetapi harus dienkripsi karena forceencrypt mewajibkannya. Lepaskan /data.

  2. Mulai mengenkripsi /data

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

  3. Memasang tmpfs

    vold memasang /data tmpfs (menggunakan opsi tmpfs dari ro.crypto.tmpfs_options), lalu menyetel properti vold.encrypt_progress ke 0. vold menyiapkan /data tmpfs untuk melakukan booting pada sistem terenkripsi dan menyetel properti vold.decrypt menjadi: trigger_restart_min_framework

  4. Menampilkan framework untuk menunjukkan progres

    Karena perangkat hampir tidak memiliki data untuk dienkripsi, status progres akan sering kali tidak benar-benar muncul karena enkripsi terjadi begitu cepat. Lihat Enkripsi perangkat yang ada untuk mendapatkan informasi lainnya detail tentang UI progres.

  5. Saat /data dienkripsi, hapus framework

    vold menetapkan vold.decrypt ke trigger_default_encryption yang memulai Layanan defaultcrypto. (Ini memulai alur di bawah ini untuk memasang data pengguna terenkripsi default.) trigger_default_encryption memeriksa jenis enkripsi untuk melihat apakah /data dienkripsi dengan atau tanpa {i>password<i}. Karena perangkat Android 5.0 dienkripsi pada saat {i>booting<i} pertama, harus ada {i>password<i} belum diatur; oleh karena itu, kita mendekripsi dan memasang /data.

  6. Pasang /data

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

  7. Mulai framework

    vold menetapkan vold.decrypt ke trigger_restart_framework, yang melanjutkan booting biasa {i>checkout<i}.

Mengenkripsi perangkat yang ada

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

Proses ini dimulai oleh pengguna dan disebut sebagai "enkripsi di tempat" dalam kode. Saat pengguna memilih untuk mengenkripsi perangkat, UI memastikan baterai terisi penuh dan adaptor AC dicolokkan sehingga tersedia cukup kekuatan untuk menyelesaikan proses enkripsi.

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

Untuk mengaktifkan enkripsi di tempat, vold memulai loop untuk membaca setiap pesan sektor dari perangkat blok sesungguhnya dan kemudian menulisnya ke perangkat blok kripto. vold memeriksa apakah suatu sektor berada dalam digunakan sebelum membaca dan menulisnya, yang akan membuat enkripsi jauh lebih cepat pada perangkat baru yang memiliki sedikit atau tanpa data sama sekali.

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

  1. Periksa sandi

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

  2. Menghapus framework

    vold memeriksa adanya error, menampilkan -1 jika tidak dapat dienkripsi, dan mencetak alasan di log. Jika dapat mengenkripsi, properti akan menetapkan vold.decrypt ke trigger_shutdown_framework. Ini menyebabkan init.rc menghentikan layanan di class late_start dan main.

  3. Membuat footer kripto
  4. Membuat file breadcrumb
  5. Mulai ulang
  6. Mendeteksi file breadcrumb
  7. Mulai mengenkripsi /data

    vold kemudian menyiapkan pemetaan kripto, yang membuat perangkat blok kripto virtual yang dipetakan ke perangkat blok asli tetapi mengenkripsi setiap sektor seperti yang tertulis, dan membongkar enkripsi setiap sektor saat dibaca. vold lalu membuat dan menulis metadata kripto.

  8. Saat mengenkripsi, instal tmpfs

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

  9. Menampilkan framework untuk menunjukkan progres

    trigger_restart_min_framework menyebabkan init.rc memulai class layanan main. Ketika kerangka kerja melihat bahwa vold.encrypt_progress disetel ke 0, dan status progres akan muncul UI, yang membuat kueri properti tersebut setiap lima detik dan memperbarui status progres. Loop enkripsi memperbarui vold.encrypt_progress setiap kali mengenkripsi persen lain dari partisi.

  10. Saat /data dienkripsi, perbarui footer kripto

    Saat /data berhasil dienkripsi, vold akan dihapus flag ENCRYPTION_IN_PROGRESS di metadata.

    Saat perangkat berhasil dibuka kuncinya, {i>password<i} kemudian digunakan untuk mengenkripsi kunci master dan {i>footer<i} kripto diperbarui.

    Jika mulai ulang gagal karena alasan tertentu, vold akan menetapkan properti vold.encrypt_progress ke error_reboot_failed dan UI akan menampilkan pesan yang meminta pengguna menekan tombol untuk memulai ulang. Hal ini tidak diharapkan terjadi.

Memulai perangkat terenkripsi dengan enkripsi default

Inilah yang terjadi ketika Anda mem-{i>booting<i} perangkat terenkripsi tanpa {i>password<i}. Karena perangkat Android 5.0 dienkripsi saat {i>booting<i} pertama, seharusnya tidak ada sandi, sehingga ini adalah status enkripsi default.

  1. Deteksi /data yang dienkripsi tanpa sandi

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

    vold menetapkan vold.decrypt ke trigger_default_encryption, yang memulai Layanan defaultcrypto. trigger_default_encryption memeriksa jenis enkripsi untuk melihat apakah /data dienkripsi dengan atau tanpa menggunakan {i>password<i}.

  2. Mendekripsi /data

    Membuat perangkat dm-crypt di atas perangkat blok sehingga perangkat siap digunakan.

  3. Memasang /data

    vold lalu memasang partisi /data asli yang didekripsi dan kemudian menyiapkan partisi baru. Hal ini menetapkan properti vold.post_fs_data_done ke 0, lalu menetapkan vold.decrypt ke trigger_post_fs_data. Hal ini menyebabkan init.rc berjalan perintah post-fs-data-nya. Mereka akan membuat direktori yang diperlukan atau link, lalu tetapkan vold.post_fs_data_done ke 1.

    Setelah vold melihat angka 1 di properti tersebut, properti akan ditetapkan vold.decrypt ke: trigger_restart_framework. Ini menyebabkan init.rc memulai layanan di class main lagi dan memulai layanan di kelas late_start untuk waktu sejak booting.

  4. Mulai framework

    Sekarang, framework akan mem-booting semua layanannya menggunakan /data yang didekripsi, dan sistem siap digunakan.

Memulai perangkat terenkripsi tanpa enkripsi default

Inilah yang terjadi ketika Anda mem-{i>booting<i} perangkat terenkripsi yang memiliki set {i>password<i}. Sandi perangkat dapat berupa PIN, pola, atau sandi.

  1. Mendeteksi perangkat terenkripsi dengan sandi

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

    vold menetapkan vold.decrypt ke trigger_restart_min_framework karena /data adalah yang dienkripsi dengan {i>password<i}.

  2. Memasang tmpfs

    init menetapkan lima properti untuk menyimpan opsi pemasangan awal 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 heksadesimal 8 digit ASCII yang didahului 0x)
  3. Memulai framework untuk meminta sandi

    Framework dimulai dan melihat bahwa vold.decrypt disetel ke trigger_restart_min_framework. Hal ini memberi tahu kerangka kerja bahwa melakukan booting pada disk /data tmpfs dan perlu mendapatkan sandi pengguna.

    Pertama, perlu dipastikan bahwa {i>disk<i} telah dienkripsi dengan benar. Ini mengirimkan perintah cryptfs cryptocomplete ke vold. vold menampilkan 0 jika enkripsi berhasil diselesaikan, -1 pada error internal, atau -2 jika enkripsi tidak berhasil diselesaikan. vold menentukan dengan melihat metadata kripto untuk CRYPTO_ENCRYPTION_IN_PROGRESS penanda. Jika sudah diatur, proses enkripsi akan terganggu, dan tidak ada data yang dapat digunakan pada perangkat. Jika vold menampilkan error, UI akan menampilkan pesan kepada pengguna untuk me-{i>reboot<i} dan mereset perangkat ke setelan pabrik, dan memberi pengguna menekan tombol untuk melakukannya.

  4. Mendekripsi data dengan sandi

    Setelah cryptfs cryptocomplete berhasil, framework menampilkan UI yang meminta {i>disk password<i}. UI memeriksa {i> password<i} dengan mengirimkan perintah cryptfs checkpw ke vold. Jika {i>password-<i}nya benar (yang ditentukan dengan keberhasilan pemasangan mendekripsi /data di lokasi sementara, lalu melepasnya), vold menyimpan nama perangkat blok yang didekripsi di properti ro.crypto.fs_crypto_blkdev dan menampilkan status 0 ke UI. Jika {i>password<i} salah, ia mengembalikan -1 ke UI.

  5. Menghentikan framework

    UI akan menampilkan grafis boot kriptografis, lalu memanggil vold dengan perintah cryptfs restart. vold menetapkan properti vold.decrypt hingga trigger_reset_main, yang menyebabkan init.rc untuk melakukan class_reset main. Tindakan ini akan menghentikan semua layanan di class utama, yang memungkinkan tmpfs /data dilepas.

  6. Pasang /data

    vold lalu memasang partisi /data asli yang didekripsi dan menyiapkan partisi baru (yang mungkin tidak pernah disiapkan jika enkripsi itu dienkripsi dengan opsi hapus, yang tidak didukung sejak awal rilis). Fungsi ini menetapkan properti vold.post_fs_data_done ke 0, lalu menetapkan vold.decrypt ke trigger_post_fs_data. Hal ini menyebabkan init.rc untuk menjalankan perintah post-fs-data. Mereka akan membuat direktori atau tautan yang diperlukan lalu mengaturnya vold.post_fs_data_done hingga 1. Setelah vold melihat angka 1 di properti tersebut, fungsi ini menetapkan properti vold.decrypt ke trigger_restart_framework. Hal ini menyebabkan init.rc dimulai layanan di kelas main lagi dan juga memulai layanan di kelas late_start untuk pertama kalinya sejak booting.

  7. Mulai framework lengkap

    Sekarang framework akan mem-booting semua layanannya menggunakan /data yang didekripsi sistem file, dan sistem itu siap digunakan.

Gagal

Perangkat yang gagal mendekripsi mungkin akan bermasalah karena beberapa alasan. Perangkat dimulai dengan rangkaian langkah normal untuk booting:

  1. Deteksi perangkat terenkripsi dengan sandi
  2. Pasang tmpfs
  3. Mulai framework untuk meminta sandi

Namun, setelah framework terbuka, perangkat dapat mengalami beberapa error:

  • Sandi cocok, tetapi tidak dapat mendekripsi data
  • Pengguna memasukkan sandi yang salah sebanyak 30 kali

Jika error ini tidak diselesaikan, minta pengguna untuk menghapus total ke setelan pabrik:

Jika vold mendeteksi error selama proses enkripsi, dan jika tidak ada data yang dihancurkan dan framework aktif, vold menetapkan properti vold.encrypt_progress menjadi error_not_encrypted. UI meminta pengguna untuk memulai ulang dan memberi tahu mereka tentang proses enkripsi tidak pernah dimulai. Jika {i>error <i}terjadi setelah {i>framework<i} dihapus, tapi sebelum UI status progres aktif, vold akan memulai ulang sistem. Jika mulai ulang gagal, tindakan ini akan menyetel vold.encrypt_progress ke error_shutting_down dan menampilkan -1; tapi tidak akan ada apa-apa untuk menangkap error. Hal ini tidak diharapkan terjadi.

Jika vold mendeteksi error selama proses enkripsi, sistem akan menetapkan vold.encrypt_progress ke error_partially_encrypted dan menghasilkan -1. UI kemudian akan menampilkan pesan yang mengatakan bahwa gagal dan menyediakan tombol bagi pengguna untuk melakukan {i>factory reset<i} perangkat.

Menyimpan kunci terenkripsi

Kunci terenkripsi disimpan dalam metadata kripto. Dukungan hardware yang diimplementasikan dengan menggunakan kemampuan penandatanganan Trusted Execution Environment (TEE). Sebelumnya, kita mengenkripsi kunci master dengan kunci yang dihasilkan melalui penerapan scrypt {i>password<i} pengguna dan {i> salt<i} yang disimpan. Untuk membuat kunci menjadi tangguh terhadap serangan {i>off-box<i}, kami memperluas algoritma ini dengan menandatangani kunci yang dihasilkan dengan kunci TEE yang disimpan. Tanda tangan yang dihasilkan kemudian diubah menjadi tanda tangan yang kunci dengan satu aplikasi{i> scrypt<i} lagi. Kunci ini kemudian digunakan untuk mengenkripsi dan membongkar enkripsi kunci masternya. Untuk menyimpan kunci ini:

  1. Membuat kunci enkripsi disk 16 byte (DEK) acak dan salt 16 byte.
  2. Menerapkan scrypt ke sandi pengguna dan salt untuk menghasilkan perantara 32 byte tombol 1 (IK1).
  3. Pad IK1 dengan nol byte untuk ukuran kunci pribadi yang terikat hardware (HBK). Secara khusus, kita berikan: 00 || IK1 || 00..00; satu byte nol, 32 IK1 byte, 223 0 byte.
  4. Menandatangani IK1 dengan HBK untuk menghasilkan IK2 256 byte.
  5. Terapkan scrypt ke IK2 dan salt (salt yang sama seperti langkah 2) untuk menghasilkan IK3 32-byte.
  6. Gunakan 16 byte IK3 pertama sebagai KEK dan 16 byte terakhir sebagai IV.
  7. Enkripsi DEK dengan AES_CBC, dengan kunci KEK, dan initialization vector IV.

Mengubah {i>password<i}

Saat pengguna memilih untuk mengubah atau menghapus {i>password<i} mereka di pengaturan, UI akan mengirim perintah cryptfs changepw ke vold, dan vold mengenkripsi ulang kunci master disk dengan sandi baru.

Properti enkripsi

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

Properti Vold

Properti Deskripsi
vold.decrypt trigger_encryption Mengenkripsi drive tanpa {i>password<i}.
vold.decrypt trigger_default_encryption Periksa {i>drive<i} untuk melihat apakah dienkripsi tanpa sandi. Jika ya, dekripsi dan memasangnya, Jika tidak, tetapkan vold.decrypt ke trigger_restart_min_framework.
vold.decrypt trigger_reset_main Setel by vold untuk mematikan UI yang meminta sandi disk.
vold.decrypt trigger_post_fs_data Ditetapkan berdasarkan vold untuk menyiapkan /data dengan direktori yang diperlukan, et al.
vold.decrypt trigger_restart_framework Disetel oleh vold untuk memulai framework sebenarnya dan semua layanan.
vold.decrypt trigger_shutdown_framework Setel dengan vold untuk menonaktifkan framework lengkap untuk memulai enkripsi.
vold.decrypt trigger_restart_min_framework Atur oleh vold untuk memulai UI status progres untuk enkripsi atau memasukkan {i>password<i}, tergantung pada nilai ro.crypto.state.
vold.encrypt_progress Saat kerangka kerja dimulai, jika properti ini diatur, masukkan mode UI status progres.
vold.encrypt_progress 0 to 100 UI status progres harus menampilkan kumpulan nilai persentase.
vold.encrypt_progress error_partially_encrypted UI status progres akan menampilkan pesan bahwa enkripsi gagal, dan berikan pengguna pilihan untuk reset perangkat ke setelan pabrik.
vold.encrypt_progress error_reboot_failed UI status progres akan menampilkan pesan yang menyatakan enkripsi selesai, dan memberi pengguna tombol untuk {i>reboot<i} perangkat. Error ini hal ini tidak diharapkan akan terjadi.
vold.encrypt_progress error_not_encrypted UI status progres harus tampilkan pesan yang menyatakan ada error terjadi, tidak ada data yang dienkripsi atau hilang, dan memberi pengguna tombol untuk {i>reboot<i} sistem.
vold.encrypt_progress error_shutting_down UI status progres tidak berjalan, sehingga tidak jelas siapa yang akan merespons terhadap error ini. Dan itu seharusnya tidak terjadi.
vold.post_fs_data_done 0 Ditetapkan oleh vold tepat sebelum menetapkan 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 Deskripsi
ro.crypto.fs_crypto_blkdev Ditetapkan oleh perintah vold, checkpw, untuk digunakan nanti oleh perintah vold restart.
ro.crypto.state unencrypted Disetel oleh init untuk menyatakan bahwa sistem ini berjalan dengan paket yang tidak dienkripsi /data ro.crypto.state encrypted. Setel oleh init untuk mengucapkan sistem ini berjalan dengan /data yang dienkripsi.

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 ditetapkan oleh init saat mencoba memasang /data dengan parameter yang diteruskan dari init.rc. vold menggunakannya untuk menyiapkan pemetaan kripto.
ro.crypto.tmpfs_options Ditetapkan oleh init.rc dengan opsi yang harus digunakan init saat memasang sistem file /data tmpfs.

Tindakan init

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