Włącz adiantum

Adiantum to metoda szyfrowania przeznaczona dla urządzeń z Androidem 9 lub nowszym, których procesory nie mają instrukcji AES. Jeśli wysyłasz urządzenie z procesorem ARM z rozszerzeniami kryptograficznymi ARMv8 lub urządzenie z procesorem x86 z AES-NI, nie używaj Adiantum. Na tych platformach AES działa szybciej.

W przypadku urządzeń, które nie mają tych instrukcji procesora AES, Adiantum zapewnia szyfrowanie na urządzeniu przy bardzo niewielkim obciążeniu wydajności. Dane porównawcze znajdziesz w publikacji na temat Adiantum. Aby uruchomić źródło testu porównawczego na swoim sprzęcie, zapoznaj się ze źródłem Adiantum w GitHubie.

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

Zmiany w jądrze

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

Jeśli jądro urządzenia nie obsługuje jeszcze Adiantum, wybierz zmiany wymienione poniżej. Jeśli masz problem z wybieraniem poprawek, urządzenia korzystające z szyfrowania całego dysku (FDE) mogą wykluczyć poprawkę fscrypt: .

Wersja jądra Poprawki dotyczące kryptografii i fscrypt dm-crypt patch
4.19 Jądro 4.19 dm-crypt patch
4.14 4.14 kernel dm-crypt patch
4.9 Jądro 4.9 dm-crypt patch

Włączanie Adiantum w jądrze

Android 11 lub nowszy

Jeśli urządzenie jest wprowadzane na rynek z Androidem 11 lub nowszym, włącz w konfiguracji jądra urządzenia te ustawienia:

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 urządzeniu działa 32-bitowe jądro ARM, włącz też instrukcje NEON, aby zwiększyć 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 urządzenie jest uruchamiane z Androidem 9 lub 10, wymagane są nieco inne ustawienia konfiguracji jądra. Włącz te ustawienia:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Jeśli urządzenie korzysta z szyfrowania opartego na plikach, włącz też:

CONFIG_F2FS_FS_ENCRYPTION=y

Jeśli urządzenie ma 32-bitowe jądro ARM, włącz instrukcje NEON, aby zwiększyć 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 Androidem 10 lub nowszym zmiany w przestrzeni użytkownika Adiantum są już obecne.

W przypadku urządzeń z Androidem 9 wybierz te zmiany:

Włączanie Adiantum na urządzeniu

Najpierw upewnij się, że urządzenie ma PRODUCT_SHIPPING_API_LEVEL ustawiony prawidłowo, tak aby pasował do wersji Androida, z którą jest uruchamiane. Na przykład urządzenie wprowadzane na rynek 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.

Urządzenia z szyfrowaniem opartym na plikach

Aby włączyć szyfrowanie oparte na plikach Adiantum na pamięci wewnętrznej urządzenia, dodaj tę opcję do ostatniej kolumny (kolumny fs_mgr_flags) w wierszu partycji userdata w pliku fstab urządzenia:

fileencryption=adiantum

Jeśli urządzenie jest wprowadzane na rynek z Androidem 11 lub nowszym, wymagane jest też włączenie szyfrowania metadanych. Aby używać Adiantum do szyfrowania metadanych w pamięci wewnętrznej, parametr fs_mgr_flags dla userdata musi też zawierać te opcje:

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

Następnie włącz szyfrowanie Adiantum na pamięci przenośnej. Aby to zrobić, ustaw w PRODUCT_PROPERTY_OVERRIDES te właściwości systemu:

Android 11 lub nowszy:

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

Android 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. Nieznacznie zmniejsza to 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ą w połączeniu z blk-crypto-fallback.num_keyslots=1.

Aby sprawdzić, czy wdrożenie działa, wygeneruj raport o błędzie lub uruchom:

adb root
adb shell dmesg

Jeśli Adiantum jest prawidłowo włączony, w dzienniku jądra powinna być widoczna ta informacja:

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

Jeśli włączono szyfrowanie metadanych, uruchom też to polecenie, aby sprawdzić, czy szyfrowanie metadanych Adiantum jest prawidłowo włączone:

adb root
adb shell dmctl table userdata

Trzecie pole danych wyjściowych powinno mieć wartość 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 zwiększa wydajność, ale nie jest wymagane do działania algorytmu Adiantum. Aby używać tego ustawienia, partycja userdata musi zaczynać się od przesunięcia na dysku wyrównanego do 4096 bajtów.

W sekcji fstab ustaw dla danych użytkownika:

forceencrypt=footer

Aby sprawdzić, czy wdrożenie działa, wygeneruj raport o błędzie lub uruchom:

adb root
adb shell dmesg

Jeśli Adiantum jest prawidłowo włączony, w dzienniku jądra powinna być widoczna ta informacja:

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