Mengaktifkan adiantum

Adiantum adalah metode enkripsi yang dirancang untuk perangkat yang menjalankan Android 9 dan yang lebih tinggi yang CPU-nya tidak memiliki petunjuk AES. Jika Anda mengirimkan perangkat berbasis ARM dengan ARMv8 Cryptography Extensions atau perangkat berbasis x86 dengan AES-NI, Anda tidak boleh menggunakan Adiantum. AES lebih cepat di platform tersebut.

Untuk perangkat yang tidak memiliki petunjuk CPU AES ini, Adiantum menyediakan enkripsi di perangkat Anda dengan overhead performa yang sangat sedikit. Untuk mengetahui angka benchmark, lihat makalah Adiantum. Agar sumber benchmark dapat berjalan di hardware Anda, lihat sumber Adiantum di GitHub.

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

Perubahan kernel

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

Jika kernel perangkat Anda belum memiliki dukungan Adiantum, pilih perubahan yang tercantum di bawah. Jika Anda mengalami masalah saat memilih patch, perangkat yang menggunakan enkripsi disk penuh (FDE) dapat mengecualikan patch fscrypt: .

Versi kernel Patch crypto dan fscrypt Patch dm-crypt
4,19 Kernel 4.19 Patch dm-crypt
4.14 Kernel 4.14 Patch dm-crypt
4.9 Kernel 4.9 Patch dm-crypt

Mengaktifkan Adiantum di kernel

Android 11 dan yang lebih baru

Jika perangkat diluncurkan dengan Android 11 atau yang lebih baru, aktifkan setelan 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 petunjuk NEON untuk meningkatkan performa:

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, diperlukan setelan konfigurasi kernel yang sedikit berbeda. Aktifkan setelan 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 petunjuk NEON untuk meningkatkan performa:

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 yang lebih tinggi, perubahan ruang pengguna Adiantum sudah ada.

Untuk perangkat yang menjalankan Android 9, pilih perubahan berikut:

Mengaktifkan Adiantum di perangkat Anda

Pertama, pastikan perangkat Anda telah menetapkan PRODUCT_SHIPPING_API_LEVEL dengan benar agar cocok dengan versi Android yang digunakan untuk meluncurkannya. Misalnya, perangkat yang diluncurkan dengan Android 11 harus memiliki PRODUCT_SHIPPING_API_LEVEL := 30. Hal ini penting karena beberapa setelan enkripsi memiliki setelan default yang berbeda pada versi peluncuran yang berbeda.

Perangkat dengan enkripsi berbasis file

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

fileencryption=adiantum

Jika perangkat Anda diluncurkan dengan Android 11 atau yang lebih baru, mengaktifkan enkripsi metadata juga diperlukan. Untuk menggunakan Adiantum untuk enkripsi metadata di penyimpanan internal, fs_mgr_flags untuk userdata juga harus berisi opsi berikut:

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

Selanjutnya, aktifkan enkripsi Adiantum di penyimpanan yang dapat diadopsi. Untuk melakukannya, tetapkan properti sistem berikut di PRODUCT_PROPERTY_OVERRIDES:

Untuk Android 11 dan yang 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

Terakhir, secara opsional tambahkan blk-crypto-fallback.num_keyslots=1 ke command line kernel. Hal ini sedikit mengurangi penggunaan memori saat enkripsi metadata Adiantum digunakan. Sebelum melakukannya, pastikan opsi pemasangan inlinecrypt tidak ditentukan di fstab. Jika ditentukan, hapus, karena tidak diperlukan untuk enkripsi Adiantum, dan menyebabkan masalah performa saat digunakan bersama blk-crypto-fallback.num_keyslots=1.

Untuk memverifikasi bahwa penerapan Anda berfungsi, ambil laporan bug atau jalankan:

adb root
adb shell dmesg

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

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

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

adb root
adb shell dmctl table userdata

Kolom ketiga output harus berupa xchacha12,aes-adiantum-plain64.

Perangkat dengan enkripsi disk penuh

Untuk mengaktifkan Adiantum dan meningkatkan performanya, tetapkan properti ini di PRODUCT_PROPERTY_OVERRIDES:

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

Menetapkan fde_sector_size ke 4096 akan meningkatkan performa, tetapi tidak diperlukan agar Adiantum berfungsi. Untuk menggunakan setelan ini, partisi userdata harus dimulai pada offset yang diselaraskan 4096 byte di disk.

Di fstab, untuk set userdata:

forceencrypt=footer

Untuk memverifikasi bahwa penerapan Anda berfungsi, ambil laporan bug atau jalankan:

adb root
adb shell dmesg

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

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