Blogs

Hier möchte ich etwas über meine Erfahrungen mit dem Yubikey 4 und dem Nitro Key Pro berichten. Beides sind kryptographische Hardware Token die via USB an den Computer angeschlossen werden und dort Signatur, Entschlüsselung und Authentifizierungsfunktionen bieten. Im Unterschied zu (mobilen) Computern sind Schlüssel darin so gespeichert, dass sie nicht ohne weiteres extrahiert oder kopiert werden können. Daher eignen sie sich neben der sicheren Speicherung von Schlüsseln auch sehr gut als 2. Faktor. Zudem können (private) Schlüssel auch auf den Token generiert werden, so dass diese niemals den Token verlassen und deren alleinige Existenz auf dem Token garantiert werden kann.

  • Kritische Accounts sollten idealerweise mit einem 2. Faktor abgesichert sein (etwas das man “besitzt”). Dies verhindert, dass ein unbemerkt geleakter 1. Faktor, z.B. Passwort oder PIN, dritten dauerhaft Zugang auf einem 2. Gerät verschafft. Bei einem Hardwaretoken merkt man, dass es fehlt. Bei einem Passwort, das mit Handykamera über die Schulter “abgeschaut” wurde nicht. Der 2. Faktor sollte daher möglichst schwer zu kopieren sein.
  • Schlüsselpaare für Entschlüsselung und Signatur von Email und Dateien (GPG und S/MIME) sind im Idealfall ebenfalls nur schwer zu kopieren. Gleiches gilt für asymmetrische Schlüsselpaare die zur Authentifizierung verwendet werden (z.B. SSH).

Als 2. Faktor bieten sich auch Handy Apps die z.B. zeitbasierte Token (TOTP) erzeugen an. Deren Schlüssel sind von einem Handy jedoch leichter zu extrahieren als diese auf einem Hardware Security Device. Gleiches gilt für die Verwendung von Handy und SMS als 2. Faktor.

Hier einige konkrete Anwendungsbeispiele der von mir verwendeten Modi:

Univeral 2nd Factor ist ein Standard für den 2. Faktor. In der Praxis wird man, z.B. beim ersten Login, in einem neuen Browser gebeten den Besitz des 2. Faktors zu beweisen. Dafür wird der Token berührt. Unterstützung findet sich im aktuellen Firefox und Chrome. U2F kann aktuell nur der Yubikey und wird z.B. von Google, Facebook, Gitlab, Github und Bitbucket unterstützt. Persönlich habe ich U2F bei Github und Google im Einsatz. Für die Verwenung muss kein geheimer Schlüssel ausgetauscht oder auf Server Seite gespeichert werden sondern ein initialer Austausch über eine öffentlichen Kanal, wie bei GPG, genügt.

Bei Timebased One-time Password werden nur für kurze Zeit (~1min) gültige Token erzeugt. Dazu wird bei der initialen Synchronisation ein Shared Key auf das Gerät übertragen und gespeichert. Aus dem Shared Key wird zusammen mit der aktuellen Systemzeit auf beiden Seiten ein Token abgeleitet und zur Authentifizierung verglichen. Die Token haben nur eine zeitlich begrenzte Gültigkeit. TOTP stellt eine Verbesserung zu HOTP dar, bei dem ein Counter inkrementiert werden muss. Jedoch kann nicht garantiert werden, dass das Secret von einer der beiden Seiten kopiert wird / wurde. TOTP ist der am weitesten verbreitetste Standard und wird fast überall unterstützt. Sowohl Yubikey als auch der Nitrokey besitzen keine interne Uhr und müssen daher die Uhrzeit von extern hineingereicht bekommen. Beide führen die Berechnung des temporären Token selbst durch, daher ist das Secret auf den Geräten relativ sicher.

GPG Schlüssel können Unterschlüssel für unterschiedliche Funktionen besitzen. Typischerweise sind diese Signatur und Verschlüsselung. Weniger bekannt ist, daß Unterschlüssel auch zur Authentifizierung verwendet werden können. Für SSH muss hierzu nur der GPG Agent mit SSH-Agent Support gestartet werden (ersetzt den SSH Agent). Yubikey und Nitrokey stellen GPG Smartcard Funktionalität bereit, bei der sowohl die Schlüssel, als auch die Verschlüsselung auf der Smartcard stattfindet. Hierbei hat man die Wahl, ob der Schlüssel auf dem Token erzeugt werden soll und dieses nicht mehr verlässt, oder man den Schlüssel extern erzeugt und eine Kopie zu Sicherungszwecken an einem sicheren Ort aufbewahrt wird.

Falls ein Verlust des Schlüssels problematisch ist (z.B. Mail Verschlüsselung), empfiehlt sich die 2. Variante mit Unterschlüsseln auf dem Token. So können im Verlustfall (neue) Unterschlüssel auf den Token provisioniert werden, ohne dass hierfür ein neuer Schlüssel im Web of Trust beglaubigt werden muss. Gute Anleitungen zum Erzeugen finden sich z.B. hier und hier, am besten air-gapped. Geht es primär um die Authentifizierung und garantie, daß kein Zweitschlüssel existiert die 1. Variante. Potentiell ist man dann jedoch auch von Hardware Bugs betroffen, wie beim Yubikey in der Vergangenheit geschehen.

Der Zugriff auf die Smartcardfunktionen wird mit einer 6-8 stelligen Pin abgesichert. Diese ist kürzer wie eine typische Passphrase. Nach 3 Fehlversuchen kann diese jedoch nur noch mit einer längeren Admin Pin resetted werden. Wird auch diese 3x falsch eingegeben muss der Token resetted werden und die Schlüssel gehen bei Variante 2 verloren.

Haupsächlich verwende ich nun einen Yubikey 4C nano der im usb-c port meines Macbooks steckt und dort permanent verbleibt (steht nur wenige mm über). Für GPG und SSH ergibt sich praktisch keinen Unterschied im Komfort, bis auf dass der GPG Agent für SSH verwendet wird und der Login minimal langsamer ist (~0.5s). Die Kryptofunktionalität auf dem Yubikey ist offensichtlich etwas langsamer als die des Macbooks. Pin ist für mich auch komfortabler wie eine Passphrase. Der grosse Komfortgewinn ist jedoch beim 2ten Faktor: Hier muss nicht extra das Handy entsperrt, App aufgemacht und ein Code eingegeben werden. Copy / Paste aus der Yubikey Authenticator / Nitrokey App genügt. U2F ist noch komfortabler: Yubikey berühren, fertig.

Persönlich bevorzuge ich den Yubikey. Er ist als “nano” Version verfügbar, unterstützt U2F und die Authenticator App ist gut gemacht und kann z.B. die QR Codes “scannen”. Auch auf der Kommandozeile lässt sich bequem ein Token erzeugen. Der Nitrokey hat dafür eine Open Source Firmware und kann zudem auch als Passwortmanager verwendet werden. Leider ist ein Audit von Cure53 des Nitrokeys durchwachsen ausgefallen und Aufgrund der geringen Verbreitung sind die Ressourcen und der dahinter stehenden Firma begrenzt. Der Yubikey wird im grossen Stil, z.B. bei Salesforce, eingesetzt.