¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea...

10
14 Número 25 WWW.LINUX - MAGAZINE.ES de escritura a un sistema de ficheros cifrado. En ella se exponen casos como el volcado de la memoria RAM a disco, o su paso por los dis- tintos módulos de cifrado, tanto a nivel de Ker- nel como de espacio de usuario. Importante: Haz copias de seguridad de la información y haz pruebas antes de realizar el cifrado sobre los datos reales para no perder nada por posi- bles errores o malfuncionamiento. RAM (Random Memory Area) : Por aquí pasa toda la información, tanto cifrada como sin cifrar. Ej: Abrimos con un editor de textos un fichero de texto alojado en un sistema de ficheros cifrado. Cuando abrimos el fichero los bytes leídos pasan a RAM cifrados, de aquí son leídos por la aplicación de desci- frado y volcados de nuevo a RAM por ella en texto plano (sin cifrar). Des- pués son nueva- mente leídos por la aplicación que el usuario había eje- cutado (en nuestro caso el editor de textos). Esto es así porque todos los bytes que se mue- ven por nuestra máquina siguen un proceso complejo de jerarquías que se sitúan entre el disco duro y el usuario (o la aplicación que éste use). Concretamente, cada bit leído de disco pasa por la memoria RAM, y por todos los niveles de la cache del procesador L1,L2,L3…, antes de llegar a la unidad de procesado. En todos los pasos, la información es tratada tanto cifrada como sin cifrar. En principio esto no es un pro- blema, pero podría serlo, puesto que hay veces en que la información contenida en RAM puede ser volcada a disco. SWAP (Memory Paging) : EL espacio SWAP es un espacio usado por el sistema cuando se necesita liberar espacio en RAM y cuando se aplican los procesos de suspensión o hibernación (técnicas de ahorro de energía) de una máquina (normalmente dispositivos con baterías como portátiles), donde se aplica un volcado completo de la memoria RAM a disco. Como ya hemos dicho, en RAM se encuentran los datos tanto cifrados como sin cifrar, por lo que puede darse el caso de volcado de la información en claro a disco. Ficheros DUMP (Memory Paging) y direc- torio /tmp: Cuando estamos trabajando con una aplicación y se da un error, es posible que se realice un volcado de la pila de ejecu- ción (almacenada en RAM) del proceso a disco con la finalidad de que puedan ser estudiadas las causas del fallo. Un ejemplo son los ficheros denominados Core Dump, que son un caso más de las posibilidades de E sta situación puede hacer que el robo del portátil o de un disco duro se con- vierta en un problema mucho mayor que el derivado de la simple pérdida de los dis- positivos, por ello cada día más se requiere el uso de sistemas de cifrado a nivel personal. Está claro que en última instancia somos nosotros mismos los que debemos proteger la información que poseemos. En este artículo se expone cómo usar las distintas herramientas. Conceptos Previos Inicialmente vamos a introducir los conceptos del estado de los datos en cada momento. En la Figura 1 podemos ver las distintas fases por las que pueden pasar los datos en su proceso PORTADA • Encriptación de discos duros Figura 1: Estado de los datos en cada momento de su almacenaje. Plataformas de cifrado en Linux FICHEROS 100% SEGUROS Que nuestras fotos ya no se puedan tocar sino ver, y que nuestras cartas se puedan almacenar pero no doblar, son sin duda dos de los síntomas más significativos que hacen que tomemos consciencia de que nuestra vida está plenamente integrada en el mundo digital. Fragmentos de nuestras vidas son almacenados diariamente en los ordenadores personales. POR DAVID GASCÓN CABREJAS FICHEROS 100% SEGUROS

Transcript of ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea...

Page 1: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

14 Número 25 W W W . L I N U X - M A G A Z I N E . E S

de escritura a un sistema de ficheros cifrado.En ella se exponen casos como el volcado dela memoria RAM a disco, o su paso por los dis-tintos módulos de cifrado, tanto a nivel de Ker-nel como de espacio de usuario. Importante:Haz copias de seguridad de la información yhaz pruebas antes de realizar el cifrado sobrelos datos reales para no perder nada por posi-bles errores o malfuncionamiento.• RAM (Random Memory Area): Por aquí

pasa toda la información, tanto cifrada comosin cifrar. Ej: Abrimos con un editor de textosun fichero de texto alojado en un sistema deficheros cifrado. Cuando abrimos el ficherolos bytes leídos pasan a RAM cifrados, deaquí son leídos por la aplicación de desci-

frado y volcados denuevo a RAM porella en texto plano(sin cifrar). Des-pués son nueva-mente leídos por laaplicación que elusuario había eje-cutado (en nuestrocaso el editor detextos). Esto es asíporque todos losbytes que se mue-ven por nuestramáquina siguen unproceso complejode jerarquías que se

sitúan entre el disco duro y el usuario (o laaplicación que éste use). Concretamente,cada bit leído de disco pasa por la memoriaRAM, y por todos los niveles de la cache delprocesador L1,L2,L3…, antes de llegar a launidad de procesado. En todos los pasos, lainformación es tratada tanto cifrada comosin cifrar. En principio esto no es un pro-blema, pero podría serlo, puesto que hayveces en que la información contenida enRAM puede ser volcada a disco.

• SWAP (Memory Paging): EL espacio SWAPes un espacio usado por el sistema cuandose necesita liberar espacio en RAM y cuandose aplican los procesos de suspensión ohibernación (técnicas de ahorro de energía)de una máquina (normalmente dispositivoscon baterías como portátiles), donde seaplica un volcado completo de la memoriaRAM a disco. Como ya hemos dicho, enRAM se encuentran los datos tanto cifradoscomo sin cifrar, por lo que puede darse elcaso de volcado de la información en claro adisco.

• Ficheros DUMP (Memory Paging) y direc-torio /tmp: Cuando estamos trabajando conuna aplicación y se da un error, es posibleque se realice un volcado de la pila de ejecu-ción (almacenada en RAM) del proceso adisco con la finalidad de que puedan serestudiadas las causas del fallo. Un ejemploson los ficheros denominados Core Dump,que son un caso más de las posibilidades de

Esta situación puede hacer que el robodel portátil o de un disco duro se con-vierta en un problema mucho mayor

que el derivado de la simple pérdida de los dis-positivos, por ello cada día más se requiere eluso de sistemas de cifrado a nivel personal.

Está claro que en última instancia somosnosotros mismos los que debemos proteger lainformación que poseemos. En este artículo seexpone cómo usar las distintas herramientas.

Conceptos PreviosInicialmente vamos a introducir los conceptosdel estado de los datos en cada momento. Enla Figura 1 podemos ver las distintas fases porlas que pueden pasar los datos en su proceso

PORTADA • Encriptación de discos duros

Figura 1: Estado de los datos en cada momento de su almacenaje.

Plataformas de cifrado en Linux

FICHEROS 100%SEGUROSQue nuestras fotos ya no se puedan tocar sino ver, y que nuestras cartas se puedan almacenar pero no doblar,

son sin duda dos de los síntomas más significativos que hacen que tomemos consciencia de que nuestra vida

está plenamente integrada en el mundo digital. Fragmentos de nuestras vidas son almacenados diariamente

en los ordenadores personales.

POR DAVID GASCÓN CABREJAS

FICHEROS 100%SEGUROS

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 14

Page 2: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

volcado a disco de información sin cifrardesde RAM. En otros casos el sistema utilizala creación de ficheros temporales (muchasveces almacenados en la carpeta /tmp) paracontrolar aspectos como qué fichero estáabierto, o incluso información del mismousada en ejecución mediante el uso dealguna aplicación.

Preparación del disco acifrarLa única forma de eliminar para siempre lainformación de una parte del disco es sobrees-cribir esa zona con información aleatoria repe-tidas veces, de forma que no se pueda volver aobtener ni mediante métodos complejos detécnicas de lectura de polaridad magnética conel uso de fuerzas microscópicas (magneticforce microscopy ¿ mfm). Podéis encontrarmás información en [1]. Este proceso se rea-liza en 2 escenarios:• Antes de crear la partición cifrada: En el

espacio de disco que vamos a crear nuestrosistema de ficheros, de forma que un análisisdel mismo nunca pueda dar informaciónsobre cuanto espacio está siendo utilizadocon información cifrada.

• Después de cifrar la información: En el discodonde guardábamos la información sincifrar, de forma que sea eliminada y sóloquede su copia en el espacio cifrado.

En el primer escenario la sobre escritura pode-mos realizarla sólo 1 vez, sin embargo, en elsegundo, para sea efectiva, podemos crear unscript que realice la tarea varias veces (en elejemplo 3). Hay que especificar el tamaño deldisco (en el ejemplo 1GB). El parámetro “of”nos indica dónde se sobreescribirán los datos,ya sea un disco (hda, hdb), una partición(hda1, hdb3), un dispositivo externo (sda1,sdb) o un fichero (/root/fichero).

veces=3while [ $veces -ge 1 ]do

dd if=/dev/urandomUof=/dev/hdb bs=1M count=1024veces=`expr $veces - 1̀

done

La fuente de extracción de información aleato-ria puede ser /dev/urandom o /dev/random.Con la primera fuente se genera antes, puesusa datos internos del sistema para generar lainformación aleatoria. Con el segundo la infor-mación posee mayor entropía (aleatoriedad,impredecibilidad), aunque esta fuente denúmeros aleatorios sólo la genera cuando elsistema produce información no conocida a

priori. Para hacer una prueba ejecuta #cat/dev/random y mueve el ratón, cuanto másrápido, más información nueva le das al sis-tema y más rápido puede generar nueva infor-mación aleatoria. Sin embargo, para el ejem-plo actual necesitamos generar muchísima,por lo que usaremos la fuente /dev/urandom.

Cifrado a nivel de KernelTal y como podemos apreciar en la Figura 2, elcifrado a nivel de Kernel hace que el usuariocrea que está escribiendo de forma normal adisco. Sin embargo, las llamadas de lectura/escritura a las zonas de disco protegidas pasana través de módulos como TrueCrypt, Loop-AES, Cryptoloop…, los cuales usan los interfa-ces Device Mapper (/dev/mapper/) y LoopDevices (/dev/loop) para transformar esainformación usando librerías de cifrado comolas CryptoAPI, y haciendo que todas las aplica-ciones a nivel de usuario no sepan si trabajancon una zona de disco normal o contra unacifrada.

CryptoloopCryptoloop [1] fue uno de los primeros siste-mas de cifrado soportado completamente anivel de Kernel (desde la rama 2.4). Hoy día seestán abriendo paso nuevas plataformas, sinembargo, sigue estando presente en el códigoprincipal del núcleo aún siendo consideradocomo “deprecated” (sin futuro desarrolloactivo). Sin duda, esto se debe a la facilidad deuso y a lo extendido que está.Pros:• Sencillo de instalar y configurar.• No requiere ninguna modificación de las

herramientas en el espacio de usuario.• Permite una amplia lista de algoritmos de

cifrado: AES, Blowfish, Twofish, …• Permite crear sistemas de ficheros con “jour-

naling” (ext3, resiserfs, …) tanto en loopdevices (particiones, discos, dispositivosUSB) como en ficheros dentro del sistema.

• Ideal para iniciar el aprendizaje de las plata-formas de cifrado de sistemas de ficheros anivel de Kernel en Linux.

Contras:• Problemas con los ficheros que presentan

marcas de agua. Éstas son patrones de infor-mación que se repiten a intervalos regulares,de forma que si se utiliza un vector de inicia-lización a la hora de cifrar los bloques deldisco (generalmente de 512 bytes) y éste serepite cada x bloques, es posible detectar laexistencia de un fichero con esta “meta infor-mación”, haciendo que se pueda identificarla existencia del mismo dentro de la zonacifrada sin necesidad de averiguar la clave

usada. Éste se usa en contenidos de informa-ción específicos para poder ser detectados.Imaginemos un DVD que se le da a la prensaantes de su comercialización. Para que veáiscómo funciona esta técnica os dejo un link auna página con el código fuente de una deestas aplicaciones, el código es muy sencilloy sirve para que nos demos cuenta de lasdebilidades que pueden tener estos sistemasde cifrado. Más información en [3].

• No es tan eficiente como otras implementa-ciones que también trabajan sobre LoopDevices, como Loop-AES. Esto es debido aque la implementación actual usa algoritmosde cifrado programados mediante librerías C, y actualmente se está trabajando con suimplementación a nivel de ensamblador(lenguaje máquina), lo que hace que la opti-mización sea máxima para su ejecución porparte de los procesadores de la familia Inteli386.

• El cifrado de la información se realiza con laclave sin añadir nada de información aleato-ria, lo que se denomina “añadir sal a laclave” ( o “salt password”). Este procedi-miento permite la generación de claves decifrado distintas para cada sector, haciendoque un ataque mediante fuerza bruta para

15Número 25W W W . L I N U X - M A G A Z I N E . E S

Encriptación de discos duros • PORTADA

01 # cat /proc/cryto

02 name : aes

03 driver : aes-i586

04 module : kernel

05 priority : 200

06 type : cipher

07 blocksize : 16

08 min keysize : 16

09 max keysize : 32

10 ...

11

12 name : blowfish

13 d r i v e r :blowfish-generic

14 module : kernel

15 priority : 0

16 type : cipher

17 blocksize : 8

18 min keysize : 4

19 max keysize : 56

20 ...

Listado 1: Módulos deCryptoAPI cargados en el

Sistema

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 15

Page 3: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

PORTADA • Encriptación de discos duros

averiguar la clave sea prácticamente imposi-ble. En otras plataformas como Loop-AES seusan hasta 65 claves generadas medianteesta técnica con el uso de información alea-toria y de los algoritmos de cifrado simétricosusados por gpg.

Instalación: Como ya se ha comentado, losmódulos de Crytoloop se encuentran soporta-dos en la rama principal del Kernel, por ello sucompilación y uso resultan tremendamentesencillos.

Device Drivers ->UBlock devices -> LoopbackUdevice support = YESDevice Drivers -> Block devicesU-> Cryptoloop device support =UYESGeneral -> Cryptographic API =UYES

Se pueden instalar como módulos que secargan bajo demanda o como elementosinternos al kernel. La decisión variarádependiendo del uso que se le vaya a dar.En el proceso de pruebas podemos mar-carlos como módulos <M>, y una vezhayamos decidido lo podemos volver acompilar, esta vez integrándolo en el ker-nel <*>, pues obtendremos un mejorrendimiento. En el ejemplo actual los voya integrar directamente en el kernel, tal ycomo vemos en la Figura 3. Una vez haya-mos arrancado el sistema con nuestronuevo kernel, lo primero que vamos ahacer es comprobar que realmente pode-mos usar los módulos de cifrado elegidos,así como ver información interesante deellos como el tamaño de clave min/max ,tamaño de bloque , etc. (ver Listado 1).

En caso de haberlos compilado pormódulos hay que cargarlos:

# modprobe cryptoloop# modprobe[módulo_cif_elegido:Uaes, blowfish,twofish ...]

Si queremos que se car-guen al iniciar el sistema:

# echo “cryptoloop”>>U/etc/modules

El sistema de cifradomediante Loopback nospermite mapear tanto dis-

positivos físicos, como discos, o bien hacerlodirectamente sobre los ficheros, lo que es espe-cialmente interesante a la hora de facilitar suportabilidad. En el siguiente ejemplo vamos acrear un fichero de 100MB, llamado espacioCi-frado, y vamos a utilizarlo como sistema deficheros cifrado dentro del disco para almace-nar todos los datos que queremos proteger.

Primero creamos el fichero con informaciónaleatoria:

# dd if=/dev/urandomUof=/root/espacioCifrado bs=1MUcount=100

Si hubiésemos elegido un disco, una particióno un dispositivo externo USB, el nombre delfichero “espacio_cifrado” hubiera sido susti-tuido por algo como hdb (disco), hdb1 (parti-ción), sdb1 (dispositivo externo USB).

Ahora vamos a unir el fichero creado con elinterfaz Loopback de forma que podamos leerlos bloques del fichero a través del mismo.Hemos elegido el primer interfaz, pero podría-mos elegir cualquiera de los 8 disponibles(loop0 .. loop7). Especificamos además quémódulo de los de cifrado que compilamos ini-cialmente vamos a usar: aes, blowfish, two-fish, … Nos preguntará el password sólo unavez, así que tenemos que asegurarnos de quelo haremos bien (podemos escribir la contra-seña en un fichero y copiarla y pegarla en con-sola mediante ctrl + insert de manera que nosaseguremos de que no existen errores tipográ-ficos).

# losetup -e aes /dev/loop0U/root/espacioCifrado

Para crear el sistema de ficheros primero elegi-mos el tipo que queramos: ext3, ext2, vfat, rei-serfs… Lo que vamos a realizar como primera

operación cifrada dentro del fichero elegido esla creación de las tablas de inodos (enlaces abloques dentro del sistema de ficheros).Importante: Este paso sólo lo haremos la pri-mera vez, el resto de las veces que queramosacceder a la información ejecutaremos el pasoanterior y posterior a éste.

# mkfs.ext3 /dev/loop0

Ahora ya podemos montar y trabajar con elsistema de ficheros. Para ello creamos una car-peta /mnt/cifrado.

# mount -t ext3 /dev/loop0U/mnt/cifrado

A partir de este momento todas las operacio-nes de lectura/escritura a ese directorio pasa-rán por el módulo Loopback, el cual realizaráel proceso de cifrado y descifrado. A la hora dedesmontar el sistema de cifrado y de liberar elinterfaz Loopback haremos:

# umount /mnt/cifrado# losetup -d /dev/loop0

Hay que tener en cuenta que los pasos deenlazar el sistema con Loopback y de montarel sistema pueden ser realizados directamentepor el comando mount + opciones, el cualnos pedirá la clave que usamos a la hora decrearlo la primera vez. Incluso podemosincluirlo directamente en el fichero de montajeautomático /etc/fstab, de forma que al iniciarla máquina nos pida el password y monte elsistema

# mount -o loop=/dev/loop0U/root/espacioCifradoU/mnt/cifrado/etc/fstab :U/root/espacioCifradoU/mnt/cifrado ext3 user,Uloop=/dev/loop0, encryption=aes

Loop-AESEsta plataforma de cifrado también usa elmodelo de Loop Devices, mediante un interfazdel tipo Loopback; pero en este caso es lamisma aplicación Loop-AES [4] la que trae supropio módulo para el kernel y su “set” deaplicaciones para el usuario (incluyendomount, losetup…), donde vienen soluciona-dos muchos de los problemas que hemoscomentado con Cryptoloop.Pros:• Es funcional a partir de la versión 2.0 del Ker-

16 Número 25 W W W . L I N U X - M A G A Z I N E . E S

Figura 2: Funcionamiento del cifrado a nivel de Kernel.

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 16

Page 4: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

nel, haciendo que su compatibilidad seatotal con cualquier sistema que tengamosfuncionando con Linux.

• Utiliza hasta 65 llaves distintas, las cuales lascrea añadiendo información aleatoria(“adding salt procedure”). Cada llave cifra unsector determinado de unos 512 bytes que seva repitiendo continuamente. Este modelode llaves múltiple se denomina: multi-key-v3. Esta forma de generación y uso de lasclaves hace que el sistema sea inmune a losataques de diccionario.

Contras:• No permite el uso de sistemas de ficheros

con “journaling” en Loop Files creados en elsistema (sistemas de ficheros creados dentrode un fichero de tamaño elegido). Sí que sepueden usar sobre discos, particiones y dis-positivos externos, pues se respeta el ordende escritura requerido (siempre que haya-mos desactivado la escritura mediante búfercache).

• Si se quiere aprovechar el grado de máximaseguridad hay que llevar un fichero con las65 llaves siempre encima (ej: en un pen driveUSB).

• En caso de suspensión o hibernación delequipo, las claves que residen en memoriaRAM son copiadas a disco (para poder obte-ner un estado idéntico tras la reanudación), ypor ello podrían ser vulnerables a un ataque.Se recomienda no usar estos mecanismospor seguridad.

Lo primero es recompilar el Kernel desacti-vado del módulo loopback, pues Loop-AEStrae su propio módulo.

Device Drivers ->UBlock devices -> LoopbackUdevice support = NODevice Drivers ->UBlock devices -> CryptoloopUdevice support = NOLoadable module support ->UEnable loadable module supportU= YES

Necesitamos tener en el sistema los ficheroscon el código fuente de las librerías dietlibc(normalmente los encontraréis en vuestra dis-tribución bajo el nombre de dietlib-dev).Vamos al directorio donde hemos descompri-mido Loop-AES:

# make clean# make KEYSCRUB=y

Con la opción keyscrub activada al compilar loque conseguimos es que al almacenar las cla-

ves en RAM no se guarden tal cual, sino quese almacenen de forma desordenada para queno se pudieran extraer de ahí. Esta opción(aunque no está propiamente documentada)podría evitar los problemas previos que se hancomentado acerca de la suspensión de losequipos. Al ejecutar make instalará en el sis-tema el módulo (en caso de compilación exi-tosa), por lo que si no queremos que se alma-cene con el resto de módulos que se crean alcompilar el Kernel, podemos indicar expresa-mente una ruta :

# make INSTALL_MOD_PATH=U/.../.../directorio_elegido

Ahora probamos que el módulo funcionacorrectamente:

# modprobe loop# ls /dev/loop*

Si todo está bien, habremos obtenido /dev/loop0, /dev/loop1, …, /dev/loop7. Ahoratenemos que instalar las herramientas a nivelde usuario para trabajar con Loop-AES. Paraello, vamos a aplicar un parche a las aplicacio-nes que se encuentran dentro del paquete util-linux que pertenece a la rama de aplicacionesdel usuario dentro del kernel. Compilación de las herramientas del usua-rio: Primero obtenemos el código fuente de laúltima release estable 2.12r de [5], le aplica-mos el parche y compilamos e instalamos lasherramientas modificadas así como lasmanuales para el “man” del sistema (ver Lis-tado 2).

Si queremos que el módulo “loop” se car-gue automáticamente cada vez que arranca-mos la máquina hay que añadirlo:

# echo “loop” >>U/etc/modules

Tal vez, si estamos creando un entorno demáxima seguridad nos interese que gpg añadahasta 128 iteraciones recursivas en el cifradodel fichero de claves, lo que implica que cadaoperación sea 128 veces más lenta. Para elloparchearemos la aplicación gpg con códigoincluido junto con los fuentes. En nuestro casono es necesario, pues nos interesa un sistemaseguro pero que además sea eficiente. Si seestá interesado, siempre se puede acudir almanual general de Loop-AES y buscar infor-mación sobre el parcheo de gpg para aumen-tar las iteraciones sobre cada clave.

# make tests

Si obtenemos ***Test results OK*** es quetodo ha ido bien. En caso contrario habría querepasar los pasos anteriores.

Utilización: Como ejemplo vamos a reali-zar el cifrado de una partición con almacena-miento externo de las claves. Disco USB acifrar : /dev/sda1, que montaremos sobre/usbCifrado; como almacenamiento externode las claves daremos el lápiz USB mapeadoen /dev/sdb1 montado sobre /usbClaves. Pri-mero vamos a generar un fichero con las 65claves que usaremos para cifrar la informaciónde los sectores de la partición elegida y loalmacenaremos directamente en un ficherodentro del disco USB externo, el cual ha sidomontado en el directorio /disco_USB:

# head -c 3000 /dev/urandomU| uuencode -m - | head -n 66 |Utail -n 65 | gpg —symmetricU—cipher-algo AES256 -a >U/usbClaves/claves.gpg

Lo que hemos hecho ha sido coger 3000 carac-teres generados de forma aleatoria por lafuente /dev/urandom, transformarlos a carac-teres ASCII mediante uuencode, acotar elnúmero de líneas a 65 y pasar estas líneas porla aplicación gpg con la finalidad de aplicar elalgoritmo de cifrado simétrico AES de 256bytes. Podemos elegir cualquiera entre lossiguientes: 3DES, CAST5, BLOWFISH, AES,AES192, AES256, TWOFISH. Se nos pregun-tará qué password usar para este último pro-ceso. Este será el password que nos pediránlas herramientas (parcheadas de Loop-AES)para acceder a nuestro sistema de ficheros.Una vez lo introduzcamos será pasadomediante una tubería a “gpg”, que será quiendescifre el fichero y devuelva las 65 claves quehabíamos almacenado a las aplicacionesmediante el uso de la tubería que habíamosestablecido previamente. Ahora que ya tene-mos las claves que usaremos, y una vez prote-gidas, lo que hacemos es insertar el lápiz USB(en nuestro caso mapeado en /dev/sda1) y lollenamos por completo (1GB) de informaciónaleatoria, al igual que lo hacíamos con Crypto-loop.

# dd if=/dev/urandomUof=/dev/sda1 bs=1M count=1000

Ahora vamos a unir uno de los Loop Devicescreados por el módulo del Kernel “loop” deLoop-AES con el disco USB: crearemos su sis-tema de ficheros (ext3), lo montaremos yobtendremos información para verificar que elproceso se ha realizado con éxito. Como algo-

Encriptación de discos duros • PORTADA

17Número 25W W W . L I N U X - M A G A Z I N E . E S

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 17

Page 5: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

Contras:• La creación de sistemas de ficheros cifrados

sobre ficheros requiere el uso de una herra-mienta fuera del conjunto de las Crytpsetup,lo hace por medio de Losetup, por lo quehay que puentear Loop Devices (/dev/loop*) con los Device Mapper (/dev/map-per/*).

Instalación: Recompilamos el Kernel acti-vando:

Device Drivers >UMulti-device support (RAID yULVM) = YESGeneral -> Cryptographic APIU(los que queramos) = YES

Ahora ya tenemos el módulo del Kernel fun-cionando. El siguiente paso es instalar elpaquete con las librerías necesarias para quelas herramientas del espacio de usuario pue-dan comunicarse con el Device Mapper. Pode-mos encontrar el paquete en nuestra distrocon el nombre de dmsetup, device-mapperpackage / tools … O podemos compilarlodesde el código fuente. Para ello nos bajamosel código de ftp://sources.redhat.com/pub/dm/. Lo descomprimimos, lo compilamossiguiendo el proceso habitual (./configure;make; make install) y comprobamos que elmódulo y que las librerías se han instaladocorrectamente:

# tar -xzvfUdevice-mapper.1.02.13.tgz#dmsetup targetsstriped v1.0.2linear v1.0.1error v1.0.1

En este punto tiene que haberse creado uncontrolador del interfaz: /dev/mapper/con-trol.

Ahora vamos a instalar las herramientasque usará el usuario para manejar DeviceMapper a través de dmsetup. Se encuentrandentro del paquete Cryptsetup. Su compila-ción es costosa, ya que requiere de la existen-cia de las librerías libgcrypt y los ficheros dedesarrollo de libdevmapper. En vez de trabajarcon la rama normal de Cryptsetup vamos ausar una modificación que incluye LUKS(Linux Unified Key Setup), a la que denomina-remos Cryptsetup-LUKS y que podemosencontrar en [7]. Básicamente, lo que LUKSpermite es la utilización de un espacio en lascabeceras de los discos para guardar informa-ción utilizada para cifrar el resto del disco. Loque hacemos con los passwords y los keyfiles

que damos a Cryptsetup-LUKS es usarlos paragenerar una “master-key” que se guardarámediante cifrado simétrico en ese espacio decabecera. Cada vez que accedamos con éxitoal disco descifraremos esa llave y la usaremospara las operaciones de lectura y escrituracifradas en el disco.Funcionamiento: Vamos a crear una particióncifrada en sda1:

# cryptsetup —verboseU—cipher “aes-cbc-essiv:sha256”U—key-size 256U—verify-passphrase luksFormatU/dev/sda1

No podemos pasar keyfile a la hora de crear,pero podemos añadirlo así cuando cambie-mos el password. Ahora mapeamos el nuevosistema con el Device Mapper:

# cryptsetup luksOpenU/dev/sda1 cifradoUSB

ritmo de cifrado, yo recomiendo el uso deAES256. Nos pedirá la clave una sola vez, porlo que hay que tener especial cuidado con nointroducirla mal.

# losetup -e AES256 -KU/usbClaves/claves.gpgU/dev/loop0 /dev/sda1# mkfs.ext3 /dev/loop0# mount /dev/loop0 /usbCifrado# losetup -a/dev/loop/0: [000c]:30508U(/dev/sda1) encryption=AES256Umulti-key-v3

Efectivamente en el resultado vemos quehemos mapeado /dev/sda1 en el loopback/dev/loop0 usando como algoritmo de cifradoAES256 y el sistema multi-key-v3 que fun-ciona mediante las 65 claves generadas. Paradesmontarlo por completo:

# umount /usbCifrado# losetup -d /dev/loop0

Este mismo ejemplo funcionaría igual usandouna partición de un disco interno en vez delUSB, por ejemplo, hdb3 en vez de sda1. Eneste último caso sería recomendable incluiruna línea en /etc/fstab para realizar el montajeautomático cada vez que arrancara el sistema:

/dev/hdb3 /discoInternoUext3 defaults,noauto,Uloop=/dev/loop0,Uencryption=AES256,Ugpgkey=/usbClaves/claves.gpgU0 0

DM-CryptEntre la sencillez e inseguridades de Crypto-loop, y la complejidad y eficiencia de Loop-AES, tenemos DM-Crypt [6], una plataformaapoyada por lo desarrolladores del Kernel yque usa sus herramientas de cifrado: Crypto-API. En realidad, lo que la diferencia conCryptoloop es que ésta utiliza el módulo“Loop Devices”, mientras que DM-Crypt usael módulo “Device Mapper” a la hora de reali-zar las operaciones de cifrado y descifrado dela información.Pros:• Permite el uso de LUKS (Linux Unified Key

Setup), por lo que podemos realizar cambiosde las claves sin tener que volver a cifrar lainformación del disco.

• Integrado dentro del Kernel mediante el usode Device Mapper y CryptoAPI.

PORTADA • Encriptación de discos duros

18 Número 25 W W W . L I N U X - M A G A Z I N E . E S

01 # p a t c h - p 1 < . . /util-linux-2.12r.diff

02 # CFLAGS=-O2 ./configure

03 # make SUBDIRS=”lib mount”

04 # cd mount

05 # install -m 4755 -o rootmount umount /bin

06 # install -m 755 losetupswapon /sbin

07 # rm -f /sbin/swapoff && ( cd/sbin && ln -s swapon swapoff)

08 # r m - f/usr/share/man/man8/{mount,umount,losetup,swapon,swapoff}.8.gz

09 # install -m 644 swapon.8swapoff.8 /usr/share/man/man8

10 # install -m 644 mount.8u m o u n t . 8 l o s e t u p . 8/usr/share/man/man8

11 # r m - f/usr/share/man/man5/fstab.5.gz

12 # install -m 644 fstab.5/usr/share/man/man5

13 # mandb

Listado 2: Parcheado,instalación y configuración

Loop-AES

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 18

Page 6: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

# ll /dev/mapper/total 015941 brw-rw—— 1 root diskU254, 0 2006-12-01 05:23UcifradoUSB2950 crw-rw—— 1 root rootU10, 63 2006-11-30 19:47Ucontrol# mkfs.ext3U/dev/mapper/cifradoUSB# mount /dev/mapper/cifradoUSBU/cifrado

Para desmontarlo:

# umount /cifrado# cryptsetup luksCloseU/dev/mapper/cifradoUSB

TruecryptLa plataforma Truecrypt [8] es una de laspreferidas actualmente debido principalmentea la capacidad de creación de volúmenessecretos y a que los sistemas de ficheroscifrados pueden verse bajo GNU/Linux y bajosistemas Windows.Pros:• Multiplataforma GNU/Linux, Windows• Una de las más activas en el desarrollo• Una de las documentaciones más detalladas

sobre la metodología de cifrado usada• Posibilidad de iteraciones de cifrado en cas-

cada mediante múltiples algoritmos• Permite gran multitud de sistemas de cifrado

simétrico y de funciones hash, haciendo quelo podamos personalizar al máximo

• Permite el cambio de claves y keyfiles sinnecesidad de tener que volver a cifrar lainformación.

• No conoce qué algoritmo de cifrado usar, porlo que usa prueba/error con todos los sopor-tados una vez introducimos la clave, aña-diendo complejidad ante los ataques

• Permite el uso de tantos passwords y keyfilescomo queramos, posibilitando la creación desistemas de cifrado con claves distribuidas(reparto de poderes)

Contras:• Requiere de un Kernel igual o mayor de la

rama 2.6.5• La permisividad de cambio de claves por

otras más complejas no varía la dificultad delcifrado

Instalación: Lo primero es descargar el códigofuente. En la página se pueden bajar paquetespara distintas distribuciones como Ubuntu,Fedora y OpenSuse. Sin embargo, en este artí-culo vamos a hacerlo desde el código fuente,de forma que todo el mundo sepa cómo

hacerlo independientemente de la distro queuse. Para compilar TrueCrypt necesitamostener el código fuente del Kernel que estemosusando en nuestra máquina, concretamenteen el directorio /usr/src/linux-xxx . Donde xxxes la versión que tenemos, para conocerla eje-cutamos “uname -r”.

Hay que tener en cuenta que a partir delkernel 2.6.18, y para evitarnos los problemasde compilación, hay que realizar un pequeñocambio en el fichero del kernel: drivers/md/dm.h, concretamente, a partir de la línea#define DM_NAME “device-mapper” hay queañadir:

#define MSG_PREFIXU“truecrypt: “#define DM_MSG_PREFIXUMSG_PREFIX

Ahora vamos a la carpeta Linux dentro delcódigo fuente de TrueCrypt y ejecutamos:

# ./build.sh

Una vez hayamos realizado el proceso conéxito, pasamos a instalar el módulo dentro delas carpetas del kernel y los ficheros binariosque el usuario utilizará para manejarlas en lascorrespondientes de ejecución del sistema, asícomo la ayuda dentro del “man”.

# install.shKernel/truecrypt.koCli/truecryptCli/Man/truecrypt.1

Al igual que en las plataformas anteriores, siqueremos que se cargue el módulo automáti-camente al arrancar el sistema hacemos:

# echo “truecrypt” >>U/etc/modules

Respecto a la configuración del Kernel, hayque tener activados los módulos de DeviceMapper y Loop Devices, así como instaladasen el sistema sus respectivas herramientas(dmsetup y losetup).

Utilización: Si no está activo cargamos elmódulo y comprobamos que se ha cargadocon éxito:

#modprobe truecrypt#lsmodModule Size Used bytruecrypt 160260 0

Como ejemplo vamos a crear un sistema de

ficheros dentro de un fichero. Esta opción esespecialmente interesante por la posibilidad dellevarnos todo el sistema en un DVD, o en undisco duro externo simplemente como si fueraun fichero más. Si queréis aplicarlo sobre unapartición o un disco, una vez más, sólo tenéisque cambiar el nombre del fichero por el deldispositivo: /dev/hda3, /dev/hdb, /dev/sda2,… Primero creamos la partición cifrada:

# truecrypt —type normalU—random-source /dev/urandomU—size 5G —filesystem FATU—encryption Serpent-Twofish-AESU—hash Whirlpool —keyfileUficheroClaves ... -cUsistemaCifrado

Veamos una a una las opciones elegidas:• —type normal: estamos creando un sistema

de ficheros cifrado que estará ubicado deforma normal (no escondido) dentro delespacio de bloques dedicado dentro deldisco

• —random-source: especifica la fuente dedonde extraerá la información, para relle-narlo en caso de que queramos sobreescribiresa zona del disco, algo que es totalmenterecomendable.

• —size 5G: el tamaño de la partición, pode-mos especificarlo en KB ,MB y GB medianteK,M.G. Generar gigas de información aleato-ria cuesta, así que tened paciencia.

• —filesystem FAT: hemos elegido esa parti-ción porque el sistema de ficheros que esta-mos creando no es demasiado grande y por-que nos interesa que sea portable a otras pla-taformas. En principio podemos elegir cual-quier sistema de ficheros que soporte nues-tro sistema operativo (ojo con el tema de laportabilidad).

• —encryption Serpent-Twofish-AES: algo-ritmo de cifrado simétrico. En nuestro ejem-plo hemos usado el más seguro, pues mez-cla 3 de ellos (serpent, twofish y AES) en loque se denomina cifrado en cascada.

• —hash Whirlpool: como algoritmo hashhemos elegido Whirlpool, que a diferenciade SHA-1 no se le ha encontrado ningunadebilidad a día de hoy en tema de colisio-nes.

• —keyfile ficheroElegido: podemos añadircualquier fichero como fichero de claves(independientemente del tipo que sean).Por ejemplo, podemos usar un mp3 connuestra canción favorita, una foto con losamigos, … eso sí, solo se emplea 1MB decada fichero, pero podemos añadir todos losque queramos.

Ibm y Sun • EVALUACIÓN

19W W W . L I N U X - M A G A Z I N E . E S

Encriptación de discos duros • PORTADA

Número 25

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 19

Page 7: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

ros de claves de ambas zonas para poder veri-ficar su existencia y obtener la posición en losbloques del disco de los mismos. Veamos sitodo es correcto:

# truecrypt -vl/dev/mapper/truecrypt0:Volume: /mnt/cifradoType: HiddenSize: 1073741824 bytesEncryption algorithm:UAES-Twofish-SerpentMode of operation: LRWRead-only: NoHidden volume protected: No

Para desmontar el volumen:

# truecrypt -d /mnt/cifrado

Cifrado a nivel de espaciode UsuarioAhora vamos a ver cómo funcionan las plata-formas disponibles para su uso directamentedesde el espacio de usuario. Éstas trabajandirectamente con los ficheros, y no con parti-ciones o discos.

FuseSin duda alguna, el uso del módulo FUSE (Files-ystem in Userspace) ha permitido que las aplica-ciones del usuario se comuniquen con otros sis-temas de comunicación más complejos a travésde simples llamadas al sistema de ficheros. Unejemplo de esto lo vemos en el uso de las cuen-tas de Gmail como método de almacenamientoen disco [11] , puesto que se pueden montarcomo un sistema de ficheros más y FUSE seencarga de transformar nuestras lecturas/escri-turas en mails que se leen y mandan a la cuenta.Hay que activarlo y recompilar el Kernel:

File systems —-><M> Filesystem in

UserspaceUsupport

Una vez lo tengamos activo se habrá creado elinterfaz /dev/fuse. Otros paquetes que necesita-mos son: fuse-utils, libfuse2, libfuse-dev, estosúltimos para compilar mediante el códigofuente las aplicaciones que veremos a continua-ción.

CryptoFSUna de las cosas más destacables de la plata-forma CryptoFS [9] es que nunca hay fallos alintentar acceder a la zona cifrada. Lo que

sucede es que al introducir una clave errónea losficheros se descifran, dando como resultadoalgo que no tiene sentido. Esta táctica es muybuena para prevenir ataques, sobre todo en elcaso de que se intente acceder a una informa-ción de la que se desconoce por completo sucontenido.Pros:• Muy sencillo de compilar y usar.• Si tenemos instalado GNU-PG usará su aplica-

ción PIN para pedirnos el password, lo queincrementa la finalidad

Utiliza los algoritmos de cifrado de las libgcrypt,las cuales están realmente extendidas.Contras:• Los nombres de los ficheros en el espacio

cifrado son de distinto tamaño según lo sea sunombre real. Lo que puede llevar a un ata-cante a saber qué espacio del disco cifradocorresponde a cada fichero.

Necesitaremos las librerías libgcrypt (ej:libgcrypt11-dev), así como las Glib (gtk > 2.6),y por supuesto los de desarrollo de FUSE, asícomo las librerías.

# ./configure ; make ; makeUinstall

Ahora generamos un fichero de configuraciónen el directorio donde estarán nuestros ficheroscifrados, por ejemplo: /cifrado . El fichero será :/cifrado/.cryptofs. Ejemplo de fichero deconfiguración:

[CryptoFS]cipher=AES256 #algoritmo deUcifrado simétricomd=MD5 #algoritmo dehashUusado para crear la clave deUcifradoblocksize=2048 #tamaño deUbloquesalts=256 #número dellavesUusadas

Lo montamos:

# cryptofs —root=/cifradoU/mnt/cifrado

Ya podemos mover la información a este direc-torio. Vista del contenido a través del filtro deCryptoFS manejado por FUSE:

# ll /mnt/cifradofichero1.txtfich2.txt

• -c sistemaCifrado: es el nombre que daremosal fichero a crear

La única pregunta que hemos dejado sin res-ponder ha sido el password que se añadirá alos ficheros de claves, el cual conviene dar deforma interactiva, ya que se desactiva la salidaal terminal de la contraseña (echo off). Ahoracreamos una partición de 1GB escondida den-tro de ella y cambiando los algoritmos decifrado (de nuevo nos preguntará por el pass-word):

# truecrypt —type hiddenU—random-source /dev/urandomU—size 1G —filesystem FATU—encryption AES-Twofish-SerpentU—hash Whirlpool —keyfileßsficheroClaves ... -cUsistemaCifrado

Seguidamente podemos montar la particiónnormal o la secreta dependiendo de qué pass-word y qué ficheros de claves le pasemoscomo parámetros, en la Figura 4 podemos verun diagrama que lo explica.

# truecrypt sistemaCifradoU/mnt/cifrado

Hay que tener en cuenta que si montamos deesta manera la partición cifrada en el espacionormal no respetará la zona de la secreta (por-que no sabe de su existencia), y podría sobre-escribirla. Si queremos montarla de forma queademás se proteja la zona secreta (para traba-jar con ella en condiciones normales), pode-mos hacerlo así:

# truecrypt -PUsistemaCifrado /mnt/cifrado

Lógicamente nos pedirá los passwords y fiche-

PORTADA • Encriptación de discos duros

20 Número 25 W W W . L I N U X - M A G A Z I N E . E S

Figura 3: Módulos de cifrado de CrytoAPI

incluidos en el Kernel.

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 20

Page 8: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

Vista directa de los ficheros almacenados cifra-dos en disco:

# ll /cifradoxaaSAS6SaA1S1lk8e32d

Para desmontarlo:

# umount /mnt/cifrado

ENCFSECFS [10] trabaja a través de las librerías decifrado de OpenSSL.Pros:• Permite elegir si queremos cifrar los nombres

de cada fichero o sólo los datos.• Permite que la longitud del nombre de los

ficheros cifrada sea en todos la misma (múlti-plo del tamaño del bloque). De forma que nopuedan saber viendo los ficheros cifrados sitienen nombres cortos o largos.

• Permite generar los valores de los vectores deinicialización (salt) mediante la ruta completadel fichero. De esta forma el nombre delfichero “claves.txt” no se cifrará igual en /mnt/cifrado0 que en /mnt/cifrado1

• Permite que varios usuarios oculten sus pro-pios ficheros dentro de un mismo sistema cre-ado mediante EncFS . Dependiendo del pass-word que demos, mostrará los ficheros cuyodescifrado haya sido exitoso con esa contra-seña.

Contras:• Genera metadatos en un fichero llamado

.encfs5 que se encuentra en el sistema raíz dela carpeta de cifrado y que contiene informa-ción necesaria para el descifrado de los fiche-ros. Lo que lo convierte en un keyfile que se hagenerado sin nuestro permiso.

• No existe la posibilidad de cambio de pass-word en el sistema. Hay que mover los fiche-ros, crear uno nuevo, y cifrarlos de nuevo.

• De la misma manera no existe la posibilidadde cambiar otras propiedades del sistema deficheros. Cualquier cambio exige creación deun nuevo sistema y nuevo cifrado del conte-nido.

Compilación: Para compilarlo nosotrosmismos necesitamos librlog-dev, libssl-dev. En algunas distribuciones comoDebian existe un paquete ya precompi-lado.

# tar -xzvf encfs-1.3.1-1.tgz# ./configure; make ; makeUinstall

Ahora vamos aespecificar el raíz denuestro sistema deficheros. Será la car-peta que contengatoda la informacióncifrada. Básicamentees una carpeta nor-mal creada en el sis-tema, que va a con-tener una serie deficheros con la carac-terística especial deque su nombre ycontenido realesestán cifrados. Elegi-mos /cifrado, a continuación especificamos undirectorio donde montaremos la carpeta raíz ysobre el cual FUSE nos hará creer que se trata deun directorio normal: /mnt/cifrado. La primeravez que montemos nuestro sistema, es cuandohemos de elegir las opciones específicas.

# encfs /cifradoU/mnt/cifrado —idle 10 —anykeyU-extpass=U/usr/bin/ssh-askpass-fullscreen

Hay que tener cuidado, porque como ya se hacomentado en los contras, una vez especifica-das las opciones no se pueden cambiar.• —idle: especifica el tiempo que el sistema

estará montado en inactividad. Esta opción esinteresante para que, una vez ya no la estamosusando, se desmonte automáticamente, porejemplo:10 min

• —anykey: para permitir múltiples usuarios,cada uno cifrando sus ficheros con su propiaclave sobre el mismo sistema.

• —extpass: si queremos que sea otra aplicaciónmás segura la que obtenga el password denosotros y luego se lo pase a EncFS (ej: ssh-askpass).

El uso del modo experto permite configurarparámetros como queráis. Os nombro lasopciones, y entre paréntesis la que reco-miendo: algoritmo de cifrado (AES 256),tamaño del bloque (512), tipo de cifrado sobrelos nombres de los ficheros (Block), depen-dencia de nombre de la ruta completa (Sí),vectores de inicialización para cada fichero(Sí), cifrado de datos dependiente del pathcompleto (No). Para el resto de las veces lopodemos montar simplemente con:

# encfs /cifradoU/mnt/cifrado —stdinpass <U/mnt/usb/key

La opción -stdinpass hace que no nos pregunteel password, sino que lo tome directamente dela entrada estándar.

Ahora ya podemos trabajar con los ficheros.Vamos a listarlos para que veamos cómoesconde sus nombres de los ficheros y su longi-tud (ver Listado 3).

Para desmontarlo:

# umount /mnt/cifrado

Casos complejos de usoCifrado con claves distribuidas en USBs

Tal y como podemos ver en la Figura 6, lafinalidad es asegurar la confidencialidad de lainformación, de forma que sólo se pueda acce-der a ella mediante el uso de un conjunto de cla-ves distribuidas entre varias personas. Concreta-mente, hemos elegido para ello la distribuciónde claves complejas en dispositivos lápices USB,los cuales son baratos, de uso extendido y detamaño reducido. Se recomienda comprarvarios de ellos (1 por persona) de poca capaci-dad, pues lo que vamos a almacenar ocupaunos pocos KB y es mejor dedicarlo exclusiva-mente para el uso que aquí se describe. Damospor hecho que se han seguido la guía de compi-lación y uso de TrueCrypt descritos previamentey que está funcionando el sistema de manejo dedispositivos UDEV, pues viene incluido en todala rama 2.6 del Kernel.

Primero recogemos información de cada dis-positivo USB que vamos a usar para almacenarlos ficheros de claves (desde ahora denominado“llaves”) . Para ello vamos a escoger parámetrospropios del hardware a analizar, como elnúmero de serie y el número identificativo delproducto. Supongamos que el USB está mape-ado en /dev/sda

# udevinfo -a -pU/sys/block/sda | grep -i serial

Encriptación de discos duros • PORTADA

21Número 25W W W . L I N U X - M A G A Z I N E . E S

Figura 4: Funcionamiento de la zona secreta de TrueCrypt.

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 21

Page 9: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

mount /dev/luisma/llaves/luisma

Al montar las llaves USB a partir delos dispositivos especiales, nos ase-guramos de que el script siempreusará los dispositivos correctos, aun-que tengamos muchos más conec-tados a la máquina. El siguientepaso es almacenar un keyfile dentrode cada USB. Esto ha de hacerlocada usuario de forma privada yconfidencial. El tamaño a tener encuenta como máximo será de 1MB,y puede ser cualquier tipo defichero, desde uno creado mediantenúmeros aleatorios, hasta otrofichero que contenga la canción/película (en cualquier formato) ele-gida por el usuario. En el proceso decreación del volumen cifrado se exi-girá que cada usuario introduzcaademás un password (que pueda

recordar) que generará una contraseña únicaque será la concatenación de todos ellos. Estepaso no es obligatorio, pero es la única opciónpara mantener al sistema protegido en caso deque alguien robara todos los lápices USB de losusuarios. En el ejemplo crearemos un fichero de1GB que contendrá nuestro sistema de ficherospara claves distribuidas:

# truecrypt —type normalU—random-source /dev/urandomU—size 1GB —filesystem FATU—encryption Serpent-Twofish-AESU—hash Whirlpool -kU/llaves/mariaLuisa/keyfile -kU/llaves/ramon/keyfile -kU/llaves/luisma/keyfile -cUsistemaCifrado

Nos preguntará por el password, que ha de serescrito por los tres usuarios. El proceso ha derealizarse siempre en el mismo orden y sin quenadie mire al otro en el proceso de introduccióndel mismo. Como el script de introducción depasswords está en modo echo off, no se mostra-rán los caracteres escritos en la pantalla. Porejemplo: si tenemos los passwords p1, p2 y p3,cuando el sistema nos pida el password nosquedará algo como “p1p2p3”.

Si todo va bien, ya tenemos creada la parti-ción para el sistema de ficheros cifrado. Desdeahora, para montar y acceder al sistema habráque hacer:

# truecrypt -k /llaves/UmariaLuisa/keyfile -k /llaves/U

ramon/keyfile -k /llaves/Uluisma/keyfile sistemaCifradoU/mnt/cifrado

En ese momento se nos pedirá el password(compuesto) para poder acceder al mismo. Unavez terminado el proceso de desmontan los dis-positivos y el sistema de mapeo Truecrypt.

umount /llaves/mariaLuisaumount /llaves/ramonumount /llaves/luismatruecrypt -d

Como comentario extra, decir que podríamoscrear una zona escondida dentro de la zona cre-ada tal y como se especificaba en la primeraparte del artículo sobre el uso de TrueCrypt.

Asegurando el sistemaTal y como se ha expuesto en la introducción deeste artículo, hay ocasiones en las que la infor-mación puede “escaparse” sin cifrar del espacioRAM volátil y acabar escrita en el disco. Este esel caso de la memoria Swap, que es el espaciode disco que el Kernel usa cuando los recursosde memoria RAM se ven agotados para volcarla información existente en ella y dejar paso ainformación más reciente. El problema es queaunque usemos módulos de cifrado, la informa-ción que está en RAM se almacena sin cifrar, yaque el módulo correspondiente sólo actúa conlas operaciones a disco.

Solución: cifrar la partición dedicada a swapcon claves aleatorias (pues es zona de paso), deforma que todo lo que se vuelque a disco estécifrado. Supongamos que nuestra partición deswap es hda2, primero desactivamos la parti-ción que actualmente está siendo usada com“swapoff -a”. Y añadimos en /etc/fstab :

/dev/hda2 none swap sw,Uloop=/dev/loop3,encryption=UAES256 0 0

SYSFS{serial}==”212304887990”# udevinfo -a -p /sys/block/sdaU| grep -i idproductSYSFS{idProduct}==”0056”

Con estos datos vamos a generar una regla enudev, de forma que cada vez que detecte estedispositivo lo mapee con un nombre concreto.Por ejemplo: Imaginemos que el USB pertenecea uno de los usuarios: “María Luisa” . Entoncescrearemos un fichero llamado /etc/udev/rules.d/10-cifrado.rulesy escribiremos:

BUS==”usb”, SYSFS{serial}==U“212304887990”,USYSFS{idProduct}==”0056”,UKERNEL==”sd?1”, NAME=”%k”,USYMLINK=”mariaLuisa”

Reiniciamos el demonio udev:

/etc/init.d/udev restart

Ahora, si volvemos a insertar el USB vemoscomo se crea /dev/mariaLuisa, por lo que yano nos importa si el sistema lo mapea en/dev/sda1, /dev/sdb1, … Una vez hayamoshecho todo con todos los usuarios, creamosun script para montar todos los USB mapea-dos en los dispositivos especiales en una car-peta elegida.

mount /dev/mariaLuisaU/llaves/mariaLuisamount /dev/ramon/llaves/ramon

PORTADA • Encriptación de discos duros

22 Número 25 W W W . L I N U X - M A G A Z I N E . E S

01 # ls /cifrado/.*

02 .encfs5

03 fJDoXw38eS-mAoZarDF6mxFn

04 H1FLupPiA7XXGYM4nKOaMzhA

05 imJtA7eT,JtTBFGku5Dm4DSS

06 # ls /mnt/cifrado/.*

07 nombreCorto

08 nombreDeTamañoMedio

09 nombreDeTamañoMuyMuyLargo

Listado 3: Listado deficheros cifrado y sin cifrar

Figura 5: Funcionamiento del cifrado a nivel de Usuario.

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 22

Page 10: ¥EncriptaciŠn de discos duros - Libelium...¥EncriptaciŠn de discos duros averiguar la clave sea pr⁄cticamente imposi-ble. En otras plataformas como Loop-AES se usan hasta 65

Mediante el comando “swapon -a” podemosver cómo la deja funcionando sin la necesidadde proporcionar ninguna clave.

# swapon -aConfigurando espacio deUintercambio versión 1, tamaño =U501731 kBno label, UUID=5f60200f-a850-U4511-9155-af9c5460ae8

Aunque no se especifique, se generan claves ale-atorias para cifrar la información allá contenida,pues la finalidad es que se almacene temporal-mente y que al reiniciar el sistema se vuelque alespacio de disco correspondiente y se generennuevas para la información venidera.

Es posible que la próxima vez al arrancar ten-gamos problemas, pues normalmente la parti-ción de swap se carga antes que el resto de parti-ciones, y modprobe intentaría escribir en /var/log/ksymoops/ antes de que existiera el sistemaraíz y daría errores de escritura.

Ahora vamos a cifrar la carpeta temporal delsistema /tmp, ya que es uno de los sitios donde,en ocasiones, el sistema deja restos de ficherosque se han abierto. Supongamos que vamos ausar la partición /dev/hda3 donde previamentehemos creado un sistema de ficheros ext3 paraalmacenar los ficheros temporales.

/dev/hda3 /tmp ext3Udefaults, loop=/dev/loop4,Uencryption=AES256,Uphash=random/1777 0 0

Los permisos 1777 harán que el sistema deficheros cifrado creado sobre /tmp permita elacceso de lectura, escritura y búsqueda. Ade-

más crea la carpeta /tmpcon el bit pegajoso activado(sticky bit), este permite quesólo los propietarios de losficheros puedan renombrar-los o borrarlos de la carpeta.Recordemos que cada vezque se recompile el kernelhay que generar de nuevo elmódulo loop de Loop-AES,pues es dependiente de laversión del núcleo. Una vezhemos asegurado elentorno de trabajo, tenemosque centrarnos en el cifradoen sí de los datos del usua-rio. Para ello podemos utili-zar cualquiera de las herra-mientas descritas en el artí-

culo anterior como Cryptoloop, Loos-AES,TrueCrypt, EncFs, DM-Crypt, …

Otros sistemas de ficheros:Pasado y futuroPasado:• CFS [12] (en funcionamiento desde 1992) usa

el demonio NFS para realizar escritura cifradaen local. Trabaja a nivel de usuario.

• a [13] permite la creación de capas de cifradoindependientes unas de otras, de forma quecada capa dé acceso a determinados ficheros ydonde cada capa esté con su contraseña. Es unaidea similar a la de múltiples passwords deEncFS. Trabaja a nivel de usuario.• FreeOfte [14] permite acceder a volúmenes

cifrados como dm-crypt, cryptoloop desdeWindows. Trabaja a nivel de Kernel.

Futuro:• Nivel de Kernel: EcryptFS [15] Reciente apari-

ción en el Kernel (2.6.19) y que aún seencuentra en modo experimental. Trabajadirectamente con los ficheros, no hay limita-ción del espacio a usar ni hay que definirlo alinicio. Como contra, destacar que si se cambiala clave exige volver a cifrar la información detodo el fichero. Por el momento está en estadoexperimental, si queremos compilarlomediante el código fuente incluido dentro delkernel hay que activar ciertas opciones delmodo experimental y del manejo de las llavesen el sistema.

Code maturity level optionsU—->[*] Prompt for developmentUand/or incomplete code/drivers

Security options —->[*] Enable access keyUretention support

Ahora ya podemos seleccionar el módulo delnuevo sistema de ficheros:

File systems —->Miscellaneous filesystems —-><M> eCrypt filesystem layerUsupport (EXPERIMENTAL)

• Nivel de Usuario: FSFS [16] Al igual queCFS, usa el demonio NFS para crear doscanales de comunicación entre las diferentesmáquinas de forma que la información ycomandos de acceso a los datos siempre setransmitan cifrados. Lo primero, decir que lainformación ya de por si se almacena cifradaen el disco, pues todas las escrituras que serealizan son manejadas a través del móduloFUSE que cifra y descifra la información quepasa. Por ello podemos transmitir la infor-mación tal cual a diferencia de la implemen-tación de NFS sobre Ipsec, que tiene que rea-lizar la tarea de cifrado/descifrado de lainformación todo el tiempo. Sin embargo,las peticiones de información a nivel del sis-tema de ficheros que se realizan tambiénhan de ser cifradas (recordemos el manejode ficheros a través de la red), por ejemplo“Leer 500 Bytes del i-nodo xxx con un offsetde yyy”. Para ello se crea un canal seguromediante una conexión TLS v1 usando AESde 256 Bits. �

Encriptación de discos duros • PORTADA

23Número 25W W W . L I N U X - M A G A Z I N E . E S

[1] http://apeiron.laotracara.com/eliminar-la-informacion-del-disco-duro-para-siempre

[2] http://tldp.org/HOWTO/Cryptoloop-HOWTO/

[3] http://www.securiteam.com/exploits/5UP0P1PFPM.html

[4] http://loop-aes.sourceforge.net/

[5] ftp://ftp.kernel.org/pub/linux/utils/util-linux/util-linux-2.12r.tar.gz

[6] http://www.saout.de/misc/dm-crypt/

[7] http://luks.endorphin.org/dm-crypt

[8] http://www.truecrypt.org

[9] http://reboot.animeirc.de/cryptofs/

[10] http://arg0.net/encfs

[11] http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html

[12] http://www.crypto.com/software/

[13] http://www.freenet.org.nz/python/phonebook/

[14] http://www.freeotfe.org/docs/index.htm

[15] http://ecryptfs.sourceforge.net

[16] http://fsfs.sf.net

RECURSOS

Figura 6: Cifrado con keyfiles y passwords distribuidos.

014-023_DiscosDurosLM25 5/2/07 6:19 pm Página 23