La idea es crear un archivo, inicialmente con contenido aleatorio, y usarlo como partición encriptada que podemos montar utilizando una passphrase o un key file.

Vamos a:

Pasos previos

Instalar el software necesario (cryptsetup):

sudo apt-get install cryptsetup

Crear la partición

Preparar variables de entorno

# nombre del archivo que vamos a crear para tener la partición virtual encriptada
FILENAME=/var/local/cryptpart
# nombre del device lógico al que lo vamos a conectar (en el device mapper /dev/mapper)
DMDEVICE=cryptpart
# mount point para la partición virtual
MOUNTPOINT=/var/secret

# tamaño en bytes que queremos que tenga el archivo (aquí es 2Gb)
FILESIZE=$(( 2 * 1024 * 1024 * 1024 ))

# block size del filesystem donde vamos a crear el archivo
BLOCKSIZE=`stat --file-system --format="%S" \`dirname ${FILENAME}\``
# cantidad de blocks necesarios para llenar el archivo
NUMBLOCKS=$(( ${FILESIZE} / ${BLOCKSIZE} ))

Crear el archivo

echo "About to create ${FILENAME} with ${NUMBLOCKS} of ${BLOCKSIZE} bytes each "\
     "($(( ${NUMBLOCKS} * ${BLOCKSIZE} )) total bytes). This will take some time..."
# crear el archivo con datos aleatorios adentro (en background)
sudo dd if=/dev/urandom of=${FILENAME} bs=${BLOCKSIZE} count=${NUMBLOCKS} &
# monitorear el avance del 'dd' que está en background (kill -SIGUSR1 fuerza a que el dd muestre su status actual)
while sudo kill -n SIGUSR1 $! ; do
  sleep 10
done

Mapear archivo a un loop device

Mapear el archivo al primer loop device libre (la opción '-v' muestra qué device usó):

sudo losetup -fv ${FILENAME}
# guardar el device en una variable de entorno
LOOPDEV=`sudo losetup -j ${FILENAME} | cut -d: -f1`

Inicializar y formatear la partición

Inicializar la partición virtual con encripción usando luks y formatearla en un solo paso:

# sudo cryptsetup --verbose --cipher "aes-cbc-essiv:sha256" --key-size 256 --verify-passphrase luksFormat ${LOOPDEV}
sudo luksformat -t ext3 ${LOOPDEV}

Esto va a pedir confirmación ya que lo que sea que esté en ${LOOPDEV} será destruido. Después va a pedir una passphrase que será la primera clave que se puede utilizar para abrir la partición encriptada (la guarda en el slot 0).

Abrir y montar la partición

Esto va a pedir la passphrase:

# crear el mount point si no existe
sudo mkdir -pv ${MOUNTPOINT}
# abrir la partición encriptada (va a pedir la passphrase)
sudo cryptsetup luksOpen ${LOOPDEV} ${DMDEVICE}
# montarla
sudo mount -t ext3 -o rw,defaults /dev/mapper/${DMDEVICE} ${MOUNTPOINT}

Crear un key file y asociarlo a la partición encriptada

Se puede crear un key file que sirva para abrir el file system sin tener que introducir una clave. Esto se puede guardar en un pendrive o similar

KEYDIR="/media/DATA/KEYS"
KEYFILE="crypto-00.key"
sudo mkdir -pv ${KEYDIR}

Crear un archivo con datos aleatorios

sudo sh -c "head -n 220 /dev/urandom | tail -n 200 > ${KEYDIR}/${KEYFILE}"

agregarlo como key file al device que tiene la partición (va a pedir la passphrase)

sudo cryptsetup luksAddKey ${LOOPDEV} ${KEYDIR}/${KEYFILE}

pasos necesarios para asociar el loop device y montar la partición

Para montar la partición encriptada tenemos que:

# directory holding the key file
KEYDIR="/usr/local/etc/cejil-keys/mnt"
# key file
KEYFILE="crypto-00.key"

sudo losetup -fv ${FILENAME}
# guardar el device en una variable de entorno
LOOPDEV=`sudo losetup -j ${FILENAME} | cut -d: -f1`

sudo cryptsetup --key-file ${KEYDIR}/${KEYFILE} luksOpen ${LOOPDEV} ${DMDEVICE}

# esto va a pedir la passphrase
sudo cryptsetup luksOpen ${LOOPDEV} ${DMDEVICE}

sudo mkdir -pv ${MOUNTPOINT}
sudo mount -t ext3 -o rw,defaults /dev/mapper/${DMDEVICE} ${MOUNTPOINT}

pasos necesarios para desmontar la partición y liberar el loop device

sudo umount ${MOUNTPOINT}
sudo cryptsetup luksClose ${DMDEVICE}
LOOPDEV=`sudo losetup -j ${FILENAME} | cut -d: -f1`
sudo losetup -d ${LOOPDEV}

ParticionEncriptadaEnUnArchivo (última edición 2010-09-29 12:52:24 efectuada por MarianoAbsatz)