7 votos

Cifrado de tarjeta SD compatible con múltiples plataformas para Android

¿Cómo podría cifrar mi nueva tarjeta SD de 256GB, la cual está destinada para mi teléfono Android, considerando lo siguiente:

  • La tarjeta debe ser utilizable en múltiples dispositivos Android y otras plataformas (Linux..). Como consecuencia, el cifrado nativo de la tarjeta SD de Android no es una solución ya que el contenido no es legible en otras plataformas, ni recuperable si el teléfono falla o necesita un reinicio.
  • El objetivo es proteger datos, principalmente imágenes, de ladrones/encontradores de teléfonos, no de una agencia gubernamental o la policía. Mi entendimiento es que la mayoría de los métodos de cifrado están comprometidos en Android para estos propósitos ya que las claves a menudo son accesibles desde la memoria. En ese sentido, una vez desbloqueado, el teléfono se considera confiable, por lo que el cifrado debe ser transparente para que los archivos sean accesibles a través de aplicaciones estándar de teléfono (es decir, las imágenes se ven en la Galería).

Ideas:

  • Métodos de cifrado de disco completos como Luks. Encontré este programa: EDS que aparentemente puede montar un volumen Luks si el teléfono está rooteado. No tengo idea de qué tan eficiente es en términos de rendimiento, o si es seguro para la tarjeta.
  • Programas comerciales que utilizan su propio cifrado basado en archivos pero están disponibles en múltiples plataformas como Boxcryptor, o Cryptomator. Su propósito original es cifrar archivos antes de almacenarlos en la nube. No parece que pueda acceder a los archivos usando aplicaciones regulares con esta solución.
  • Cambiar mi teléfono por uno en el que pueda instalar UbPorts :)
  • Usando Termux y rooteando el teléfono para montar un sistema de archivos cifrado como gocryptfs
  • Usar el cifrado de tarjeta SD predeterminado de Android (FDE/FBE), volcando la memoria para acceder a la clave de cifrado y utilizarla desde Linux para acceder a los archivos
  • ¡Otra idea bienvenida!

No puedo encontrar información sobre este caso de uso, lo cual me parece muy extraño..

¡Muchas gracias por cualquier aportación!

0 votos

Gracias por todas tus respuestas.. por ahora decidí optar por la encriptación por defecto de Android porque es mucho más sencillo de implementar.. Encontré un par de escritos sobre cómo romper el FDE de Android en versiones antiguas, pero nada sobre cómo recuperar la clave fscrypt (es decir, de la memoria) que se utiliza en las versiones más recientes. ¿Tienes alguna idea si esto es factible o no? // ¡Que tengas un buen día todos!

1 votos

Los dispositivos recientes solo usan FBE. La ruta /data/misc/vold pertenece a la descripción de Irfan de FDE.

5voto

Jack Wade Puntos 231

FDE

En versiones anteriores la encriptación predeterminada de Android para /data y Almacenamiento Adoptable era Full Disk Encryption (FDE) que es una implementación personalizada de dm-crypt. La partición de userdata (tanto en FDE como FBE) es difícil (o imposible) de desencriptar fuera del dispositivo debido a la encriptación respaldada por hardware. En el caso del Almacenamiento Adoptable implementado desde Android M, la clave se guarda en /data/misc/vold/expand_*.key, no necesitas volcar la memoria pero el acceso a /data requiere permisos de root. La clave se almacena sin encriptar debido a la suposición:

Dado que el contenido de un dispositivo de almacenamiento adoptado está fuertemente ligado al dispositivo Android que lo adoptó, las claves de encriptación no deben ser extraíbles del dispositivo principal, y por lo tanto el dispositivo de almacenamiento no puede ser montado en otro lugar.

Pero si tu dispositivo ya tiene permisos de root y tienes la clave, es posible desencriptar la tarjeta SD en una máquina Linux utilizando dmsetup. También ten en cuenta que quitar la tarjeta SD física afectará tu /sdcard y las aplicaciones que hayas movido.

FBE

Las versiones recientes de Android mayormente utilizan File Based Encryption (FBE) que se basa en la encriptación de sistemas de archivos Linux (para ext4 y f2fs). No utiliza una única clave, en cambio la clave maestra genera claves por archivo (por inodo de hecho) sobre la marcha. En Android, la clave maestra encriptada se guarda en /data/misc/vold/user_keys/de/ y /data/misc/vold/user_keys/ce/ junto con otros archivos relacionados. Se nombran subdirectorios adicionales después del ID de usuario p. ej. 0 para el propietario del dispositivo. Aquí de es para almacenamiento Encriptado en el Dispositivo que está completamente encriptado por hardware y está disponible durante el arranque sin interacción del usuario. ce es para almacenamiento Encriptado por Credenciales que requiere un PIN/contraseña del usuario para ser desencriptado además de la clave respaldada por hardware. Diferentes directorios en la partición de /data están encriptados con diferentes claves; DE o CE, para el usuario 0 o el usuario 10 y así sucesivamente.

Por lo tanto, cada usuario tiene 2 claves encriptadas - una para CE y la otra para DE - al igual que la clave encriptada almacenada al pie de la partición de userdata como en el caso de FDE. Las claves no pueden ser simplemente utilizadas para desencriptar archivos en una PC a diferencia de una sola clave requerida para desencriptar todo el dispositivo de bloques en el caso del Almacenamiento Adoptable de FDE. Además, FBE con Almacenamiento Adoptable no funciona en Nougat y Oreo, y no parece muy estable en Pie. No estoy seguro de cómo funcionará cuando las cosas se simplifiquen. Si algunas implementaciones almacenan claves maestras no encriptadas (CE/DE) en /data/misc/vold/user_keys/, habría mayores posibilidades para que FBE funcione en varias plataformas.

OTRAS OPCIONES

Si no deseas utilizar la encriptación nativa de Android FDE o FBE, puedes configurar manualmente dm-crypt (plain / LUKS), o probar primero soluciones basadas en FUSE como encfs o gocryptfs; son relativamente más simples. Los binarios están disponibles aquí.

FBE se puede gestionar manualmente con la herramienta fscrypt pero no creo que sea una opción muy viable en este momento. Sin embargo, puedes intentarlo.

ecryptfs es otra característica nativa del kernel de Linux. Android por defecto nunca utilizó ecryptfs que yo sepa, por lo que depende del creador de la ROM si construyó el kernel con CONFIG_ECRYPT_FS=y o no. Es posible que tengas que reconstruir el kernel.

Todas las opciones anteriores funcionan bien pero todas requieren acceso de root y configuración manual en Android, p. ej. un script init.d, o una solución de terceros.

O si solo deseas encriptar directorios seleccionados y no toda la tarjeta SD, prueba MiXplorer. Incluye una versión en Java de encfs que no requiere permisos de root. Sin embargo, los directorios desencriptados en MiXplorer no serán accesibles para otras aplicaciones. Para un caso de uso similar a Boxcrypter, prefiero rclone porque es de código abierto.

RELACIONADO:

0 votos

Muchas gracias, realmente mucho más claro. Sin embargo, todavía no entiendo dónde puedo encontrar la clave FBE para poder descifrar los archivos desde Linux.. alguna idea?

1 votos

¡Entendido, gracias! ... como resultado supongo que no hay una forma práctica de implementar esto ... me quedaré con el cifrado de tarjeta SD de Android y usaré un software de sincronización para hacer copias de seguridad y sincronizar mis archivos. Si cambio de teléfono, espero poder descifrar todo primero para no tener que copiar todo de nuevo desde la copia de seguridad a la tarjeta ... salud a todos y gracias

0 votos

Cuando estás utilizando FDE y desmontas y sacas la tarjeta SD (almacenamiento adoptado), no sucede nada malo. Cuando la vuelves a insertar, funcionará normalmente.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X