Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mengaktifkan Adiantum

Adiantum adalah metode enkripsi yang dirancang untuk perangkat yang menjalankan Android 9 dan lebih tinggi yang CPU kurang AES petunjuk. Jika Anda pengiriman perangkat berbasis ARM dengan ARMv8 Kriptografi Ekstensi atau perangkat berbasis x86 dengan AES-NI, Anda tidak harus menggunakan Adiantum. AES lebih cepat pada platform tersebut.

Untuk perangkat yang tidak memiliki instruksi CPU AES ini, Adiantum menyediakan enkripsi pada perangkat Anda dengan overhead kinerja yang sangat kecil. Untuk nomor benchmarking, melihat kertas Adiantum . Untuk sumber benchmarking untuk berjalan di hardware Anda, lihat sumber Adiantum di GitHub .

Untuk mengaktifkan Adiantum di perangkat yang menjalankan Android 9 atau lebih tinggi, Anda perlu membuat perubahan kernel dan ruang pengguna.

Perubahan kernel

Adiantum didukung oleh kernel umum Android, versi 4.9 dan lebih tinggi.

Jika kernel perangkat Anda belum memiliki dukungan Adiantum, pilihlah perubahan yang tercantum di bawah ini. Jika Anda mengalami kesulitan cherry-picking, perangkat yang menggunakan enkripsi full-disk (FDE) dapat mengecualikan fscrypt: Patch.

Versi kernel Patch kripto dan fscrypt dm-crypt Patch
4.19 4.19 inti dm-crypt Patch
4.14 4.14 inti dm-crypt Patch
4.9 4.9 kernel dm-crypt Patch

Aktifkan Adiantum di kernel Anda

Android 11 dan lebih tinggi

Jika perangkat Anda diluncurkan dengan Android 11 atau lebih tinggi, aktifkan pengaturan berikut di konfigurasi kernel perangkat Anda:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_FS_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_DM_DEFAULT_KEY=y

Jika perangkat Anda menjalankan kernel ARM 32-bit, aktifkan juga instruksi NEON untuk meningkatkan kinerja:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Android 9 dan 10

Jika perangkat Anda diluncurkan dengan Android 9 atau 10, maka diperlukan pengaturan konfigurasi kernel yang sedikit berbeda. Aktifkan pengaturan berikut:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Jika perangkat Anda menggunakan enkripsi berbasis file, aktifkan juga:

CONFIG_F2FS_FS_ENCRYPTION=y

Terakhir, jika perangkat Anda menjalankan kernel ARM 32-bit, aktifkan instruksi NEON untuk meningkatkan kinerja:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Perubahan ruang pengguna

Untuk perangkat yang menjalankan Android 10 atau lebih tinggi, perubahan userspace Adiantum sudah ada.

Untuk perangkat yang menjalankan Android 9, pilih perubahan berikut:

Aktifkan Adiantum di perangkat Anda

Pertama, pastikan bahwa perangkat Anda memiliki PRODUCT_SHIPPING_API_LEVEL diatur dengan benar untuk mencocokkan versi Android itu meluncurkan dengan. Misalnya, peluncuran perangkat dengan Android 11 harus memiliki PRODUCT_SHIPPING_API_LEVEL := 30 . Ini penting karena beberapa pengaturan enkripsi memiliki default yang berbeda pada versi peluncuran yang berbeda.

Perangkat dengan enkripsi berbasis file

Untuk mengaktifkan enkripsi file berbasis Adiantum pada penyimpanan internal perangkat Anda, tambahkan opsi berikut untuk kolom terakhir (kolom fs_mgr_flags) dari baris untuk userdata partisi di perangkat fstab File:

fileencryption=adiantum

Jika perangkat Anda meluncurkan dengan Android 11 atau lebih tinggi, maka memungkinkan enkripsi metadata juga diperlukan. Untuk menggunakan Adiantum untuk enkripsi metadata pada penyimpanan internal, fs_mgr_flags untuk userdata juga harus berisi pilihan berikut:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

Berikutnya, mengaktifkan enkripsi Adiantum pada penyimpanan adoptable . Untuk melakukan hal ini, mengatur properti sistem berikut di PRODUCT_PROPERTY_OVERRIDES :

Untuk Android 11 dan lebih tinggi:

ro.crypto.volume.options=adiantum
ro.crypto.volume.metadata.encryption=adiantum

Untuk Android 9 dan 10:

ro.crypto.volume.contents_mode=adiantum
ro.crypto.volume.filenames_mode=adiantum
ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Akhirnya, opsional menambahkan blk-crypto-fallback.num_keyslots=1 ke baris perintah kernel. Ini akan sedikit mengurangi penggunaan memori saat enkripsi metadata Adiantum digunakan. Sebelum melakukan ini, pastikan bahwa inlinecrypt opsi gunung tidak ditentukan dalam fstab . Jika ditentukan, menghapusnya, karena tidak diperlukan untuk enkripsi Adiantum, dan hal itu menyebabkan masalah kinerja ketika digunakan dalam kombinasi dengan blk-crypto-fallback.num_keyslots=1 .

Untuk memverifikasi bahwa implementasi Anda berhasil, ambil laporan bug atau jalankan:

adb root
adb shell dmesg

Jika Adiantum diaktifkan dengan benar, Anda akan melihat ini di log kernel:

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"

Jika Anda mengaktifkan enkripsi metadata, jalankan juga yang berikut ini untuk memverifikasi bahwa enkripsi metadata Adiantum diaktifkan dengan benar:

adb root
adb shell dmctl table userdata

Bidang ketiga output harus xchacha12,aes-adiantum-plain64 .

Perangkat dengan enkripsi disk penuh

Untuk mengaktifkan Adiantum dan meningkatkan kinerjanya, mengatur properti ini di PRODUCT_PROPERTY_OVERRIDES :

ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Pengaturan fde_sector_size 4096 meningkatkan kinerja, tetapi tidak diperlukan untuk Adiantum bekerja. Untuk menggunakan pengaturan ini, partisi data pengguna harus dimulai pada offset 4096-byte pada disk.

Dalam fstab , untuk set userdata:

forceencrypt=footer

Untuk memverifikasi bahwa implementasi Anda berhasil, ambil laporan bug atau jalankan:

adb root
adb shell dmesg

Jika Adiantum diaktifkan dengan benar, Anda akan melihat ini di log kernel:

device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"