Adiantum to metoda szyfrowania przeznaczona do urządzeń z Androidem 9 lub nowszym, których procesory nie obsługują instrukcji AES. Jeśli wysyłasz urządzenie z procesorem ARM z rozszerzeniami kryptograficznymi ARMv8 lub urządzenie z procesorem x86 z rozszerzeniem AES-NI, nie używaj Adiantum. Na tych platformach szyfrowanie AES jest szybsze.
W przypadku urządzeń, które nie mają tych instrukcji procesora AES, Adiantum zapewnia szyfrowanie na urządzeniu z bardzo małym obciążeniem wydajności. Wartości porównawcze znajdziesz w publikacji Adiantum. Aby uzyskać kod źródłowy do testowania porównawczego, który można uruchomić na sprzęcie, przejdź do kodu źródłowego Adiantum na 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ądro Androida w wersji 4.9 lub nowszej.
Jeśli jądro Twojego urządzenia nie obsługuje jeszcze Adiantum, wybierz zmiany wymienione poniżej. Jeśli masz problem z wybieraniem, urządzenia korzystające z szyfrowania całego dysku (FDE) mogą wykluczać poprawkę fscrypt:
.
Wersja jądra | poprawki dotyczące szyfrowania i fscrypt; | dm-crypt łatka |
---|---|---|
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 lub nowszy
Jeśli urządzenie uruchamia się 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 jest 32-bitowe jądro ARM, włącz też 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 urządzenie jest uruchamiane z Androidem 9 lub 10, wymagana jest nieco inna konfiguracja jądra. Włącz te ustawienia:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Jeśli urządzenie używa szyfrowania opartego na plikach, włącz też:
CONFIG_F2FS_FS_ENCRYPTION=y
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 przestrzeń użytkownika Adiantum jest już dostępna.
W przypadku urządzeń z Androidem 9 wybierz te zmiany:
- cryptfs: dodanie obsługi Adiantum
- cryptfs: zezwalaj na ustawianie rozmiaru sektora dm-crypt
- cryptfs: zaokrąglenie w dół rozmiaru urządzenia dm-crypt do granicy sektora kryptograficznego
- cryptfs: improve logging of dm-crypt device creation
- libfscrypt: dodanie obsługi Adiantum
- fs_mgr_fstab: dodanie obsługi Adiantum
Włącz Adiantum na urządzeniu
Najpierw sprawdź, czy na urządzeniu PRODUCT_SHIPPING_API_LEVEL
jest prawidłowo ustawiona zgodnie z wersją Androida, z którą jest uruchamiana. Na przykład urządzenie 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 na poziomie plików Adiantum w pamięci wewnętrznej urządzenia, dodaj tę opcję w ostatniej kolumnie (kolumna fs_mgr_flags) wiersza dla partycji userdata
w pliku fstab
urządzenia:
fileencryption=adiantum
Jeśli urządzenie jest uruchamiane z Androidem 11 lub nowszym, konieczne jest też włączenie szyfrowania metadanych. Aby używać Adiantum do szyfrowania metadanych w pamięci wewnętrznej, parametr fs_mgr_flags w userdata
musi też zawierać te opcje:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Następnie włącz szyfrowanie Adiantum w pamięci przystosowalnej. 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 wykorzystanie pamięci podczas szyfrowania metadanych Adiantum. Zanim to zrobisz, sprawdź, czy opcja montażu inlinecrypt
nie jest określona w fstab
.
Jeśli jest określony, usuń go, ponieważ nie jest on potrzebny do szyfrowania Adiantum i powoduje problemy z wydajnością w połączeniu z blk-crypto-fallback.num_keyslots=1
.
Aby sprawdzić, czy implementacja zadziałała, prześlij raport o błędzie lub wykonaj te czynności:
adb root
adb shell dmesg
Jeśli Adiantum zostało prawidłowo włączone, w dzienniku jądra powinien pojawić się ten komunikat:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Jeśli szyfrowanie metadanych zostało włączone, wykonaj też te czynności, aby sprawdzić, czy szyfrowanie metadanych Adiantum zostało 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 skuteczność, ustaw te właściwości w polu PRODUCT_PROPERTY_OVERRIDES
:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Ustawienie wartości fde_sector_size
na 4096 zwiększa wydajność, ale nie jest wymagane do działania Adiantum. Aby użyć tego ustawienia, partycja userdata musi zaczynać się od przesunięcia wynoszącego 4096 bajtów na dysku.
W sekcji fstab
dla zbioru danych userdata:
forceencrypt=footer
Aby sprawdzić, czy implementacja zadziałała, prześlij raport o błędzie lub wykonaj te czynności:
adb root
adb shell dmesg
Jeśli Adiantum zostało prawidłowo włączone, w dzienniku jądra powinien pojawić się ten komunikat:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"