Intelligente Lösungen
in neuer Dimension

SSH: Dateien signieren

Bald wird Git-2.34 veröffentlicht und eine der anstehenden Erweiterungen scheint die Möglichkeit zum Signieren von Git-Changes mittels SSH-Key zu sein. Grund genug zu schauen, ob wir nicht auch “normale” Dateien mit SSH-Key signieren können.

TLDR:

  • Signieren: ssh-keygen -Y sign -n file -f (privater-schluessel) (dateiname) –> erzeugt ‘(dateiname).sig’
  • Prüfen: echo "(name) (oeffentlicher-schluessel)" >/tmp/allowed-signers-file && ssh-keygen -Y verify -n file -f /tmp/allowed-signers-file -I "(name)" -s "(dateiname).sig" <"(dateiname)" –> Ausgabe: ‘Good “file” signature for uli with ED25519-SK key SHA256:PrEG0QR36EEttU+oZGFmMrwS95UUqQEq51D/XLad7aQ’

Signieren

Ich teste das Signieren mit einem SSH-Key, der

  • an einen SoloKey gebunden ist (= der SSH-Key funktioniert nicht ohne den SoloKey)
  • bei der Verwendung das Drücken des Knopfes am SoloKey erfordert (= ohne manuelle Interaktion des Nutzers ist kein Signieren möglich)

Signaturen dieser Art kann nur jemand erzeugen, der

  • meinen privaten SSH-Schlüssel zur Verfügung hat
  • UND dessen Passphrase kennt
  • UND meinen SoloKey zur Verfügung hat
  • UND den Knopf des SoloKeys drücken kann

Ich möchte die Datei “ventoy-1.0.60-linux.tar.gz” signieren. Dazu brauche ich:

  • Die Datei selbst: ventoy-1.0.60-linux.tar.gz
  • Meinen privaten SSH-Schlüssel: ~/.ssh/mein-ssh-key-mit-solokey
  • Meinen SoloKey, eingesteckt am Rechner und “greifbar”

Das Signieren geht dann so:

1
2
3
$ ssh-keygen -Y sign -n file -f ~/.ssh/mein-ssh-key-mit-solokey ventoy-1.0.60-linux.tar.gz
Signing file ventoy-1.0.60-linux.tar.gz
Write signature to ventoy-1.0.60-linux.tar.gz.sig

Prüfen

Das Prüfen einer Signatur geht einfacher. Ich benötige:

  • Den öffentlichen Teil des SSH-Schlüssels, der zum Signieren verwendet wurde: ~/.ssh/mein-ssh-key-mit-solokey.pub
  • Die Signaturdatei: ventoy-1.0.60-linux.tar.gz.sig
  • Die signierte Datei: ventoy-1.0.60-linux.tar.gz

Der SoloKey wird nicht benötigt!

Das Prüfen geht dann so:

1
2
3
4
5
6
$ echo "uli $(cat "~/.ssh/mein-ssh-key-mit-solokey.pub")" >"/tmp/allowed-signers.$$"
$ ssh-keygen -Y verify - file -f "/tmp/allowed-signers.$$" -I "uli" -s "ventoy-1.0.60-linux.tar.gz.sig" <"ventoy-1.0.60-linux.tar.gz"
Good "file" signature for uli with ED25519-SK key SHA256:PrEG0QR36EEttU+oZGFmMrwS95UUqQEq51D/XLad7aQ
$ echo $?
0
$ rm -f "/tmp/allowed-signers.$$"

Bei einer fehlerhaften Signatur sieht es so aus:

1
2
3
4
5
6
...
$ ssh-keygen -Y verify - file -f "/tmp/allowed-signers.$$" -I "uli" -s "ventoy-1.0.60-linux.tar.gz.sig" <"ventoy-1.0.60-linux.tar.gz"
Signature verification failed: incorrect signature
Could not verify signature.
$ echo  $?
255

Links

Änderungen

  • 2021-11-09 – Erste Version