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 Ekstensi Kriptografi ARMv8 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 kecil. Untuk mengetahui angka benchmark, lihat makalah Adiantum. Agar sumber tolok ukur dapat dijalankan di hardware Anda, lihat Sumber Adiantum di GitHub.
Untuk mengaktifkan Adiantum di perangkat yang menjalankan Android 9 atau yang lebih tinggi, Anda perlu membuat perubahan kernel dan perubahan ruang pengguna.
Perubahan kernel
Adiantum didukung oleh kernel umum Android, versi 4.9 dan yang lebih baru.
Jika kernel perangkat Anda belum memiliki dukungan Adiantum, pilih baik-baik perubahan yang tercantum di bawah ini. Jika Anda mengalami masalah saat memilih patch, perangkat yang menggunakan enkripsi disk penuh (FDE) dapat mengecualikan
patch fscrypt:
.
Versi kernel | Patch kripto 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:
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, setelan konfigurasi kernel yang sedikit berbeda diperlukan. 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 serif 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:
- cryptfs: Menambahkan dukungan Adiantum
- cryptfs: Mengizinkan setelan ukuran sektor dm-crypt
- cryptfs: membulatkan ukuran perangkat dm-crypt ke batas sektor kripto
- cryptfs: meningkatkan logging pembuatan perangkat dm-crypt
- libfscrypt: Menambahkan dukungan Adiantum
- fs_mgr_fstab: Menambahkan dukungan Adiantum
Mengaktifkan Adiantum di perangkat Anda
Pertama, pastikan PRODUCT_SHIPPING_API_LEVEL
perangkat Anda telah disetel
dengan benar agar sesuai dengan versi Android yang diluncurkan. 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
) pada baris untuk partisi userdata
di file
fstab
perangkat:
fileencryption=adiantum
Jika perangkat Anda diluncurkan dengan Android 11 atau yang lebih baru,
mengaktifkan
enkripsi metadata juga diperlukan. Agar dapat menggunakan Adiantum untuk enkripsi metadata pada 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 baru:
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. Tindakan ini sedikit mengurangi penggunaan memori saat enkripsi metadata Adiantum digunakan. Sebelum melakukannya, pastikan
opsi pemasangan inlinecrypt
tidak ditentukan dalam fstab
.
Jika ditentukan, hapus atribut ini karena tidak diperlukan untuk enkripsi Adiantum,
dan akan 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 telah diaktifkan dengan benar:
adb root
adb shell dmctl table userdata
Kolom ketiga output harus
xchacha12,aes-adiantum-plain64
.
Perangkat dengan enkripsi disk penuh
Untuk mengaktifkan Adiantum dan meningkatkan performanya, tetapkan properti berikut 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)"