[solved] gpg mit subkeys auf Yubikey: expiry date verlängern

Alles rund um sicherheitsrelevante Fragen und Probleme.
Antworten
Benutzeravatar
ingo2
Beiträge: 1124
Registriert: 06.12.2007 18:25:36
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Wo der gute Riesling wächst

[solved] gpg mit subkeys auf Yubikey: expiry date verlängern

Beitrag von ingo2 » 10.03.2020 18:55:42

Ich habe da eine Verständnisfrage:

Habe mir vor längerer Zeit einen gpg-master-key ohne Verfalldatum erzeugt, den ich offline verwahre.
Für den täglichen Gebrauch habe ich damit 3 Subkeys für Signieren, Ver/Entschlüsseln und Authentifizieren erstellt. Diese Subkeys nutze ich auf meinem PC (Passwort-gesichert) direkt. Auf dem Laptop habe ich die gleichen Subkeys zunächst kopiert, dann aber mit "keytocard" auf einen Yubikey übertragen. Da verbleibt von den Private-Subkeys nur noch ein Stub auf dem Laptop.

So, jetzt erreichen diese Subkeys in ½ Jahr ihr Verfalldatum und ich möchte das verlängern.
Habe dazu viel im Web recherchiert und es gibt offenbar 2 Möglichkeiten:
  • Ich generiere 3 kompett neu Subkeys mit allem drum und dran und befülle den Yubukey neu. Das ist ungeheuer mühsam mit gpg und keytocard
  • Ich verlängere einfach das Verfalldatum der 3 Subkeys z.B. mit Debianseahorse
Das Letztere sollte einfach möglich sein, da laut https://unix.stackexchange.com/question ... r-with-gpg ändert sich dabei an den Secret-Subkeys garnichts, sondern nur der Public-Key wird upgedatet und neu mit dem Master-Key signiert.

Da es für alles nur einen einzigen Public-Key gibt, brauch' ich nur den an den entsprechenden Stellen auszutauschen und der Yubikey bleibt unberührt und funktioniert weiter.
Seahorse ist da irgendwie irreführend, denn im UI ändert man augenscheinlich des Expiry-date der Secret-Subkeys - oder sehe ich das falsch?

Wie steht es dann mit Verschlüsselung?
kann ich mit dem "alten" Public Subkey nach wie vor verschüsseln solange der noch gültig ist, aber bei Bedarf auch den "neuen" Public Subkey verwenden (und natürlich wieder entschlüsseln)?

Ich nutze den Public Subkey auch zur Identifizierung beim SSH-Login - gilt dort das gleiche (alter und neuer Key gültig)?

Viele Grüße,
Ingo

EDIT:
Bleibt die Key-ID bei der beschriebenen Aktion gleich?
Zuletzt geändert von ingo2 am 16.03.2020 23:28:27, insgesamt 1-mal geändert.

Benutzeravatar
ingo2
Beiträge: 1124
Registriert: 06.12.2007 18:25:36
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Wo der gute Riesling wächst

Re: gpg mit subkeys auf Yubikey: expiry date verlängern

Beitrag von ingo2 » 12.03.2020 17:08:52

Wie es aussieht, ist die Sache doch nicht so einfach durch Verlängerung zu lösen.
Die "private subkeys" werden bei der Aktion wohl doch aktualisiert, nicht nur der "public key".
(Verstehe ich zwar nicht, welchen Sinn das hat, denn sie funktionieren auch nachher noch)

Ganz aktuell habe ich folgende Software:
https://github.com/ahuemmer/yubikey-gpg-expiry-extender
gefunden - so einen Aufwand treibt man nicht und man braucht auch nicht das Admin-Passwort für den Yubikey wenn die Sache so einfach wie von mir gedacht, ist.

Da warte ich noch ein bischen, bis dazu eine ordentliche Doku verfügbar ist und probiere das dann aus.
Falls das nichts wird, bleibt mir nur, die ganze Prozedur der Installation auf dem Yubikey zu wierderholen

- dann aber definitiv ohne expiry date!

Benutzeravatar
ingo2
Beiträge: 1124
Registriert: 06.12.2007 18:25:36
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Wo der gute Riesling wächst

Re: gpg mit subkeys auf Yubikey: expiry date verlängern

Beitrag von ingo2 » 16.03.2020 23:27:27

So, statt "warten" habe ich auf "probieren" gesetzt und als Erstes meine Idee im ersten Post ausprobiert:

Ein voller Erfolg - es war ganz simpel!

Hier für Interessierte meine Vorgehensweise in Kurzform:
Ich habe meinem kompletten gpg-Key in ein "debian-live-10.3.0-amd64-xfce.iso" Image (das ich vorher persistent gemacht habe, s. weiter unten) in das ~/gpg-bak/ Unterverzeichnis kopiert und dann in gpg importiert. Installiert hatte ich vorher Debianseahorse und dann die Newtzwerkverbindung getrennt.

Code: Alles auswählen

gpg --import /home/user/gpg-bak/master+subkeys.asc
gpg --import /home/user/gpg-bak/subkeys.asc
Mit Debianseahorse habe ich dann das Verfalldatum der 3 Subkeys geändert auf "0". Jeweils:
Eigenschaften -> Details -> Ablaufdatum -> "Läuft nie ab" -> Ändern

Dann die upgedateten Keys wieder exportiert:

Code: Alles auswählen

gpg -a --export-secret-keys [key-ID] > ~/gpg-bak/master+subkeys-new.asc
gpg -a --export-secret-subkeys [key-ID] > ~/gpg-bak/subkeys-new.asc
gpg -a --export [key-ID] > ~/gpg-bak/pubkey-new.asc
Die exportierten "new"-Keys auf den Laptop, an dem ich den Yubikey nutze, kopiert, aber nur subkeys-new.asc und pubkey-new.asc, den Master-Key gibts auf dem Laptop ja nicht (das ist ja der Sicherheitsgewinn). Dort sind nur die 3 Subkeys für sign, encrypt und authenticate und natürlich der pubkey vorhanden. Und wenn wie bereits die alten secret-subkeys auf dem Yubikey liegen, sind dort nur noch "Stubs" mit einem Link zum Yubikey vorhanden.

Dann habe ich einfach meine Idee umgesetzt und die neuen subkeys-new.asc und den pubkey-new.asc auf den Laptop kopiert und dort importiert:

Code: Alles auswählen

gpg --import [Pfad zu]/subkeys-new.asc
....
	gpg: Anzahl insgesamt bearbeiteter Schlüssel: 1
	gpg:                         neue Signaturen: 3
	gpg:              gelesene geheime Schlüssel: 1
	gpg:                 unveränderte geh. Schl.: 1
und

Code: Alles auswählen

gpg --import [Pfad zu]/pubkey-new.asc
	gpg: Anzahl insgesamt bearbeiteter Schlüssel: 1
	gpg:                             unverändert: 1
Dabei wird nichts auf den Yubikey geschrieben (muß natürlich dabei vorher eingesteckt sein) und die "Stubs" sind nachher wieder/noch vorhanden, haben auch die gleiche Dateigröße, aber unterschiedlichen Inhalt.

Getestet mit

Code: Alles auswählen

gpg --list-secret-key --with-subkey-fingerprint [key-ID]
Alles ok - das Verfalldatum ist verschwunden. Ver- und Entschlüsseln von Mail und Dateien kreuzweise alter <--> neuer Key geht einwandfrei. Key-Info in Debianenigmail und auch Debianseahorse sagt das Gleiche.
Sowohl die keygrips als auch der fingerprint und damit key-ID's haben sich nicht geändert.
Der einzige Unterschied auf dem Laptop ist der Inhalt der "Stub's" für die 3 Subkeys (das sind die 3 Dateien im Verzeichnis .gnupg/private-keys-v1.d/ mit dem Namen $keygrip.key)

Auch der SSH-Login auf meinem Serverlein mit dem neuen Key geht problemlos - also fertig!
Zusätzlich gecheckt/verglichen:

Code: Alles auswählen

cat .ssh/authorized_keys         (auf dem Server)
ssh-add -L        (auf dem Laptop mit eingestecktem Yubikey
liefert identischen Output - d.h. ein neue Übertragung des Pubkey's ist nicht erforderlich.

Fazit:
Es geht genau wie überlegt und bestätigt die Aussage im Arch-Wiki zu gpg:
There is no need to re-export your secret key or update your backups: the master secret key itself never expires, and the signature of the expiration date left on the public key and subkeys is all that is needed.
Wichtig zu erwähnen:
  • Das Ganze wurde unter Buster mit gnupg v2.2 gemacht , unter Stretch geht es wohl nicht so einfach.
  • Mein gpg-Key hatte für den Master-Key kein Verfalldatum, nur die 3 Subkeys wurden verlängert.
Schluß daraus:
Offenbar nur der Crypto-Teil des Schlüssels liegt auf dem Yubikey, die ganzen (alle?) Meta-Informationen stecken in den Stub's, die auf dem Rechner verbleiben.

Was ich nur gerne wissen würde: wie kann man so ein Verhalten erklären?
Das es geht, habe ich selbst gesehen, aber verstehen tu' ich das Ganze nicht wirklich :?:

Das persistente Live-Debian habe ich nach dieser Anleitung erstellt:
https://unix.stackexchange.com/question ... ersistence
Den Boot-Parameter des Images habe ich mit Debiansed geändert:

Code: Alles auswählen

LANG=C sed 's/splash quiet/persistence /;s/quiet splash/persistence /'  < debian-live-10.3.0-amd64-xfce.iso > debian-live-10.3.0-amd64-xfce-persistent.iso
Das 1 Leerzeichenhinter dem Wort "persistence" ist wichtig!

Die beschreibbare Partition für Persistenz im freien Bereich hinter dem Hybrid-Iso erstellt.
Achtung dabei: Debiangparted taugt nicht zum Anlegen der zusätzlichen Partition hinter dem Hybrid-Iso auf den USB-Stick - Debianfdisk im Terminal geht einwandfrei.

Fragen beantworte ich gern,
Ingo

Benutzeravatar
ingo2
Beiträge: 1124
Registriert: 06.12.2007 18:25:36
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Wo der gute Riesling wächst

Re: [solved] gpg mit subkeys auf Yubikey: expiry date verlängern

Beitrag von ingo2 » 31.12.2020 17:56:33

So, jetzt kann ich 100% bestätigen, dass meine Vorgehensweise und Annahmen korrekt waren:

Das ursprüngliche Ablaufdatum der GPG-Keys auf dem Yubikey war der 29.12.2020 - das ist jetzt vorbei.
Der Yubikey mit verlängertem Ablaufdatum funktioniert nach wie vor einwandfrei - sowohl "Ver- und Entschlüsseln" als auch "Authentifizieren" am SSH-Server!

Sieht aus, als ob auf dem Yubikey tatsächlich nur der pure Crypto-Key bestehend aus seinen 4096 Bit/Subkey gespeichert wird. Alle Metainformation wie z.B. das Expiry-date für den Auth-Key stecken offenbar in den verbliebenen Stubs im lokalen Verzeichnis ~/gnupg/ und natürlich im zugehörigen Public-Key.

Dies Wissen erspart also eine Menge an Arbeit (die Schlüssel wieder per key2card neu zu übertragen).

Einen guten Rutsch ins hoffentlich bessere 2021,
Ingo

Antworten