Habilita adiantum

Adiantum es un método de encriptación diseñado para dispositivos con Android 9 y versiones posteriores. con CPU que no tienen Instrucciones para AES. Si envías un dispositivo basado en ARM con extensiones de criptografía ARMv8 o un dispositivo basado en x86 con AES-NI, no debes usar Adiantum. El AES es más rápido en esos y plataformas de Google Cloud.

En el caso de los dispositivos que no tienen estas instrucciones de la CPU de AES, Adiantum proporciona encriptación en el dispositivo con muy poca sobrecarga de rendimiento. Para las cifras de comparativas, consulta el artículo de Adiantum. Para la fuente de comparativas para que se ejecuten en el hardware, consulta la Fuente de Adiantum en GitHub.

Para habilitar Adiantum en un dispositivo con Android 9 o versiones posteriores, debes hacer lo siguiente: hacer cambios en el kernel y cambios en el espacio del usuario.

Cambios en el kernel

Adiantum es compatible con los kernels comunes de Android, versión 4.9 y posteriores.

Si el kernel de tu dispositivo todavía no es compatible con Adiantum, elige con cuidado cambios que se indican a continuación. Si tienes problemas para realizar una selección detallada, los dispositivos que usan encriptación de disco completo (FDE) pueden excluir el parche fscrypt: .

Versión de kernel Parches de criptografía y fscrypt Parche de dm-crypt
4,19 Kernel 4.19 Parche de dm-crypt
4,14 Kernel 4.14 Parche de dm-crypt
4.9 Kernel 4.9 Parche de dm-crypt

Habilita Adiantum en tu kernel

Android 11 y versiones posteriores

Si tu dispositivo se lanza con Android 11 o una versión posterior, haz lo siguiente: Habilita los siguientes parámetros en la configuración del kernel de tu 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

Si tu dispositivo ejecuta un kernel ARM de 32 bits, habilita también las instrucciones NEON para mejorar el rendimiento:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Android 9 y 10

Si tu dispositivo se inicia con Android 9 o 10, se necesita una configuración del kernel ligeramente diferente. Habilita las siguientes opciones de configuración:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Si tu dispositivo usa encriptación basada en archivos, habilita lo siguiente:

CONFIG_F2FS_FS_ENCRYPTION=y

Por último, si tu dispositivo ejecuta un kernel ARM de 32 bits, habilita las instrucciones NEON para mejorar el rendimiento:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Cambios en el espacio del usuario

En el caso de los dispositivos que ejecutan Android 10 o versiones posteriores, los cambios en el espacio del usuario de Adiantum ya están presentes.

Para dispositivos con Android 9, selecciona los siguientes cambios:

Habilita Adiantum en tu dispositivo

Primero, asegúrate de que tu dispositivo tenga configurado PRODUCT_SHIPPING_API_LEVEL para que coincida con la versión de Android con la que se lanza. Por ejemplo, un dispositivo que se inicia con Android 11 debe tener PRODUCT_SHIPPING_API_LEVEL := 30. Esto es importante porque algunos de La configuración de encriptación tiene valores predeterminados diferentes en las distintas versiones de lanzamiento.

Dispositivos con encriptación basada en archivos

Para habilitar la encriptación basada en archivos de Adiantum en el almacenamiento interno del dispositivo, agrega la siguiente opción a la última columna (la columna fs_mgr_flags) de la fila de la partición userdata en el archivo fstab del dispositivo:

fileencryption=adiantum

Si tu dispositivo se lanza con Android 11 o una versión posterior, haz lo siguiente: y, luego, habilitando encriptación de metadatos. Para usar Adiantum para la encriptación de metadatos en el almacenamiento interno, fs_mgr_flags para userdata también debe contener las siguientes opciones:

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

Luego, habilita la encriptación Adiantum en el almacenamiento adoptable. Para ello, establece las siguientes propiedades del sistema en PRODUCT_PROPERTY_OVERRIDES:

Para Android 11 y versiones posteriores:

ro.crypto.volume.options=adiantum
ro.crypto.volume.metadata.encryption=adiantum

En Android 9 y 10:

ro.crypto.volume.contents_mode=adiantum
ro.crypto.volume.filenames_mode=adiantum
ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Por último, puedes agregar blk-crypto-fallback.num_keyslots=1 al archivo de la línea de comandos de kernel. Esto reduce ligeramente el uso de la memoria cuando se usa la encriptación de metadatos de Adiantum. Antes de hacerlo, verifica que la opción de activación inlinecrypt no esté especificada en fstab. Si se especifica, quítalo, ya que no es necesario para la encriptación de Adiantum y causa problemas de rendimiento cuando se usa en combinación con blk-crypto-fallback.num_keyslots=1.

Para verificar que funcionó la implementación, genera un informe de errores o ejecuta lo siguiente:

adb root
adb shell dmesg

Si Adiantum está habilitado correctamente, deberías ver lo siguiente en el registro del kernel:

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"

Si habilitaste la encriptación de metadatos, ejecuta también lo siguiente para verificar que La encriptación de metadatos Adiantum está habilitada correctamente:

adb root
adb shell dmctl table userdata

El tercer campo del resultado debe ser xchacha12,aes-adiantum-plain64.

Dispositivos con encriptación de disco completo

Para habilitar Adiantum y mejorar su rendimiento, establece estas propiedades en PRODUCT_PROPERTY_OVERRIDES

ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Establecer fde_sector_size en 4096 mejora el rendimiento, pero esto no es así necesarios para que Adiantum funcione. Para usar este parámetro de configuración, la partición userdata debe comienzan en un disco de 4,096 bytes alineado.

En fstab, para userdata, establece lo siguiente:

forceencrypt=footer

Para verificar que tu implementación funcionó, crea un informe de errores o ejecuta lo siguiente:

adb root
adb shell dmesg

Si Adiantum está habilitado correctamente, deberías ver lo siguiente en el registro del kernel:

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