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 privi di queste istruzioni per la CPU AES, Adiantum fornisce la crittografia sul tuo dispositivo con un overhead delle prestazioni molto ridotto. Per i valori di benchmark, consulta il documento di Adiantum. Per conoscere l'origine di benchmarking da eseguire sul tuo hardware, consulta la fonte 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 Android, versione 4.9 e successive.
Se il kernel del tuo dispositivo non dispone ancora del supporto di Adiantum, seleziona le modifiche elencate di seguito. Se hai difficoltà nella scelta, i dispositivi che utilizzano la crittografia dell'intero disco (FDE) possono escludere la patch fscrypt:
.
Versione kernel | Patch di crittografia e fscrypt | Patch di dm-crypt |
---|---|---|
4,19 | Kinel 4.19 | dm-crypt patch
|
4.14 | Kernel 4.14 | dm-crypt patch
|
4,9 | Keler 4.9 | dm-crypt patch
|
Abilita Adiantum nel tuo kernel
Android 11 e versioni successive
Se il tuo dispositivo viene avviato con Android 11 o versioni successive, abilita 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 sul tuo dispositivo è in esecuzione 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 avviato 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 tuo 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 dello 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, scegli le seguenti modifiche:
- cryptfs: aggiungi il supporto di Adiantum
- cryptfs: consente di impostare la dimensione del settore di dm-crypt
- cryptfs: arrotonda le dimensioni del dispositivo con crittografia Dm ai confini del settore crittografico
- cryptfs: miglioramento della registrazione della creazione del dispositivo dm-crypt
- libfscrypt: aggiunta del supporto di Adiantum
- fs_mgr_fstab: aggiungi il supporto di Adiantum
Attiva Adiantum sul tuo dispositivo
Innanzitutto, assicurati che sul tuo dispositivo sia impostato PRODUCT_SHIPPING_API_LEVEL
correttamente in base alla versione di Android con cui viene lanciato. Ad esempio, un
dispositivo lanciato con Android 11 deve averePRODUCT_SHIPPING_API_LEVEL := 30
. Questo è importante perché alcune impostazioni di crittografia hanno valori predefiniti diversi nelle varie versioni di avvio.
Dispositivi con crittografia basata su file
Per attivare la crittografia basata su file Adiantum sullo spazio di archiviazione interno 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, è necessaria anche l'attivazione della crittografia dei metadati. Per utilizzare Adiantum per la crittografia dei metadati sullo spazio di archiviazione interno, fs_mgr_flags per userdata
deve contenere anche le seguenti opzioni:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Successivamente, attiva la crittografia Adiantum sullo spazio di archiviazione 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, facoltativamente, aggiungi blk-crypto-fallback.num_keyslots=1
alla riga di comando del kernel. In questo modo si riduce leggermente l'utilizzo
della memoria quando si usa la crittografia dei metadati Adiantum. Prima di procedere, verifica che l'opzione di montaggio inlinecrypt
non sia specificata in fstab
.
Rimuovilo, se specificato, perché non è necessario per la crittografia Adiantum
e causa problemi di prestazioni quando viene utilizzato in combinazione con
blk-crypto-fallback.num_keyslots=1
.
Per verificare che l'implementazione sia andata a buon fine, esegui una segnalazione di bug o esegui:
adb root
adb shell dmesg
Se Adiantum è abilitato correttamente, dovresti vedere questo nel log del kernel:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Se hai attivato la crittografia dei metadati, esegui anche quanto segue per verificare che la crittografia dei metadati Adiantum sia attivata correttamente:
adb root
adb shell dmctl table userdata
Il terzo campo dell'output dovrebbe essere
xchacha12,aes-adiantum-plain64
.
Dispositivi con crittografia dell'intero 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 è
necessaria per il funzionamento di Adiantum. Per utilizzare questa impostazione, la partizione userdata deve iniziare con un offset allineato di 4096 byte sul disco.
In fstab
, per l'impostazione userdata:
forceencrypt=footer
Per verificare che l'implementazione sia andata a buon fine, esegui una segnalazione di bug o esegui:
adb root
adb shell dmesg
Se Adiantum è abilitato correttamente, dovresti vedere questo nel log del kernel:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"