Włączanie Adiantum

Adiantum to metoda szyfrowania przeznaczona dla urządzeń z systemem Android 9 lub nowszym, których procesory nie mają instrukcji AES . Jeśli dostarczasz urządzenie oparte na architekturze ARM z rozszerzeniami Cryptography ARMv8 lub urządzenie oparte na architekturze x86 z AES-NI, nie powinieneś używać Adiantum. AES jest szybszy na tych platformach.

W przypadku urządzeń, które nie mają tych instrukcji procesora AES, Adiantum zapewnia szyfrowanie na twoim urządzeniu przy bardzo niewielkim obciążeniu wydajnością. Liczby porównawcze można znaleźć w artykule Adiantum . Aby uzyskać informacje o źródle testów porównawczych, które można uruchomić na Twoim sprzęcie, zobacz źródło Adiantum w witrynie GitHub .

Aby włączyć Adiantum na urządzeniu z systemem Android 9 lub nowszym, musisz wprowadzić zmiany w jądrze i zmiany w przestrzeni użytkownika.

Zmiany jądra

Adiantum jest obsługiwany przez wspólne jądra Androida w wersji 4.9 i nowszych.

Jeśli jądro twojego urządzenia nie obsługuje jeszcze Adiantum, wybierz zmiany wymienione poniżej. Jeśli masz problemy z wybieraniem wisienek, urządzenia korzystające z pełnego szyfrowania dysku (FDE) mogą wykluczyć fscrypt:

Wersja jądra Łatki Crypto i fscrypt łatka dm-crypt
4.19 Jądro 4.19 łatka dm-crypt
4.14 Jądro 4.14 łatka dm-crypt
4,9 Jądro 4.9 łatka dm-crypt

Włącz Adiantum w swoim jądrze

Android 11 i nowszy

Jeśli urządzenie uruchamia się z systemem Android 11 lub nowszym, włącz następujące ustawienia w konfiguracji jądra urządzenia:

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

Jeśli na Twoim urządzeniu działa 32-bitowe jądro ARM, włącz również instrukcje NEON, aby poprawić wydajność:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Android 9 i 10

Jeśli Twoje urządzenie uruchamia się z systemem Android 9 lub 10, potrzebne są nieco inne ustawienia konfiguracji jądra. Włącz następujące ustawienia:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Jeśli Twoje urządzenie korzysta z szyfrowania opartego na plikach, włącz również:

CONFIG_F2FS_FS_ENCRYPTION=y

Na koniec, jeśli na twoim urządzeniu działa 32-bitowe jądro ARM, włącz instrukcje NEON, aby poprawić wydajność:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Zmiany w przestrzeni użytkownika

W przypadku urządzeń z systemem Android 10 lub nowszym zmiany w przestrzeni użytkownika Adiantum są już obecne.

W przypadku urządzeń z systemem Android 9 wybierz następujące zmiany:

Włącz Adiantum w swoim urządzeniu

Najpierw upewnij się, że Twoje urządzenie ma prawidłowo ustawioną opcję PRODUCT_SHIPPING_API_LEVEL zgodnie z wersją Androida, z którą jest uruchamiane. Na przykład urządzenie uruchamiane z Androidem 11 musi mieć PRODUCT_SHIPPING_API_LEVEL := 30 . Jest to ważne, ponieważ niektóre ustawienia szyfrowania mają różne wartości domyślne w różnych wersjach uruchamiania.

Urządzenia z szyfrowaniem opartym na plikach

Aby włączyć szyfrowanie oparte na plikach Adiantum w pamięci wewnętrznej urządzenia, dodaj następującą opcję do ostatniej kolumny (kolumna fs_mgr_flags ) userdata partycji danych użytkownika w pliku fstab urządzenia:

fileencryption=adiantum

Jeśli Twoje urządzenie uruchamia się z systemem Android 11 lub nowszym, wymagane jest również włączenie szyfrowania metadanych . Aby używać Adiantum do szyfrowania metadanych w pamięci wewnętrznej, fs_mgr_flags dla userdata użytkownika muszą również zawierać następujące opcje:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

Następnie włącz szyfrowanie Adiantum w dostępnej pamięci masowej . Aby to zrobić, ustaw następujące właściwości systemu w PRODUCT_PROPERTY_OVERRIDES :

Dla Androida 11 i nowszych:

ro.crypto.volume.options=adiantum
ro.crypto.volume.metadata.encryption=adiantum

Dla Androida 9 i 10:

ro.crypto.volume.contents_mode=adiantum
ro.crypto.volume.filenames_mode=adiantum
ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Na koniec opcjonalnie dodaj blk-crypto-fallback.num_keyslots=1 do wiersza poleceń jądra. Zmniejszy to nieco zużycie pamięci, gdy używane jest szyfrowanie metadanych Adiantum. Zanim to zrobisz, sprawdź, czy opcja montowania inlinecrypt nie jest określona w fstab . Jeśli jest określony, usuń go, ponieważ nie jest potrzebny do szyfrowania Adiantum i powoduje problemy z wydajnością, gdy jest używany w połączeniu z blk-crypto-fallback.num_keyslots=1 .

Aby sprawdzić, czy Twoja implementacja zadziałała, zgłoś błąd lub uruchom:

adb root
adb shell dmesg

Jeśli Adiantum jest włączone poprawnie, powinieneś zobaczyć to w dzienniku jądra:

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"

Jeśli włączyłeś szyfrowanie metadanych, uruchom również następujące polecenie, aby sprawdzić, czy szyfrowanie metadanych Adiantum jest poprawnie włączone:

adb root
adb shell dmctl table userdata

Trzecie pole danych wyjściowych powinno mieć xchacha12,aes-adiantum-plain64 .

Urządzenia z pełnym szyfrowaniem dysku

Aby włączyć Adiantum i poprawić jego wydajność, ustaw te właściwości w PRODUCT_PROPERTY_OVERRIDES :

ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Ustawienie fde_sector_size na 4096 poprawia wydajność, ale nie jest wymagane do działania Adiantum. Aby użyć tego ustawienia, partycja danych użytkownika musi zaczynać się od wyrównanego 4096-bajtowego przesunięcia na dysku.

W fstab dla zestawu danych użytkownika:

forceencrypt=footer

Aby sprawdzić, czy Twoja implementacja zadziałała, zgłoś błąd lub uruchom:

adb root
adb shell dmesg

Jeśli Adiantum jest włączone poprawnie, powinieneś zobaczyć to w dzienniku jądra:

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