No conozco ninguna solución GUI que se ajuste a tus necesidades pero puedo compartir algo sobre soluciones CLI que funcionen.
ENCRIPTACIÓN DEL DISCO:
la tarjeta microSD externa no se fusiona con el almacenamiento interno
Estás hablando de Android's Almacenamiento adoptable . En realidad no se fusiona (como en el caso de LVM ), simplemente se descifra y se monta como un sistema de archivos independiente. Android inicia emulando a /sdcard
de /mnt/expand/[UUID]
que por otra parte es de /data/media/
. Además, algunas aplicaciones también son móvil a este nuevo adoptado almacenamiento. En caso de FDE (basado en dm-crypt
), la clave se almacena en /data/misc/vold/expand_*.key
que puede utilizarse para montar la tarjeta SD en cualquier sistema operativo que ejecute el kernel de Linux (incluido Android). Todo lo que necesitas es dmsetup
. Ver esta respuesta para más detalles.
el contenido de una tarjeta microSD encriptada puede verse en otro dispositivo Android y en un PC con Windows/Linux
En el caso del Almacenamiento Adaptable se puede hacer una copia de seguridad de la llave maestra en algún lugar seguro para que pueda ser utilizada en caso de que el dispositivo se borre o deje de ser booteable. O si no quieres utilizar el cifrado nativo de Android, puedes configurar manualmente dm-crypt
FDE (plain / LUKS) en la tarjeta SD utilizando cryptsetup
.
CIFRADO DEL SISTEMA DE ARCHIVOS:
Las versiones recientes de Android utilizan principalmente FBE que se basa en Linux cifrado a nivel de sistema de archivos (para ext4
y f2fs
). No utiliza una única clave, sino que la clave maestra genera claves por archivo sobre la marcha. En Android las claves maestras encriptadas se guardan en /data/misc/vold/user_keys/
. Los almacenamientos Device Encrypted (DE) y Credential Encrypted (CE) lo complican aún más. También FBE con Almacenamiento Adoptable no funciona en Nougat y Oreo, y no parece muy estable en la tarta. Así que no es una opción muy fiable por el momento.
También es posible configurar manualmente el FBE mediante fscrypt
(o e4crypt
/ f2fscrypt
) siempre que su kernel soporta lo. Pero, de nuevo, hay múltiples problemas con la implementación en el espacio de usuario, así como en el espacio del kernel, particularmente relacionados con gestión de llaves . Así que, de nuevo, no es una opción muy factible.
fscrypt
es muy probable que sustituya a ecryptfs
; otra característica nativa del kernel de Linux. Es un sistema de archivos apilado que puede cifrar cualquier otro sistema de archivos. Pero fscrypt
( encriptación por archivo ) "es más eficiente en cuanto a la memoria, ya que evita el almacenamiento en caché de las páginas cifradas y descifradas en la caché de páginas" . Puede utilizar ecryptfs
también en Android si el kernel está construido con CONFIG_ECRYPT_FS
.
ENCRIPTACIÓN BASADA EN FUSIBLES:
Todas las opciones comentadas anteriormente son nativas del kernel de Linux, por lo que no funcionarán (o al menos muy mal) en Windows (siento no tener experiencia con Mac). Sin embargo, puedes optar por soluciones basadas en FUSE que tienen más o menos soporte en Windows también. Por ejemplo encfs
y gocryptfs
son sistemas de archivos criptográficos apilables; son más útiles en situaciones como copias de seguridad incrementales .
Si quiere seguir con veracrypt
que también funciona perfectamente, funciona incluso mejor que en Windows si se combina con dmsetup
para hacer uso de los servicios criptográficos nativos del kernel de Linux.
Otra solución basada en FUSE dislocker
puede descifrar Bitlocker. Pero FUSE sobre FUSE puede ejercer una penalización de rendimiento, por lo que debe evitarse con la elección correcta de los controladores del sistema de archivos.
la microSD externa encriptada se monta al arrancar automáticamente
No encontrará una opción con interacciones de la interfaz gráfica de usuario para introducir una contraseña al arrancar porque a diferencia de Linux no hay un terminal login
o crypttab
o PAM
. La interacción con el usuario sólo es posible mediante el desarrollo de una aplicación de inicio automático, que no estará en funcionamiento antes de zygote
/ system_server
y todos los servicios (nativos / Java) están en pleno funcionamiento. O puede intentar hackear el paquete SystemUI del framework de Android para obtener las mismas credenciales que se piden a través de la interfaz de usuario (en caso de FDE/FBE).
Un enfoque sencillo sería poner un init.d
script o crear un init
servicio. Esto debería funcionar con cualquiera de los métodos descritos anteriormente. Esta respuesta puede ser útil. He estado utilizando EncFS
para ampliar mi almacenamiento externo en dispositivos K y L (detalles aquí ). La tarjeta SD fue montada por un init
servicio, la contraseña se guardó en /data
partición que a su vez fue encriptada con FDE.
NOTAS:
- Los métodos de encriptación descritos anteriormente cubren todos los sistemas de archivos comúnmente utilizados, incluyendo
FAT
, exFAT
, NTFS
, ext4
, f2fs
etc.
- Si no se utiliza el Almacenamiento Adoptable, mejor crear dos particiones en la tarjeta SD para que
vold
servicio de montaje de la primera partición en el arranque. La primera partición puede ser de unos pocos cientos de MBs. Utilice la segunda partición para el cifrado.
- Las aplicaciones de línea de comandos utilizadas para el cifrado están disponibles aquí para Android.
RELACIONADO:
0 votos
¿Buscas una solución sin root o sólo para dispositivos con root?
0 votos
¿tal vez sea esto lo que busca? alternativeto.net/software/luks/?platform=Android Android es básicamente linux. puedes compilar tus propios binarios estáticos para la arquitectura arm con Linux Deploy google.com/search?q=cryptsetup+Android
0 votos
@alecxs Personalmente, yo todos los dispositivos que uso son rooteado . Si hay una solución para los smartphones no rooteados de la que pueda beneficiarse la comunidad, sería ideal.
0 votos
@alecxs He estado pensando en LUKS e incluso he utilizado una aplicación llamada Gerente de LUKS (o algo similar) alrededor de 2012-2013, pero luego el desarrollo fue detenido. También no estoy seguro de lo robusto que sería el uso de LUKS en Android, por ejemplo, sospecho que muchas cosas podrían romperse si decido actualizar a la siguiente versión de Android, o flashear otra ROM; siéntase libre de corregirme si me equivoco.
0 votos
Siempre y cuando mantengas todos tus scripts y binarios juntos, debería ser posible adaptarse. las carpetas init.d comunes son
/data/adb/post-fs-data.d
/su/su.d
y para los binarios ejecutables/data/adb/magisk
/su/xbin
0 votos
@alecxs Esto me parece bastante complicado. Además, no sé cómo manejar volúmenes encriptados con LUKS en Windows; programas como FreeOTFE, LibreCrypt o DoxBox parecen ser abandonware. Sin embargo, si no hay una solución más fácil que se te ocurra, no dudes en publicar una respuesta (probablemente elaborando un poco más el lado de los scripts).
2 votos
Del sitio de VeraCrypt: play.google.com/store/apps/details?id=com.sovworks.edslite
1 votos
Si tienes un teléfono rooteado,
EncFS
es una solución simple que he estado usando en mis dispositivos K y L durante años para usar (físicamente) la tarjeta SD externa como almacenamiento externo público (/sdcard) deshabilitando la memoria interna (DIM). También es bastante fácil de hacer copia de seguridad incremental de algunos directorios cifrados como DCIM a la nube (como con rclone). Tiene soporte multiplataforma. Todo lo que necesitas es un kernel con soporte FUSE, unencfs
binario y uninit.d
script.0 votos
@IrfanLatif Interesante, nunca había oído hablar de EncFS. Investigué brevemente y parece que se requiere usar la app Cryptonite para gestionar volúmenes encriptados con FUSE, pero la han retirado de Google Play. En cuanto a la compatibilidad con el kernel, debería investigar más a fondo lo que se ofrece para mi Moto G5s. Mientras tanto, siéntase libre de publicar una respuesta basada en su comentario - sólo probablemente añadir algunos detalles más, si es posible, o simplemente describir su caso de uso para los novatos:)