Ich benutze SSH (OpenSSH 5.5p1 unter Linux, um genau zu sein). Ich habe einen Schlüssel, auf dem ich eine Passphrase habe. Ich benutze dies für die übliche Anmeldung an Computern Sachen.
Kann ich damit auch Dateien signieren?
Soweit ich weiß, ist ein SSH-Schlüssel ein RSA- (oder DSA-) Schlüssel und wird während des SSH-Anmeldevorgangs zum Signieren von Nachrichten verwendet, die an den Server gesendet werden. Im Prinzip und in der Praxis kann es also verwendet werden, um Dinge zu signieren - in der Tat ist dies der einzige Zweck.
Aber soweit ich sehen kann, gibt es keine Möglichkeit, mit dem Schlüssel eine beliebige Datei zu signieren (wie Sie es beispielsweise mit PGP tun würden). Gibt es eine Möglichkeit, dies zu tun?
ssh
digital-signature
Tom Anderson
quelle
quelle
Antworten:
Möglicherweise gibt es keine Möglichkeit, dies nur mit den OpenSSH-Tools zu tun.
Mit den OpenSSL-Tools ist dies jedoch recht einfach möglich. Tatsächlich gibt es mindestens zwei Möglichkeiten, dies zu tun. In den folgenden Beispielen
~/.ssh/id_rsa
ist dies Ihr privater Schlüssel.Eine Möglichkeit ist die Verwendung von dgst :
Der andere benutzt pkeyutl :
Beide schreiben eine binäre Signatur in die Standardausgabe. Wenn dgst eine
-hex
Option wählt, wird eine Textdarstellung mit einigen Details zur Form der Signatur gedruckt. pkeyutl verwendet eine-hexdump
Option, die etwas weniger nützlich ist. Beide akzeptieren sowohl RSA- als auch DSA-Schlüssel. Ich habe keine Ahnung, welches Format die Ausgabe hat. Die beiden Befehle erzeugen unterschiedliche Formate. Ich habe den Eindruck, dass pkeyutl als moderner gilt als dgst .So überprüfen Sie diese Signaturen:
und:
Das Problem ist hier
$PUBLIC_KEY_FILE
. OpenSSL kann das öffentliche Schlüsselformat von OpenSSH nicht lesen, Sie können es also nicht einfach verwendenid_rsa.pub
. Sie haben ein paar Möglichkeiten, keine ideal.Wenn Sie eine OpenSSH-Version von 5.6 oder höher haben, können Sie dies anscheinend tun:
Damit wird der öffentliche Schlüssel in die Standardausgabe im PEM-Format geschrieben, die OpenSSL lesen kann.
Wenn Sie den privaten Schlüssel haben und es sich um einen RSA-Schlüssel handelt, können Sie den öffentlichen Schlüssel daraus extrahieren (ich gehe davon aus, dass die PEM-codierte private Schlüsseldatei eine Kopie des öffentlichen Schlüssels enthält, da es nicht möglich ist, den öffentlichen Schlüssel abzuleiten vom privaten Schlüssel selbst), und verwenden Sie Folgendes:
Ich weiß nicht, ob es ein DSA-Äquivalent gibt. Beachten Sie, dass dieser Ansatz eine gewisse Zusammenarbeit des Besitzers des privaten Schlüssels erfordert, der den öffentlichen Schlüssel extrahieren und an den potenziellen Prüfer senden muss.
Zuletzt können Sie ein Python-Programm verwenden, das von einem Jungen namens Lars geschrieben wurde , um den öffentlichen Schlüssel von OpenSSH in das OpenSSL-Format zu konvertieren.
quelle
@Toms Antwort hat mir den Einstieg erleichtert, hat aber nicht sofort funktioniert.
Diese Befehle funktionieren mit:
Pkeyutl verwenden
Mit dgst
Die pkeyutl-Version kann nur kleine Dateien signieren. Dgst kann zwar beliebig große Dateien signieren, da es einen Digest benötigt, bevor das Ergebnis signiert wird.
quelle
So überprüfen Sie diese Signaturen - einfachere Lösung:
Eine einfachere Möglichkeit, sicherzustellen, dass ein signiertes Dokument identisch ist, besteht darin, die digitale Signaturdatei erneut zu generieren und anschließend mithilfe von diff zu überprüfen, ob die beiden Signaturdateien identisch sind.
quelle