Habilitación de Adiantum

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:

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)"