Adiantum è un metodo di crittografia progettato per i dispositivi con Android 9 e versioni successive le cui CPU non dispongono di istruzioni AES. Se spedisci un dispositivo basato su ARM con estensioni di crittografia ARMv8 o un dispositivo basato su x86 con AES-NI, non devi utilizzare Adiantum. AES è più veloce su queste piattaforme.
Per i dispositivi che non dispongono di queste istruzioni AES della CPU, Adiantum fornisce la crittografia su dispositivo con un overhead di prestazioni molto ridotto. Per i numeri di benchmarking, consulta l'articolo su Adiantum paper. Per il codice sorgente di benchmarking da eseguire sull'hardware, consulta il codice sorgente di Adiantum su GitHub.
Per attivare Adiantum su un dispositivo con Android 9 o versioni successive, devi apportare modifiche al kernel e allo spazio utente.
Modifiche al kernel
Adiantum è supportato dai kernel comuni di Android, versione 4.9 e successive.
Se il kernel del dispositivo non supporta già Adiantum, cherry-pick le modifiche elencate di seguito. Se hai difficoltà a scegliere le modifiche, i dispositivi che utilizzano la crittografia completa del disco (FDE) possono escludere
la patch fscrypt: .
| Versione kernel | Patch di crittografia e fscrypt | Patch dm-crypt |
|---|---|---|
| 4.19 | Kernel 4.19 | dm-crypt patch
|
| 4.14 | Kernel 4.14 | dm-crypt patch
|
| 4.9 | Kernel 4.9 | dm-crypt patch
|
Attivare Adiantum nel kernel
Android 11 e versioni successive
Se il dispositivo viene lanciato con Android 11 o versioni successive, attiva le seguenti impostazioni nella configurazione del kernel del dispositivo:
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
Se il dispositivo esegue un kernel ARM a 32 bit, attiva anche le istruzioni NEON per migliorare le prestazioni:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Android 9 e 10
Se il dispositivo viene lanciato con Android 9 o 10, sono necessarie impostazioni di configurazione del kernel leggermente diverse. Attiva le seguenti impostazioni:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Se il dispositivo utilizza la crittografia basata su file, attiva anche:
CONFIG_F2FS_FS_ENCRYPTION=y
Infine, se il dispositivo esegue un kernel ARM a 32 bit, attiva le istruzioni NEON per migliorare le prestazioni:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Modifiche allo spazio utente
Per i dispositivi con Android 10 o versioni successive, le modifiche allo spazio utente di Adiantum sono già presenti.
Per i dispositivi con Android 9, cherry-pick le seguenti modifiche:
cryptfs: aggiungi il supporto di Adiantumcryptfs: consenti di impostare la dimensione del settore dm-cryptcryptfs: arrotonda per difetto la dimensione del dispositivo dm-crypt al limite del settore di crittografiacryptfs: migliora la registrazione della creazione del dispositivo dm-cryptlibfscrypt: aggiungi il supporto di Adiantumfs_mgr_fstab: aggiungi il supporto di Adiantum
Attivare Adiantum sul dispositivo
Innanzitutto, assicurati che PRODUCT_SHIPPING_API_LEVEL sia impostato correttamente in modo che corrisponda alla versione di Android con cui viene lanciato il dispositivo. Ad esempio, un dispositivo lanciato con Android 11 deve avere PRODUCT_SHIPPING_API_LEVEL := 30. Questo è importante perché alcune impostazioni di crittografia hanno valori predefiniti diversi nelle diverse versioni di lancio.
Dispositivi con crittografia basata su file
Per attivare la crittografia basata su file di Adiantum sulla memoria interna del dispositivo, aggiungi la seguente opzione all'ultima colonna (la colonna fs_mgr_flags) della riga per la partizione userdata nel file fstab del dispositivo:
fileencryption=adiantum
Se il dispositivo viene lanciato con Android 11 o versioni successive,
allora l'attivazione
della crittografia dei metadati è anch'essa richiesta. Per utilizzare Adiantum per la crittografia dei metadati sulla memoria interna, fs_mgr_flags per userdata deve contenere anche le seguenti opzioni:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Poi, attiva la crittografia Adiantum sulla memoria adottabile. Per farlo, imposta le seguenti proprietà di sistema in PRODUCT_PROPERTY_OVERRIDES:
Per Android 11 e versioni successive:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
Per Android 9 e 10:
ro.crypto.volume.contents_mode=adiantum ro.crypto.volume.filenames_mode=adiantum ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Infine, aggiungi facoltativamente blk-crypto-fallback.num_keyslots=1 alla riga di comando del kernel. In questo modo si riduce leggermente la memoria utilizzata quando viene utilizzata la crittografia dei metadati di Adiantum. Prima di farlo, verifica che l'opzione di montaggio inlinecrypt non sia specificata in fstab.
Se è specificata, rimuovila, poiché non è necessaria per la crittografia Adiantum e causa problemi di prestazioni se utilizzata in combinazione con blk-crypto-fallback.num_keyslots=1.
Per verificare che l'implementazione funzioni, crea un report sui bug o esegui:
adb rootadb shell dmesg
Se Adiantum è attivato correttamente, dovresti visualizzare questo messaggio nel log del kernel:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Se hai attivato la crittografia dei metadati, esegui anche il seguente comando per verificare che la crittografia dei metadati di Adiantum sia attivata correttamente:
adb rootadb shell dmctl table userdata
Il terzo campo dell'output deve essere xchacha12,aes-adiantum-plain64.
Dispositivi con crittografia completa del disco
Per attivare Adiantum e migliorarne le prestazioni, imposta queste proprietà in PRODUCT_PROPERTY_OVERRIDES:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
L'impostazione di fde_sector_size su 4096 migliora le prestazioni, ma non è obbligatoria per il funzionamento di Adiantum. Per utilizzare questa impostazione, la partizione userdata deve iniziare con un offset allineato a 4096 byte sul disco.
In fstab, per userdata imposta:
forceencrypt=footer
Per verificare che l'implementazione funzioni, crea un report sui bug o esegui:
adb rootadb shell dmesg
Se Adiantum è attivato correttamente, dovresti visualizzare questo messaggio nel log del kernel:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"