Abilitazione di Adiantum

Adiantum è un metodo di crittografia progettato per 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 dovresti utilizzare Adiantum. AES è più veloce su quelle piattaforme.

Per i dispositivi privi di queste istruzioni della CPU AES, Adiantum fornisce la crittografia sul dispositivo con un sovraccarico di prestazioni minimo. Per i numeri di benchmarking, consultare il documento Adiantum . Per l'origine del benchmarking da eseguire sul tuo hardware, consulta 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 dispone già del supporto Adiantum, seleziona le modifiche elencate di seguito. Se riscontri problemi nella scelta, i dispositivi che utilizzano la crittografia dell'intero disco (FDE) possono escludere la patch fscrypt:

Versione del kernel Patch Crypto e fscrypt patch dm-crypt
4.19 kernel 4.19 patch dm-crypt
4.14 kernel 4.14 patch dm-crypt
4.9 4.9 nocciolo 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 viene avviato 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

Cambiamenti nello spazio utente

Per i dispositivi con Android 10 o versioni successive, le modifiche allo spazio utente Adiantum sono già presenti.

Per i dispositivi con Android 9, seleziona le seguenti modifiche:

Abilita Adiantum sul tuo dispositivo

Innanzitutto, assicurati che il tuo dispositivo abbia PRODUCT_SHIPPING_API_LEVEL impostato correttamente in modo che corrisponda alla versione Android con cui verrà avviato. Ad esempio, un dispositivo che si avvia con Android 11 deve avere PRODUCT_SHIPPING_API_LEVEL := 30 . Questo è importante perché alcune impostazioni di crittografia hanno valori predefiniti diversi a seconda delle 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, è richiesta anche l'attivazione della crittografia dei metadati . Per utilizzare Adiantum per la crittografia dei metadati nella memoria interna, fs_mgr_flags per userdata deve contenere anche le seguenti opzioni:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

Successivamente, abilita la crittografia Adiantum sullo storage 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, facoltativamente aggiungi 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 fare ciò, 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 la tua implementazione abbia funzionato, invia una segnalazione di bug o esegui:

adb root
adb shell dmesg

Se Adiantum è abilitato correttamente, dovresti vedere questo nel registro 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 fde_sector_size su 4096 migliora le prestazioni, ma non è necessaria per il funzionamento di Adiantum. Per utilizzare questa impostazione, la partizione dei dati utente deve iniziare con un offset su disco allineato di 4096 byte.

Nel fstab , per il set di dati utente:

forceencrypt=footer

Per verificare che la tua implementazione abbia funzionato, invia una segnalazione di bug o esegui:

adb root
adb shell dmesg

Se Adiantum è abilitato correttamente, dovresti vedere questo nel registro del kernel:

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

Adiantum è un metodo di crittografia progettato per 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 dovresti utilizzare Adiantum. AES è più veloce su quelle piattaforme.

Per i dispositivi privi di queste istruzioni della CPU AES, Adiantum fornisce la crittografia sul dispositivo con un sovraccarico di prestazioni minimo. Per i numeri di benchmarking, consultare il documento Adiantum . Per l'origine del benchmarking da eseguire sul tuo hardware, consulta 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 dispone già del supporto Adiantum, seleziona le modifiche elencate di seguito. Se riscontri problemi nella scelta, i dispositivi che utilizzano la crittografia dell'intero disco (FDE) possono escludere la patch fscrypt:

Versione del kernel Patch Crypto e fscrypt patch dm-crypt
4.19 kernel 4.19 patch dm-crypt
4.14 kernel 4.14 patch dm-crypt
4.9 4.9 nocciolo 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 viene avviato 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

Cambiamenti nello spazio utente

Per i dispositivi con Android 10 o versioni successive, le modifiche allo spazio utente Adiantum sono già presenti.

Per i dispositivi con Android 9, seleziona le seguenti modifiche:

Abilita Adiantum sul tuo dispositivo

Innanzitutto, assicurati che il tuo dispositivo abbia PRODUCT_SHIPPING_API_LEVEL impostato correttamente in modo che corrisponda alla versione Android con cui verrà avviato. Ad esempio, un dispositivo che si avvia con Android 11 deve avere PRODUCT_SHIPPING_API_LEVEL := 30 . Questo è importante perché alcune impostazioni di crittografia hanno valori predefiniti diversi a seconda delle 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, è richiesta anche l'attivazione della crittografia dei metadati . Per utilizzare Adiantum per la crittografia dei metadati nella memoria interna, fs_mgr_flags per userdata deve contenere anche le seguenti opzioni:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

Successivamente, abilita la crittografia Adiantum sullo storage 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, facoltativamente aggiungi 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 fare ciò, 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 la tua implementazione abbia funzionato, invia una segnalazione di bug o esegui:

adb root
adb shell dmesg

Se Adiantum è abilitato correttamente, dovresti vedere questo nel registro 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 fde_sector_size su 4096 migliora le prestazioni, ma non è necessaria per il funzionamento di Adiantum. Per utilizzare questa impostazione, la partizione dei dati utente deve iniziare con un offset su disco allineato di 4096 byte.

Nel fstab , per il set di dati utente:

forceencrypt=footer

Per verificare che la tua implementazione abbia funzionato, invia una segnalazione di bug o esegui:

adb root
adb shell dmesg

Se Adiantum è abilitato correttamente, dovresti vedere questo nel registro del kernel:

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