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:
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:
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:
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:
Por último, creamos un punto de montaje y editamos /etc/fstab para añadir la información de montaje para el dispostivo encriptado:
$ 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.