Um die Unversehrtheit einer Nachricht/Datei zu überprüfen zu können, kann man
diese digital unterschreiben (signieren). Diese Signatur wird aus dem privaten
Schlüssel des Senders und der Nachricht selbst vom Sender erstellt. Der
Empfänger dieser Nachricht kann dann mit dem öffentlichen Schlüssel des Senders
die Unversehrtheit prüfen. Klassisch wird hier gnupg
oder ssl als Quelle der
Schlüssel verwendet, was aber nicht immer zur Verfügung steht. Alternativ ist
nun auch openssh in der Lage, die ssh-Schlüssel dafür zu verwenden. Dies ist
sehr vorteilhaft, denn ssh ist quasi überall in der Standardinstallation
vorhanden und der Schlüsselaustausch ist erprobt.
Als erstes benötigt man natürlich das Schlüsselmaterial. Dies lässt sich mit
ssh-keygen -t ed25519
leicht erzeugen, bzw. kann natürlich das für die
normale ssh
Nutzung vorhandene Material verwendet werden.
Die Dateien werden, wenn nicht anders angegeben, im Verzeichnis .ssh
des
Heimatverzeichnisses des Nutzers erstellt.
ls .ssh
id_ed25519
id_ed25519.pub
Für das Signieren wie auch später für das Überprüfen wird auch ssh-keygen
verwendet. Im folgenden Script ist die Verwendung beispielhaft dargelegt.
#!/bin/sh
if [ $# -ne 2 ]; then
echo "$0 privkey file"
exit 1
else
ssh-keygen -Y sign -f "$1" -n file "$2"
fi
Es werden zwei Parameter erwartet:
Hier ein Beispiel:
./sshsign ~/.ssh/id_ed25519 ~/eine_datei
Nach dem der Aufruf erfolgt ist, wird eine neue Datei mit der Endung .sig
und
dem ursprünglichen Dateipfad und Namen erzeugt. Im Fall des Beispiels also
~/eine_datei.sig
.
Diese beiden Dateien können nun dem Empfänger zur Verfügung gestellt werden und dieser kann die Echtheit mit unseren öffntlichen Schlüssel überprüfen.
Um die Signatur überprüfen zu können, ist noch etwas Vorbereitungsarbeit auf der
Empfängerseite notwendig, denn es muss eine Datei vorhanden sein, wo die
zulässigen Unterzeichner von Nachrichten mit ihren öffentlichen Schlüsseln
hinterlegt sind. Als Beispiel verwenden wir hier die Datei
~/.ssh/allowed_signers
. Der Aufbau ist einfach und auch in den man-Seiten von
ssh-keygen
mit Beispielen beschrieben.
cat ~/.ssh/allowed_signers
# ein Komentar
alice@local.local ssh-ed25519 AAAA...
Im Prinzip steht hier eine Zuordnung: Name öffentlicher Schlüssel. Mit dem folgenden Script kann nun die Echtheit überprüft werden.
#!/bin/sh
if [ $# -ne 2 ]; then
echo "$0 email content-file"
exit 1
else
ssh-keygen -Y verify -f ~/.ssh/allowed_signers -I "$1" -n file -s "$2.sig" < "$2"
fi
Auch hier sind zwei Parrameter nötig:
~/.ssh/allowed_signers
verwendet wird (Schlüsselzuordnung)Das Script erwartet auch die Datei mit der Signatur an dem Ort, wo die
eigentliche Datei zu finden ist, das sie den gleich Namen trägt und die Endung
.sig
hat.
Hier wieder ein Beispiel:
./sshverify alice@local.local ~/eine_datei
Je nach dem ob die Signatur gültig ist oder nicht, kommt nun die passende Nachricht.