Erzeugen eines verschlüsselten File-Containers unter Linux

Möchte ein Benutzer auf seinem Webserver oder Heimcomputer einen verschlüsselten Container mit sensiblen Daten erzeugen, so muss zuerst einmal die Datei her, wo diese Daten abgelegt werden sollen. In dem Beipsiel wird eine 2GB große Datei erzeugt. Zuerst wird mit dd eine Datei geschrieben, die mithilfe von urandom viel Schrott beinhaltet. Auf diese Weise kann nicht gesagt werden, wieviele verschlüsselte Daten sich in dieser Datei befinden. Anschließend wird mit mkdir das Zielverzeichnis erzeugt, wohin das Crypto-Device gemounted werden soll.

sample:/# dd if=/dev/urandom of=/home/username/myfile bs=4096 count=524288
sample:/# mkdir /home/username/myfiles
sample:/# ls -l
total 2099208
-rw-r--r-- 1 root root 2147483648 Dec 10 01:16 myfile
drwxr-xr-x 3 root root 4096 Dec 10 02:35 myfiles

Nun muss ein Loop-Device erzeugt werden. losetup erlegt das für uns. So wird sozusagen aus einer Datei ein virtuelles Blockdevice erzeugt. Auf diesem Blockdevice kann wiederum so zugegriffen werden, wie der Benutzer es von Festplatten gewohnt ist.

sample:/# losetup /dev/loop0 /home/username/myfile

Nun existiert ein Blockdevice /dev/loop0. Dieses wird nun mithilfe von cryptsetup initialisiert. Die Parameter finden sich in der man-page wieder. Ab Linuxkernel 2.6.10 kann ein alternatives IV Schema zur Verhinderung einer „Watermark Attack Weakness“ verwendet werden. Hierzu kann aes-cbc-essiv:sha256 verwendet werden.

sample:/# cryptsetup -y -c aes -s 256 -h sha256 create mycrypt /dev/loop0

Nun existiert ein neues Blockdevice unter /dev/mapper/mycrypt. Dies ist wiederum ein virtuelles Gerät, welches durch die Verschlüsselungsroutinen mit dem angegebenen Kennwort so geleitet wird, dass schlußendlich der verschlüsselte Datenstrom auf das Loop-Device /dev/loop0 gelangt, was wiederum dann in der Datei selbst landet. Das wars schon. Nun das Gerät mit einem Dateisystem ausstatten.

sample:/# mkfs.ext3 /dev/mapper/mycrypt

Jetzt kann das Laufwerk gemountet werden. Hierzu einfach das verwendete Dateisystem eingeben und das Laufwerk zum angegeben Verzeichnispunkt mounten.

sample:/# mount -t ext3 /dev/mapper/mycrypt /home/username/myfiles
sample:/# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 15G 7.4G 6.7G 53% /
tmpfs 100M 0 100M 0% /lib/init/rw
udev 10M 16K 10M 1% /dev
/dev/mapper/mycrypt 2.0G 68M 1.9G 4% /home/username/myfiles

Soweit so gut. Nun gibt es ein neues verschlüsseltes Laufwerk im System, auf das der Benutzer nach herzenslust sensible Daten schreiben kann. Die Passphrase sollte entsprechend lang sein und zusätzlich auch eine gewisse Komplexität beinhalten. Das bedeutet, Sonderzeichen, Groß- und Kleinschreibung und Zahlen. Empfohlen wird von mir eine Länge von mindestens 30 Zeichen.