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 della CPU AES, Adiantum fornisce la crittografia sul dispositivo con un overhead delle prestazioni molto basso. Per i numeri di benchmarking, consulta l'articolo su Adiantum. Per eseguire il codice sorgente del benchmark 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, seleziona le modifiche elencate di seguito. Se hai difficoltà a selezionare gli aggiornamenti, i dispositivi che utilizzano la crittografia dell'intero disco (FDE) possono escludere
la patch fscrypt:
.
Versione kernel | Patch per crittografia e fscrypt | dm-crypt patch |
---|---|---|
4.19 | Kernel 4.19 | Patch dm-crypt
|
4.14 | Kernel 4.14 | Patch dm-crypt
|
4.9 | Kernel 4.9 | Patch dm-crypt
|
Abilitare Adiantum nel kernel
Android 11 e versioni successive
Se il tuo 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 tuo 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 tuo 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, seleziona le seguenti modifiche:
- cryptfs: Add Adiantum support
- cryptfs: Allow setting dm-crypt sector size
- cryptfs: round down dm-crypt device size to crypto sector boundary
- cryptfs: migliora la registrazione della creazione di dispositivi dm-crypt
- libfscrypt: Add Adiantum support
- fs_mgr_fstab: Add Adiantum support
Attivare Adiantum sul dispositivo
Innanzitutto, assicurati che il tuo dispositivo abbia PRODUCT_SHIPPING_API_LEVEL
impostato
correttamente in modo che corrisponda alla versione di Android con cui viene avviato. Ad esempio, un
dispositivo lanciato con Android 11 deve avere
PRODUCT_SHIPPING_API_LEVEL := 30
. Ciò è importante perché alcune delle
impostazioni di crittografia hanno valori predefiniti diversi in versioni di lancio diverse.
Dispositivi con crittografia basata su file
Per attivare la crittografia basata su file Adiantum nella 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 tuo dispositivo viene lanciato con Android 11 o versioni successive,
è necessario anche attivare
la crittografia dei metadati. Per utilizzare Adiantum per la crittografia dei metadati
sullo spazio di archiviazione interno, anche fs_mgr_flags per
userdata
deve contenere le seguenti opzioni:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Successivamente, attiva la crittografia Adiantum sullo spazio di archiviazione adattabile. 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 l'utilizzo della memoria viene leggermente ridotto quando viene utilizzata la crittografia dei metadati Adiantum. Prima di farlo, verifica che l'opzione di montaggio
inlinecrypt
non sia specificata in fstab
.
Se è specificato, rimuovilo, in quanto non è necessario per la crittografia Adiantum
e causa problemi di prestazioni se utilizzato in combinazione con
blk-crypto-fallback.num_keyslots=1
.
Per verificare che l'implementazione funzioni, esegui un report di bug o esegui:
adb root
adb 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 abilitato la crittografia dei metadati, esegui anche il seguente comando per verificare che la crittografia dei metadati Adiantum sia abilitata correttamente:
adb root
adb shell dmctl table userdata
Il terzo campo dell'output dovrebbe 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 fde_sector_size
su 4096 migliora le prestazioni, ma non è
necessaria per il funzionamento di Adiantum. Per utilizzare questa impostazione, la partizione userdata deve
iniziare con un offset allineato a 4096 byte su disco.
In fstab
, per il set di dati utente:
forceencrypt=footer
Per verificare che l'implementazione funzioni, esegui un report di bug o esegui:
adb root
adb 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)"