Adiantum adalah metode enkripsi yang dirancang untuk perangkat yang menjalankan Android 9 dan lebih tinggi yang CPU-nya tidak memiliki instruksi AES . Jika Anda mengirimkan perangkat berbasis ARM dengan Ekstensi Kriptografi ARMv8 atau perangkat berbasis x86 dengan AES-NI, Anda sebaiknya tidak 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 pembandingan angka, lihat makalah Adiantum . Agar sumber pembandingan dapat berjalan di perangkat keras 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 masalah dalam memilih ceri, perangkat yang menggunakan enkripsi disk penuh (FDE) dapat mengecualikan fscrypt:
patch.
Versi kernel | Patch kripto dan fscrypt | tambalan dm-crypt |
---|---|---|
4.19 | 4.19 inti | tambalan dm-crypt |
4.14 | 4.14 kernel | tambalan dm-crypt |
4.9 | 4.9 kernel | tambalan dm-crypt |
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 ruang pengguna Adiantum sudah ada.
Untuk perangkat yang menjalankan Android 9, pilih perubahan berikut:
- cryptfs: Tambahkan dukungan Adiantum
- cryptfs: Izinkan pengaturan ukuran sektor dm-crypt
- cryptfs: membulatkan ukuran perangkat dm-crypt ke batas sektor crypto
- cryptfs: meningkatkan pencatatan pembuatan perangkat dm-crypt
- libfscrypt: Tambahkan dukungan Adiantum
- fs_mgr_fstab: Tambahkan dukungan Adiantum
Aktifkan Adiantum di perangkat Anda
Pertama, pastikan perangkat Anda memiliki PRODUCT_SHIPPING_API_LEVEL
yang disetel dengan benar agar sesuai dengan versi Android yang digunakan untuk meluncurkannya. Misalnya, perangkat yang diluncurkan 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 berbasis file Adiantum pada penyimpanan internal perangkat Anda, tambahkan opsi berikut ke kolom terakhir (kolom fs_mgr_flags ) dari baris untuk userdata
data pengguna di file fstab
perangkat:
fileencryption=adiantum
Jika perangkat Anda diluncurkan dengan Android 11 atau lebih tinggi, mengaktifkan enkripsi metadata juga diperlukan. Untuk menggunakan Adiantum untuk enkripsi metadata pada penyimpanan internal, fs_mgr_flags untuk userdata
pengguna juga harus berisi opsi berikut:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Selanjutnya, aktifkan enkripsi Adiantum pada penyimpanan yang dapat diadopsi . Untuk melakukannya, setel 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
Terakhir, secara opsional tambahkan blk-crypto-fallback.num_keyslots=1
ke baris perintah kernel. Ini akan sedikit mengurangi penggunaan memori saat enkripsi metadata Adiantum digunakan. Sebelum melakukan ini, verifikasi bahwa opsi pemasangan inlinecrypt
tidak ditentukan dalam fstab
. Jika ditentukan, hapus, karena tidak diperlukan untuk enkripsi Adiantum, dan menyebabkan masalah kinerja saat 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 dari output harus xchacha12,aes-adiantum-plain64
.
Perangkat dengan enkripsi disk penuh
Untuk mengaktifkan Adiantum dan meningkatkan kinerjanya, setel properti ini di PRODUCT_PROPERTY_OVERRIDES
:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Menyetel fde_sector_size
ke 4096 meningkatkan kinerja, tetapi tidak diperlukan agar Adiantum berfungsi. Untuk menggunakan pengaturan ini, partisi data pengguna harus dimulai pada offset 4096-byte pada disk.
Di fstab
, untuk set data pengguna:
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)"