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 una aplicación basada en ARM con extensiones de criptografía de 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.
Para los dispositivos que no cuentan con estas instrucciones de CPU AES, Adiantum proporciona encriptación en tu 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 Crypto y fscrypt | Parche 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
|
Cómo habilitar 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. Luego, hay una configuración de kernel ligeramente diferente. parámetros de configuración necesarios. 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 también 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 los dispositivos que ejecutan Android 9, elige los siguientes elementos siguientes cambios:
- cryptfs: Cómo agregar compatibilidad con Adiantum
- cryptfs: Permitir la configuración del tamaño del sector de dm-crypt
- cryptfs: redondea hacia abajo el tamaño del dispositivo dm-crypt al límite del sector criptográfico
- cryptfs: Mejorar el registro de la creación de dispositivos dm-crypt
- libfscrypt: Cómo agregar compatibilidad con Adiantum
- fs_mgr_fstab: Cómo agregar compatibilidad con Adiantum
Habilitar Adiantum en tu dispositivo
Primero, asegúrate de que el dispositivo PRODUCT_SHIPPING_API_LEVEL
esté configurado.
para que coincida con la versión
de Android con la que se lanza. Por ejemplo, un
que los dispositivos que se lanzan con Android 11 tengan
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 Adiantum en el almacenamiento interno de tu dispositivo, agrega
la siguiente opción a la última columna (los fs_mgr_flags
columna) de la fila de la partición userdata
en la columna
Archivo fstab
:
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 los metadatos
la encriptación en el almacenamiento interno, los fs_mgr_flags para
userdata
también debe contener las siguientes opciones:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
A continuación, habilita la encriptación Adiantum en el almacenamiento adoptable. Para hacer esto, configura
las siguientes propiedades del sistema en PRODUCT_PROPERTY_OVERRIDES
:
En 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 reducirá ligeramente el uso de memoria cuando Adiantum
se usa la encriptación de metadatos. Antes de hacer esto, verifica que el
La opción de activación inlinecrypt
no se especifica en fstab
.
Si está especificado, quítalo, ya que no es necesario para la encriptación 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 debería 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 de datos del usuario debe
comienzan en un disco de 4,096 bytes alineado.
En fstab
, para el conjunto de datos del usuario:
forceencrypt=footer
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:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"