Włączanie Adiantum

Adiantum to metoda szyfrowania przeznaczona dla urządzeń z Androidem 9 lub nowszym których CPU nie ma AES. Jeśli wysyłasz urządzenie oparte na architekturze ARM urządzenia z rozszerzeniami kryptograficznymi ARMv8 lub z procesorami x86 i AES-NI, Nie należy korzystać z Adiantum. AES działa szybciej na tych platform.

W przypadku urządzeń, które nie mają tych instrukcji dotyczących procesora AES, Adiantum zapewnia szyfrowanie z bardzo niewielkim spadkiem wydajności. W analizie porównawczych zobacz artykuł na temat Adiantum. W przypadku źródła testu porównawczego na swoim sprzęcie, zapoznaj się z Źródło Adiantum w GitHubie.

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

Zmiany jądra systemu

Adiantum jest obsługiwany przez popularne jądra Androida w wersji 4.9 lub nowszej.

Jeśli jądro urządzenia nie obsługuje jeszcze Adiantum, wybierz zmian wymienionych poniżej. Jeśli masz problem z wyborem funkcji, urządzenia korzystające z szyfrowania całego dysku (FDE) mogą wykluczyć poprawki fscrypt: .

Wersja jądra Poprawki kryptograficzne i fscrypt Poprawka dm-crypt
4,19 Jądro 4.19 Poprawka do dm-crypt
4,14 Jądro 4.14 Poprawka do dm-crypt
4.9 Jądro 4.9 Poprawka do dm-crypt

Włączanie Adiantum w jądrze

Android 11 lub nowszy

Jeśli masz urządzenie z Androidem 11 lub nowszym, włącz te 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 Twoje urządzenie korzysta z 32-bitowego jądra ARM, włącz też instrukcje NEON, aby Popraw 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 wprowadza na rynek z Androidem 9 lub 10, a potem nieco inną konfigurację jądra. potrzebne ustawienia. Włącz te ustawienia:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

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

CONFIG_F2FS_FS_ENCRYPTION=y

Jeśli Twoje urządzenie korzysta z 32-bitowego jądra ARM, włącz instrukcje NEON, aby Popraw 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 obowiązują już zmiany w przestrzeni użytkownika Adiantum.

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

Włącz Adiantum na urządzeniu

Najpierw upewnij się, że na urządzeniu jest skonfigurowana PRODUCT_SHIPPING_API_LEVEL tak, aby pasowały do wersji Androida, z którą wprowadza na rynek. Na przykład plik na urządzeniach z Androidem 11 musi PRODUCT_SHIPPING_API_LEVEL := 30 To ważne, ponieważ niektóre z tych ustawienia szyfrowania mają różne wartości domyślne w poszczególnych wersjach premierowych.

Urządzenia z szyfrowaniem opartym na plikach

Aby włączyć szyfrowanie plików przy użyciu Adiantum w pamięci wewnętrznej urządzenia, dodaj następującą opcję do ostatniej kolumny (fs_mgr_flags kolumny) wiersza partycji userdata w sekcji Plik fstab:

fileencryption=adiantum

Jeśli masz urządzenie z Androidem 11 lub nowszym, a następnie włączenie Wymagane jest również szyfrowanie metadanych. Używanie Adiantum do obsługi metadanych w pamięci wewnętrznej, fs_mgr_flags dla userdata musi też zawierać te opcje:

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

Następnie włącz szyfrowanie Adiantum w pamięci adaptacyjnej. Aby to zrobić, ustaw parametr te właściwości systemowe w funkcji PRODUCT_PROPERTY_OVERRIDES:

W przypadku Androida 11 lub nowszego:

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 systemu operacyjnego. Zmniejszy to nieco wykorzystanie pamięci, gdy Adiantum stosowane jest szyfrowanie metadanych. Zanim to zrobisz, sprawdź, czy para klucz-wartość Opcja podłączenia urządzenia inlinecrypt nie jest określona w fstab. Jeśli jest określony, usuń go, bo 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 implementacja się powiodła, wygeneruj raport o błędzie lub uruchom:

adb root
adb shell dmesg

Jeśli usługa Adiantum jest włączona prawidłowo, w logu jądra powinna pojawić się taka informacja:

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

Jeśli masz włączone 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 być 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 wymagane do działania Adiantum. Aby można było korzystać z tego ustawienia, partycja danych użytkownika musi zaczynają się od wyrównanego 4096 bajtów przesunięcia na dysku.

Polecenie fstab dla zbioru danych użytkownika:

forceencrypt=footer

Aby sprawdzić, czy implementacja się powiodła, wygeneruj raport o błędzie lub uruchom:

adb root
adb shell dmesg

Jeśli usługa Adiantum jest włączona prawidłowo, w logu jądra powinna pojawić się taka informacja:

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