Adiantum, Android 9 ve sonraki sürümleri çalıştıran ve CPU'larında AES talimatları bulunmayan cihazlar için tasarlanmış bir şifreleme yöntemidir. ARMv8 Cryptography Extensions'a sahip ARM tabanlı bir cihaz veya AES-NI'ye sahip x86 tabanlı bir cihaz gönderiyorsanız Adiantum'u kullanmamalısınız. AES, bu platformlarda daha hızlıdır.
Bu AES CPU talimatlarına sahip olmayan cihazlarda Adiantum, cihazınızda çok az performans ek yüküyle şifreleme sağlar. Karşılaştırma ölçümleri için Adiantum makalesine bakın. Donanımınızda çalışacak karşılaştırma testi kaynağı için GitHub'daki Adiantum kaynağına bakın.
Android 9 veya sonraki bir sürümün yüklü olduğu cihazda Adiantum'u etkinleştirmek için çekirdek değişiklikleri ve kullanıcı alanı değişiklikleri yapmanız gerekir.
Çekirdek değişiklikleri
Adiantum, Android ortak çekirdekleri (4.9 ve sonraki sürümler) tarafından desteklenir.
Cihazınızın çekirdeğinde Adiantum desteği yoksa aşağıda listelenen değişiklikleri seçin. Cherry-picking yaparken sorun yaşıyorsanız tam disk şifreleme (FDE) kullanan cihazlar fscrypt:
yamasını hariç tutabilir.
Çekirdek sürümü | Crypto ve fscrypt yamaları | dm-crypt yama |
---|---|---|
4.19 | 4.19 çekirdeği | dm-crypt yama
|
4.14 | 4.14 çekirdeği | dm-crypt yama
|
4.9 | 4.9 çekirdeği | dm-crypt yama
|
Çekirdeğinizde Adiantum'u etkinleştirin
Android 11 ve sonraki sürümler
Cihazınızda Android 11 veya sonraki bir sürüm yüklüyse cihazınızın çekirdek yapılandırmasında aşağıdaki ayarları etkinleştirin:
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
Cihazınızda 32 bit ARM çekirdeği çalışıyorsa performansı artırmak için NEON talimatlarını da etkinleştirin:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Android 9 ve 10
Cihazınızda Android 9 veya 10 yüklüyse biraz farklı çekirdek yapılandırma ayarları gerekir. Aşağıdaki ayarları etkinleştirin:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Cihazınızda dosya tabanlı şifreleme kullanılıyorsa şunları da etkinleştirin:
CONFIG_F2FS_FS_ENCRYPTION=y
Son olarak, cihazınızda 32 bit ARM çekirdeği çalışıyorsa performansı artırmak için NEON talimatlarını etkinleştirin:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Kullanıcı alanı değişiklikleri
Android 10 veya sonraki sürümlerin yüklü olduğu cihazlarda Adiantum kullanıcı alanı değişiklikleri zaten mevcuttur.
Android 9 çalıştıran cihazlar için aşağıdaki değişiklikleri seçin:
- cryptfs: Adiantum desteği ekleme
- cryptfs: Allow setting dm-crypt sector size
- cryptfs: round down dm-crypt device size to crypto sector boundary
- cryptfs: dm-crypt cihaz oluşturma işleminin günlüğe kaydedilmesini iyileştirme
- libfscrypt: Adiantum desteği eklendi
- fs_mgr_fstab: Add Adiantum support
Cihazınızda Adiantum'u etkinleştirme
Öncelikle, cihazınızın PRODUCT_SHIPPING_API_LEVEL
ayarının, başlatıldığı Android sürümüyle eşleşecek şekilde doğru ayarlandığından emin olun. Örneğin, Android 11 ile kullanıma sunulan bir cihazda PRODUCT_SHIPPING_API_LEVEL := 30
olmalıdır. Şifreleme ayarlarının bazılarında farklı lansman sürümlerinde farklı varsayılanlar olduğundan bu önemlidir.
Dosya tabanlı şifreleme özelliğine sahip cihazlar
Cihazınızın dahili depolama alanında Adiantum dosya tabanlı şifrelemeyi etkinleştirmek için cihazın fstab
dosyasındaki userdata
bölümünün satırının son sütununa (fs_mgr_flags sütunu) aşağıdaki seçeneği ekleyin:
fileencryption=adiantum
Cihazınız Android 11 veya sonraki bir sürümle kullanıma sunuluyorsa meta veri şifrelemenin etkinleştirilmesi de gerekir. Dahili depolamada meta veri şifreleme için Adiantum'u kullanmak istiyorsanız userdata
için fs_mgr_flags, aşağıdaki seçenekleri de içermelidir:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Ardından, benimsenen depolama alanında Adiantum şifrelemeyi etkinleştirin. Bunu yapmak için PRODUCT_PROPERTY_OVERRIDES
içinde aşağıdaki sistem özelliklerini ayarlayın:
Android 11 ve sonraki sürümler için:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
Android 9 ve 10 için:
ro.crypto.volume.contents_mode=adiantum ro.crypto.volume.filenames_mode=adiantum ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Son olarak, isteğe bağlı olarak çekirdek komut satırına blk-crypto-fallback.num_keyslots=1
ekleyin. Bu, Adiantum meta veri şifrelemesi kullanıldığında bellek kullanımını biraz azaltır. Bu işlemi yapmadan önce, fstab
içinde inlinecrypt
bağlama seçeneğinin belirtilmediğini doğrulayın.
Belirtilmişse Adiantum şifrelemesi için gerekli olmadığından ve blk-crypto-fallback.num_keyslots=1
ile birlikte kullanıldığında performans sorunlarına neden olduğundan kaldırın.
Uygulamanızın çalıştığını doğrulamak için hata raporu alın veya aşağıdaki komutları çalıştırın:
adb root
adb shell dmesg
Adiantum doğru şekilde etkinleştirildiyse çekirdek günlüğünde aşağıdakileri görürsünüz:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Meta veri şifrelemeyi etkinleştirdiyseniz Adiantum meta veri şifrelemenin doğru şekilde etkinleştirildiğini doğrulamak için aşağıdakileri de çalıştırın:
adb root
adb shell dmctl table userdata
Çıkışın üçüncü alanı xchacha12,aes-adiantum-plain64
olmalıdır.
Tam disk şifreleme özelliğine sahip cihazlar
Adiantum'u etkinleştirmek ve performansını artırmak için PRODUCT_PROPERTY_OVERRIDES
'da şu özellikleri ayarlayın:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
fde_sector_size
ayarını 4096 olarak belirlemek performansı artırır ancak Adiantum'un çalışması için gerekli değildir. Bu ayarı kullanmak için userdata bölümü, diskte 4096 baytlık hizalı bir ofsetle başlamalıdır.
fstab
içinde, kullanıcı verileri için şunları ayarlayın:
forceencrypt=footer
Uygulamanızın çalıştığını doğrulamak için hata raporu alın veya aşağıdaki komutları çalıştırın:
adb root
adb shell dmesg
Adiantum doğru şekilde etkinleştirildiyse çekirdek günlüğünde aşağıdakileri görürsünüz:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"