viernes, 12 de septiembre de 2014

Encriptación de partición con LUKS

En ocasiones es necesario impedir que otros vean cierta información o sencillamente que , en caso de robo, nadie pueda disponer de ella. Para esto es recomendable encriptar dicha información. La mayoría de las distribuciones ya cuentan con un menú muy descriptivo donde , de una forma muy sencilla, nos permite encriptar y montar de forma automática una o varias particiones. Pero ¿que hacer si llevamos años con un portátil y le insertamos un nuevo disco duro el cual queremos particionar y encriptar o se nos tras la instalación se nos ha olvidado encriptar la partición /home ?.

A continuación explico como encriptar una partición. Para esto vamos a usar LUKS (Linux Unified Key Setup), es el estándar en Linux para encriptar discos duros y particiones, encriptaremos la partición y le asignaremos un punto de montaje.

Nota: Este procedimiento hace que se pierdan todos los datos de la partición a encriptar por lo que, si los necesitamos en el futuro, es necesario hacer una copia de dichos datos antes de prodeceder.

Dicho esto, podemos comenzar.

1. Descripción e instalación

Lo primero de todo es instalar los paquetes necesarios :

sudo apt-get install cryptsetup libpam-mount initramfs-tools
ver que partición queremos encriptar,

Nota: Los discos duros pueden ser divididos en uno o varios discos lógicos que llamamos particiones, estás particiones son anotadas en la tabla de particiones situada en el sector 0 del disco. Fdisk es usado para ver, crear o manipular dicha tabla de particiones.
sudo fdisk -l

Disco /dev/sda: 160.0 GB, 160041885696 bytes
255 cabezas, 63 sectores/pista, 19457 cilindros, 312581808 sectores en total
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x00038773

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1        30580736   139165695    54292480   83  Linux
/dev/sda2   *      2048    20340735    10169344   83  Linux

/dev/sda3       139167742   312580095    86706177    5  Extendida
/dev/sda4       20340736    30580735     5120000   83  Linux


si la partición a encriptar es un nuevo disco duro que no está en uso o , directamente, no está en uso, y no tenemos claro que dispositivo es , podemos usar el comando mount el cual nos informará de que partición/es están en uso por tanto la que no aparezca en mount pero si aparezca en fdisk , esa , será nuestra partición. Es decir:

mount | grep /sda
/dev/sda1 on / type ext4
/dev/sda4 on /home type ext4 


Como se puede ver la /dev/sda2 no aparece montada por lo que esta es la partición que no está siendo usada.
Una vez que sabemos que partición queremos encriptar, creamos un directorio a usar como punto de montaje, en mi caso lo he llamado "backup" y estará en /
mkdir /backup
Al estar en / solo root tiene permisos para modificarlo o agregar ficheros por lo que le cambiamos el user y el group:
sudo chown yo:users /backup
En este caso el usuario es YO y el grupo al que pertenezco es USERS. Esto ,obviamente, es modificable.

2. Cifrado

A continuación, encriptamos la partición, como vimos anteriormente la partición que queremos encriptar es la /dev/sda2. 

cryptsetup -c aes -h sha256 -y -s 256 luksFormat /dev/sda2

alternativo, mas recomendado (a continuación explicaré porque)

cryptsetup -c serpent-xts-plain64 -s 512 -h whirlpool -i 2500 --use-random -y luksFormat /dev/sda2

Nos pedirá que confirmemos escribiendo YES en mayúsculas y nos pedirá la contraseña (no olvidar la contraseña ya que no hay :

Are you sure? (Type uppercase yes): YES

Enter LUKS passphrase:

Verify passphrase 

Ahora comprobamos el estado de la particion:

cryptsetup luksDump /dev/sda2

Si todo ha ido bien nos dará cierta información como

Version:           1
Cipher name:       aes
Cipher mode:       cbc-plain
Hash spec:         sha256
Payload offset:    4096

Algo de información útil:

Cipher name:


Block size
Key size
comment
AES
128 bits 128, 192 or 256 bits aprobado por la NSA para la protección de información clasificada como "SECRET" y "TOP SECRET" por el gobierno de los Estados Unidos (cuando se utiliza con un tamaño de clave de 192 ó 256 bits). 
Algunos cifrados son lentos y requieren mas ciclos de computación, AES es el mas rápido de todos.
64 bits 32–448 bits Uno de los primeros sistemas de cifrado, libres de patentes, que pasó a disposición del público, por lo tanto, muy bien establecida en Linux.
128 bits 128, 192 or 256 bits Desarrollado como sucesor de Blowfish, pero no ha alcanzado un amplio uso.
Puede llegar a ser tan rápido como AES si se compila de forma correcta.
Tiene una tolerancia de seguridad mas alta que AES.
128 bits 128, 192 or 256 bits Considerado el más seguro de los cinco finalistas AES-competencia.
Este es el método mas lento de cifrado. 
Tiene una tolerancia de seguridad mas alta que AES.

Cipher mode:

El mas básico y común modo de cifrado es "cipher-block chaining (CBC)". Al cifrar un sector con este modo, cada bloque de datos de texto plano se combina de forma matemática con el texto cifrado del bloque anterior.

El otro modo de cifrado es "electronic codebook (ECB)" pero no es recomendable usarlo ya que es mucho mas inseguro al usar los mismo 16 bytes de texto plano para cifrar cada bloque de datos.

Hash spec:

Una función de hash es una función que se puede utilizar para mapear datos digitales de tamaño arbitrario a datos digitales de tamaño fijo, con ligeras diferencias en los datos de entrada que producen diferencias muy grandes en datos de salida.Los valores devueltos por una función hash se llaman valores hash, códigos hash, sumas de hash, o simplemente hashes.

* SHA-0, hash inseguro. 

* SHA-1, hash inseguro.

* SHA-2 (SHA-256/224, SHA-512/384)

* Whirlpool, basado en AES y opensurce, es mas seguro que SHA-2.Mas info aquí.

Existen mas hash soportados por tu kernel, para ver un listado de todos ellos colo tipear el comando 'cat /proc/crypto'.

3. Particionado

A continuacion vamos a crear el sistemas de archivos:

sudo mkfs.ext4 -L backup /dev/mapper/backup

Ahora ya podemos montar la particion:

sudo cryptsetup luksOpen /dev/sda2 backup
sudo mount /dev/mapper/backup /backup

Si todo ha ido bien, se montará la partición sin problemas. Recuerdo que la partición a usar es /dev/sda2 y el punto de montaje /backup.

Si queremos desmontar particion:

sudo umount /dev/mapper/backup
sudo cryptsetup remove backup

4. Montaje final

Ahora vamos a configurar nuestro linux para que nos pida la contraseña al arrancar el pc y se monte de forma automática. Para ello vamos a modificar dos ficheros, /etc/fstab y /etc/crypttab

sudo vi /etc/fstab

Y añadimos al final la siguiente linea:

# /dev/sda2
/dev/mapper/backup       /backup         ext4    defaults         0      

El archivo /etc/crypttab describe dispositivos de bloque encriptados que se crean durante el arranque del sistema.

sudo vi /etc/crypttab
Y añadimos la siguiente linea:
backup UUID=85a95f6d-7d09-4f88-aa77-ea5ae4f808ae none luks

El UUID lo sacamos de la siguiente forma:

sudo cryptsetup luksUUID /dev/sda2

Y ya está, reiniciamos y nos debería pedir la contraseña al inicio y montarse.
Gracias por la la lectura.

1 comentario:

  1. En las últimas versiones de Ubuntu o en distribuciones basadas en ubuntu como Backbox, me he encontrado errores al tratar de encriptar la partición, esto es porque tenemos que instalar mas librerías y complementos de lo que se citan en el articulo.

    ResponderEliminar