Cifrado de disco completo
Nota: Los dispositivos equipados con Android 7.0-9 admiten el cifrado de disco completo. Los dispositivos nuevos con Android 10 y superior deben usar cifrado a nivel de archivo .
El cifrado de disco completo es el proceso de utilizar una clave (la clave en sí también está cifrada) para codificar todos los datos del usuario en el dispositivo Android. 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 de disco completo se introdujo en Android 4.4, pero se han introducido las siguientes funciones nuevas en Android 5.0:
- Se ha agregado un nuevo método de encriptación rápida. Este método de encriptación solo encriptará los bloques usados en la partición de datos, para que no tarde demasiado en iniciarse la primera vez. Actualmente, solo los sistemas de archivos EXT4 y F2FS admiten el cifrado rápido.
- Se ha añadido la forceencrypt fstab bandera activar el cifrado en la primera puesta en marcha.
- Se agregó soporte para patrón de desbloqueo y sin cifrado de contraseña.
- Se agregó un espacio de almacenamiento de claves de cifrado compatible con hardware que utiliza la función de firma de un entorno de ejecución confiable (TEE, como TrustZone). Para obtener más información, consulte Almacenamiento de claves cifradas .
Nota : Para los dispositivos actualizados a Android 5.0, si están encriptados después de la actualización, se pueden restaurar a un estado no encriptado restaurando la configuración de fábrica. Un nuevo dispositivo Android 5.0 cifrado en el primer arranque no se puede restaurar a un estado sin cifrar.
Hay 4 estados de cifrado en Android 5.0 :
- defecto
- Código PIN
- contraseña
- Patrón de desbloqueo
Cuando se inicia por primera vez, el dispositivo crea una clave maestra de 128 bits generada aleatoriamente y luego la utiliza con la contraseña predeterminada y la sal almacenada. La contraseña predeterminada es "default_password". Sin embargo, el dispositivo también firma el hash generado a través de un TEE (como TrustZone). El TEE utilizará el hash de la firma correspondiente para cifrar la clave maestra.
Puede encontrar la contraseña predeterminada definida en el archivo cryptfs.cpp del proyecto de código abierto de Android .
Cuando el usuario establece el PIN / código de acceso o la contraseña en el dispositivo, solo se volverá a cifrar y almacenar la clave de 128 bits (es decir, cambiar el PIN / código de acceso / patrón de desbloqueo del usuario no hará que se vuelvan a cifrar los datos del usuario). cifrado). Tenga en cuenta que los dispositivos administrados pueden tener códigos PIN, patrones de desbloqueo o restricciones de contraseña.
Utilice forceencrypt para cifrar nuevos dispositivos
Este es el proceso normal cuando un dispositivo Android 5.0 se inicia por primera vez.
- Detecta sistemas de archivos no cifrados marcados con forceencrypt
/ data no está cifrado, pero debe cifrarse porque forceencrypt es obligatorio para este cifrado. Desinstalar / data .
- Comience a cifrar / datos
vold.decrypt = "trigger_encryption" activa init.rc , de modo que vold to / data -free contraseña encriptación. (Debido a que este debería ser un dispositivo nuevo, aún no se ha establecido ninguna contraseña).
- Monte tmpfs
vold montará un tmpfs / Data (usando las opciones tmpfs de ro.crypto.tmpfs_options ), y la propiedad vold.encrypt_progress se establece en 0. vold preparará TMPFS / datos para iniciar el sistema de cifrado y establecer el vold.decrypt propiedad a trigger_restart_min_framework
- Lanzar el marco para mostrar el progreso
Dado que casi no hay datos para cifrar en el dispositivo, el proceso de cifrado se completará muy rápidamente, por lo que en la práctica, la barra de progreso generalmente no se muestra. Para obtener detalles sobre la pantalla de progreso, consulte Cifrar dispositivos existentes .
- Después de cifrar / data , cierre el marco
vold será establecido vold.decrypt a trigger_default_encryption , que comenzará el defaultcrypto servicio. (Esto iniciará el siguiente proceso para cargar los datos de usuario encriptados predeterminados). Trigger_default_encryption verificará el tipo de encriptación para ver si se usa una contraseña para / data encriptación. Dado que el dispositivo Android 5.0 está encriptado cuando se inicia por primera vez, no se debe establecer una contraseña, por lo que debemos desencriptar y cargar / data .
- Carga / datos
A continuación, init utilizará los parámetros seleccionados de ro.crypto.tmpfs_options ( establecidos en init.rc ) para cargar / data en el tmpfs RAMDisk .
- Iniciar marco
Establezca vold en trigger_restart_framework , que continuará con el proceso de inicio normal.
cambiar la contraseña
Cuando el usuario elige cambiar o eliminar la contraseña en la configuración, la interfaz vold
enviará un cryptfs changepw
comando y luego vold
volverá a cifrar la clave maestra del disco con la nueva contraseña.