Android implementa el cifrado del dispositivo en un módulo de Vold
(Volume Daemon) llamado cryptfs
que realiza las llamadas al kernel que en realidad cifran el dispositivo. Cuando un usuario cifra el dispositivo, Vold reinicia el dispositivo y comienza a cifrar la partición de datos. Durante el proceso de cifrado, Vold desactiva todo lo que no es un servicio central en el dispositivo. Android requiere que el usuario cree un código de acceso si aún no lo ha establecido al inicio del proceso de cifrado, lo cual es una de las críticas de la implementación, ya que el proceso de descifrado está vinculado al código de acceso de desbloqueo de la pantalla de los usuarios, que no es muy complejo. . Una vez que el dispositivo está cifrado, de acuerdo con la documentación en la página de AOSP, la clave maestra cifrada se almacena en el pie de página de la partición de datos. Por lo que sé, la implementación de Android solo encripta la partición de datos, que sería datos de usuarios y aplicaciones. Una vez que el dispositivo esté encriptado, el usuario deberá ingresar su código de acceso cuando el teléfono esté bloqueado. Antes de que puedan acceder a sus datos, el kernel monta un tmpfs / data que se lee desde los dispositivos de bloques realmente encriptados. Su código de acceso de desbloqueo de pantalla está en hash y se utiliza para descifrar la clave maestra. Esta es la descripción en las Notas sobre la implementación del cifrado.
El pie de página criptográfico contiene detalles sobre el tipo de cifrado y una copia cifrada de la clave maestra para descifrar el sistema de archivos. La clave maestra es un número de 128 bits creado al leer desde / dev / urandom. Se cifra con un hash de la contraseña de usuario creada con la función PBKDF2 de la biblioteca SSL. El pie de página también contiene una sal aleatoria (también leída de / dev / urandom) que se usa para agregar entropía al hash desde PBKDF2, y evitar ataques de tabla de arco iris en la contraseña. Además, el indicador CRYPT_ENCRYPTION_IN_PROGRESS se establece en el pie de página criptográfico para detectar la falla al completar el proceso de cifrado. Consulte el archivo cryptfs.h para obtener detalles sobre el diseño del pie de página criptográfico. El pie de página criptográfico se mantiene en los últimos 16 Kbytes de la partición, y el sistema de archivos / data no puede extenderse a esa parte de la partición.
Una vez que el dispositivo está cifrado, la única forma de deshacerlo es borrar los datos. No creo que la implementación predeterminada que obtengas en la fuente AOSP encripta la tarjeta SD, ya que no todos los dispositivos Android tienen una tarjeta extraíble, como el Galaxy Nexus, pero creo que los fabricantes de dispositivos podrían agregar soporte para eso. La documentación de AOSP sobre la implementación de FDE está disponible aquí, Notas de Android sobre la implementación de cifrado . Es bastante minucioso en comparación con algunos de los otros documentos de AOSP. Es posible que le interese consultar esta publicación del blog, Recuperación de la clave de cifrado de arranque en frío en un teléfono con Android que tiene información sobre cómo intentar recuperar la clave con CyanogenMod7.
Sus conclusiones fueron:
La clave es totalmente recuperable si el teléfono se reinicia. Puede ser recuperable si se utiliza la clave de reinicio suave. Puede ser parcialmente recuperable si se reinicia por medio de un arranque de energía (puede haber un error en los experimentos aquí). Parece que no se puede recuperar si el teléfono se apaga. Las variables como reiniciar directamente a fastboot o hacer un reinicio normal mientras se mantiene presionada la tecla de arranque rápido, o dejarla conectada a USB o no, parecen ser irrelevantes.
Pero él estaba ejecutando CyanogenMod7, así que no sé si eso es generalmente aplicable a las ROM de almacenamiento en dispositivos o ROM creadas directamente de AOSP, pero tal vez haya más información e investigación sobre el potencial de recuperación de claves. / p>
Espero que esto ayude a algunos.