Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

Unitas Network GmbH

This Slogan Viewlet registered to Chameleon Theme
Sie sind hier: Startseite / Wissenswertes / Anleitungen / Smartcards / YubiKey NEO initialisieren

YubiKey NEO initialisieren

Es wird die Vorbereitung eines YubiKey NEO zur Nutzung als Einmalpaßwort-Generator, für das Challenge-Response-Verfahren und als OpenPGP-Card beschrieben.

Ziel

Ein YubiKey NEO kann mehrere sicherheitsrelevante Aufgaben gleichzeitig übernehmen. Die sinnvollsten werden im Folgenden  eingerichtet. Anschließend verfügt der YubiKey über folgende Funktionalitäten:

Slot 1: OTP (Einmalpaßwort-Generator)
Damit kann der YubiKey in Zusammenarbeit mit dem entsprechenden Backend-Server zur Zweifaktor-Authentifizierung z.B. zum VPN-Login (mit LinOTP, OpenOTP oder dem YubiRADIUS-Server) oder zur Anmeldung an der Windows-Domäne (mit AuthLite von Collective Software) genutzt werden.

Slot 2: Challenge-Response
Das funktioniert ohne Backend-Server. Damit kann u.a. die YubiKey-Version von PasswordSafe genutzt werden. Eine weitere Anwendung ist wieder die Zweifaktor-Authentifizierung zum Computer-Login (Linux mit PAM-Modul, Windows mit entsprechendem Tool von Yubico).

Smartcard
Damit kann dier YubiKey wie eine OpenPGP-Card zum Signieren und Verschlüsseln genutzt werden.

Die Einrichtung wird beispielhaft unter Gentoo Linux beschrieben, funktioniert aber in allen anderen Betriebssystemen ähnlich.

Vorbereitungen

GnuPG

Zur Nutzung der Smartcard-Funktionalität muß das System entsprechend den Hinweisen in OpenPGP Card initialisieren vorbereitet sein (Installation pcsc-lite, ccid, gnupg). GnuPG unterstützt den Key-Import auf den YubiKey ab Version 2.0.22.

OpenPGP-Applet

Auf der Smartcard des Yubikey NEO ist normalerweise bereits das OpenPGP-Applets installiert, allerdings derzeit in einer zu alten Version, welche keinen Key-Import ermöglicht. Zum Updaten des OpenPGP-Applets müssen ein Java-JDK, Ant-JUnit (erst ab der noch nicht veröffentlichten Version 1.10 des OpenPGP-Applets zur Durchführung von Tests) und die GPShell installiert werden (fehlende EBuilds gibt es hier):

# emerge -av oracle-jdk-bin gpshell ant-junit

Als Java-VM des Benutzers muß die JDK, keine JRE eingestellt sein:

$ eselect java-vm list
Available Java Virtual Machines:
[1]   icedtea-bin-6
[2]   icedtea-bin-7
[3] oracle-jre-bin-1.7 system-vm

$ eselect java-vm set user 2

$ eselect java-vm list
Available Java Virtual Machines:
[1]   icedtea-bin-6
[2]   icedtea-bin-7 user-vm
[3]   oracle-jre-bin-1.7  system-vm

 

YubiKey-Personalisierungs-Tool

Zum Programmieren des YubiKeys muß das YubiKey-Personalisierungs-Tool installiert werden. Unter Gentoo mittels:

# emerge -av yubikey-personalization-gui

Nach dem Start sollte ein eingesteckter YubiKey erkannt werden:

Programmierung YubiKey Slot 1 für OTP (Bild 1)

Für ein späteres Neuerstellen des Yubikeys (z.B. wegen Defekt) sollten ab nun alle Konfigurationsparameter mitgeschrieben werden. Das dann entstandene Dokument wird am Ende sicher z.B. im Tresor verwahrt. Die ersten Parameter für dieses Dokument sind die angezeigten Seriennummern.

Programmierung Slot 1

Slot 1 soll zum Erzeugen von Einmalpaßwörtern genutzt werden.  Bei neuen YubiKeys ist dieser Slot bereits vorkonfiguriert zur Benutzung des Yubico-Authentifizierungsservers. Da für dieses Beispiel aber die Nutzung eines eigenen Servers (z.B. OpenOTP) angenommen wird, wird Slot 1 auch umprogrammiert. Danach ist allerdings die Nutzung des Yubico-Servers nicht mehr möglich.

Im Startfenster des Yubico Personalization Tools wird "Yubico OTP Mode" angeklickt und im folgenden Fenster "Quick" ausgewählt. Damit werden bereits zufällig erstellte neue Werte angezeigt:

Programmierung YubiKey Slot 1 für OTP (Bild 2)

Es muß der Slot 1 ausgewählt werden. Mittels "Regenerate" können Schlüssel und Identitäten nochmal neu erzeugt werden. Das Schreiben auf den Yubikey erfolgt mittels "Write Configuration". Die angezeigten Werte müssen in den verwendeten OTP-Server übertragen werden. Das Notieren der Werte im o.g. Dokument ist nicht unbedingt erforderlich. Bei einem möglichen Defekt des Yubikeys wird einfach ein neuer mit einer neuen Slot1-Konfiguration verwendet und die neuen Werte im OTP-Server eingetragen.

LinOTP:

LinOTP beherrscht leider den Yubico OTP Mode (noch) nicht. Deswegen muß hierfür der OATH-HOTP Mode gewählt werden, die HOTP-Länge sollte 6 Digits betragen, ein OATH Token Identifier darf nicht verwendet werden.

Programmierung Slot 2

Slot 2 wird im Challenge-Response-Mode programmiert. Dazu wird im Yubico Personalization Tool "Challenge-Response" und anschließend "HMAC-SHA1" angeklickt. Hier wird nun Slot 2 ausgewählt, "Require user input (button press)" aktiviert. Nach Klick auf "Generate" wird ein neuer geheimer Schlüssel erstellt, welcher auch dokumentiert werden sollte.

Programmierung YubiKey Slot 2 für Challenge-Response

Mittels "Write Configuration" wird der Schlüssel auf dem YubiKey gespeichert.

Programmierung OpenPGP

CCID-Interface aktivieren

Zuerst muß das Smartcard-Interface des YubiKey NEO aktiviert werden. Das funktioniert nur per Kommandozeile:

$ ykpersonalize -m82
Firmware version 3.1.2 Touch level 1541 Program sequence 1

The USB mode will be set to: 0x82

Commit? (y/n) [n]: y

Anschließend muß der YubiKey entfernt und neu eingesteckt werden. Dabei wird er nun wie folgt erkannt (dmesg-Ausgabe):

usb 6-1: new full-speed USB device number 8 using uhci_hcd
usb 6-1: New USB device found, idVendor=1050, idProduct=0111
usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 6-1: Product: Yubikey NEO OTP+CCID
usb 6-1: Manufacturer: Yubico
input: Yubico Yubikey NEO OTP+CCID as /devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0/input/input1492
hid-generic 0003:1050:0111.05CF: input,hidraw6: USB HID v1.10 Keyboard [Yubico Yubikey NEO OTP+CCID] on usb-0000:00:1d.0-1/input0

GPG sollte den YubiKey nun als (leere) OpenPGP-Karte erkennen:

# gpg --card-status
scdaemon[12020]: updating slot 0 status: 0x0000->0x0007 (0->1)
scdaemon[12020]: Lesen des öffentlichen Schlüssels fehlgeschlagen: Kartenfehler
scdaemon[12020]: Lesen des öffentlichen Schlüssels fehlgeschlagen: Kartenfehler
scdaemon[12020]: Lesen des öffentlichen Schlüssels fehlgeschlagen: Kartenfehler
Application ID ...: D2760001240102000000000000010000
Version ..........: 2.0
Manufacturer .....: test card
Serial number ....: 00000001
Name of cardholder: [nicht gesetzt]
Language prefs ...: [nicht gesetzt]
Sex ..............: unbestimmt
URL of public key : [nicht gesetzt]
Login data .......: [nicht gesetzt]
Signature PIN ....: zwingend
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

Update OpenPGP-Applet

Nun sollte die aktuelle Version des OpenPGP-Plugins erzeugt und auf die Java-Smartcard des YubiKeys gespielt werden. Dabei werden alle zum entsprechenden Applet gehörenden Daten (PGP-Keys) gelöscht!

Selbst wenn der YubiKey über die aktuelle Version des Applets verfügen sollte, ist es sinnvoll, dieses neu zu erstellen. Denn ab Werk besitzen alle YubiKeys die Seriennummer 00000001, was durchaus Probleme verursachen kann. Im Folgenden wird hier die tatsächliche Seriennummer eingetragen.

Yubikey NEOs, welche nach dem 1. Juli 2014 produziert wurden (Seriennummer ab 3.000.000), ermöglichen kein Applet-Update mehr. Hier entspricht die Seriennummer im Applet dann aber wenigstens der aufgedruckten Seriennummer.

Zuerst wird das Java Card Development Kit bei Oracle heruntergeladen (java_card_kit-2_2_2-linux.zip) und installiert (alles folgende als normaler Benutzer):

$ mkdir -p ~/Develop/YubiKey/jckit
$ cd ~/Develop/YubiKey/jckit
$ unzip <Downloadpfad>/java_card_kit-2_2_2-linux.zip
$ cd java_card_kit-2_2_2
$ unzip java_card_kit-2_2_2-rr-bin-linux-do.zip

Anschließend wird die aktuelle Version des OpenPGP-Applets heruntergeladen (im Beispiel Version 1.0.10) und entpackt:

$ cd ~/Develop/YubiKey
$ wget https://github.com/Yubico/ykneo-openpgp/archive/1.0.10.zip
$ unzip 1.0.10.zip

In dem nun vorhandenen Verzeichnis "ykneo-openpgp-1.0.5" muß die Datei "build.xml" angepaßt werden. Diese enthält die Zeile:

<property name="APPLET_AID" value="0xd2:0x76:0x00:0x01:0x24:0x01:0x02:0x00:0x00:0x00:0x00:0x00:0x00:0x01:0x00:0x00"/>

Die beiden ersten markierten Bytes sind dabei die Herstellernummer, die folgenden 4 Bytes die Seriennummer. Diese müssen durch die korrekten Werte ersetzt werden. Yubico hat die Herstellernummer "06", die Seriennummer wird mit folgendem Befehl (bei eingestecktem YubiKey) ermittelt:

$ ykinfo -H
serial_hex: 1a8eb6

Entsprechend dieser beispielhaften Seriennummer wird obige Zeile der build.xml wie folgt geändert:

<property name="APPLET_AID" value="0xd2:0x76:0x00:0x01:0x24:0x01:0x02:0x00:0x00:0x06:0x00:0x1a:0x8e:0xb6:0x00:0x00"/>

Nun kann das Applet erstellt werden:

$ cd ykneo-openpgp-1.0.10
$ ant -DJAVACARD_HOME=${HOME}/Develop/YubiKey/jckit/java_card_kit-2_2_2

Das damit erzeugte Applet befindet sich nun in ~/Develop/YubiKey/ykneo-openpgp-1.0.10/applet/bin/openpgpcard/javacard und wird mittels folgenden Befehlen auf den YubiKey geladen:

$ gpshell gpinstall.txt

Kommt es hier zu Fehlern, könnte PCSCD nicht gestartet sein.

"establish_context failed with error 0x8010001D (Service not available.)"

Ggf. sind die Startskripte noch für OpenRC konfiguriert und das System läuft unter systemd. Die schnelle Lösung ist das manuelle Starten der notwendigen Skripte:

$ sudo systemctl start pcscd.service
$ sudo systemctl start pcscd.socket

Kontrolle per status:

$ systemctl status pcscd.service
$ systemctl status pcscd.socket

Anschließend wieder:

$ gpshell gpinstall.txt

Dabei wird sehr viel auf der Konsole ausgegeben. Wichtig ist, daß das Script in gpinstall.txt bis zum Ende abgearbeitet wird, was man daran erkennt, daß die letzte Ausgabe "release_context" lautet.

Zuletzt sollte der YubiKey nun noch getrennt und neu eingesteckt werden.

Initialisierung

Die weiteren Schritte entprechen nun denen der Initialisierung einer normalen OpenPGP-Karte. Die PINs sind per default wie folgt gesetzt:

  • PIN: 123456
  • Admin PIN: 12345678

 

Artikelaktionen