Linux Rechner: Einfaches entschlüsseln mit einem USB-Stick statt Passwort

Linux Benutzerlevel für diesen Artikel: fortgeschritten / advanced

Diese Anleitung beschreibt, wie alternativ zum Passwort ein handelsüblicher USB-Stick als Schlüssel zum Freischalten des Systems verwenden werden kann, ohne dass auf diesem eine offensichtliche Schlüsseldatei angelegt werden muss.

Den USB-Stick vorbereiten

Alles auf dem Stick löschen

Den handelsüblichen USB-Stick mit shred inklusive Partitionierungs-Tabelle löschen.

shred -v -z -n0 /dev/sdX

Partitionstabelle mit cfdisk erstellen

Mit cfdisk eine neue vfat Partition (Gesamtgrösse-2MB) am Ende des USB-Sticks anlegen. So bleiben am Anfang einige Datenblöcke für den LUKS-Header frei.

Filesystem erstellen

Das Filesystem kann nach belieben verwendet oder leer bleiben, da sich der Key im Zwischenraum neben der Partition befindet. So fällt nicht auf, dass es sich hierbei um einen USB-Stick handeln könnte, womit man einen Computer entschlüsseln kann.

mkfs.vfat /dev/sdX -n usblabel

Den Schlüssel generieren

Es ist wichtig den Schlüssel an der genau passenden Stelle auf den Stick zu schreiben. cfdisk zeigt bis wohin maximal geschrieben werden darf, ohne das vfat Dateisystem zu verletzen.

cfdisk -P t /dev/sdX
Partition Table for /dev/sdX

         ---Starting----      ----Ending-----    Start     Number of
 # Flags Head Sect  Cyl   ID  Head Sect  Cyl     Sector    Sectors
-- ----- ---- ---- ----- ---- ---- ---- ----- ----------- -----------
 1  0x00   10   21     4 0x0C   34   36  2708        6176     3905504

Der Start Sector der ersten Partition ist in diesem Beispiel bei 6176. Mit dem folgenden Befehl werden Zufallszahlen von Sektor 2 bis 6175 geschrieben. Sektor 1 darf nicht beschrieben werden, da sich die Partitionierungstabelle darauf befindet, welche wir vorher mit cfdisk erstellt haben.

dd if=/dev/urandom | uuencode -m - | dd bs=512 seek=1 \
  count=6175 of=/dev/sdX

Den Schlüssel sichern

Aus diesem grossen Zwischenraum (Sektor 2-6175) benötigt der Schlüssel nur ca 5 Sektoren. Um es noch weniger auffällig zu machen entnehmen wir den Schlüssel zwischen Sektor 3 und 7 und speichern Ihn aus dem USB-Stick auf die Festplatte:

dd if=/dev/sdX bs=512 skip=2 count=5 of=usb.key

Schlüssel dem luks header hinzufügen

Mit cryptsetup wird der gespeicherte Schlüssel usb.key nun im LUKS-Header installiert. In der Datei /etc/crypttab steht, welche Disks mit LUKS-Verschlüsselung ausgerüstet sind und zur Verfügung stehen. In diesem Beispiel ist es /dev/sdX5

grep crypt /etc/crypttab
cryptsetup luksAddKey /dev/sdX5 usb.key
(aktuelle passphrase)
rm usb.key

Die initramfs des Kernels vorbereiten

mkdir -p /etc/decryptkeydevice
cd /etc/decryptkeydevice

decryptkeydevice_keyscript.sh

Download von decryptkeydevice_keyscript.sh von hier.

wget decryptkeydevice_keyscript.sh
chmod +x decryptkeydevice_keyscript.sh

decryptkeydevice.conf

Die USB-Schlüssel werden anhand ihrer vom System vergebenen Disk-ID erkannt und in der Zeile DECRYPTKEYDEVICE_DISKID=" " eingetragen. Die Disk-ID des aktuell gesteckten USB-Sticks ermittelt der folgenden Befehl:

ls -l /dev/disk/by-id  |grep sdX | grep -v part

Und wie folgt ergänzen:

vim decryptkeydevice.conf
  DECRYPTKEYDEVICE_SKIPBLOCKS="2"
  DECRYPTKEYDEVICE_READBLOCKS="5"
  DECRYPTKEYDEVICE_BLOCKSIZE="512"
  DECRYPTKEYDEVICE_DISKID="usb-Generic_STORAGE_DEVICE_000000034407-0:0"

crypttab

Die betreffende sdXX_crypt Zeile mit den Optionen tries und keyscript erweitern.

cat /etc/crypttab 
sdXX_crypt UUID=615394ca-7ad7-11e3-b03b-001e6708b914 none luks,tries=3,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh

update-initramfs

Achtung:
Es wird dringend empfohlen, eine Kopie des originalen initramfs in der /boot/ Partition anzulegen, damit man im Notfall damit das System wieder starten kann.

Mit der Datei decryptkeydevice.hook wird dem initramfs-tool mitgeteilt, dass die gewünschten Konfigurationen mit in die initrd einbezogen werden und die Festplatte anhand des USB-Schlüssels entschlüsselt werden kann.

cd /etc/initramfs-tools/hooks
wget decryptkeydevice.hook
update-initramfs -u

Neustart

Und den USB-Schlüssel eingesteckt lassen.

Referenzen

Ubuntu users: Daten sicher löschen
Ubuntu users: System Entschlüsseln mit einem USB-Stick
How to setup passwordless disk encryption in Debian Etch