Seguridad

Sistema de archivos encriptado

Introducción

En OpenBSD contamos una herramienta que nos permite asociar un archivo con una serie de dispositivos, de modo que el archivo pueda ser accedido de igual manera que un disco (montarlo, desmontarlo, etc). También es posible asociar una clave de cifrado al mismo tiempo, logrando de esta manera una “partición” encriptada.

¿Qué es un sistema de archivos encriptado?

Es un sistema de archivos en donde se le aplica un algoritmo de cifrado a la información, previo a la escritura en disco. De esta manera alguien que intente acceder sin conocer la clave no será capaz de reconstruir esta información y en su lugar verá basura.

Configuración

El primer paso consiste en crear el archivo que posteriormente asociaremos con el nodo virtual. En este caso creamos un archivo de 16 megabytes.

# dd if=/dev/zero of=archivo bs=1024 count=16384
16384+0 records in
16384+0 records out
16777216 bytes transferred in 1.174 secs (14281484 bytes/sec)

Hay quienes aconsejan usar /dev/urandom o /dev/arandom en lugar de /dev/zero como generador de este archivo, impidiendo conocer qué áreas son las que contienen información. Sin embargo, este proceso puede resultar eterno al tratar con archivos grandes en máquinas lentas.

AMD K6-2 500 mhz 128 mb de ram:

Tiempo de creación de un archivo de 128 megabytes con /dev/zero como generador:
0m9.94s real 0m0.31s user 0m9.08s system

Tiempo de creación de un archivo de 128 megabytes con /dev/urandom como generador:
23m9.92s real 0m0.61s user 22m45.60s system

Tiempo de creación de un archivo de 128 megabytes con /dev/arandom como generador:
0m26.55s real 0m0.37s user 0m25.50s system

Pentium 4 3.2 ghz HT 512 mb de ram:

Tiempo de creación de un archivo de 1 gigabyte con /dev/zero como generador:
1m10.395s real 0m0.448s user 0m6.812s system

Tiempo de creación de un archivo de 1 gigabyte con /dev/urandom como generador:
3m41.614s real 0m0.596s user 3m34.353s system

El siguiente paso es usar vnconfig(8) para configurar el dispositivo y asociarlo al archivo, utilizando una clave de cifrado. Para dicha tarea necesitamos la opción -c, que permite acceder al archivo por medio del dispositivo svnd (nodo virtual seguro, esto no funciona con los dispositivos vnd), y -k, que permite asociar la clave que se usará para encriptar la información mediante el algoritmo Blowfishhttp://www.schneier.com/blowfish.html. Se incluyen 4 nodos virtuales seguros en el kernel GENERIC, numerados de svnd0 a svnd3.

# vnconfig -ck /dev/svnd1c archivo
Encryption key: *********

Habiendo realizado el paso anterior, tenemos el archivo asociado al dispositivo listo para utilizar. Si se desea puede usarse disklabel(8) para crear particiones, al igual que se haría con un disco “real”. El próximo paso es crear un sistema de archivos, utilizando el dispositivo “raw” para acceder directamente al disco (agregamos una “r” delante del nombre del dispositivo, evitando usar un buffer intermedio).

# newfs /dev/rsvnd1c
/dev/rsvnd1c: 32768 sectors in 328 cylinders of 1 tracks, 100 sectors
16.0MB in 1 cyl groups (328 c/g, 16.02MB/g, 2048 i/g)
super-block backups (for fsck -b #) at:
32,

Ya estamos listos para montar nuestro nuevo disco virtual. Para esto usamos el comando mount(8) de manera convencional.

# mount /dev/svnd1c /mnt/cripto

Podemos almacenar lo que queramos en nuestra nueva partición encriptada, teniendo en cuenta que todo lo que almacenamos es procesado antes por el algoritmo de cifrado, agregando un tiempo considerable en el copiado de datos cuando se trabaja con grandes volúmenes. Para desmontar la partición, usamos umount(8) normalmente.

# umount /mnt/cripto

Hay que tener en cuenta que se debe desasociar el archivo del svnd correspondiente cuando no lo vayamos a utilizar. Caso contrario, el dispositivo recordará la clave, y cualquier persona puede montarlo y acceder a su contenido. Para desasociar usamos el flag -u de vnconfig:

# vnconfig -u /dev/svnd1c

En caso de proveer una clave errónea, vnconfig no nos avisará, y únicamente nos daremos cuenta al momento del montaje.

# vnconfig -ck /dev/svnd1c archivo
Encryption key: claveerronea
# mount /dev/svnd1c /mnt/cripto
mount_ffs: /dev/svnd1c on /mnt: Inappropiate file type or format

Personal Tools