Enkripsi disk penuh

Enkripsi disk penuh adalah proses mengenkode semua data pengguna di perangkat Android menggunakan kunci yang dienkripsi. Setelah perangkat dienkripsi, semua data yang dibuat pengguna akan otomatis dienkripsi sebelum disimpan ke disk dan semua operasi baca akan otomatis mendekripsi data sebelum mengembalikannya ke proses panggilan.

Enkripsi disk penuh diperkenalkan pada Android pada 4.4, tetapi Android 5.0 memperkenalkan fitur-fitur baru ini:

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

Perhatian: Perangkat yang diupgrade ke Android 5.0 lalu dienkripsi dapat dikembalikan ke keadaan tidak terenkripsi dengan mereset ke setelan pabrik. Perangkat Android 5.0 baru yang dienkripsi saat booting 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 di lapisan perangkat blok. Oleh karena hal ini, enkripsi berfungsi dengan Embedded MultiMediaCard (eMMC) dan perangkat flash serupa yang menampilkan diri ke kernel sebagai perangkat blok. Enkripsi tidak dapat dilakukan 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 library OpenSSL. Anda harus menggunakan 128 bit atau lebih untuk kunci tersebut (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, lalu melakukan hashing dengan sandi default dan salt yang disimpan. Sandi defaultnya adalah: "default_password". Namun, hash yang dihasilkan juga ditandatangani melalui TEE (seperti TrustZone), yang menggunakan hash tanda tangan untuk mengenkripsi kunci master.

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

Saat pengguna menetapkan PIN/sandi atau sandi di perangkat, hanya kunci 128-bit yang dienkripsi ulang dan disimpan. (yaitu perubahan PIN/pass/pola pengguna TIDAK menyebabkan enkripsi ulang data pengguna.) Perlu diketahui bahwa perangkat terkelola mungkin tunduk kepada pembatasan PIN, pola, atau sandi.

Enkripsi dikelola oleh init dan vold. init memanggil vold, dan vold menetapkan properti untuk memicu peristiwa dalam init. Bagian lain dari sistem juga melihat properti untuk melakukan tugas seperti status laporan, meminta sandi, atau perintah untuk mereset ke setelan pabrik jika terjadi error fatal. Untuk memanggil fitur enkripsi di vold, sistem 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. Untuk menyelesaikan masalah ini, sistem file sementara dipasang di /data. Hal ini memungkinkan Android meminta sandi, menampilkan progres, atau menyarankan penghapusan data sesuai kebutuhan. Hal ini menerapkan batasan bahwa untuk beralih dari sistem file sementara ke sistem file /data sesungguhnya, sistem harus menghentikan setiap proses yang berisi file terbuka pada sistem file sementara dan memulai ulang proses tersebut pada sistem file /data yang sebenarnya. Untuk melakukannya, semua layanan harus berada dalam salah satu dari tiga grup: core, main, dan late_start.

  • core: Jangan pernah dimatikan setelah dimulai.
  • 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 ditetapkan ke berbagai string. Untuk menghentikan dan memulai ulang layanan, perintah init adalah:

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

Flow

Ada empat alur untuk perangkat terenkripsi. Perangkat dienkripsi hanya sekali, lalu mengikuti alur booting normal.

  • Mengenkripsi perangkat yang sebelumnya tidak dienkripsi:
    • Mengenkripsi perangkat baru dengan forceencrypt: Enkripsi wajib saat booting pertama (dimulai di Android L).
    • Mengenkripsi perangkat yang ada: Enkripsi yang dimulai pengguna (Android K dan yang lebih lama).
  • Mem-booting perangkat terenkripsi:
    • Memulai perangkat terenkripsi tanpa sandi: Mem-booting perangkat terenkripsi yang belum memiliki sandi yang ditetapkan (relevan untuk perangkat yang menjalankan Android 5.0 dan yang lebih baru).
    • Memulai perangkat terenkripsi dengan sandi: Melakukan booting perangkat terenkripsi yang memiliki sandi yang telah ditetapkan.

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

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 menyebabkan vold mengenkripsi /data tanpa sandi. (Tidak ada yang ditetapkan karena ini harus berupa perangkat baru.)

  3. Memasang tmpfs

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

  4. Menampilkan framework untuk menunjukkan progres

    Karena perangkat hampir tidak memiliki data untuk dienkripsi, status progres tidak akan sering muncul karena enkripsi terjadi sangat cepat. Lihat Mengenkripsi perangkat yang ada untuk mengetahui detail selengkapnya tentang UI progres.

  5. Jika /data dienkripsi, hapus framework

    vold menetapkan vold.decrypt ke trigger_default_encryption yang memulai layanan defaultcrypto. (Tindakan ini akan memulai alur di bawah untuk memasang userdata terenkripsi default.) trigger_default_encryption memeriksa jenis enkripsi untuk melihat apakah /data dienkripsi dengan atau tanpa sandi. Karena perangkat Android 5.0 dienkripsi saat booting pertama, sandi tidak boleh ditetapkan. Oleh karena itu, kita mendekripsi dan memasang /data.

  6. Pasang /data

    init kemudian memasang /data pada tmpfs RAMDisk menggunakan parameter yang diambilnya dari ro.crypto.tmpfs_options, yang ditetapkan dalam init.rc.

  7. Framework awal

    vold menetapkan vold.decrypt ke trigger_restart_framework, yang melanjutkan proses booting biasa.

Mengenkripsi perangkat yang ada

Hal ini terjadi saat Anda mengenkripsi perangkat Android K atau yang lebih lama yang tidak dienkripsi dan telah dimigrasikan ke L.

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

Peringatan: Jika daya perangkat habis dan perangkat mati sebelum selesai mengenkripsi, data file akan dibiarkan dalam status terenkripsi sebagian. Perangkat harus direset ke setelan pabrik dan semua data hilang.

Untuk mengaktifkan enkripsi di tempat, vold memulai loop untuk membaca setiap sektor perangkat blok sebenarnya, lalu menulisnya ke perangkat blok kripto. vold memeriksa apakah suatu sektor sedang digunakan sebelum membaca dan menulisnya. Hal tersebut membuat enkripsi jauh lebih cepat pada perangkat baru yang memiliki sedikit data atau bahkan tidak memiliki 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. Membongkar framework

    vold memeriksa error, menampilkan -1 jika tidak dapat mengenkripsi, dan mencetak alasannya dalam log. Jika dapat dienkripsi, properti vold.decrypt akan ditetapkan ke trigger_shutdown_framework. Hal 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 sebenarnya, tetapi mengenkripsi setiap sektor saat ditulis, dan mendekripsi setiap sektor saat dibaca. vold kemudian membuat dan menulis metadata crypto.

  8. Saat mengenkripsi, pasang tmpfs

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

  9. Menampilkan framework untuk menunjukkan progres

    trigger_restart_min_framework menyebabkan init.rc memulai class layanan main. Saat framework melihat bahwa vold.encrypt_progress ditetapkan ke 0, framework akan menampilkan UI status progres, yang mengkueri properti tersebut setiap lima detik dan memperbarui status progres. Loop enkripsi mengupdate vold.encrypt_progress setiap kali mengenkripsi persentase partisi lainnya.

  10. Saat /data dienkripsi, perbarui footer kripto

    Saat /data berhasil dienkripsi, vold akan menghapus flag ENCRYPTION_IN_PROGRESS dalam metadata.

    Saat perangkat berhasil dibuka kuncinya, sandi kemudian digunakan untuk mengenkripsi kunci master dan footer 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 akan 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 pertama kali di-booting, tidak boleh ada sandi yang ditetapkan, sehingga ini adalah status enkripsi default.

  1. Mendeteksi /data terenkripsi tanpa sandi

    Mendeteksi bahwa perangkat Android dienkripsi karena /data tidak dapat dipasang dan salah satu flag 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 sandi.

  2. Dekripsi /data

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

  3. Memasang /data

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

    Setelah vold melihat 1 di properti tersebut, properti vold.decrypt akan ditetapkan ke: trigger_restart_framework. Hal ini menyebabkan init.rc memulai layanan di class main lagi dan juga memulai layanan di class late_start untuk pertama kali sejak booting.

  4. Framework awal

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

Memulai perangkat terenkripsi tanpa enkripsi default

Hal ini terjadi saat Anda mem-booting perangkat terenkripsi yang memiliki sandi yang ditetapkan. 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 dienkripsi dengan sandi.

  2. Memasang tmpfs

    init menetapkan 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 heksadesimal 8 digit ASCII yang diawali dengan 0x)
  3. Memulai framework untuk meminta sandi

    Framework dimulai dan melihat bahwa vold.decrypt ditetapkan ke trigger_restart_min_framework. Hal ini memberi tahu framework bahwa sistem di-booting pada disk /data tmpfs dan perlu mendapatkan sandi pengguna.

    Pertama, perlu dipastikan bahwa {i>disk<i} telah dienkripsi dengan benar. Tindakan ini akan mengirim perintah cryptfs cryptocomplete ke vold. vold menampilkan 0 jika enkripsi berhasil diselesaikan, -1 pada error internal, atau -2 jika enkripsi tidak berhasil diselesaikan. vold menentukannya dengan mencari flag CRYPTO_ENCRYPTION_IN_PROGRESS di metadata kripto. Jika disetel, proses enkripsi terganggu, dan tidak ada data yang dapat digunakan di perangkat. Jika vold menampilkan error, UI akan menampilkan pesan kepada pengguna untuk memulai ulang dan mereset perangkat ke setelan pabrik, serta memberikan tombol kepada pengguna untuk menekan tombol tersebut.

  4. Mendekripsi data dengan sandi

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

  5. Menghentikan framework

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

  6. Pasang /data

    vold kemudian memasang partisi /data asli yang didekripsi dan menyiapkan partisi baru (yang mungkin tidak pernah disiapkan jika dienkripsi dengan opsi penghapusan total, yang tidak didukung pada rilis pertama). 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 menjalankan perintah post-fs-data-nya. Fungsi ini membuat direktori atau link yang diperlukan, lalu menetapkan vold.post_fs_data_done ke 1. Saat vold melihat 1 di properti tersebut, properti vold.decrypt akan ditetapkan ke trigger_restart_framework. Hal ini menyebabkan init.rc memulai layanan di class main lagi dan juga memulai layanan di class late_start untuk pertama kalinya sejak booting.

  7. Memulai framework lengkap

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

Gagal

Perangkat yang gagal mendekripsi mungkin akan bermasalah karena beberapa alasan. Perangkat mulai dengan serangkaian langkah normal untuk melakukan booting:

  1. Mendeteksi perangkat terenkripsi dengan sandi
  2. Memasang 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 30 kali

Jika error ini tidak teratasi, minta pengguna untuk melakukan reset ke setelan pabrik:

Jika vold mendeteksi error selama proses enkripsi, dan jika belum ada data yang dihancurkan dan framework sudah aktif, vold akan menetapkan properti vold.encrypt_progress ke error_not_encrypted. UI akan meminta pengguna untuk memulai ulang dan memberi tahu mereka bahwa proses enkripsi tidak pernah dimulai. Jika error terjadi setelah framework dibongkar, tetapi sebelum UI status progres muncul, vold akan memulai ulang sistem. Jika mulai ulang gagal, mulai ulang akan menetapkan vold.encrypt_progress ke error_shutting_down dan menampilkan -1; tetapi tidak akan ada apa pun untuk menangkap error. Hal ini tidak diharapkan terjadi.

Jika vold mendeteksi error selama proses enkripsi, metode tersebut akan menetapkan vold.encrypt_progress ke error_partially_encrypted dan menampilkan -1. Selanjutnya, UI akan menampilkan pesan yang menyatakan bahwa enkripsi gagal dan menyediakan tombol bagi pengguna untuk mereset perangkat ke setelan pabrik.

Menyimpan kunci terenkripsi

Kunci terenkripsi disimpan dalam metadata kripto. Dukungan hardware diimplementasikan menggunakan kemampuan penandatanganan Trusted Execution Environment (TEE). Sebelumnya, kami mengenkripsi kunci master dengan kunci yang dihasilkan melalui penerapan scrypt ke sandi pengguna dan salt yang disimpan. Agar kunci tahan terhadap serangan di luar kotak, kami memperluas algoritma ini dengan menandatangani kunci yang dihasilkan dengan kunci TEE yang disimpan. Tanda tangan yang dihasilkan kemudian diubah menjadi kunci panjang yang sesuai oleh satu lagi penerapan scrypt. Kunci ini kemudian digunakan untuk mengenkripsi dan mendekripsi kunci utama. Untuk menyimpan kunci ini:

  1. Buat kunci enkripsi disk (DEK) acak 16 byte dan salt 16 byte.
  2. Terapkan scrypt ke sandi pengguna dan salt untuk menghasilkan kunci perantara 1 (IK1) 32 byte.
  3. Pad IK1 dengan nol byte hingga sebesar kunci pribadi yang terikat hardware (HBK). Secara khusus, kita berikan: 00 || IK1 || 00..00; satu byte nol, 32 IK1 byte, 223 nol byte.
  4. Tanda tangani IK1 yang ditambahkan 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 pertama IK3 sebagai KEK dan 16 byte terakhir sebagai IV.
  7. Enkripsi DEK dengan AES_CBC, dengan kunci KEK, dan initialization vector IV.

Mengubah sandi

Saat pengguna memilih untuk mengubah atau menghapus sandi di setelan, UI akan mengirim perintah cryptfs changepw ke vold, dan vold akan mengenkripsi ulang kunci master disk dengan sandi baru.

Properti enkripsi

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

Properti Vold

Properti Deskripsi
vold.decrypt trigger_encryption Enkripsi drive tanpa sandi.
vold.decrypt trigger_default_encryption Periksa drive untuk melihat apakah dienkripsi tanpa sandi. Jika ya, dekripsi dan pasang file tersebut, versi lain akan menetapkan vold.decrypt ke trigger_restart_min_framework.
vold.decrypt trigger_reset_main Ditetapkan oleh vold untuk menonaktifkan UI yang meminta sandi disk.
vold.decrypt trigger_post_fs_data Ditetapkan oleh vold untuk menyiapkan /data dengan direktori yang diperlukan, dll.
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 Setel dengan vold untuk memulai UI status progres untuk enkripsi atau permintaan sandi, bergantung pada nilai ro.crypto.state.
vold.encrypt_progress Saat framework dimulai, jika properti ini sudah ditetapkan, masuk ke mode UI status progres.
vold.encrypt_progress 0 to 100 UI status progres harus menampilkan nilai persentase yang ditetapkan.
vold.encrypt_progress error_partially_encrypted UI status progres akan menampilkan pesan bahwa enkripsi gagal, dan memberi pengguna opsi untuk mereset perangkat ke setelan pabrik.
vold.encrypt_progress error_reboot_failed UI status progres akan menampilkan pesan yang menyatakan bahwa enkripsi telah selesai, dan memberi pengguna tombol untuk memulai ulang perangkat. Error ini tidak diharapkan terjadi.
vold.encrypt_progress error_not_encrypted UI status progres akan menampilkan pesan yang menyatakan bahwa error terjadi, tidak ada data yang dienkripsi atau hilang, dan memberi pengguna tombol untuk memulai ulang sistem.
vold.encrypt_progress error_shutting_down UI status progres tidak berjalan, sehingga tidak jelas siapa yang merespons error ini. Dan hal ini seharusnya tidak pernah terjadi.
vold.post_fs_data_done 0 Tetapkan oleh vold 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 /data ro.crypto.state encrypted yang tidak terenkripsi. Ditetapkan oleh init untuk menyatakan 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

Lima 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