Attiva Adiantum

Adiantum è un metodo di crittografia progettato per i dispositivi con Android 9 e versioni successive le cui CPU non dispongono delle 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 per la CPU, Adiantum fornisce la crittografia sul tuo dispositivo con un sovraccarico delle prestazioni molto ridotto. Per i numeri di benchmarking, consulta il documento Adiantum. Affinché il codice sorgente del benchmarking possa essere eseguito sul tuo 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 tuo dispositivo non supporta già Adiantum, scegli le modifiche elencate di seguito. Se hai difficoltà a scegliere i componenti, i dispositivi che utilizzano la crittografia dell'intero 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 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 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 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 tuo dispositivo utilizza 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, scegli le seguenti modifiche:

Attivare Adiantum sul 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 avere PRODUCT_SHIPPING_API_LEVEL := 30. Questo è importante perché alcune delle impostazioni di crittografia hanno valori predefiniti diversi nelle varie versioni di lancio.

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, aggiungi facoltativamente blk-crypto-fallback.num_keyslots=1 alla riga di comando del kernel. Ciò riduce leggermente l'utilizzo della memoria quando viene utilizzata la crittografia dei metadati Adiantum. Prima di procedere, verifica che l'opzione di montaggio inlinecrypt non sia specificata in fstab. Se è specificato, rimuovilo, 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 l'implementazione abbia funzionato, crea un report di bug o esegui:

adb root
adb shell dmesg

Se Adiantum è attivato correttamente, dovresti vedere 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 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 deve essere xchacha12,aes-adiantum-plain64.

Dispositivi con crittografia completa del disco

Per attivare Adiantum e migliorarne il rendimento, 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 di 4096 byte sul disco.

In fstab, per l'impostazione userdata:

forceencrypt=footer

Per verificare che l'implementazione abbia funzionato, crea un report di bug o esegui:

adb root
adb shell dmesg

Se Adiantum è attivato correttamente, dovresti vedere questo messaggio nel log del kernel:

device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"