Sistema de Ficheros Encriptado con Cryptoloop
Tuesday, 10 December 2605
Inicio | Documentacion | Software | Acerca de

Documentación y Software
Inicio
Documentacion
Software
Acerca de


Sistema de Ficheros Encriptados con Cryptoloop

Eduardo Urrea eurrea@servitux.com

Versión: 1.0, Octubre 2004

Esta guia se distribuye SIN NINGUNA GARANTIA. No me responsabilizo de los posibles problemas que conlleve el ejecutar todos los pasos que se describen. Esta guia se distribuye bajo licencia GPL ( http://www.gnu.org/ ). La última versión de esta guia siempre estará disponible en http://www.servitux.org/

El documento que vais a leer sirve para darle un uso útil a la CryptoAPI que tiene con el kernel 2.6.x. En versiones anteriores del kernel (versión 2.4.x) se necesitaba un parche, si alguno esta interesado en ver como se hace puede ver mi otro documento que tengo hecho de lo mismo pero para la versión 2.4.x del kernel.

Este sistema es muy potente, sobre todo cuando hay otras personas que pueden acceder a tu sistema (ya sea legalmente o no), ya que hace invisible los datos que hayan en el sistema de ficheros que creamos. La cuestión es que no solo sirve para esconderte de la ley, sino para datos confidenciales como puede ser claves de acceso a servidores, datos personales, correos electrónicos... Y todo lo que os podáis imaginar y que sea motivo de esconder para otras personas.

El sistema que vamos a utilizar solo tiene un pero, al crear un fichero que es nuestro sistema de ficheros, si no tiene los permisos adecuados cualquier persona podría borrarlo, por lo tanto, necesitaremos ocultarlo a la vista de la gente. En este documento no voy a explicar como se hace, pero os prometo hacer un documento para este cometido.

1.- Módulos de kernel que hay que compilar:

Para que este sistema funcione perfectamente necesitamos cargar unos módulos en el kernel y para ello compilarlos. Gracias a los desarrolladores del kernel 2.6.x podemos disfrutar de estas posibilidades sin poner ningún parche añadido al mismo. Por lo tanto voy a pasar a explicar que opciones tenemos que colocar:

Ejecutamos make menuconfig dentro del source donde tengamos nuestro kernel 2.6.x, en mi caso es /usr/src/linux y entramos en las opciones, seleccionando los módulos que visualizo a continuación:

        Device Drivers  --->
           Block devices  --->
                <M> Loopback device support
                <M>   Cryptoloop Support
        Cryptographic options  --->
           --- Cryptographic API
                <M>   MD5 digest algorithm
                <M>   DES and Triple DES EDE cipher algorithms
                <M>   Blowfish cipher algorithm
                <M>   Twofish cipher algorithm
                <M>   AES cipher algorithms

NOTA 1: He omitido las demás opciones porque sino cargaría el documento, y como lo que queremos es aprender a encriptar sistemas de ficheros, voy al grano y termino antes. (El tiempo es oro).

NOTA 2: No he colocado todos los módulos que existen en la CryptoAPI ya que muchos de ellos no funcionan o no están implementados para el sistema que vamos a utilizar.

Ahora compilamos el kernel para que podamos cargar esos módulos y evidentemente el paso siguiente es cargarlos en el sistema, de momento vamos a cargar todos los módulos que hemos instalado, después cada uno que deje el que crea más conveniente.

2.- Crear el espacio a encriptar:

Ahora vamos a crear un fichero que lo utilizaremos como si fuera una partición linux, pero con la peculiaridad que estará encriptada. Solo el dueño del fichero podrá montarlo y operar con él. Utilizaremos el algoritmo de cifrado twofish, aunque podemos utilizar cualquier otro (aes, des3, blowfish...).

Ahora empezaremos a montar el sistema de ficheros encriptado y veremos lo fácil que puede ser utilizar este sistema.

El primer paso que tenemos que realizar es crear el espacio (a.k.a llamado fichero) que vamos a utilizar para realizar el sistema de ficheros encriptado del usuario, para ello se utiliza el comando "dd" para crear un fichero con "X" Mbits que sera por ejemplo el "Home" del usuario eurrea:

        dd if=/dev/urandom of=eurrea.home bs=1024 count=1024

Con esto creamos un fichero llamado "eurrea.home" de 1 Mb que lo rellenamos con caracteres aleatorios para más tarde crear el sistema de ficheros que vamos a utilizar (en mi caso ext2). Si ejecutamos el comando "ls -l eurrea.home" veremos la siguiente salida por consola:

        -rw-r--r--   1 root root  1048576 2004-10-27 18:47 eurrea.home

3.- Crear dispositivo loop encriptado, enlazando el fichero eurrea.home:

Como he dicho antes, vamos a utilizar el algoritmo TWOFISH (ver referencia al mismo en http://www.schneier.com/paper-twofish-paper.pdf) para encriptar nuestra "partición". Lo haremos de la siguiente forma:

        losetup -e twofish /dev/loop0 eurrea.home

Cuando ejecutemos el comando que hemos descrito anteriormente nos pregunta que introduzcamos una contraseña, que sera la contraseña que vamos a tener para este recipiente encriptado. La contraseña en mi caso sera "prueba".

Con esto, tenemos el fichero "eurrea.home" enlazado al dispositivo "/dev/loop0" con el algoritmo de encriptación TWOFISH.

4.- Crear el sistema de ficheros del dispositovo /dev/loop0 (eurrea.home):

Ahora tendremos que crear el sistema de ficheros que vamos a utilizar para este espacio que hemos creado, en mi caso le voy a dar un sistema de ficheros EXT2:

        mke2fs -b 2048 /dev/loop0

NOTA 1: Según la versión 2.6.9 del kernel, los sistemas de ficheros de journaling (EXT3 o RaiserFS) no son seguros para utilizar este sistema, por lo tanto os recomiendo que os decantéis por el EXT2.

Como el dispositivo "/dev/loop0" esta enlazado al fichero "eurrea.home", se va a crear en ese fichero el sistema de ficheros EXT2 que hemos ejecutado con el comando "mke2fs". Ya tenemos un fichero que se puede montar como si de una partición o unidad de almacenamiento fuera.

5.- Montar dispositivo "/dev/loop0":

En este punto vamos a montar el dispositivo "/dev/loop0" en un directorio para poder acceder a él y operar:

        mkdir eurrea
        mount /dev/loop0 eurrea/

Como hemos visto, se ha montado perfectamente y para comprobarlo solo tenemos que ejecutar el comando "df" y nos dirá lo siguiente:

        S.ficheros         Bloques de 1K   Usado    Dispon Uso% Montado en
        ...
        /dev/loop0                1000        18       932   2% /home/eurrea
        ...

Pues ahora podemos entrar al directorio "/home/eurrea" y realizar operaciones con él, grabar ficheros, realizar programas, almacenar claves... lo que se nos pase por la cabeza.

Como veis se trata como si de una partición de disco duro fuera, por lo tanto podemos hacer las mismas operaciones. A simple vista nosotros no vemos nada encriptado, pero el sistema esta funcionando perfectamente y en los siguientes puntos lo demostraremos.

6.- Escribiendo un fichero de prueba en el espacio encriptado:

Ahora vamos a escribir un fichero en el espacio que hemos montado, crearemos un fichero txt (de texto) para después hacer comprobaciones de si de verdad esta encriptado o no, para esto ejecutaremos el siguiente comando:

        echo "Servitux" > fichero_secreto.txt

Si ejecutamos el comando "ls -l" veremos que el fichero se ha creado correctamente y nos sale la siguiente salida por consola:

        -rw-r--r--  1 root root     9 2004-10-27 19:11 fichero_secreto.txt

El contenido del fichero, como vemos en el comando "echo" que hicimos anteriormente, es "Servitux", para comprobarlo podemos ejecutar el comando "cat fichero_secreto.txt" y nos saldría por consola la palabra que creamos en ese fichero. Como vemos, parece que todo va correctamente y nosotros no vemos nada encriptado... vamos a ello.

7.- Desmontando dispositivo "/dev/loop0":

Ahora desmontaremos el dispositivo encriptado y quitaremos el enlace de "/dev/loop0" al fichero "eurrea.home":

        umount /dev/loop0
        losetup -d /dev/loop0

Ahora si ejecutamos el comando "df" veremos como el dispositivo ya no esta montado. Ahora se supone que el fichero que creamos esta dentro del fichero "eurrea.home" que es el que contiene nuestro sistema de ficheros encriptado.

8.- Montar fichero "eurrea.home" correctamente para operar con él:

Ahora, para poder trabajar con el fichero "eurrea.home" perfectamente, debemos de meter en el comando "mount" los siguientes parámetros:

        mount eurrea.home /home/eurrea -o encryption=twofish

Nos pregunta por la contraseña que le pusimos al crear el sistema de ficheros (recordar que pusimos "prueba" de contraseña) y a introducirla vemos como no nos da ningún error y se monta correctamente el dispositivo. Esta es la forma de montar el dispositivo, la que explicamos en los puntos anteriores solo nos sirve para crear el sistema de ficheros encriptado, por lo tanto recordar el parámetro del comando "mount" que tenéis que poner y por supuesto, no olvidar la contraseña, porque si lo hicieramos seria muy difícil (por no decir imposible) recuperar los datos de ese sistema encriptado.

En caso de que nos equivoquemos introduciendo la contraseña el sistema nos dice que "mount: debe especificar el tipo de sistema de ficheros" y por lo tanto cualquier persona que pueda trastear con el fichero nunca se imaginara que es un sistema de ficheros. Si lo montamos sin poner el parámetro "encryption=twofish", nos dirá el mismo error. Por lo tanto para ojos de otras personas eso es un fichero sin más.

Si hemos introducido correctamente la clave al montar el sistema de ficheros, veremos que lo que hicimos anteriormente (crear un fichero llamado fichero_secreto.txt), se puede ver perfectamente y se puede operar con él.

Ahora desmontaremos el sistema de ficheros encriptado y comprobaremos si se puede sacar datos del mismo sin saber el password.

        umount /home/eurrea

Si ejecutamos el comando "strings" con el fichero "eurrea.home" para ver si podemos localizar la cadena "Servitux" que almacenamos en el fichero "fichero_secreto.txt", nos daremos cuenta como no sale nada. No es visible por ninguna persona el contenido de ese fichero porque esta encriptado.

Claro esta que sin hacer una prueba que lo demuestre no os quedareis satisfechos y por supuesto se va ha realizar para que veáis que sin encriptación si que sacamos el contenido del fichero que creamos. Para esta comprobación, ejecutamos el siguiente comando:

        strings eurrea.home | grep Servitux

No sale nada.


9.- Realizar lo mismo pero sin encriptación:

Si realizamos la misma operación pero sin encriptar, veremos que con el comando "strings" podremos ver el contenido de ese fichero en ese fichero que es el sistema de ficheros que montamos. Los pasos siguientes son para crear un sistema de ficheros no encriptado y por lo tanto inseguro:

        dd if=/dev/urandom of=paco.home bs=1024 count=1024

        losetup /dev/loop0 paco.home

        mke2fs -b 2048 /dev/loop0

        mount /dev/loop0 paco/

        echo "Servitux" > paco/fichero_secreto.txt

        umount paco/

        mount paco.home paco/ -o loop (Nos deja sin pedir contraseña)

        umount paco/

        strings paco.home | grep Servitux

Como podemos ver, nos sale que si ha encontrado una coincidencia, y curiosamente la palabra que nosostros introducimos en el fichero "fichero_secreto.txt". Por lo tanto deducimos que no esta encriptado.

10.- Una de imaginación:

Casi todos hemos tenido cuentas en servidores donde habían muchos usuarios y varios administradores. En ese servidor almacenamos documentos y programas de interés importante y no queremos que nadie pueda acceder a ellos para poder grabárselos. Por ejemplo podría ser un trabajo de fin de carrera, que no queremos que nadie se lo copie para poder implementarlo él o quien sabe... copiárselo para su propio beneficio hasta que sea público.

Pues bien, con este sistema nos crearíamos un ficherito que ocupara lo suficiente para almacenar esos documentos/programas y cada vez que saliéramos del sistema lo desmontaríamos. Así nadie podría nunca ver lo que uno esta haciendo.

Por supuesto tienes que llegar a un consenso con el administrador de sistemas para que de más privacidad al servidor y coloque los módulos necesarios para que funcione. Y que te dejara montar unidades.

También podríamos tener un sistema de ficheros encriptado para nuestro propio ordenador, para almacenar todos los datos importantes que no queremos que cualquier otra persona (familia, compañeros de trabajo, amigos que tengan shell en tu máquina...) pueda ver.

O bien podríamos tener una llave USB de almacenamiento que contenga el fichero encriptado y que solo tu pudieras montarla y nadie que pueda acceder a la llave USB pudiera ver que tienes en ese dispositivo.

Como veis, se puede utilizar para muchos casos diferentes y podría hacer páginas y páginas con ejemplos.

11.- Conclusión:

Este sistema es fácil, ligero y elegante de utilizar para cuando tenemos que almacenar cosas de carácter personal que no queremos que otras personas (ya sea con permiso o sin él) puedan ver cuando nos ausentamos de nuestro ordenador o para otras cosas más que no voy a explicar aquí y que los lectores deduciran inmediatamente.

Para bajaros el documento en texto sin formato pulsa aquí


  Last modified: Thu, 22 December 2016  Contenidos © ServiTux Servicios Informáticos