viernes, abril 04, 2008

Encriptación de particiones en Linux

He estado estos últimos días lidiando con sistemas de encriptación de discos duros en Linux , concretamente con la infraestructura LUKS - Linux Unified Key Setup. Este proyecto define un estándar de formato de disco encriptado y una implementación de referencia (cryptsetup) de la misma en Linux.

El sistema mapea una partición protegida y encriptada de manera transparente como un dispositivo de bloques sobre el cual se puede usar las herramientas habituales de manejo de particiones (mkfs, mount, etc). El mapeo aparece bajo el directorio /dev/mapper/nombre, donde nombre es una etiqueta que se va a asociar a dicho mapeo.

Por poner un ejemplo. Supongamos que /dev/hda3 es una partición encriptada con el algoritmo AES.Se quiere montar la partición a la que supongo que está ya encriptada y formateada:

cryptsetup -c aes -y create /dev/hda3 home
mount -t ext3 /dev/mapper/home /media/homecrypt
La etiqueta que hemos usado en este caso es home. La partición desencriptada aparecerá en /dev/mapper/home y la podremos usar como una partición normal, excepto que todo el acceso a la misma encriptará para escribir o desencriptará los datos de manera transparente al usuario.

Para desmontar la partición y borrar el mapping los pasos a dar serían:

umount /media/mapper/home
cryptsetup remove home
Si se quiere preparar una partición de disco para poder ser usada por la infraesrtructura de cifrado, y formatearla con el uso de ext3 los pasos a dar son los serían los siguientes (ojo, las siguientes órdenes borrarán todos los datos de la partición).
cryptsetup -y -c aes luksFormat /dev/hda3
cryptsetup -c aes -y create /dev/hda3 home
mkfs -t ext3 /dev/mapper/home
mount -t ext3 /dev/mapper/home /media/homecrypt

Usando ficheros de imágenes encriptadas

A veces lo ideal no es usar una partición física de disco, sino poder usar un fichero de imagen, que queremos que esté encriptado y que nos aparezca en el sistema como otro disco más. Para ello aprovechamos el soporte de dispositivos loop que ofrece Linux, para montar un fichero y que aparezca en el sistema como si fuese un dispositivo de bloques. Si queremos crear un fichero de 100MB encriptado:
dd if=/dev/zero of=filesystem.crypt count=512M
losetup /dev/loop0 filesystem.crypt
cryptsetup -y -c aes luskFormat /dev/loop0
cryptsetup -c aes -y create /dev/loop0 home
mkfs -t ext3 /dev/mapper/home
mount -t ext3 /dev/mapper/home /media/homecrypt
No olvidar desmontar la partición y desactivar el mapeo del sistema de criptografía una vez dejado de usar.

Problemas de la solución

El primer problema claro que le veo a esta solución es que necesitas permisos de administrador para poder ejecutar el conjunto de órdenes anteriores. Para mi gusto cfs que permitía sin ningún problema usar directorios encriptados por cada usuario. Tengo que mirar como se integran con KDE o GNOME este tipo de herramientas para que permitan un uso transparente del dispositivo, y en especial si es posible usar el automounter para que lo haga de manera autimática (por ejemplo el directorio ~/almacen de mi $HOME, automáticamente se monte un fichero encriptado)

Referencias

Technorati Tags: ,

2 comentarios:

Anónimo dijo...

¿Has probado TruCrypt? ¿Te parece mejor/peor?

Drizzt dijo...

Pues no lo he probado. Lo miraré :)