Privacy Handbuch

GnuPG Smartcard im Format eines USB-Sticks gibt es bei Nitrokey, Yubikey oder GnuK.

Die Idee ist einfach erklärt: Es wird die Keyfile für das Öffnen des LUKS Containers verwendet, das mit dem OpenPGP Key des Nitrokey verschlüsselt wurde. Zum Öffnen des Containers wird das Keyfile mit gpg2 entschlüsselt und via Pipe an cryptsetup übergeben.

Eine kurze Anleitung, die sich auf das Wesentliche beschränkt:

  1. Eine frische OpenPGP Smartcard ist zuerst einzurichten (Schlüssel erzeugen, PIN ändern…) Das kann man mäuschenschubsend mit dem GNU Privacy Assistant (GPA) erledigen oder: > gpg2 --card-edit
    ...
    gpg/card> admin
    Admin-Befehle sind erlaubt

    gpg/card> help
    ...
    gpg/card> quit

    Neue Schlüssel erstellt man mit "generate", die PIN und Admin-PIN kann man mit "passwd" ändern und mit "unblock" den Zähler für Fehlversuche zurück setzen.

  2. Da die folgenden Operationen als root durchgeführt werden, ist der OpenPGP Schlüssel der Smartcard zu exportieren und im Schlüsselring von root zu importieren. Außerdem ist ein re-bind des privaten Schlüssel der Nitrokey Smartcard anzustoßen: > gpg2 --export <User-ID> > /tmp/luks-pgp-key.pgp
    > sudo gpg2 --import /tmp/luks-pgp-key.pgp
    > sudo gpg2 --card-status
    > rm /tmp/luks-pgp-key.pgp
  3. Es wird ein 4k großes Keyfile mit Zufallszahlen erzeugt (z.B. /root/.gnupg/key.bin): > sudo dd if=/dev/urandom of=/root/.gnupg/key.bin bs=512 count=8
  4. Das Keyfile wird als Schlüssel für den Container in nächsten freien Keyslot eingefügt. Es wird dabei eine gültige Passphrase für das Öffnen des Containers abgefragt: > sudo cryptsetup luksAddKey <device> /root/.gnupg/key.bin
  5. Das Keyfile wird mit GnuPG verschlüsselt und das Orginal sicher gelöscht: > sudo gpg2 --encrypt --recipient <User-ID> /root/.gnupg/key.bin
    > sudo shred -u /root/.gnupg/key.bin
  6. Zum Öffnen des Container werden folgende Kommandos verwendet, die man sich als Script ablegen kann. <device> und <mount-point> sind anzupassen. <name> kann beliebig gewählt werden und dient nur zur Identifikation im Devicemapper: > sudo su
    # gpg2 --decrypt /root/.gnupg/key.bin.gpg | cryptsetup open --key-file=- <device> <name>
    # mount /dev/mapper/<name> <mount-point>
    # exit
    Mit KDialog oder Zenity könnte man das Script grafisch aufpeppen und einen Starter auf den Desktop legen. Kreativität und Spieltrieb sind dabei keine Grenzen gesetzt. Wenn man das grafisch aufgepeppte Script ohne ein Terminal im Hintergrund nutzen möchte, dann muss man die Option "--no-tty" bei dem gpg2 Kommando hinzufügen: gpg2 --no-tty --decrypt /root/.gnupg/key.bin.gpg | cryptsetup ...

Full Disc Encryption: Wenn man bei der Installation das System vollständig verschlüsselt hat, kann man den Nitrokey auch zum Öffnen des Root-Containers beim Booten verwenden.

Die Nitrokey GmbH stellt dafür eine ausführliche Anleitung für Ubuntu und Debian bereit.

Wichtig ist, dass man sein System schon bei der Installation passend vorbereitet und nicht die automatische Partitionierung der Festplatte nutzt! Es darf nur eine unverschlüsselte /boot Partition und eine verschlüsselte Root-Partition erstellt werden. Anderenfalls kommt es zu Fehlern.