Intro

Desde que los cryptovirus andan descolgándose de los correos electrónicos y encriptando nuestros datos para que luego los malos nos pidan dinero para recuperarlos uno tiene la sensación de que la encriptación no es buena. Sin embargo, la encriptación es un método genial para evitar que si vendes tu antiguo disco duro por e-bay para comprarte un flamante disco de ultimísima generación al final tus fotos con cara de pánico saltando a la piscina acaben en algún meme de facebook. El caso es que cuando borramos los datos de un disco duro realmente lo único que hacemos es borrar la entrada del índice donde se le decía al sistema operativo donde podía encontrar los archivos referenciados. Sin embargo, los ceros y unos que en la secuencia correcta son capaces de mostrar tu cara de pánico siguen estando en la superficie magnética del disco. Una opción para que ya no estén sería meter el disco en el horno a 250ºC durante un par de horas, pero entonces no podrías venderlo por e-bay y comprarte ese tan chulo que tanto te gusta.

Lo mejor en este caso es que tus datos estuviesen encriptados con lo que sencillamente sin la clave de acceso nadie podría ver tu cara de pánico.

En este tutorial veremos como encriptar particiones de nuestros discos duros externos.

 

Manos a la obra

Primero las herramientas

Las herramientas con las que vamos a trabajar están en el paquete cryptsetup, así que habría que instalar este paquete:

$ sudo apt-get install cryptsetup

 

Una partición a encriptar

La encriptación borra el contenido de cualquier partición existente, por lo que es conveniente emplearla con cautela o crear una partición expresamente para ser encriptada.

Supongamos que ya tenemos la partición a encriptar (/dev/sdb1). Ejecutaremos el siguiente comando, que nos pedirá una contraseña (dos veces), borrará todos los datos de la partición y la llenará de datos aleatorios:

$ sudo cryptsetup –verbose –verify-passphrase luksFormat /dev/sdb1

El resultado lo podremos ver con el comando:

$ sudo cryptsetup luksDump /dev/sdb1

Que deberá arrojar una salida parecida a ésto:

LUKS header information for /dev/sdb1

Version:       	1
Cipher name:   	aes
Cipher mode:   	cbc-essiv:sha256
Hash spec:     	sha1
Payload offset:	4096
MK bits:       	256
MK digest:     	18 1d 6d 3e e9 44 2a fe bf 67 78 8f aa 02 7f 91 2a f4 f2 17 
MK salt:       	26 cc 29 9f 0b 7d ea ff 44 9f fe 34 91 40 6e 9b 
               	af 1e bd 8f d0 d2 1c 3a 70 30 35 5f 2d 49 9a 95 
MK iterations: 	222875
UUID:          	5acc17e0-80be-40ba-beae-626e47b57379

Key Slot 0: ENABLED
	Iterations:         	891733
	Salt:               	26 20 29 39 a5 1d 02 7b ca 8c bd 18 bc 29 64 7e 
	                      	28 dc 06 65 78 0e 16 95 1a 67 14 66 12 2d a3 c1 
	Key material offset:	8
	AF stripes:            	4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

 

Abrir la partición

Una vez tenemos la partición encriptada podemos proceder a abrirla. Para ello el sistema nos pedirá la contraseña con la que encriptamos.

$ sudo cryptsetup luksOpen /dev/sdb1 sdb1

Una vez abierta con LUKS con la contraseña correcta, el sistema mapea la partición encriptada a /dev/mapper/sdb1

Para comprobar que ha creado esta partición hacemos un fdisk -l y el resultado debe contener una partición como esta:

Disk /dev/mapper/sdb1: 1067 MB, 1067156992 bytes
255 heads, 63 sectors/track, 129 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7b0402f6

 

Formatear y montar la partición

Una vez encriptada y abierta la partición, para crear un sistema de archivos y montarla habría que ejecutar lo siguiente:

$ sudo mkfs.ext3 /dev/mapper/sdb1
$ sudo mount /dev/mapper/sdb1 /mnt

 

Montar automáticamente al inicio una partición LUKS encriptada

El sistema visto anteriormente está muy bien, pero resulta poco práctico si queremos que el sistema monte la partición al inicio y tenemos que incluir la contraseña cada vez que arrancamos o reiniciamos. Veamos la forma de hacer que el sistema abra la partición y la monte automáticamente al inicio.

Crearemos un archivo clave generado aleatoriamente para abir la partición encriptada durante el inicio y haremos que este archivo solamente lo pueda leer el usuario root.

$ sudo dd if=/dev/urandom of=/root/key.sdb1 bs=1024 count=4
$ sudo chmod 400 /root/key.sdb1

Añadiremos el archivo clave a la configuración LUKS:

$ sudo cryptsetup luksAddKey /dev/sdb1 /root/key.sdb1
Para verificar que el archivo de clave se ha añadido correctamente ejecutaremos:
$ sudo cryptsetup luksDump /dev/sdb1
Key Slot 0: ENABLED
	Iterations:         	891733
	Salt:               	26 20 29 39 a5 1d 02 7b ca 8c bd 18 bc 29 64 7e 
	                      	28 dc 06 65 78 0e 16 95 1a 67 14 66 12 2d a3 c1 
	Key material offset:	8
	AF stripes:            	4000
Key Slot 1: ENABLED
	Iterations:         	404242
	Salt:               	9d b9 05 d4 06 be 8c db 74 bd cb 59 de 9a 95 8a 
	                      	91 8c 09 5d 91 5f 0a e6 b5 86 3c 81 73 22 e1 db 
	Key material offset:	264
	AF stripes:            	4000

Como podemos ver el slot 1 de las claves (key slot 1) se ha ocupado con el archivo clave.

El siguiente paso consite en generar una UUID para el dispositivo de bloques encriptado:

$ sudo cryptsetup luksUUID /dev/sdb1
5acc17e0-80be-40ba-beae-626e47b57379

Ahora habría que indicar la UUID del dispositivo encriptado al archivo /etc/crypttab añadiendo la siguiente entrada al archivo mediante el comando:

$ sudo nano /etc/crypttab
sdb1 /dev/disk/by-uuid/5acc17e0-80be-40ba-beae-626e47b57379 /root/key.sdb1 luks

El formato de las entradas en /etc/crypttab es el siguiente:

<nombre del dispositivo de bloques encriptado> /dev/disk/by-uuid/<UUID del dispositivo de bloques> <localizacion del archivo clave> luks

Por último, creamos un punto de montaje  y editamos /etc/fstab para añadir la información de montaje para el dispostivo encriptado:

$ sudo mkdir /mnt_sdb1
$ sudo nano /etc/fstab
/dev/mapper/sdb1        /mnt_sdb1    ext3

Reinicar ahora. La partición encriptada debería ser montada automáticamente al arranque.

 

Enlaces

Este tutorial es una traducción al castellano del HowTo How to create an encrypted disk partition on Linux de Dan Nanni en Xmodulo.com

Muchas gracias al autor y a Xmodulo por publicarlo. El motivo de hacer un tutorial con el mismo es tenerlo disponible si en algún momento la publicación original dejase de estar en línea. Recomiendo visitar el post original del autor.