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 i rozszerzeniami kryptograficznymi ARMv8 lub urządzenie z procesorem x86 i AES-NI, powinieneś nie używać Adiantum. Na tych platformach AES działa szybciej.
W przypadku urządzeń, których procesory nie mają tych instrukcji AES, Adiantum zapewnia szyfrowanie na urządzeniu przy bardzo niewielkim obciążeniu. Wyniki testów porównawczych, znajdziesz w publikacji na temat Adiantum. Aby uruchomić testy porównawcze na swoim sprzęcie, zapoznaj się z kodem źródłowym 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 nowszej.
Jeśli jądro urządzenia nie obsługuje jeszcze Adiantum, zastosuj zmiany wymienione poniżej. Jeśli masz problemy z zastosowaniem zmian, urządzenia korzystające z pełnego szyfrowania dysku (FDE) mogą wykluczyć
poprawkę fscrypt: .
| Wersja jądra | Poprawki dotyczące kryptografii i fscrypt | Poprawka dm-crypt |
|---|---|---|
| 4.19 | Jądro 4.19 | dm-crypt poprawka
|
| 4.14 | Jądro 4.14 | dm-crypt poprawka
|
| 4.9 | Jądro 4.9 | dm-crypt poprawka
|
Włączanie Adiantum w jądrze
Android 11 i nowszy
Jeśli urządzenie jest wprowadzane na rynek 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 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 wprowadzane na rynek 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
Na koniec, jeśli na urządzeniu działa 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 zastosuj te zmiany:
- cryptfs: dodanie obsługi Adiantum
- cryptfs: zezwalanie na ustawianie rozmiaru sektora dm-crypt
- cryptfs: zaokrąglanie rozmiaru urządzenia dm-crypt w dół do granicy sektora kryptograficznego
- cryptfs: ulepszenie logowania tworzenia urządzenia dm-crypt
- libfscrypt: dodanie obsługi Adiantum
- fs_mgr_fstab: dodanie obsługi Adiantum
Włączanie Adiantum na urządzeniu
Najpierw upewnij się, że na urządzeniu jest prawidłowo ustawiona wartość PRODUCT_SHIPPING_API_LEVEL, która odpowiada wersji Androida, z którą urządzenie jest wprowadzane na rynek. Na przykład urządzenie wprowadzane na rynek z Androidem 11 musi mieć ustawioną wartość 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 w 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,
musisz też włączyć
szyfrowanie metadanych. Aby używać Adiantum do szyfrowania metadanych w pamięci wewnętrznej, fs_mgr_flags dla userdata muszą 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 te właściwości systemu w PRODUCT_PROPERTY_OVERRIDES:
W przypadku Androida 11 i nowszego:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
W przypadku 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. Zmniejsza to nieznacznie wykorzystanie pamięci, gdy używane jest szyfrowanie metadanych Adiantum. Zanim to zrobisz, sprawdź, czy w fstab nie jest określona opcja montowania inlinecrypt.
Jeśli jest określona, usuń ją, ponieważ nie jest potrzebna do szyfrowania Adiantum i powoduje problemy z wydajnością, gdy jest używana w połączeniu z blk-crypto-fallback.num_keyslots=1.
Aby sprawdzić, czy implementacja działa, pobierz raport o błędach lub uruchom:
adb rootadb shell dmesg
Jeśli Adiantum jest prawidłowo włączone, w dzienniku jądra powinny być widoczne te informacje:
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 rootadb 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 zwiększyć 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 Adiantum. Aby używać tego ustawienia, partycja userdata musi zaczynać się od przesunięcia wyrównanego do 4096 bajtów na dysku.
W fstab ustaw dla userdata:
forceencrypt=footer
Aby sprawdzić, czy implementacja działa, pobierz raport o błędach lub uruchom:
adb rootadb shell dmesg
Jeśli Adiantum jest prawidłowo włączone, w dzienniku jądra powinny być widoczne te informacje:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"