Android / CyanogenMod encriptación vs GNU / Linux

7

Hola, estoy tratando de entender cómo funciona el cifrado de un teléfono basado en Android en comparación con un host GNU / Linux que depende de LUKS dm-crypt.

Esto es lo que entiendo: LVM cifrado en GNU / Linux es una opción que solo está disponible en la instalación inicial, por lo que no hay oportunidad de hacerlo a nivel del sistema más adelante, si no se hace al principio. La eliminación de FDE necesitaría un reformateo completo de la unidad después de la copia de seguridad de los datos. La única forma de estar seguro mientras usa FDE es apagar completamente el dispositivo y no dejarlo suspendido en modo RAM. Los protectores de pantalla de contraseña son inútiles en este caso porque un volcado de memoria puede recuperar la clave. La hibernación es correcta ya que SWAP está cifrado de forma predeterminada. Por favor, siéntase libre de corregirme en todo esto si me equivoco.

Sobre lo que estoy desconcertado: ¿Cómo puede Android realizar el cifrado posterior a la instalación del sistema cuando también se basa en LUKS? ¿Solo encripta el almacenamiento interno y no la tarjeta SD? ¿Cuál es el objetivo del cifrado si el teléfono móvil se deja encendido durante la mayor parte de su vida útil, si un ladrón no puede pasar por alto el cifrado de la pantalla de barrido descargando la memoria RAM del teléfono y extrayendo la clave maestra?

TIA

    
pregunta Mazigard 15.02.2013 - 01:22
fuente

1 respuesta

7

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.

    
respondido por el dudebrobro 15.02.2013 - 13:10
fuente

Lea otras preguntas en las etiquetas