Nitrokey Storage keytocard-command geht nicht. Factory-reset geht auch nicht

Hallo,

ich habe seit 2 Tagen mein Nitrokey Storage und wollte selbst erstellte gpg2 Schlüssel drauf machen. Leider funktioniert der keytocard Befehl nicht. Auch ein factory-reset der OpenPGP-Karte ist nicht möglich. (Das war das Letzte was ich ausprobiert hatte. Die Karte zurückzusetzen, aber die Daten werden nicht überschrieben!)
Nitrokey wird von der Nitrokey-App und von gpg2 --card-status erkannt. Spontan erkennt gpg2 die Karte nicht mehr, dann hilft nur noch den Nitrokey zu ziehen und wieder anzustecken. Ein Firmware-Update habe ich auch gemacht und dies lief ohne Probleme durch. (konnte weder davor, noch danach Schlüssel auf die Karte schieben oder welche auf der Karte erzeugen!) Der USB-Speicher wird erkannt. Ich habe alle Programme wie in der Anleitung installiert. Habe auch testweise bei Windows 10 mit gpg4win probiert die Karte zu beschreiben, aber da stürzt gpg4win einfach ab. Hat jemand eine Lösung?

Aktuelles Betriebsysstem ist Ubuntu 16.04 LTS mit allen Updates (Stand: 30.10.2016).
Die Schlüssel hatte ich einmal auf einer aktuellen Knoppix-Live-CD erstellt und wie in dem unten genannten Beispiel direkt in Ubuntu.
Firmware vom Nitrokey ist Version 0.43.
Nitrokey-App erkennt den Stick und behauptet dieser wäre fehlerfrei. (Nitrokey-App → Info)
Initialisierung wurde mit der Nitrokey-App unter Ubuntu 16.04 LTS durchgeführt.

Habe hier ein Beispiel was für eine Fehlermeldung kommt, nachdem ich testweise 1 Hauptschlüssel und einen Subkey erstellt habe (alles was ‘x’ enthält waren persönliche Daten, welche ich durch ‘x’ ersetzt habe. Die Application-ID habe ich auch gekürzt!)

[code]
#Application ID wurde von mir gekürzt! Alles was den Buchstaben “x” enthält wurde von mir anonymisiert!

xxxx@xxx-desktop:~$ gpg2 --expert --full-gen-key
gpg (GnuPG) 2.1.11; Copyright (C) 2016 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: enabled debug flags: memstat trust extprog
Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
(1) RSA und RSA (voreingestellt)
(2) DSA und Elgamal
(3) DSA (nur signieren/beglaubigen)
(4) RSA (nur signieren/beglaubigen)
(7) DSA (Leistungsfähigkeit selber einstellbar)
(8) RSA (Leistungsfähigkeit selber einstellbar)
(9) ECC und ECC
(10) ECC (nur signieren)
(11) ECC (Leistungsfähigkeit selber einstellbar)
Ihre Auswahl? 8

Mögliche Vorgänge eines RSA-Schlüssels: Signieren Zertif. Verschl. Authentisierung
Derzeit erlaubte Vorgänge: Signieren Zertif. Verschl.

(U) Umschalten der Signaturfähigkeit
(V) Umschalten der Verschlüsselungsfähigkeit
(A) Umschalten der Authentisierungsfähigkeit
(Q) Beenden

Ihre Auswahl? v

Mögliche Vorgänge eines RSA-Schlüssels: Signieren Zertif. Verschl. Authentisierung
Derzeit erlaubte Vorgänge: Signieren Zertif.

(U) Umschalten der Signaturfähigkeit
(V) Umschalten der Verschlüsselungsfähigkeit
(A) Umschalten der Authentisierungsfähigkeit
(Q) Beenden

Ihre Auswahl? u

Mögliche Vorgänge eines RSA-Schlüssels: Signieren Zertif. Verschl. Authentisierung
Derzeit erlaubte Vorgänge: Zertif.

(U) Umschalten der Signaturfähigkeit
(V) Umschalten der Verschlüsselungsfähigkeit
(A) Umschalten der Authentisierungsfähigkeit
(Q) Beenden

Ihre Auswahl? q
RSA-Schlüssel können zwischen 1024 und 4096 Bit lang sein.
Welche Schlüssellänge wünschen Sie? (2048)
Die verlangte Schlüssellänge beträgt 2048 Bit
Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
0 = Schlüssel verfällt nie
= Schlüssel verfällt nach n Tagen
w = Schlüssel verfällt nach n Wochen
m = Schlüssel verfällt nach n Monaten
y = Schlüssel verfällt nach n Jahren
Wie lange bleibt der Schlüssel gültig? (0) 1y
Key verfällt am Mo 30 Okt 2017 08:14:37 CET
Ist dies richtig? (j/N) j

GnuPG erstellt eine User-ID, um Ihren Schlüssel identifizierbar zu machen.

Ihr Name: xxxxx
Email-Adresse: xxxx@xxxxxx.de
Kommentar:
Sie haben diese User-ID gewählt:
“xxxxxx”

Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(A)bbrechen? f
Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies
unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas
tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.
gpg: DBG: insert ownertrust 6
gpg: Schlüssel xxxxx ist als ultimativ vertrauenswürdig gekennzeichnet
gpg: DBG: update ownertrust from 6 to 6
gpg: Widerrufzertifikat wurde als ‘xxxxxx.rev’ gespeichert.
Öffentlichen und geheimen Schlüssel erzeugt und signiert.

gpg: “Trust-DB” wird überprüft
gpg: marginals needed: 3 completes needed: 1 trust model: PGP
gpg: Tiefe: 0 gültig: 1 signiert: 0 Vertrauen: 0-, 0q, 0n, 0m, 0f, 1u
gpg: nächste “Trust-DB”-Pflichtüberprüfung am 2017-10-30
gpg: random usage: poolsize=600 mixed=6 polls=0/22 added=110/3872
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: secmem usage: 1344/65536 bytes in 2 blocks
pub rsa2048/xxxxxx 2016-10-30 ] [verfällt: 2017-10-30]
Schl.-Fingerabdruck = xxxxxxx
uid ultimativ] xxxxxx

bjoern@bjoern-desktop:~$ gpg2 --card-status
gpg: enabled debug flags: memstat trust extprog
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: secmem usage: 0/65536 bytes in 0 blocks
Reader …: 20A0:4109:0000000000000:0
Application ID …: D276000
Version …: 2.1
Manufacturer …: ZeitControl
Serial number …: 00003400
Name of cardholder: xxxx xxxxxx
Language prefs …: de
Sex …: männlich
URL of public key : [nicht gesetzt]
Login data …: b
Signature PIN …: zwingend
Key attributes …: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 0
Signature key …: [none]
Encryption key…: [none]
Authentication key: [none]
General key info…: [none]
bjoern@bjoern-desktop:~$ gpg2 --expert --edit-key 9308D7F4
gpg (GnuPG) 2.1.11; Copyright (C) 2016 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: enabled debug flags: memstat trust extprog
Geheimer Schlüssel ist vorhanden.

sec rsa2048/xxxx
erzeugt: 2016-10-30 verfällt: 2017-10-30 Aufruf: C
Vertrauen: ultimativ Gültigkeit: ultimativ
ultimativ] (1). xxxxx

gpg> toggle

sec rsa2048/xxxx
erzeugt: 2016-10-30 verfällt: 2017-10-30 Aufruf: C
Vertrauen: ultimativ Gültigkeit: ultimativ
ultimativ] (1). xxxxxxx

gpg> quit
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: secmem usage: 0/65536 bytes in 0 blocks
bjoern@bjoern-desktop:~$ gpg2 --expert --edit-key 9308D7F4
gpg (GnuPG) 2.1.11; Copyright (C) 2016 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: enabled debug flags: memstat trust extprog
Geheimer Schlüssel ist vorhanden.

sec rsa2048/xxxx
erzeugt: 2016-10-30 verfällt: 2017-10-30 Aufruf: C
Vertrauen: ultimativ Gültigkeit: ultimativ
ultimativ] (1). xxxxx

gpg> addkey
Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
(3) DSA (nur signieren/beglaubigen)
(4) RSA (nur signieren/beglaubigen)
(5) Elgamal (nur verschlüsseln)
(6) RSA (nur verschlüsseln)
(7) DSA (Leistungsfähigkeit selber einstellbar)
(8) RSA (Leistungsfähigkeit selber einstellbar)
(10) ECC (nur signieren)
(11) ECC (Leistungsfähigkeit selber einstellbar)
(12) ECC (nur verschlüsseln)
(13) Vorhandener Schlüssel
Ihre Auswahl? 8

Mögliche Vorgänge eines RSA-Schlüssels: Signieren Verschl. Authentisierung
Derzeit erlaubte Vorgänge: Signieren Verschl.

(U) Umschalten der Signaturfähigkeit
(V) Umschalten der Verschlüsselungsfähigkeit
(A) Umschalten der Authentisierungsfähigkeit
(Q) Beenden

Ihre Auswahl? q
RSA-Schlüssel können zwischen 1024 und 4096 Bit lang sein.
Welche Schlüssellänge wünschen Sie? (2048)
Die verlangte Schlüssellänge beträgt 2048 Bit
Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
0 = Schlüssel verfällt nie
= Schlüssel verfällt nach n Tagen
w = Schlüssel verfällt nach n Wochen
m = Schlüssel verfällt nach n Monaten
y = Schlüssel verfällt nach n Jahren
Wie lange bleibt der Schlüssel gültig? (0) 1y
Key verfällt am Mo 30 Okt 2017 08:17:12 CET
Ist dies richtig? (j/N) j
Wirklich erzeugen? (j/N) j
Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies
unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas
tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.

sec rsa2048/xxxxx
erzeugt: 2016-10-30 verfällt: 2017-10-30 Aufruf: C
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb rsa2048/xxxx
erzeugt: 2016-10-30 verfällt: 2017-10-30 Aufruf: SE
ultimativ] (1). xxxxxx

gpg> toggle

sec rsa2048/xxx
erzeugt: 2016-10-30 verfällt: 2017-10-30 Aufruf: C
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb rsa2048/xxxx
erzeugt: 2016-10-30 verfällt: 2017-10-30 Aufruf: SE
ultimativ] (1). xxxxxxx

gpg> key 1

sec rsa2048/xxxx
erzeugt: 2016-10-30 verfällt: 2017-10-30 Aufruf: C
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb* rsa2048/xxxx
erzeugt: 2016-10-30 verfällt: 2017-10-30 Aufruf: SE
ultimativ] (1). xxxxxxxx

gpg> keytocard
Wählen Sie den Speicherort für den Schlüssel:
(1) Signatur-Schlüssel
(2) Verschlüsselungs-Schlüssel
(3) Authentisierungs-Schlüssel
Ihre Auswahl? 2
gpg: Das KEYTOCARD Kommando schlug fehl: Eingabe-/Ausgabefehler

gpg> [/code]

Nach erfolglosem Factory-reset:

[code]xxxx@xxxxxx:~$ gpg2 --card-edit
gpg: enabled debug flags: memstat trust extprog

Reader …: 20A0:4109:0000000000000:0
Application ID …: D276000
Version …: 2.1
Manufacturer …: ZeitControl
Serial number …: 00003400
Name of cardholder: xxxx xxxxx
Language prefs …: de
Sex …: männlich
URL of public key : [nicht gesetzt]
Login data …: xxxxxx
Signature PIN …: zwingend
Key attributes …: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 0
Signature key …: [none]
Encryption key…: [none]
Authentication key: [none]
General key info…: [none]

gpg/card> admin
Admin-Befehle sind erlaubt

gpg/card> factory-reset
gpg: OpenPGP Karte Nr. D276000 erkannt

gpg: Hinweis: Dieses Kommando zerstörrt alle auf der Karte gespeicherten Schlüssel!

Fortsetzen? (j/N) j
Möchten Sie die Karte wirklich komplett löschen? (“yes” eingeben) j

gpg/card> list

Reader …: 20A0:4109:0000000000000:0
Application ID …: D276000
Version …: 2.1
Manufacturer …: ZeitControl
Serial number …: 00003400
Name of cardholder: xxxx xxxxx
Language prefs …: de
Sex …: männlich
URL of public key : [nicht gesetzt]
Login data …: xxxxx
Signature PIN …: zwingend
Key attributes …: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 0
Signature key …: [none]
Encryption key…: [none]
Authentication key: [none]
General key info…: [none]

gpg/card> [/code]

Nachtrag:

Hatte einen Fehler beim Factory-Reset gemacht. Hier der neue und richtige Auszug:

xxxx@xxxxxxx:~$ gpg2 --card-status
gpg: enabled debug flags: memstat trust extprog
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
              outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: secmem usage: 0/65536 bytes in 0 blocks
Reader ...........: 20A0:4109:0000000000000:0
Application ID ...: D276000
Version ..........: 2.1
Manufacturer .....: ZeitControl
Serial number ....: 00003400
Name of cardholder: xxxx xxxx
Language prefs ...: de
Sex ..............: männlich
URL of public key : [nicht gesetzt]
Login data .......: xxxxx
Signature PIN ....: zwingend
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]
bjoern@bjoern-desktop:~$ gpg2 --card-edit
gpg: enabled debug flags: memstat trust extprog

Reader ...........: 20A0:4109:0000000000000:0
Application ID ...: D276000
Version ..........: 2.1
Manufacturer .....: ZeitControl
Serial number ....: 00003400
Name of cardholder: xxxx xxxx
Language prefs ...: de
Sex ..............: männlich
URL of public key : [nicht gesetzt]
Login data .......: xxxxx
Signature PIN ....: zwingend
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

gpg/card> admin
Admin-Befehle sind erlaubt

gpg/card> factory-reset
gpg: OpenPGP Karte Nr. D276000 erkannt

gpg: Hinweis: Dieses Kommando zerstörrt alle auf der Karte gespeicherten Schlüssel!

Fortsetzen? (j/N) j
Möchten Sie die Karte wirklich komplett löschen? ("yes" eingeben) yes
sending card command SELECT AID failed: Prüfsummenfehler

gpg/card> 
gpg: signal Interrupt caught ... exiting			 #gpg2 habe ich mit STRG+C abgebrochen

xxxx@xxxx:~$ 

Hier noch der Auszuag von lsusb:

xxxxx@xxxx:~$ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 20a0:4109 Clay Logic 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 046a:0023 Cherry GmbH CyMotion Master Linux Keyboard G230
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 003: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse
Bus 008 Device 002: ID 0c4b:0400 Reiner SCT Kartensysteme GmbH cyberJack e-com(a)
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
xxxxx@xxxx:~$ 

[quote=“jao2016”]Nachtrag:

Hatte einen Fehler beim Factory-Reset gemacht. Hier der neue und richtige Auszug:


gpg/card> admin
Admin-Befehle sind erlaubt

gpg/card> factory-reset
gpg: OpenPGP Karte Nr. D276000 erkannt

gpg: Hinweis: Dieses Kommando zerstörrt alle auf der Karte gespeicherten Schlüssel!

Fortsetzen? (j/N) j
Möchten Sie die Karte wirklich komplett löschen? ("yes" eingeben) yes
sending card command SELECT AID failed: Prüfsummenfehler

gpg/card> 

[/quote]

Man kann den factory reset auch “per Hand” durchführen. Führ mal das Kommando

aus und in dessen Shell dann zweilenweise die Kommandos aus der Datei

nitrokey.com/sites/default/files/nitrokey-reset.txt

Führt auch das zu einer Fehlermeldung?

Möglicherweise ist die Hardware auf so skurrile Weise defekt, dass die Nitrokey-App das nicht erkennt.

Das Problem mit keytocard können wir reproduzieren und wir arbeiten an einer Lösung. Voraussichtlich wird es hierfür ein Firmware-Update geben.

Also resetten manuell hat geklappt. Mehr konnte ich nicht ausprobieren. Kann ja am Samstag damit noch probieren. Glaube aber nicht das es gehen wird. Wenn aber NitroKey den Fehler reproduzieren konnte, kann ich ja warten bis das Update kommt. Dann dürfte es ja wieder klappen.

Ich wollte mal fragen, wann das Firmware Update kommen kommt. ?

Aktuell ist der Stick relativ nutzlos.

Gibt es Alternativ einen workaround?

Der einzige mir bekannte Workaround heißt Windows. :wink: Wir sind am Thema dran, haben auch schon einige Vermutungen, sollte also nicht mehr lange dauern…

Was heißt den nicht mehr lange ?

Gibt es einen Zeitplan, wann ich endlich auf meinen Nitrokey Storage die GPG-Schlüssel importieren kann?
Windows hab ich nicht mehr (wäre auch kein “workaround” für mich) und eure letzte Meldung zur Fehlerbehebung ist auch schon über ein Monat alt? :unamused:

Wir haben jetzt Firmware 0.44 veröffentlicht, die dieses Problem behebt. Download: nitrokey.com/en/doc/firmware-update-storage

Technische Hintergründe des Problems sind hier erläutert:

Hallo,
im Howto heisst es:

Execute "dfu-programmer at32uc3a3256s launch"
es muß aber heissen:

dann klappt es. Doch dann …

… nach dem Firmware-Upgrade kommt bei Keytocard lange Zeit eine leuchtende rte LED und danach

[code]gpg> toggle

sec rsa4096/XXXXXX
erzeugt: 2015-09-19 verfällt: 2025-09-16 Aufruf: SC
Vertrauen: unbekannt Gültigkeit: unbekannt
ssb rsa4096/XXXXXX
erzeugt: 2015-09-19 verfällt: 2025-09-16 Aufruf: E
ssb rsa4096/XXXXXXXX
erzeugt: 2015-09-19 verfällt: 2025-09-16 Aufruf: S
ssb rsa4096/XXXXXXXX
erzeugt: 2015-09-19 verfällt: 2025-09-16 Aufruf: A
unbekannt] (1). XXXX
unbekannt] (2) XXXX
unbekannt] (3) XXXX
unbekannt] (4) XXXX
unbekannt] (5) XXXX

gpg> keytocard
Den Hauptschlüssel wirklich verschieben? (j/N) j
gpg: Schlüsseloperation nicht möglich: Nicht unterstützt
[/code]

“Addcardkey” klappt auch nicht … war schon jemand erfolgreich?

Fragt,
Niklas

Konfiguration: App:0.62/Firmware:0.44/Linxmint/gpg2

Probiere es bitte mal mit 2048 Bit. Da müsste es klappen.

Mit 4096 Bit gibt es in der Tat derzeit Probleme, aber auch mit anderer Hardware. Das hängt wohl mit GnuPG 2.1 zusammen und wir schauen uns das gerade genauer an. Mit GnuPG 2.0 sollte es klappen.

Hallo Jan,
der Versuch Gnupg von 2.1 auf 2.0 downzugraden ist zumindest unter Ubuntu schwierig, da dann u.A. Gnome durch die Abhängigkeiten beschädigt würde. Selbst mit einer älteren Live-CD (Ubuntu 14) und vorinstalliertem Gnupg 2.0 klappt es bei mir zumindest nicht, weil dann der natürlich zu modernen Nitrokey-App die Abhängigkeiten fehlen und die händisch nachzuinstallierenden pcscd gnupg-agent etc. ebenfalls nicht installierbar scheinen.

Ergo: Ich kann meinen Nitrokey Storage weiterhin nicht mit meinem (standarmäßigem) 4096-Key ausrüsten … gibt es irgendjemanden, der das schon geschafft hat?

Wann wird es eine Lösung geben?

Beste Grüße,
Niklas