Adiantum es un método de cifrado diseñado para dispositivos con Android 9 y superior cuyas CPU carecen de instrucciones AES . Si envía un dispositivo basado en ARM con extensiones de criptografía ARMv8 o un dispositivo basado en x86 con AES-NI, no debe utilizar Adiantum. AES es más rápido en esas plataformas.
Para los dispositivos que carecen de estas instrucciones de CPU AES, Adiantum proporciona cifrado en su dispositivo con muy poca sobrecarga de rendimiento. Para obtener cifras comparativas, consulte el artículo 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 de kernel
Adiantum es compatible con los kernels comunes de Android, versión 4.9 y superiores.
Si el kernel de su dispositivo aún no es compatible con Adiantum, seleccione los cambios que se enumeran a continuación. Si tiene problemas para seleccionar, los dispositivos que utilizan cifrado de disco completo (FDE) pueden excluir el parche fscrypt:
Versión del núcleo | Parches cripto 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, entonces se necesitan configuraciones de configuración del kernel ligeramente diferentes. Habilite las siguientes configuraciones:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Si su dispositivo utiliza cifrado basado 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 que ejecutan Android 9, seleccione los siguientes cambios:
- cryptfs: Agregar soporte para 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 soporte para 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 está iniciando. 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 inicio.
Dispositivos con cifrado basado en archivos
Para habilitar el cifrado basado en archivos 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 de la partición userdata
en el archivo fstab
del dispositivo:
fileencryption=adiantum
Si su dispositivo se inicia con Android 11 o superior, también es necesario habilitar el cifrado de metadatos . Para utilizar Adiantum para el cifrado 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
A continuación, habilite el cifrado Adiantum en el almacenamiento adoptable . Para hacer esto, configure 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, opcionalmente agregue blk-crypto-fallback.num_keyslots=1
a la línea de comando del kernel. Esto reducirá ligeramente el uso de memoria cuando se utilice el cifrado de metadatos de 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ó, genere 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, ejecute también 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
Configurar fde_sector_size
en 4096 mejora el rendimiento, pero no es necesario para que Adiantum funcione. Para utilizar 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ó, genere 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)"