Adiantum es un método de encriptación diseñado para dispositivos que ejecutan Android 9 y versiones posteriores cuyas CPUs no tienen instrucciones 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. AES es más rápido en esas plataformas.
Para los dispositivos que no tienen estas instrucciones de CPU AES, Adiantum proporciona encriptación en tu dispositivo con muy poca sobrecarga de rendimiento. Para obtener números de comparativas, consulta el documento de Adiantum. Para que la fuente de comparativas se ejecute en tu hardware, consulta la fuente de Adiantum en GitHub.
Para habilitar Adiantum en un dispositivo que ejecuta Android 9 o versiones posteriores, debes realizar cambios en el kernel y en el espacio de 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 aún no es compatible con Adiantum, selecciona puntualmente los cambios que se indican a continuación. Si tienes problemas para seleccionar, los dispositivos que usan encriptación de disco completo (FDE) pueden excluir
el fscrypt: parche.
| Versión de kernel | Parches de Crypto y fscrypt | Parche dm-crypt |
|---|---|---|
| 4.19 | Kernel 4.19 | dm-crypt parche
|
| 4.14 | Kernel 4.14 | dm-crypt parche
|
| 4.9 | Kernel 4.9 | dm-crypt parche
|
Habilita Adiantum en tu kernel
Android 11 y versiones posteriores
Si tu dispositivo se lanza con Android 11 o versiones posteriores, habilita la siguiente configuración en la configuración 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
Si tu dispositivo ejecuta un kernel ARM de 32 bits, también 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
Android 9 y 10
Si tu dispositivo se lanza con Android 9 o 10, se necesitan parámetros de configuración del kernel ligeramente diferentes. Habilita la siguiente configuración:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Si tu dispositivo usa encriptación basada en archivos, también 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 de usuario
Para los dispositivos que ejecutan Android 10 o versiones posteriores, los cambios en el espacio de usuario de Adiantum ya están presentes.
Para los dispositivos que ejecutan Android 9, selecciona los siguientes cambios:
- cryptfs: Add Adiantum support
- cryptfs: Allow setting dm-crypt sector size
- cryptfs: round down dm-crypt device size to crypto sector boundary
- cryptfs: improve logging of dm-crypt device creation
- libfscrypt: Add Adiantum support
- fs_mgr_fstab: Add Adiantum support
Habilita Adiantum en tu dispositivo
Primero, asegúrate de que tu dispositivo tenga PRODUCT_SHIPPING_API_LEVEL configurado correctamente para que coincida con la versión de Android con la que se lanza. Por ejemplo, un dispositivo que se lanza con Android 11 debe tener PRODUCT_SHIPPING_API_LEVEL := 30. Esto es importante porque algunos de los parámetros de configuración de encriptación tienen diferentes valores predeterminados en diferentes versiones de lanzamiento.
Dispositivos con encriptación basada en archivos
Para habilitar la encriptación basada en archivos de Adiantum en el almacenamiento interno de tu 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 versiones posteriores,
entonces también es necesario habilitar
la encriptación de metadatos. Para usar Adiantum para la encriptación de metadatos en el almacenamiento interno, el fs_mgr_flags de userdata también debe contener las siguientes opciones:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
A continuación, habilita la encriptación de Adiantum en el almacenamiento adaptable. 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
Para 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, agrega blk-crypto-fallback.num_keyslots=1 a la línea de comandos del kernel (opcional). Esto reduce ligeramente el uso de memoria cuando se usa la encriptación de metadatos de Adiantum. Antes de hacerlo, verifica que la opción de montaje inlinecrypt no esté especificada en fstab.
Si está especificada, quítala, ya que no es necesaria 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 tu implementación haya funcionado, toma un informe de errores o ejecuta lo siguiente:
adb rootadb shell dmesg
Si Adiantum está habilitado correctamente, deberías ver esto en el registro del kernel:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Si habilitaste la encriptación de metadatos, también ejecuta lo siguiente para verificar que la encriptación de metadatos de Adiantum esté habilitada correctamente:
adb rootadb 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 no es obligatorio para que Adiantum funcione. Para usar este parámetro de configuración, la partición de userdata debe comenzar en un desplazamiento alineado de 4096 bytes en el disco.
En fstab, para userdata, establece lo siguiente:
forceencrypt=footer
Para verificar que tu implementación haya funcionado, toma un informe de errores o ejecuta lo siguiente:
adb rootadb shell dmesg
Si Adiantum está habilitado correctamente, deberías ver esto en el registro del kernel:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"