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 Kriptografi Uzantılarına sahip ARM tabanlı bir cihaz veya AES-NI yüklü 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 yükü ile şifreleme sağlar. Karşılaştırma sayıları için Adiantum makalesine bakın. Donanımınızda çalıştırılacak karşılaştırma kaynağı için GitHub'daki Adiantum kaynağına bakın.
Android 9 veya sonraki bir sürümü çalıştıran bir cihazda Adiantum'u etkinleştirmek için çekirdek ve kullanıcı alanı değişiklikleri yapmanız gerekir.
Çekirdek değişiklikleri
Adiantum, Android'in 4.9 ve sonraki yaygın çekirdekleri tarafından desteklenir.
Cihazınızın çekirdeğinde Adiantum desteği yoksa aşağıda listelenen değişikliklerden istediğinizi seçin. Seçim yaparken sorun yaşıyorsanız tam disk şifrelemesi (FDE) kullanan cihazlar fscrypt:
yamasını hariç tutabilir.
Çekirdek sürümü | Şifreleme ve fscrypt yamaları | dm-crypt yama |
---|---|---|
4.19 | 4.19 çekirdeği | dm-crypt yaması
|
4,14 | 4.14 çekirdeği | dm-crypt yaması
|
4.9 | 4.9 çekirdek | dm-crypt yama
|
Adiantum'u çekirdeğinizde etkinleştirme
Android 11 ve sonraki sürümler
Cihazınız Android 11 veya sonraki bir sürümle açılıyorsa 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ı iyileştirmek 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ız Android 9 veya 10 ile başlıyorsa çekirdek yapılandırma ayarlarının biraz farklı olması 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ümleri çalıştıran cihazlar için Adiantum kullanıcı alanı değişiklikleri zaten mevcuttur.
Android 9 çalıştıran cihazlarda aşağıdaki değişiklikleri seçin:
- cryptfs: Adiantum desteği ekle
- cryptfs: dm-crypt sektör boyutunun ayarlanmasına izin ver
- cryptfs: dm-crypt cihaz boyutunu kripto sektör sınırına yuvarlayın
- cryptfs: dm-crypt cihaz oluşturma işleminin günlük kaydını iyileştirme
- libfscrypt: Adiantum desteği ekleme
- fs_mgr_fstab: Adiantum desteği ekle
Cihazınızda Adiantum'u etkinleştirme
Öncelikle, cihazınızda PRODUCT_SHIPPING_API_LEVEL
öğesinin, lansman yapılan Android sürümüyle eşleşecek şekilde doğru şekilde ayarlandığından emin olun. Örneğin, Android 11 ile kullanıma sunulan bir cihazda PRODUCT_SHIPPING_API_LEVEL := 30
olmalıdır. Bazı şifreleme ayarlarının farklı lansman sürümlerinde farklı varsayılanları olduğu için 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ında 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ızda Android 11 veya sonraki bir sürüm yüklüyse meta veri şifrelemeyi etkinleştirmeniz de gerekir. Dahili depolama alanında 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, uyarlanabilir depolama alanında Adiantum şifrelemeyi etkinleştirin. Bunun 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. Bunu yapmadan önce, inlinecrypt
ekleme seçeneğinin fstab
öğesinde belirtilmediğini doğrulayın.
Belirtilmişse Adiantum şifrelemesi için gerekli olmadığı ve blk-crypto-fallback.num_keyslots=1
ile birlikte kullanıldığında performans sorunlarına neden olduğu için kaldırın.
Uygulamanızın çalıştığını doğrulamak için hata raporu alın veya aşağıdaki komutu çalıştırın:
adb root
adb shell dmesg
Adiantum doğru şekilde etkinleştirildiyse çekirdek günlüğünde şunu görürsünüz:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Meta veri şifrelemeyi etkinleştirdiyseniz Adiantum meta veri şifrelemesinin 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 şifrelemesi kullanılan cihazlar
Adiantum'u etkinleştirmek ve performansını iyileştirmek için PRODUCT_PROPERTY_OVERRIDES
içinde şu özellikleri ayarlayın:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
fde_sector_size
değerini 4096 olarak ayarlamak performansı iyileştirir ancak Adiantum'un çalışması için gerekli değildir. Bu ayarın kullanılması için kullanıcı verileri bölümünün, disk üzerinde 4.096 baytlık hizalı ofset ile başlaması gerekir.
fstab
'te, userdata kümesi için:
forceencrypt=footer
Uygulamanızın çalıştığını doğrulamak için bir hata raporu alın veya aşağıdakileri çalıştırın:
adb root
adb shell dmesg
Adiantum doğru şekilde etkinleştirildiyse çekirdek günlüğünde aşağıdakini görürsünüz:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"