Adiantum è un metodo di crittografia progettato per dispositivi con Android 9 e versioni successive le cui CPU non dispongono di istruzioni AES . Se stai spedendo un dispositivo basato su ARM con estensioni di crittografia ARMv8 o un dispositivo basato su x86 con AES-NI, non dovresti usare Adiantum. AES è più veloce su quelle piattaforme.
Per i dispositivi privi di queste istruzioni per la CPU AES, Adiantum fornisce la crittografia sul dispositivo con un sovraccarico di prestazioni minimo. Per i numeri di benchmarking, vedere l' articolo di Adiantum . Per l'origine di benchmarking da eseguire sull'hardware, vedere l' origine Adiantum su GitHub .
Per abilitare Adiantum su un dispositivo con Android 9 o versioni successive, è necessario 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 ha già il supporto per Adiantum, seleziona le modifiche elencate di seguito. In caso di problemi con la selezione, i dispositivi che utilizzano la crittografia dell'intero disco (FDE) possono escludere fscrypt:
patch.
Versione kernel | Patch Crypto e fscrypt | patch dm-crypt |
---|---|---|
4.19 | 4.19 kernel | patch dm-crypt |
4.14 | 4.14 kernel | patch dm-crypt |
4.9 | 4.9 kernel | patch dm-crypt |
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 tuo 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 tuo dispositivo esegue un kernel ARM a 32 bit, abilita 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 si avvia con Android 9 o 10, sono necessarie impostazioni di configurazione del kernel leggermente diverse. Abilita le seguenti impostazioni:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Se il tuo dispositivo utilizza la crittografia basata su file, abilita anche:
CONFIG_F2FS_FS_ENCRYPTION=y
Infine, se il tuo dispositivo esegue un kernel ARM a 32 bit, abilita 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, scegli le seguenti modifiche:
- cryptfs: aggiunge il supporto per Adiantum
- cryptfs: consente di impostare la dimensione del settore dm-crypt
- cryptfs: arrotonda per difetto la dimensione del dispositivo dm-crypt al confine del settore crittografico
- cryptfs: migliora la registrazione della creazione del dispositivo dm-crypt
- libfscrypt: aggiunge il supporto per Adiantum
- fs_mgr_fstab: aggiungi il supporto per Adiantum
Abilita Adiantum nel tuo 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 avviato con Android 11 deve avere PRODUCT_SHIPPING_API_LEVEL := 30
. Questo è importante perché alcune delle impostazioni di crittografia hanno impostazioni predefinite diverse su diverse versioni di avvio.
Dispositivi con crittografia basata su file
Per abilitare la crittografia basata su file Adiantum sulla memoria interna del tuo 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 avviato con Android 11 o versioni successive, è necessaria anche l' abilitazione della crittografia dei metadati . Per utilizzare Adiantum per la crittografia dei metadati sulla memoria interna, fs_mgr_flags per i dati userdata
deve contenere anche le seguenti opzioni:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Quindi, abilita la crittografia Adiantum sullo spazio di archiviazione adottabile . A tale scopo, 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. Ciò ridurrà leggermente l'utilizzo della memoria 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, rimuoverlo, poiché 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 la tua implementazione abbia funzionato, fai 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 abilitato la crittografia dei metadati, esegui anche quanto segue 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 dell'intero disco
Per abilitare 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 è necessario per il funzionamento di Adiantum. Per utilizzare questa impostazione, la partizione userdata deve iniziare con un offset allineato di 4096 byte su disco.
In fstab
, per userdata set:
forceencrypt=footer
Per verificare che la tua implementazione abbia funzionato, fai 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)"