Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Habilitando Adiantum

Adiantum es un método de encriptación diseñado para dispositivos con Android 9 y superior cuya CPU carecen de AES instrucciones. Si usted va a enviar un dispositivo basado en ARM con ARMv8 Criptografía extensiones o un dispositivo basado en x86 con AES-NI, no se 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 los números de evaluación comparativa, consulte el documento de Adiantum . Para la fuente de la evaluación comparativa para ejecutarse 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 superior.

Si el kernel de su dispositivo aún no es compatible con Adiantum, seleccione los cambios que se enumeran a continuación. Si usted está teniendo problemas para cherry picking, los dispositivos que utilizan el cifrado de disco completo (FDE) pueden excluir la fscrypt: parche.

Versión del núcleo Parches de cifrado y fscrypt dm-crypt parche
4.19 4.19 kernel dm-crypt parche
4.14 4.14 kernel dm-crypt parche
4.9 4.9 kernel dm-crypt parche

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 está ejecutando 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 ajustes 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 del espacio de usuario adiantum ya están presentes.

Para los dispositivos que ejecutan Android 9, seleccione los siguientes cambios:

Habilite Adiantum en su dispositivo

En primer lugar, asegúrese de que el dispositivo tiene PRODUCT_SHIPPING_API_LEVEL configurado correctamente para que coincida con la versión de Android se está poniendo en marcha con. Por ejemplo, un dispositivo con Android de lanzamiento 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 Adiantum el cifrado de archivos en el almacenamiento interno del dispositivo, agregue la opción siguiente a la última columna (columna fs_mgr_flags) de la fila para el userdata partición en el dispositivo de fstab archivo:

fileencryption=adiantum

Si el dispositivo está poniendo en marcha con Android 11 o superior, a continuación, habilitar el cifrado de metadatos también se requiere. Para utilizar Adiantum para el cifrado de metadatos en el almacenamiento interno, las fs_mgr_flags de userdata también debe contener las siguientes opciones:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

A continuación, habilitar el cifrado Adiantum de almacenamiento adoptables . 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, opcionalmente añadir blk-crypto-fallback.num_keyslots=1 a la línea de comandos del núcleo. Esto reducirá ligeramente el uso de memoria cuando se utilice el cifrado de metadatos Adiantum. Antes de hacer esto, compruebe que el inlinecrypt opción de montaje no se especifica en el fstab . Si se especifica, y eliminar, puesto que no se necesita para el cifrado Adiantum, y causa problemas de rendimiento cuando se utiliza en combinación con blk-crypto-fallback.num_keyslots=1 .

Para verificar que su implementación funcionó, realice 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, establecer estas propiedades en PRODUCT_PROPERTY_OVERRIDES :

ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Configuración fde_sector_size 4096 mejora el rendimiento, pero no es necesario para Adiantum al trabajo. Para utilizar esta configuración, la partición de datos de usuario debe comenzar con un desplazamiento alineado en disco de 4096 bytes.

En el fstab , para conjunto de datos de usuario:

forceencrypt=footer

Para verificar que su implementación funcionó, realice 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)"