Cómo crear una "caja fuerte digital" en GNU/Linux

Al igual que hicimos en el anterior artículo;, vamos a aprender a hacer lo propio usando GNU/Linux. Como veréis, el proceso es muy parecido (instalar software, crear volumen, usar volumen) y las herramientas utilizadas se pueden hacer compatibles con TrueCrypt. Actualización: a petición de eddie, he incluido un apartado para hacerlo con el propio TrueCrypt en lugar de con las herramientas típicas del sistema.

 

¿Qué necesitamos instalar?

Actualmente se suelen utilizar 3 sistemas muy similares para crear sistemas de ficheros cifrados en GNU/Linux:

  1. Cryptoloop: la suma del “Loopback device support” (soporte para dispositivos de loopback, que se suele utilizar para montar un fichero grande como si fuera un disco duro en /dev/loop0, por ejemplo) y la CriptoAPI del kernel (incluida en el kernel desde la versión 2.4.24).
  2. Loop-AES: una evolución de Cryptoloop, que corrige sus fallos de seguridad y mejora el rendimiento.
  3. dmcrypt: similar a los otros dos, pero utilizando el “device mapper” del kernel.

Para cada solución necesitaremos diferente software instalado:

Cryptoloop

Necesitamos soporte para cryptoloop en el kernel:

  • Device Drivers -> Block Devices -> Cryptoloop
  • CryptoAPI -> AES (por ejemplo)

Además, necesitamos el programa “losetup”, que suele venir incluido en el paquete “mount”.

Para probar que todo está bien, podemos ejecutar:

# modprobe cryptoloop

Y comprobamos con lsmod cómo el módulo cryptoloop se ha cargado correctamente.

Loop-AES

Necesitamos soporte en el kernel para loop-aes. En Debian o similares, se puede hacer todo con APT y Module Assistant (en otras distribuciones es muy probable que ya tengas soporte para loop-aes en el kernel):

# apt-get install module-assistant loop-aes-source
# m-a prepare
# m-a build loop-aes
# apt-get install loop-aes-utils
# m-a install loop-aes

Para probar que todo está bien, podemos ejecutar:

# modprobe loop-aes

Y comprobamos con lsmod cómo el módulo loop-aes se ha cargado correctamente.

dmcrypt

Necesitamos soporte en el kernel, en concreto tener activadas estas opciones:

  • General Setup -> Support for hot-pluggable devices.
  • Device Drivers -> Multi-device support (RAID and LVM) -> Device Mapper Support + Crypt target support.
  • Cryptographic options -> AES cipher algorithms

Para asegurarnos de que Device Mapper y AES funcionan correctamente ejecutamos lo siguiente:

# ls –L /dev/mapper/control
# cat /proc/crypto

Y debería darnos información sobre el sistema Device Mapper y los algoritmos de cifrado. Finalmente, necesitaremos Instalar las herramientas de usuario:

# apt-get install dmsetup cryptsetup

Cómo crear un volumen

Al igual que con TrueCrypt, necesitamos crear un fichero grande en el que montar nuestro sistema de ficheros cifrado. Podría hacerse así:

# dd if=/dev/zero of=cajafuerte bs= 1k count=100000

Y conseguiríamos un fichero de 100000 KB lleno de ceros con el que trabajar. Pero esto sería dar demasiadas pistas. En función del sistema de ficheros con el que lo formateemos (FAT, ext3, ReiserFS, etc.), es posible que no todos los sectores de este disco virtual se modifiquen inicialmente, por lo que estarán a cero. Sería muy fácil identificar qué son datos y qué es espacio sin utilizar. Como queremos hacer una buena “caja fuerte digital”, crearemos el fichero contenedor a partir de datos pseudoaleatorios que tomaremos de /dev/urandom:

# dd if=/dev/urandom of=cajafuerte bs= 1k count=100000

Cómo usar tu volumen

Cryptoloop

Para tratar el fichero como un dispositivo, tenemos que asociar el fichero contenedor (cajafuerte) a un dispositivo de loopback (/dev/loop0) y luego formatearlo (solamente la primera vez que lo usemos, claro ;-) )::

# losetup –e aes /dev/loop0 cajafuerte
# mkfs.ext2 /dev/loop0

Al asociar el fichero cajafuerte con /dev/loop0 le hemos indicado que queremos usar el cifrado AES y nos pedirá una contraseña. Esta contraseña no se pide varias veces, por lo que tenemos que ser cuidadosos al teclearla. Tampoco nos avisará de que la hemos introducido mal la próxima vez que utilicemos ese sistema de ficheros cifrado, simplemente lo descifrará mal y no podremos acceder a nuestros datos allí guardados.

Una vez formateado, podemos montar el dispositivo virtual o volumen cifrado y usarlo normalmente:

# mount –t ext2 /dev/loop0 /mnt
# cp -R /etc /mnt

Finalmente tendremos que desmontarlo para dejar de utilizarlo. Es importante que además de desmontarlo con umount, también desasociemos el fichero (cajafuerte) al dispositivo virtual cifrado (/dev/loop/0). De lo contrario, cualquier otro usuario con privilegios podrá volver a montarlo sin que la contraseña se solicite (ya que solamente se solicita cuando se asocia con losetup el fichero y el dispositivo):

# umount /mnt
# losetup –d /dev/loop0

Loop-AES

El proceso es exactamente igual que con Cryptoloop, salvo por la sintaxis del algoritmo de cifrado a la hora de llamar a losetup:

# losetup –e AES128 /dev/loop0 cajafuerte
# mkfs.ext2 /dev/loop0
# mount –t ext2 /dev/loop0 /mnt
# cp -R /etc /mnt
# umount /mnt
# losetup –d /dev/loop0

dmcrypt

El proceso es ligeramente diferente con dmcrypt. Dado que tenemos el Device Mapper funcionando, es muy probable que los dispositivos virtuales se nos mapeen en /dev/loop/0 en lugar de /dev/loop0. Además, es necesario usar las herramientas propias de dmcrypt para crear el volumen cifrado:

# losetup /dev/loop/0 cajafuerte
# cryptsetup –y create mycrypt /dev/loop/0

Con estos comando hemos asociado el fichero (cajafuerte) al dispositivo virtual de loopback (/dev/loop/0). Como vemos, la asociación no implica cifrado. Es al crear el volumen cifrado con cryptsetup cuando se aplica el cifrado. Posteriormente comprobamos si todo ha ido bien y formateamos el volumen cifrado:

# dmsetup ls
# mkfs.ext2 /dev/mapper/mycrypt

Como vemos, el volumen cifrado está en /dev/mapper/mycrypt, no en /dev/loop/0. Por último ya solo nos queda usarlo, es decir, montarlo, utilizarlo como queramos, desmontarlo y destruir el volumen cifrado:

# mount /dev/mapper/mycrypt /mnt
# cp -R /etc /mnt
# umount /mnt
# cryptsetup remove mycrypt

Aclaración importante

Este artículo pretende ser la versión para GNU/Linux del anterior, por eso mismo no se han explorado las múltiples funcionalidades que nos ofrecen estos mecanismos de cifrado para sistemas de ficheros que pueden dar mucho más de sí, llegando a cifrar la memoria de intercambio (“swap”), todas las particiones físicas en nuestros discos, almacenar las contraseñas de cifrado en ficheros especiales, etc. etc. Todo ello queda como investigación para quien se haya interesado en estos temas, pero no se tratará en este artículo para no confundir a quienes pidieron una adaptación del artículo anterior a GNU/Linux ;-)

¿Cómo hacer todo esto con el propio TrueCrypt en GNU/Linux?

Como ya adelantamos, TrueCrypt está disponible para GNU/Linux en la sección de descargas de su página web. En ella podremos descargar binarios ya compilados para algunas de las distribuciones de GNU/Linux más comunes (SuSE, Ubuntu, etc.) y el código fuente por si queremos compilarlo nosotros mismos.

Veamos rápidamente cómo sería el proceso con TrueCrypt:

  1. Creamos un volumen cifrado (si no indicamos más opciones -tamaño, cifrado, etc.-, se nos irán preguntando al ejecutar el comando): truecrypt -c ./cajafuerte.tc
  2. Asociamos y montamos el volumen cifrado (se montará en /dev/mapper/truecryptN, donde N es el primer número libre comenzando desde 0): truecrypt ./cajafuerte.tc; mount /dev/mapper/truecrypt0 /mnt
  3. Usamos el volumen cifrado: cp -R /etc /mnt
  4. Desmontamos y desasociamos el volumen cifrado: umount /mnt; truecrypt -d/dev/mapper/truecrypt0

Si queréis más información sobre el uso de TrueCrypt en GNU/Linux, aquí tenéis la página del manual del comando truecrypt.

7 pensamientos en “Cómo crear una "caja fuerte digital" en GNU/Linux

  1. eddie

    Hombre, podías haber mencionado (aunque fuese de pasada) que existe una versión Linux de TrueCrypt con las mismas funcionalidades y compatible con la de Linux, pero veo el tutorial muy correcto.

    Responder
  2. txipi

    @thehunter: sí, es bastante diferente. CFS es una especie de "filtro" criptográfico sobre un sistema NFS montado en local (contra 127.0.0.1) y crea una estructura de directorios normal, con contenidos cifrados. Por lo tanto, es posible saber cuántos ficheros y directorios hay en un sistema CFS, cuánto ocupan y demás. Hay que usar comandos propios, como cmkdir en lugar de mkdir, etc. Me parece una solución ingeniosa, pero un poco más arcaica y limitada. Si quieres preparo un artículo sobre el tema, pero creo que está ya bastante en desuso.

    Responder
  3. thehunter

    No hace falta,gracias.Solo que lo usaba desde hace tiempo pensando que era un sistema seguro,pero ya veo que no.Me tendre que actualizar:)

    Responder
  4. Pingback: Cifrando archivos con CCrypt - Alt+Ctrl+Supr

  5. Pingback: Duda sobre idioma Debian y esconder partición - Foros de CHW

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>