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:
- cryptfs: dodanie obsługi Adiantum
- cryptfs: zezwalaj na ustawienie rozmiaru sektora dm-crypt
- cryptfs: zaokrąglanie w dół rozmiaru urządzenia dm-crypt do granicy sektora kryptograficznego
- cryptfs: ulepszenie rejestrowania tworzenia urządzeń dm-crypt
- libfscrypt: dodawanie obsługi Adiantum
- fs_mgr_fstab: Dodaj obsługę Adiantum
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)"