Cifrado de archivos cifrados de Android (FBE)

Uno: Introducción al cifrado:

El cifrado es el proceso de codificar todos los datos del usuario en el dispositivo Android mediante una clave de cifrado simétrica. Una vez encriptado el dispositivo, todos los datos creados por el usuario se encriptarán automáticamente antes de ser almacenados en el disco, y todas las operaciones de lectura desencriptarán automáticamente los datos antes de devolverlos al proceso de llamada. El cifrado garantiza que las partes no autorizadas no puedan leer los datos cuando intentan acceder a ellos.

Android tiene dos métodos de cifrado de dispositivos, a saber, cifrado a nivel de archivo y cifrado de disco completo.

1 ) Cifrado de disco completo (FDE) : Android 5.0 a Android 9 admiten el cifrado de disco completo . El cifrado de disco completo utiliza una única clave (protegida por la contraseña del dispositivo del usuario) para proteger toda la partición de datos del usuario del dispositivo. Al inicio, los usuarios deben proporcionar sus credenciales antes de poder acceder a cualquier parte del disco.

Aunque este método de encriptación es muy útil para garantizar la seguridad, también significa que cuando se reinicia el dispositivo, el usuario no puede usar inmediatamente la mayoría de las funciones principales del teléfono. Debido a la protección de las credenciales de este usuario único, el sistema no puede acceder a los datos del usuario, por lo que funciones como los despertadores no funcionarán, los servicios de accesibilidad no estarán disponibles y los teléfonos móviles no podrán contestar llamadas.

2 ) Cifrado a nivel de archivo (FBE) : Android 7.0 y versiones superiores admiten el cifrado a nivel de archivo . Cuando se utiliza el cifrado a nivel de archivo, se pueden utilizar diferentes claves para cifrar diferentes archivos, o los archivos cifrados se pueden descifrar por separado. Los dispositivos que admiten el cifrado a nivel de archivo también pueden admitir el inicio directo . Cuando esta función está habilitada, el dispositivo cifrado ingresará directamente a la pantalla de bloqueo después del inicio, lo que permitirá a los usuarios utilizar rápidamente funciones importantes del dispositivo, como los servicios de accesibilidad y los relojes de alarma.

Con la introducción del cifrado a nivel de archivo y las API que pueden configurar las aplicaciones como aplicaciones con cifrado, las aplicaciones pueden ejecutarse en entornos restringidos. Esto significa que las aplicaciones pueden ejecutarse antes de que el usuario proporcione las credenciales, mientras que el sistema aún puede proteger la información privada del usuario.

3 ) Android 9 introdujo soporte para el cifrado de metadatos con soporte de hardware . Cuando se utiliza el cifrado de metadatos, una única clave que aparece al inicio cifrará todo lo que no esté cifrado por FBE (como el diseño del directorio, el tamaño del archivo, los permisos y la hora de creación / modificación). La clave está protegida por Keymaster y Keymaster está protegido por la función de verificación al inicio.

2: Introducción al cifrado de archivos FBE:

Android 7.0 y versiones superiores admiten el cifrado a nivel de archivo (FBE). Cuando se utiliza el cifrado a nivel de archivo, se pueden utilizar diferentes claves para cifrar diferentes archivos, o los archivos cifrados se pueden descifrar por separado.

Precauciones:

1 ) Los dispositivos nuevos con Android 10 y versiones superiores deben utilizar cifrado a nivel de archivo .

2 ) Los dispositivos equipados con Android 9 y versiones posteriores pueden usar cifrado a nivel de archivo y dispositivos de almacenamiento fusionables al mismo tiempo.

3 ) Para los dispositivos equipados con Android 7.0-8.1, el cifrado a nivel de archivo y los dispositivos de almacenamiento combinables no se pueden usar al mismo tiempo . Si el cifrado a nivel de archivo está habilitado en estos dispositivos, el medio de almacenamiento recién agregado (como una tarjeta SD) debe usarse como un dispositivo de almacenamiento tradicional .

Arranque directo

Con el cifrado a nivel de archivo, se introduce una nueva función llamada lanzamiento directo en Android 7.0 . Cuando esta función está habilitada, el dispositivo cifrado ingresará directamente a la pantalla de bloqueo después de arrancar. Anteriormente, en  dispositivos encriptados que usaban Full Disk Encryption (FDE), los usuarios tenían que proporcionar credenciales antes de acceder a cualquier dato, de modo que el teléfono solo pudiera realizar las operaciones más básicas. Por ejemplo, los teléfonos móviles ni siquiera pueden responder llamadas, solo pueden realizar operaciones básicas de marcación de emergencia, los relojes de alarma no pueden funcionar y los servicios de accesibilidad no están disponibles.

Con la introducción del cifrado a nivel de archivo (FBE) y las nuevas API que pueden configurar las aplicaciones como aplicaciones compatibles con el cifrado, estas aplicaciones podrán ejecutarse en entornos restringidos. Esto significa que las aplicaciones pueden ejecutarse antes de que el usuario proporcione las credenciales, mientras que el sistema aún puede proteger la información privada del usuario.

En los dispositivos habilitados para FBE, cada usuario tiene dos ubicaciones de almacenamiento disponibles para las aplicaciones:

Espacio de almacenamiento con credenciales cifradas (CE), que es la ubicación de almacenamiento predeterminada y solo está disponible después de que el usuario desbloquea el dispositivo.

Espacio de almacenamiento de cifrado de dispositivo (DE), que se puede utilizar en el modo de arranque directo y después de que el usuario desbloquea el dispositivo.

Esta separación puede hacer que los datos del trabajo sean más seguros, porque de esta manera, el cifrado ya no se basa solo en la contraseña de activación, que puede proteger a varios usuarios al mismo tiempo.

La API de arranque directo permite que las aplicaciones con cifrado accedan a cualquiera de los espacios de almacenamiento anteriores. Habrá algunos cambios en el ciclo de vida de la aplicación para que el sistema notifique a la aplicación en las siguientes situaciones: cuando el espacio de almacenamiento CE del usuario se desbloquea por la primera entrada de credenciales del usuario en la pantalla de bloqueo, o cuando el perfil de trabajo proporciona una consulta de seguridad del perfil de trabajo . Independientemente de si FBE está implementado o no, los dispositivos equipados con Android 7.0 deben admitir estas nuevas API y ciclos de vida. Sin embargo, si FBE no está habilitado, el espacio de almacenamiento DE y CE siempre estará desbloqueado.

El Proyecto de código abierto de Android (AOSP) proporciona una implementación completa del cifrado a nivel de archivo en los sistemas de archivos Ext4 y F2FS. En los dispositivos que cumplen con los requisitos relevantes, solo necesita habilitar la implementación para usar esta función. Es posible que los fabricantes que opten por utilizar FBE quieran aprender a optimizar esta función en función del sistema en chip (SoC) utilizado.

Todos los paquetes necesarios en AOSP se han actualizado para convertirlos directamente en paquetes compatibles con el inicio. Sin embargo, si los fabricantes de dispositivos utilizan versiones personalizadas de estas aplicaciones, deben asegurarse de que exista al menos un paquete de lanzamiento directo que pueda proporcionar los siguientes servicios:

1 ) Servicio telefónico y marcador

2 ) El método de entrada utilizado para ingresar la contraseña en la pantalla bloqueada

Ejemplos y fuentes

Android proporciona una implementación de referencia de cifrado a nivel de archivo, donde vold ( system / vold ) es responsable de proporcionar funciones para administrar dispositivos de almacenamiento y volúmenes de almacenamiento en Android. Agregar FBE proporcionará algunos comandos nuevos para vold para admitir la administración de claves de claves CE y claves DE para múltiples usuarios. Además de los cambios básicos para usar la función de cifrado a nivel de archivo en el kernel, muchos paquetes del sistema (incluida la pantalla de bloqueo y SystemUI) también se han modificado para admitir FBE y las funciones de "arranque directo". Estas opciones incluyen:

Marcador AOSP (paquetes / aplicaciones / Marcador)

Reloj de escritorio (paquetes / aplicaciones / DeskClock)

LatinIME (paquetes / métodos de entrada / LatinIME) *

Aplicación " Configuración" (paquetes / aplicaciones / Configuración) *

SystemUI (frameworks / base / packages / SystemUI) *

*  Aplicaciones del sistema que utilizan la  propiedad de inventario defaultToDeviceProtectedStorage

 

Habilitar el cifrado a nivel de archivo

Para habilitar el cifrado a nivel de archivo (FBE) en el dispositivo, debe habilitar FBE en el dispositivo de almacenamiento interno (datos de usuario). Esto también habilitará automáticamente FBE para dispositivos de almacenamiento fusionables; sin embargo, si es necesario, puede anular el formato de cifrado de los dispositivos de almacenamiento fusionables. El dispositivo de almacenamiento interno puede habilitar FBE agregando la opción fileencryption = contents_encryption_mode [: filenames_encryption_mode [: flags]] a la columna fs_mgr_flags de la fila fstab de datos de usuario. Esta opción se utiliza para definir el formato de cifrado del dispositivo de almacenamiento interno. Contiene hasta tres parámetros separados por dos puntos:

Android10 : cifrado de archivo ext4 = hielo,

Android11 : cifrado de archivos f2fs = aes-256-xts:

  • El parámetro contents_encryption_mode  especifica qué algoritmo de cifrado se utiliza para cifrar el contenido del archivo y puede ser aes-256-xts o adiantum.
  • El parámetro filenames_encryption_mode  especifica qué algoritmo de cifrado se utiliza para cifrar el nombre del archivo, que puede ser aes-256-cts, aes-256-heh o adiantum. Si no se especifica, el parámetro predeterminado es aes-256-cts cuando contents_encryption_mode es aes-256-xts, y el parámetro predeterminado es adiantum cuando contents_encryption_mode es adiantum.
  • El nuevo parámetro de banderas en Android 11 es una lista de banderas separadas por caracteres +. Se admiten las siguientes etiquetas:
    • El indicador v1  se usa para seleccionar la política de cifrado de la versión 1; el indicador v2 se usa para seleccionar la política de cifrado de la versión 2. La política de cifrado de la versión 2 utiliza una función de derivación de claves más segura y flexible . Si el dispositivo está equipado con Android 11 o superior (determinado por ro.product.first_api_level), la versión 2 está seleccionada de forma predeterminada; si el dispositivo está equipado con Android 10 o inferior, la versión 1 está seleccionada de forma predeterminada.
    • El indicador inlinecrypt_optimized  se utiliza para seleccionar un formato de cifrado optimizado para hardware de cifrado integrado que no puede manejar una gran cantidad de claves de manera eficiente. El método específico es derivar solo una clave de cifrado de contenido de archivo para cada clave CE o DE en lugar de derivar una para cada archivo. La generación de IV (vector de inicialización) se ajustará en consecuencia.
    • El indicador emmc_optimized  es similar a inlinecrypt_optimized, pero también elige el método de generación IV que limita el IV a 32 bits. Esta marca solo debe usarse en hardware de cifrado integrado que cumpla con la especificación JEDEC eMMC v5.2, por lo que solo se admiten IV de 32 bits. En otro hardware de cifrado integrado, utilice inlinecrypt_optimized en su lugar. Esta etiqueta no debe usarse en dispositivos de almacenamiento basados ​​en UFS; la especificación UFS permite el uso de IV de 64 bits.
    • El indicador wrapkey_v0  permite el uso de claves envueltas en hardware. Cuando esta bandera está habilitada, la clave FBE no será generada por el software, sino por el Keymaster usando la etiqueta STORAGE_KEY. Luego, cada clave FBE que se proporciona realmente al kernel es una clave STORAGE_KEY derivada de Keymaster, que hará que la clave se encapsule con una clave temporal cada vez que se inicie. Luego, el kernel proporcionará la clave encapsulada directamente al hardware de cifrado integrado. Después de la implementación correcta, la clave descomprimida nunca se mostrará en la memoria del sistema y la clave del paquete descifrado no se podrá utilizar después de reiniciar. Esta marca requiere soporte de hardware, soporte de Keymaster para STORAGE_KEY, soporte de controlador de kernel, opciones de carga de inlinecrypt y la marca inlinecrypt_optimized o emmc_optimized.

Si no utiliza hardware de cifrado integrado, se recomienda configurar fileencryption = aes-256-xts para la mayoría de los dispositivos. Si utiliza hardware de cifrado integrado, la configuración recomendada para la mayoría de los dispositivos es fileencryption = aes-256-xts: aes-256-cts: inlinecrypt_optimized. En dispositivos que no utilizan ninguna forma de aceleración AES, puede configurar fileencryption = adiantum para usar  Adiantum en lugar de AES.

En dispositivos con Android 10 o versiones anteriores, también puede usar fileencryption = ice para especificar el modo de cifrado de contenido de archivo FSCRYPT_MODE_PRIVATE. El kernel común de Android no implementa este modo, pero los proveedores pueden usar un parche de kernel personalizado para implementar este modo. El formato del disco generado por este modo varía de un proveedor a otro. En dispositivos con Android 11 o superior, este modo ya no está permitido y se debe utilizar el formato de cifrado estándar.

El fabricante del dispositivo también puede realizar las siguientes pruebas manuales. Realice las siguientes pruebas manuales en dispositivos habilitados para FBE:

  • Compruebe si existe ro.crypto.state
    • Confirme si ro.crypto.state está encriptado
  • Compruebe si existe ro.crypto.type
    • Confirme si se ha configurado ro.crypto.type como archivo

 

 

Supongo que te gusta

Origin blog.csdn.net/baidu_40808339/article/details/115225536
Recomendado
Clasificación