Criptografía, ¿El patito feo de la informática? (II)

En la anterior entrada vimos una breve introducción a la criptografía. Hoy trataremos de aplicar lo visto a un escenario más práctico.

Cifrado de disco con herramientas nativas

Por suerte todos los sistemas operativos modernos disponen de un conjunto de herramientas que proporcionan “cripto robusta” y todas ellas permiten el cifrado completo de disco o cifrado de la partición de usuario. Debido a la extensión de algunos de los procesos que en sí darían para un post, en ocasiones se enlaza a la documentación original.

1. Linux (Luks)

Esta herramienta es nativa de los sistemas Linux modernos, y soporta numerosos algoritmos de cifra aunque por defecto usa AES-XTS-256. Permite cifrar tanto el sistema completo como particiones. Una ventaja adicional de LUKS es que soporta numerosos códigos de descifrado (actualmente soporta hasta 8) siendo esto útil en el caso de que se comparta el PC o si se usa un token físico para introducir la contraseña (Teensy, YubiKey) como salvaguarda por si lo perdemos.

Podemos encontrar más información en la documentación oficial. Mi recomendación final es hacer siempre un backup de la clave almacenada en el LUKS-Header. Para ello, puede consultarse la documentación oficial aquí.

2. MacOS X (FileVault2)

MacOS X nos proporciona una herramienta que nos permite cifrar el sistema completo con AES-XTS-256. Esta solución usará la contraseña de usuario para descifrar el disco duro y arrancar el sistema, aunque disponemos de un metodo secundario para descifrarlo en caso de que perdamos nuestras credenciales. Este consiste en un código de recuperación de 120 bits en el formato “xxxx-xxxx-xxxx-xxxx-xxxx-xxxx”, que es recomendable apuntarlo en un papel y guardarlo en un sitio seguro para cuando nos haga falta, ya que debemos tener en cuenta que cualquiera que disponga de este código puede descifrar nuestro disco.

El proceso de activación es realmente simple y lo podemos realizar siguiendo la documentación oficial.

Windows (BitLocker)

En Windows disponemos de la herramienta BitLocker en las versiones Ultimate/Enterprise de Windows Vista y Windows 7 y en las versiones Pro/Ultimate de Windows 8 y 8.1. Esta solución usa AES-CBC-256 y dispone de diversas opciones como mecanismo de autenticación para realizar el descifrado del disco:

  • Solamente PIN
  • Solamente TPM
  • TPM + PIN
  • TPM + PIN + Llavero USB
  • TPM + Llavero USB
  • Llavero USB

Para la correcta configuración disponemos de la documentación oficial.

Creación de contenedores

La creación de contenedores suele ser una tarea simple, cuya base de funcionamiento en la mayoría de los casos consiste en la creación de un “disco virtual” al que se le aplicaría la capa de cifrado. Vamos a ver cómo realizar esto en diversos sistemas.

1. Linux (Luks)

Nuevamente utilizamos esta herramienta para crear nuestros contenedores cifrados. Para la documentación oficial podemos referirnos al punto anterior.

Lo primero que debemos hacer es crear un fichero que sirva de base para crear nuestro contenedor, en este caso de 100Mb:

dd if=/dev/urandom of=/tmp/testVault.img bs=1M count=100

Ahora ciframos el contenedor mediante LUKS:

cryptsetup luksFormat testVault.img

Una vez tenemos un contenedor válido lo montamos:

cryptsetup luksOpen testVault.img miContenedor

Creamos el sistema de archivos, en este caso “ext4 “:

sudo mkfs.ext4 /dev/mapper/miContenedor

Lo montamos y listo:

sudo mount /dev/mapper/miContenedor /mnt/

Ya lo podemos utilizar como cualquier dispositivo de almacenamiento. Para extraerlo solo nos hace falta desmontarlo como cualquier dispositivo y “cerrar LUKS”:

sudo umount /mnt
sudo cryptsetup luksClose miContenedor

La próxima vez que queramos montarlo solo debemos realizar los siguientes pasos:

cryptsetup luksOpen /tmp/testVault.img miContenedor
sudo mount /dev/mapper/miContenedor /mnt/

2. MacOS X (hdiutil)

En MacOS X esta tarea es más sencilla aún si cabe. En esta plataforma podemos optar por usar contenedores nativos DMG de tamaño estático o contenedores de tamaño dinámico (.sparsebundle).

Para esto podemos usar la aplicación del sistema “Utilidades de disco” siguiendo la documentación oficial. Este método tiene un inconveniente: a la hora de establecer la contraseña no podemos copiar y pegar debido al diseño seguro de esta utilidad. Para los que usamos contraseñas aleatorias mastodónticas generadas con nuestro hardware RNG es un ligero inconveniente, así que describiré los pasos a seguir para crear estos contenedores mediante línea de comandos.

En este caso generamos el contenedor en un paso mediante este comando:

hdiutil create -size [tamaño terminado en b|k|m|g|t|p|e] -encryption AES-256 
   -type SPARSEBUNDLE -fs HFS+ -volname [nombre de montaje] [nombre de archivo]

En nuestro caso:

hdiutil create -size 2g -encryption AES-256 -type SPARSEBUNDLE -fs HFS+ 
   -volname container container.sparsebundle

Recomiendo echarle un vistazo a las opciones de “hdiutil”. Y para montar el contenedor bastaría con un:

hdiutil attach /Users/test/container.sparsebundle

Después de meter la contraseña nos aparecería como cualquier otro dispositivo de almacenamiento externo. Para expulsar el dispositivo lo mismo, como un dispositivo normal.

3. Windows (BitLocker)

Windows nos proporciona su herramienta BitLocker. El proceso de creación de un contenedor en este caso es muy similar al proceso seguido en Linux, pero de forma visual.

Lo primero es abrir el administrador de discos [super] + [r]:

diskmgmt.msc

Una vez abierta la ventana debemos seleccionar Acción > Crear VHD y una vez en la ventana de configuración debemos especificar la ubicación, tamaño y demás opciones “al gusto”. Tras esto ya solo nos queda inicializar el disco seleccionando la tabla de particiones que prefiramos y especificando un formato (p.ej. NTFS).

Después de haber realizado esta operación en “Equipo” vemos nuestro contenedor como un dispositivo de almacenamiento externo nuevo, sobre el que podemos hacer click con el botón derecho y pulsar la opción de “Activar BitLocker”.

Así ya tenemos nuestro contenedor listo para su uso. El resto de operaciones serían las mismas que sobre un dispositivo de almacenamiento al uso, salvo que cuando lo queramos abrir debemos especificar la contraseña.

4. ¿TrueCrypt?
Esta aplicación probablemente sea conocida por la gran mayoría de los lectores, pero para quien no la conozca, ahí va una breve descripción:

TrueCrypt es una aplicación disponible para múltiples plataformas que proporciona una solución para la creación de contenedores criptográficos y el cifrado completo del disco duro y soportes de almacenamiento externos.

Hay mucho revuelo alrededor de esta aplicación, principalmente debido a su repentino abandono y mensaje “enigmático” en la web del proyecto. Pero después de finalizar una auditoría enfocada en descubrir vulnerabilidades en las implementaciones criptográficas incluidas y habiendo sido liberada una última versión funcional aplicando las medidas correctivas propuestas por este proyecto de auditoría (versión 7.1a) la opinión general es que esta versión a día de hoy es segura, pese a que ya no se recibiría soporte en caso de que se encuentren vulnerabilidades nuevas.

En la “Gibson Research Corporation” (GRC), empresa con una fama sobradamente acreditada por sus labores de seguridad confirman que efectivamente esta versión es segura; se puede leer el artículo en este enlace.

En cualquier caso, queda a criterio del lector usar o no este software, y únicamente pretendo dar a conocer esta solución sin que ello implique que lo recomiendo para el cifrado.

Cifrado de Archivos

Puede darse el caso de que no nos interese cifrar todo el disco o ni siquiera crear un contenedor, posiblemente porque vayamos a enviar un archivo a un compañero por e-mail y no queremos que nadie pueda hacerse con nuestra receta secreta del flan de Baileys.

Para esto disponemos de múltiples utilidades, pero la más conocida y usada es “OpenSSL”, herramienta que viene por defecto en casi todas las distribuciones Linux y variantes de Unix. En Windows se puede instalar mediante el instalador oficial existente.

OpenSSL

OpenSSL es una suite criptográfica con soporte para la inmensa mayoría de algoritmos y criptosistemas, aunque nosotros ahora la utilizamos para cifrar y descifrar un archivo mediante criptografía simétrica.

Disponiendo de nuestro documento “recetaSecreta.txt”, solamente debemos ejecutar el siguiente comando en nuestra consola:

openssl aes-256-cbc -a -salt -in recetaSecreta.txt -out recetaSecreta.txt.enc

Una vez introducida la contraseña dos veces disponemos de nuestro documento cifrado, los argumentos utilizados son los siguientes:

aes-256-cbc es el algoritmo de cifrado junto a la longitud de clave y el modo.
   -a indicaría a OpenSSL que queremos que la salida esté codificada en base64.
   -salt con esto forzamos a utilizar un salt durante el proceso de cifrado.
   -in fichero de entrada.
   -out fichero de salida.

Para descifrar un archivo cifrado:

openssl aes-256-cbc -d -a -salt -in recetaSecreta.txt.enc -out recetaSecreta.txt

Los parámetros deberán ser los mismos que durante el cifrado salvo que añadimos -d indicando a OpenSSL que debería descifrar el archivo.

Con esto finaliza el segundo post, en el que he pretendido mostrar algunas de las soluciones más populares para el cifrado en los sistemas operativos más habituales. En la siguiente y última entrada veremos en detalle la utilización de GPG y finalizaremos la serie, que espero que os esté siendo interesante.