Adiantum es un método de encriptación diseñado para dispositivos que ejecutan Android 9 y versiones posteriores cuyas CPU carecen de instrucciones AES . Si envía un dispositivo basado en ARM con extensiones criptográficas ARMv8 o un dispositivo basado en x86 con AES-NI, no debe usar Adiantum. AES es más rápido en esas plataformas.
Para dispositivos que carecen de estas instrucciones de CPU AES, Adiantum proporciona cifrado en su dispositivo con muy poca sobrecarga de rendimiento. Para conocer los números de evaluación comparativa, consulte el documento de Adiantum . Para que la fuente de evaluación comparativa se ejecute en su hardware, consulte la fuente de Adiantum en GitHub .
Para habilitar Adiantum en un dispositivo con Android 9 o superior, debe realizar cambios en el kernel y en el espacio de usuario.
Cambios en el kernel
Adiantum es compatible con los núcleos comunes de Android, versión 4.9 y superior.
Si el kernel de su dispositivo aún no es compatible con Adiantum, elija los cambios que se enumeran a continuación. Si tiene problemas para elegir, los dispositivos que usan cifrado de disco completo (FDE) pueden excluir el parche fscrypt:
Versión del núcleo | Parches criptográficos y fscrypt | parche dm-crypt |
---|---|---|
4.19 | Núcleo 4.19 | parche dm-crypt |
4.14 | Núcleo 4.14 | parche dm-crypt |
4.9 | Núcleo 4.9 | parche dm-crypt |
Habilite Adiantum en su kernel
Android 11 y superior
Si su dispositivo se inicia con Android 11 o superior, habilite las siguientes configuraciones en la configuración del kernel de su 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 su dispositivo ejecuta un kernel ARM de 32 bits, habilite 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 su dispositivo se inicia con Android 9 o 10, se necesitan ajustes de configuración del kernel ligeramente diferentes. Habilite las siguientes configuraciones:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Si su dispositivo usa encriptación basada en archivos, habilite también:
CONFIG_F2FS_FS_ENCRYPTION=y
Finalmente, si su dispositivo ejecuta un kernel ARM de 32 bits, habilite 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 dispositivos con Android 10 o superior, los cambios en el espacio de usuario de Adiantum ya están presentes.
Para dispositivos con Android 9, seleccione los siguientes cambios:
- cryptfs: Añadir soporte Adiantum
- cryptfs: permite configurar el tamaño del sector dm-crypt
- cryptfs: redondea hacia abajo el tamaño del dispositivo dm-crypt al límite del sector criptográfico
- cryptfs: mejora el registro de la creación de dispositivos dm-crypt
- libfscrypt: Agregar soporte para Adiantum
- fs_mgr_fstab: agregar compatibilidad con Adiantum
Habilite Adiantum en su dispositivo
Primero, asegúrese de que su dispositivo tenga PRODUCT_SHIPPING_API_LEVEL
configurado correctamente para que coincida con la versión de Android con la que se inicia. Por ejemplo, un dispositivo que se inicia con Android 11 debe tener PRODUCT_SHIPPING_API_LEVEL := 30
. Esto es importante porque algunas de las configuraciones de cifrado tienen diferentes valores predeterminados en diferentes versiones de lanzamiento.
Dispositivos con cifrado basado en archivos
Para habilitar el cifrado basado en archivos de Adiantum en el almacenamiento interno de su dispositivo, agregue la siguiente opción a la última columna (la columna fs_mgr_flags ) de la fila para la partición de datos de userdata
en el archivo fstab
del dispositivo:
fileencryption=adiantum
Si su dispositivo se inicia con Android 11 o superior, también se requiere habilitar el cifrado de metadatos . Para usar Adiantum para el cifrado de metadatos en el almacenamiento interno, fs_mgr_flags para los datos de userdata
también debe contener las siguientes opciones:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
A continuación, habilite el cifrado Adiantum en el almacenamiento adoptable . Para ello, establezca las siguientes propiedades del sistema en PRODUCT_PROPERTY_OVERRIDES
:
Para Android 11 y superior:
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
Finalmente, agregue opcionalmente blk-crypto-fallback.num_keyslots=1
a la línea de comando del kernel. Esto reducirá ligeramente el uso de la memoria cuando se utilice el cifrado de metadatos Adiantum. Antes de hacer esto, verifique que la opción de montaje inlinecrypt
no esté especificada en fstab
. Si se especifica, elimínelo, ya que no es necesario para el cifrado Adiantum y causa problemas de rendimiento cuando se usa en combinación con blk-crypto-fallback.num_keyslots=1
.
Para verificar que su implementación funcionó, tome un informe de error o ejecute:
adb root
adb shell dmesg
Si Adiantum está habilitado correctamente, debería ver esto en el registro del kernel:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Si habilitó el cifrado de metadatos, también ejecute lo siguiente para verificar que el cifrado de metadatos de Adiantum esté habilitado correctamente:
adb root
adb shell dmctl table userdata
El tercer campo de la salida debe ser xchacha12,aes-adiantum-plain64
.
Dispositivos con cifrado de disco completo
Para habilitar Adiantum y mejorar su rendimiento, establezca 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 necesario para que Adiantum funcione. Para usar esta configuración, la partición de datos de usuario debe comenzar en un desplazamiento alineado de 4096 bytes en el disco.
En fstab
, para el conjunto de datos de usuario:
forceencrypt=footer
Para verificar que su implementación funcionó, tome un informe de error o ejecute:
adb root
adb shell dmesg
Si Adiantum está habilitado correctamente, debería ver esto en el registro del kernel:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"