EncFS

De Astillas.net

Cifrado de carpetas usando fuse.

Enlaces y referencias

Conceptos

EncFS está diseñado para cifrar archivos de forma transparente y empleando un directorio arbitrario como almacén para dichos archivos.

Estos son sus puntos más destacados:

  • El programa emplea dos directorios para funcionar; uno de ellos contiene los archivos fuente (cifrados) y el otro se convierte en el punto de montaje a través del cual se accede a los archivos en claro, en una correspondencia uno a uno con el directorio fuente:
    encfs ~/.directorio_fuente ~/directorio_en_claro
  • Los archivos se cifran empleando una clave de volumen que se guarda a su vez, convenientemente cifrada por una contraseña, en el llamado archivo de control en el directorio fuente (.encfs*).
  • Aunque los archivos son tratados individualmente su contenido no se cifra en una única operación. Se dividen en bloques de longitud fija (definible durante la creación del volumen) para mejorar el rendimiento: pequeños cambios en grandes archivos no implican grandes operaciones de lectura, cifrado y escritura.
  • Los nombres de los archivos también están cifrados para dificultar los ataques existiendo varias formas de realizar dicha operación según los recursos disponibles y el nivel de seguridad requerido.
  • Es posible añadir una capa de verificación de integridad en el sistema de archivos cifrado empleando sumas de autocomprobación por cada bloque. Esto añade seguridad a un alto coste de CPU.

Copias de seguridad

Respecto a las copias de seguridad, éstas pueden automatizarse totalmente dado que no es necesario descifrar el volumen para acceder individualmente a cada archivo. Esto consigue, además, que los datos se guarden también cifrados. La principal precaución a tomar es disponer del archivo de control del volumen para asegurarnos la recuperación del archivo en claro.

Archivo de control

El archivo de control -al menos en la versión 1.7.2- está en formato XML y se emplea para guardar tanto las características del volumen como la clave de cifrado de los archivos. Esta clave está además cifrada a su vez con la contraseña que solicita el programa cuando va a montar el volumen. Es por eso por lo que es posible cambiar la contraseña del volumen rápidamente y sin afectar al contenido cifrado.

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="7">
<cfg class_id="0" tracking_level="0" version="20">
	<version>20100713</version>
	<creator>EncFS 1.7.2</creator>
	<cipherAlg class_id="1" tracking_level="0" version="0">
		<name>ssl/aes</name>
		<major>3</major>
		<minor>0</minor>
	</cipherAlg>
	<nameAlg>
		<name>nameio/block</name>
		<major>3</major>
		<minor>0</minor>
	</nameAlg>
	<keySize>256</keySize>
	<blockSize>1024</blockSize>
	<uniqueIV>1</uniqueIV>
	<chainedNameIV>1</chainedNameIV>
	<externalIVChaining>1</externalIVChaining>
	<blockMACBytes>8</blockMACBytes>
	<blockMACRandBytes>0</blockMACRandBytes>
	<allowHoles>1</allowHoles>
	<encodedKeySize>52</encodedKeySize>
	<encodedKeyData>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
	</encodedKeyData>
	<saltLen>20</saltLen>
	<saltData>
vd4lNdmhjXtKyKyoHfoiAnf4bc4=
	</saltData>
	<kdfIterations>455017</kdfIterations>
	<desiredKDFDuration>3000</desiredKDFDuration>
</cfg>
</boost_serialization>

Parámetros de montaje

Algunos parámetros tienen más utilidad inmediata que otros y estos son:

-i, --idle=MINUTES Establece el límite de tiempo de inactividad para desmontar el sistema de archivos siempre que no existan archivos abiertos en él (aunque sólo sean en modo lectura).
--public Efectúa un montaje multiusuario del sistema de archivos para lo cual el programa encfs debe ser ejecutado como root. Sin este parámetro los archivos descifrados sólo son visibles para el usuario que ha montado el sistema; ni siquiera el administrador puede acceder a ellos.

Con este parámetro encfs añade las opciones FUSE allow_other y default_permission al punto de montaje e intentará cambiar el propietario de los nuevos archivos según el usuario que los crea.

--extpass=program Define un programa externo como el encargado de pedir la contraseña de acceso al archivo de control del volumen. Este programa deberá enviar la contraseña leída al su canal estándar de salida. Es posible, por ejemplo, emplear el programa ssh-askpass para aceptar la contraseña de entrada usando su ruta de acceso:
--extpass=/usr/lib/ssh/ssh-askpass
--ondemand

Monta el sistema de archivos a demanda y sólo tiene sentido cuando se combina con los parámetros --idle y --extpass, ya que entonces cuando se alcance el límite de tiempo encfs cerrará el acceso a los archivos (descartando internamente las referencias a ellos), y si alguien lo intenta de nuevo se usará el programa externo para pedir la contraseña.

--reverse En circunstancias normales el programa encfs obtiene una vista en claro de un texto cifrado ya que es ésto último lo que guarda bajo su control. Empleando este parámetro el funcionamiento se invierte: dado un texto claro se obtiene la versión cifrada del mismo, lo que es muy útil para efectuar copias de seguridad remotas seguras.
encfs --reverse ~/datos ~/.fuente_cifrada

Recetario

Crear un volumen

No hay un parámetro concreto para crear un volumen. Si se invoca al programa encfs con un directorio fuente donde no existe un archivo de control éste es creado automáticamente.

$ encfs ~/tmp/.fuente_cifrado ~/tmp/datos
Creando nuevo volumen cifrado.
Por favor, elige una de las siguientes opciones:
 pulsa "x" para modo experto de configuracion,
 pulsa "p" para modo paranoia pre-configurado,
 cualquier otra, o una linea vacia elegira el modo estandar.
?>  p

Seleccionada configuración Paranoica.

Configuración finalizada. El sistema de ficheros a ser creado tiene
las siguientes propiedades:
Cifrado del sistema de ficheros: "ssl/aes", versión 3:0:2
Codificacion del nombre de fichero: "nameio/block", versión 3:0:1
Tamaño de la llave: 256 bytes
Tamaño de Bloque: 1024 bytes, incluyendo 8 bytes de la cabecera MAC
Cada fichero contiene una cabecera de 8 bytes con datos IV únicos.
Nombres de fichero encodeados usando el modo IV de encadenamiento.
El IV de los datos del archivo está encadenado al IV del nombre del archivo.
Agujeros en archivos pasados a través del ciphertext.

----------------------- ADVERTENCIA --------------------------
Se ha habilitado  la opción de encadenamiento de vectores externos de inicialización.
Esta opción impide el uso de enlaces duros en el sistema de archivos. Sin enlaces duros, algunos programas pueden fallar; por ejemplo los programas 'mutt' y 'procmail'. 
Para más información, por favor revise la lista de correo de encfs.
Si desea elegir otra configuración, por favor pulse CTRL-C para abortar la ejecución y comience de nuevo.

Ahora tendrás que introducir una contraseña para tu sistema de ficheros.
Necesitaras recordar esta contraseña, dado que no hay absolutamente
ningún mecanismo de recuperación. Sin embargo, la contraseña puede ser cambiada
más tarde usando encfsctl.

Nueva contraseña Encfs: 
Verifique la contraseña Encfs: 
$ cat /proc/mounts | grep encfs
encfs /home/victor/tmp/datos fuse.encfs rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions 0 0
$

Desmontaje

Para desmontar un volumen encfs se emplea la herramienta estándar de fuse que tiene un funcionamiento análogo a umount.

$ fusermount -u -z datos

Se emplea el parámetro -z (perezoso) cuando se pretende desmontar el volumen aunque aún esté ocupado.