Wie importiere ich einen RSA-SSH-Schlüssel als _primären_ privaten Schlüssel in GPG?

16

Ich besitze derzeit einen SSH-Schlüssel, den ich bereits seit einiger Zeit verwende, und möchte GnuPG mit einem neuen Schlüsselbund verwenden. Da ich meinen Schlüssel jedoch schon seit Ewigkeiten verwende, möchte ich diesen Schlüssel in GPG weiterhin als Haupt- / Primärschlüssel verwenden. Ich habe versucht, den Schlüssel über diese Anweisungen zu importieren .

Aber am Ende habe ich einen "Unterschlüssel". Wenn ich versuche, es zu importieren, ohne einen Standard-GPG-Schlüssel zu erstellen, sieht GPG diesen Unterschlüssel nicht einmal. (Ich gehe davon aus, dass der Unterschlüssel zuerst vom Hauptschlüssel signiert werden muss.)

Wie verwende ich diesen Schlüssel als Hauptschlüssel in secring.gpg?

Brendan Byrd
quelle
In welchem ​​Sinne meinen Sie " _primärer_ privater Schlüssel "?
MadHatter unterstützt Monica

Antworten:

16

Die einfache Antwort lautet: Sie tun es nicht.

SSH-Schlüssel und GnuPG-Schlüssel (OpenPGP) sind völlig unterschiedlich, obwohl beide Protokolle RSA-Schlüsselpaare verwenden können.

Und außerdem, warum würdest du es tun wollen? Selbst wenn Sie dasselbe Schlüsselmaterial zur Erstellung Ihres PGP-Schlüssels verwenden würden, müssten Sie Ihren Schlüssel dennoch als PGP-Schlüssel verteilen. Wahrscheinlich haben Sie Ihren öffentlichen SSH-Schlüssel nicht an die Personen verteilt, mit denen Sie korrespondieren. Aus Sicht der Schlüsselverteilung besteht also kein Unterschied: Sie müssen einen öffentlichen Schlüssel von Ihnen erhalten. Und selbst wenn Sie Ihren öffentlichen SSH-Schlüssel an andere Personen verteilt haben, müssten diese einige zusätzliche Schritte unternehmen, um ihn in ihre OpenPGP-Implementierung zu importieren, was möglicherweise nicht einfach ist.

Wie Kasperd ganz zu Recht betonte, muss es nur einen Weg geben, eine Signatur (insbesondere) zu interpretieren. Wenn Sie für PGP und SSH denselben Schlüssel verwenden und jemand Sie dazu verleiten könnte, eine speziell gestaltete Nachricht (was bei bestimmten Signatursystemangriffen als möglich angesehen wird) in einer einzigen zu signieren, ist dies auch dann der Fall, wenn beide Systeme für sich genommen sicher sind Möglicherweise ist es möglich, eine solche Nachricht so zu gestalten, dass sie in einem der Systeme eine Bedeutung hat, in dem anderen jedoch eine andere. Das wäre an sich schon eine Schwachstelle. (Ausnutzbar? Wer weiß. Aber warum die Chance nutzen?)

Sowohl PGP- als auch SSH-Schlüsselpaare sind Langzeitschlüssel, mit denen vorübergehende (Nachrichten- und Sitzungs-) symmetrische Schlüssel gesichert und die Authentizität einer Gegenstelle überprüft werden. Dies macht den privaten PGP- oder SSH-Schlüssel zu einem viel höherwertigen Ziel für einen Angreifer als den entsprechenden symmetrischen Schlüssel. Wenn Sie für beide das gleiche Schlüsselmaterial verwenden und ein Angreifer dies feststellen kann, erhöht dies nur den Wert eines erfolgreichen Angriffs auf dieses Schlüsselpaar.

Ohne eines der beiden Protokolle im Detail betrachtet zu haben, stelle ich mir vor, dass es ziemlich trivial wäre, zu erkennen, dass in beiden das gleiche Schlüsselmaterial verwendet wird, da der öffentliche Schlüssel im Grunde genommen im Klaren übertragen wird.

Erstellen Sie einfach einen neuen PGP-Schlüssel. Wenn Sie möchten, dann machen Sie es RSA und von der gleichen Länge wie Ihr SSH-Schlüssel. (Kein vernünftiger Mensch wird es sich näher ansehen, als den Fingerabdruck zu überprüfen.) Verteilen Sie dann den öffentlichen Schlüssel als PGP-Schlüssel an die Personen, mit denen Sie korrespondieren möchten. Es wird für jeden viel einfacher und sehr wahrscheinlich sicherer sein, wenn eine kleine Menge Entropie aus dem zufälligen Entropiepool Ihres Systems entnommen wird, die ohnehin schnell wieder aufgefüllt werden sollte.


Wenn Sie mehrere Schlüssel in Ihrem geheimen Schlüsselbund haben und angeben möchten, welcher standardmäßig verwendet werden soll, verwenden Sie die Anweisungen default-keyund möglicherweise default-recipient{,-self}in Ihrer ~ / .gnupg / gnupg.conf.

ein CVn
quelle
1
Ich stimme dieser Antwort zu. Es gibt jedoch noch einen weiteren Grund, nicht dasselbe Schlüsselmaterial zu verwenden. Aus Sicherheitsgründen darf es nur einen Weg geben, eine Signatur zu interpretieren. Könnte dieselbe Signatur auf zwei verschiedene Arten interpretiert werden, wäre dies eine Sicherheitsanfälligkeit. Selbst wenn sowohl ssh als auch gpg für sich sicher sind, könnte ein Gegner Sie dazu verleiten, eine Nachricht mit einer zu signieren und dann die Signatur an das andere Programm weiterzuleiten, wo sie eine andere Bedeutung haben könnte.
Kasperd
@kasperd Guter Punkt. Ich habe die Antwort geändert. Wie fühlst du dich jetzt dabei?
ein Lebenslauf vom
Es klingt gut.
Kasperd
1
Ich denke, diese Antwort ist nicht ganz richtig: Mit monkeysphere gibt es einen Anwendungsfall, in dem Sie möglicherweise vorhandene OpenSSH-Schlüssel als reine Authentifizierungsunterschlüssel in Ihrem persönlichen OpenPGP-Schlüssel verwenden möchten. Zumindest würde ich es gerne so benutzen.
user134450
Diese Schlüssel unterscheiden sich überhaupt nicht. Ihre Metadaten sind.
foo
5

Mit dem Tool pem2openpgpaus dem monkeysphere-Projekt können Sie einen SSH-Key in einen OpenPGP-Key konvertieren . Dieser Schlüssel kann dann von gnupg als reguläres privates / öffentliches Schlüsselpaar importiert werden. Wie in der anderen Antwort erwähnt, ist dies in der Regel keine gute Idee, da ssh kein Zertifikatskonzept hat. Sie fügen einem vorhandenen Schlüssel also effektiv eine Funktion hinzu, die vorher nicht möglich gewesen wäre. Dies ist in der Kryptographie in der Regel ein No-Go.

Ich habe es trotzdem mit einem meiner SSH-Schlüssel gemacht, aber ich habe meinem anderen OpenPGP-Schlüssel das Schlüsselpaar als Unterschlüssel hinzugefügt, der nur ein Funktionsflag hat: Authentifizierung. Dieses Flag ist für Situationen wie diese gedacht, in denen Sie nichts mit einem Schlüsselpaar signieren oder verschlüsseln möchten (Bedeutung --encryptund --signOptionen für gnupg), es aber trotzdem in Ihrer Schlüsselbox zur Authentifizierung mit OpenSSH und dem gnupg-Agenten haben möchten.

Weitere Informationen finden Sie in der Dokumentation zu monkeysphere.

user134450
quelle
2

Es kann gute Gründe geben, einen regulären PKCS-Schlüssel für den Import in gpg zu konvertieren.

Zum Beispiel, wenn Sie es auf eine Smart Card legen möchten. Die Funktionen, die gpg mit seinen Befehlen für Karteninformationen und Kartenbearbeitung bietet, sind für diesen Zweck sehr hilfreich. Warum also nicht als Werkzeug verwenden? Die einzige Hürde, die zu überwinden ist, ist ... genau: der Import des Schlüssels aus dem Standard-PKCS # 8-Format (oder dem "rohen" RSA-PKCS # 1-Format) in den GPG-Schlüsselspeicher zur weiteren Verarbeitung.

Beachten Sie also meinen Einspruch gegen die genehmigte Antwort! :)

Eine tatsächlich hilfreiche Antwort auf diese Art von Frage finden Sie hier: /unix/276317/how-can-i-import-a-key-in-pem-format-not-openpgp-into -gpg

foo
quelle
1

Verwenden Sie dies unter Ubuntu 16.04 oder Windows WSL.

sudo apt install -y monkeysphere
cat key.pem | PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "Key <[email protected]>" > key.pgp

Karte importieren. Kann unter Windows oder Linux ausgeführt werden.

gpg --import key.gpg

Auf Karte verschieben

Suchen Sie die Kennung der Schlüsselsignatur.

gpg --list-key

Bewegen Sie den Authentifizierungsschlüssel auf die Karte

gpg --edit-key FFFFFFFFFFF
keytocard

Wählen Sie eine Nummer für den Authentifizierungsschlitz.

Du bist hier fertig.

Denken Sie daran, den Schlüssel aus dem gpg-Schlüsselbund zu löschen, wenn Sie eine Karte verwenden. Verwenden Sie die Schlüsselkennung von oben.

gpg --delete-secret-key FFFFFFFFFFF

Sonstiges

Nicht erforderlich, kann aber nützlich sein, um einen Schlüssel im textbasierten PGP-Format zu erhalten.

gpg -a --export FFFFFF > key.asc
Feuer
quelle