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:
- cryptfs: Dodaj obsługę Adiantum
- cryptfs: Zezwól na ustawienie rozmiaru sektora dm-crypt
- cryptfs: zaokrąglaj w dół rozmiar urządzenia dm-crypt do granicy sektora kryptograficznego
- cryptfs: popraw rejestrowanie tworzenia urządzenia dm-crypt
- libfscrypt: Dodaj obsługę Adiantum
- fs_mgr_fstab: Dodaj obsługę Adiantum
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)"