Adiantum'u etkinleştirin

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'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 yükü ile şifreleme sağlar. Karşılaştırma sayılarını görmek 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 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ş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ü Crypto ve fscrypt yamaları dm-crypt yaması
4.19 4.19 çekirdeği dm-crypt yaması
4,14 4.14 çekirdeği dm-crypt yaması
4.9 4.9 çekirdeği dm-crypt yaması

Adiantum'u çekirdeğinizde etkinleştirme

Android 11 ve sonraki sürümler

Cihazınız Android 11 veya sonraki bir sürümle başlatı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ı 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ız Android 9 veya 10 ile başlatılıyorsa biraz farklı çekirdek yapılandırma ayarlarına ihtiyaç vardır. Aşağıdaki ayarları etkinleştirin:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Cihazınız dosya tabanlı şifreleme kullanı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 cihazlarda Adiantum kullanıcı alanı değişiklikleri zaten mevcuttur.

Android 9 yüklü cihazlarda aşağıdaki değişiklikleri seçin:

Cihazınızda Adiantum'u etkinleştirme

Öncelikle, cihazınızın PRODUCT_SHIPPING_API_LEVEL ayarının, kullanıma sunulduğu Android sürümüyle eşleştiğinden emin olun. Örneğin, Android 11 ile kullanıma sunulan bir cihazda PRODUCT_SHIPPING_API_LEVEL := 30 olmalıdır. Bu, şifreleme ayarlarının bazılarının farklı lansman sürümlerinde farklı varsayılanlara sahip olması nedeniyle ö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 bağlama seçeneğinin fstab içinde belirtilmediğinden emin olun. 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 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 ş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 olan cihazlar

Adiantum'u etkinleştirmek ve performansını artırmak için PRODUCT_PROPERTY_OVERRIDES'te aşağıdaki ö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ılabilmesi için userdata bölümünün diskte 4096 baytlık hizalanmış bir ofsetten 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 şunu görürsünüz:

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