Ich verstehe das nicht wirklich:
Laut: http://www.madboa.com/geek/openssl/#key-rsa können Sie einen öffentlichen Schlüssel aus einem privaten Schlüssel generieren.
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
Mein erster Gedanke war, dass sie zusammen zu zweit erzeugt werden. Enthält der private RSA-Schlüssel die Summe? oder der öffentliche Schlüssel?
Antworten:
wird tatsächlich ein öffentlich-privates Schlüsselpaar erzeugen. Das Paar wird in der generierten
mykey.pem
Datei gespeichert.extrahiert den öffentlichen Schlüssel und druckt ihn aus. Hier ist ein Link zu einer Seite, die dies besser beschreibt.
BEARBEITEN: Überprüfen Sie den Beispielabschnitt hier . So geben Sie einfach den öffentlichen Teil eines privaten Schlüssels aus:
Verwenden Sie ssh-keygen, um einen für SSH-Zwecke verwendbaren öffentlichen Schlüssel zu erhalten :
quelle
e
undd
in der allgemeinen Literatur). Weder ist mathematisch privat noch öffentlich, das sind Labels, die bei der Erstellung willkürlich zugewiesen werden. Sie könnten genauso gut umgekehrt zugeordnet werden. Das Generieren eines aus dem anderen ist ein gleichwertiges Problem. Das.pem
Format enthält eine ganze Reihe von Informationen, einschließlich beider Exponenten und damit beider Schlüssel, oder?openssl genrsa
Befehl erstellte private RSA-Schlüsseldatei eingebettet . Eine separate Datei mit öffentlichem Schlüssel wird jedoch nicht im selben Schritt erstellt. Um den öffentlichen Schlüssel aus der privaten Schlüsseldatei in eine separate öffentliche Schlüsseldatei zu extrahieren, verwenden Sie Ihrenopenssl rsa -in private.pem -pubout -out public.pem
Befehl. Wenn Sie auf diese Weise einen öffentlichen Schlüssel erstellen, wird dieser aus der privaten Schlüsseldatei extrahiert und nicht berechnet. Siehe meine Antwort unten für weitere Details.Leute, die nach einem öffentlichen SSH-Schlüssel suchen ...
Wenn Sie den öffentlichen Schlüssel für die Verwendung mit OpenSSH extrahieren möchten, müssen Sie den öffentlichen Schlüssel etwas anders abrufen
Dieses öffentliche Schlüsselformat ist mit OpenSSH kompatibel. Fügen Sie den öffentlichen Schlüssel an
remote:~/.ssh/authorized_keys
und Sie können loslegenDokumente von
SSH-KEYGEN(1)
quelle
openssl rsa -in key.pem -pubout -out pubkey.pem
wurde nicht akzeptiert, da die Ausgabe offensichtlich ein öffentlicher Schlüssel im PEM-Format ist. Daher wurde folgende Fehlermeldung angezeigt: "Schlüssel ist ungültig. Er muss mit 'ssh-rsa' oder 'ssh-dss' beginnen. Überprüfen Sie, ob Sie die öffentliche Hälfte des Schlüssels kopieren." Allerdingsssh-keygen -y [-f input_keyfile]
erzeugt das richtige Format , dass Github nimmt.In den meisten Programmen, die private RSA-Schlüssel generieren, einschließlich openssls, wird der private Schlüssel als PKCS # 1 RSAPrivatekey- Objekt oder als eine Variante davon dargestellt:
Wie Sie sehen können, enthält dieses Format eine Reihe von Feldern, einschließlich des Moduls und des öffentlichen Exponenten, und ist daher eine strikte Obermenge der Informationen in einem öffentlichen RSA-Schlüssel .
quelle
Meine Antwort unten ist etwas lang, aber hoffentlich enthält sie einige Details, die in früheren Antworten fehlen. Ich werde mit einigen verwandten Aussagen beginnen und schließlich die erste Frage beantworten.
Um etwas mit dem RSA-Algorithmus zu verschlüsseln, benötigen Sie ein Exponentenpaar aus Modul und Verschlüsselung (öffentlich) (n, e). Das ist dein öffentlicher Schlüssel. Um etwas mit dem RSA-Algorithmus zu entschlüsseln, benötigen Sie ein Exponentenpaar aus Modul und Entschlüsselung (privat) (n, d). Das ist dein privater Schlüssel.
Um etwas mit dem öffentlichen RSA-Schlüssel zu verschlüsseln, behandeln Sie Ihren Klartext als Zahl und erhöhen ihn auf die Potenz des Moduls n:
Um etwas mit dem privaten RSA-Schlüssel zu entschlüsseln, behandeln Sie Ihren Chiffretext als Zahl und erhöhen ihn auf die Potenz des Moduls d:
Um einen privaten (d, n) Schlüssel mit openssl zu generieren, können Sie den folgenden Befehl verwenden:
Um einen öffentlichen (e, n) Schlüssel aus dem privaten Schlüssel mit openssl zu generieren, können Sie den folgenden Befehl verwenden:
Führen Sie die folgenden Schritte aus, um den Inhalt des privaten RSA-Schlüssels private.pem zu zerlegen, der mit dem obigen Befehl openssl generiert wurde (Ausgabe hier auf Beschriftungen abgeschnitten):
Sollte der private Schlüssel nicht nur aus (n, d) Paaren bestehen? Warum gibt es 6 zusätzliche Komponenten? Es enthält e (öffentlicher Exponent), sodass der öffentliche RSA-Schlüssel aus dem privaten RSA-Schlüssel private.pem generiert / extrahiert / abgeleitet werden kann. Die restlichen 5 Komponenten beschleunigen den Entschlüsselungsprozess. Es stellt sich heraus, dass durch Vorberechnung und Speicherung dieser 5 Werte die RSA-Entschlüsselung um den Faktor 4 beschleunigt werden kann. Die Entschlüsselung funktioniert ohne diese 5 Komponenten, kann jedoch schneller durchgeführt werden, wenn Sie sie zur Hand haben. Der Beschleunigungsalgorithmus basiert auf dem chinesischen Restsatz .
Ja, der private RSA-Schlüssel private.pem enthält tatsächlich alle diese 8 Werte. Keiner von ihnen wird im laufenden Betrieb generiert, wenn Sie den vorherigen Befehl ausführen. Führen Sie die folgenden Befehle aus und vergleichen Sie die Ausgabe:
Diese Struktur des privaten RSA-Schlüssels wird von PKCS # 1 v1.5 als alternative ( zweite ) Darstellung empfohlen . Der PKCS # 1 v2.0- Standard schließt e- und d-Exponenten insgesamt von der alternativen Darstellung aus. PKCS # 1 v2.1 und v2.2 schlagen weitere Änderungen an der alternativen Darstellung vor, indem optional mehr CRT-bezogene Komponenten einbezogen werden.
Führen Sie die folgenden Schritte aus, um den Inhalt des öffentlichen RSA-Schlüssels public.pem anzuzeigen (Ausgabe hier auf Beschriftungen gekürzt):
Keine Überraschungen hier. Es ist nur (n, e) Paar, wie versprochen.
Beantworten Sie nun endlich die erste Frage: Wie oben gezeigt, enthält der mit openssl generierte private RSA-Schlüssel Komponenten sowohl öffentlicher als auch privater Schlüssel und einige weitere. Wenn Sie einen öffentlichen Schlüssel aus dem privaten Schlüssel generieren / extrahieren / ableiten, kopiert openssl zwei dieser Komponenten (e, n) in eine separate Datei, die zu Ihrem öffentlichen Schlüssel wird.
quelle
e
immer 65537 ist0x010001
. Es ist wahrscheinlich ein Defacto für die Auswahl des öffentlichen Exponenten, und dies ist wahrscheinlich der Grund in der Manpage, und fast jeder Ortgenrsa
wird als erklärtto generate the private key
. Die öffentliche ist irgendwie offensichtlich.Der öffentliche Schlüssel wird nicht in der PEM-Datei gespeichert, wie manche Leute denken. Die folgende DER-Struktur ist in der privaten Schlüsseldatei vorhanden:
So gibt es genügend Daten den öffentlichen Schlüssel (Modul und öffentliche Exponenten) zu berechnen, das ist , was
openssl rsa -in mykey.pem -pubout
tutquelle
Hier in diesem Code erstellen wir zuerst einen privaten RSA-Schlüssel, der jedoch auch ein Paar seines öffentlichen Schlüssels enthält. Um Ihren tatsächlichen öffentlichen Schlüssel zu erhalten, tun wir dies einfach
hoffen , dass Sie es für weitere Informationen erhalten Check dieses
quelle
Zunächst eine kurze Zusammenfassung der RSA-Schlüsselgenerierung.
Der öffentliche Schlüssel besteht aus dem Modul und dem öffentlichen Exponenten.
Ein minimaler privater Schlüssel würde aus dem Modul und dem privaten Exponenten bestehen. Es gibt keinen rechnerisch realisierbaren todsicheren Weg, um von einem bekannten Modul und privaten Exponenten zum entsprechenden öffentlichen Exponenten zu gelangen.
Jedoch:
In den meisten praktischen RSA-Implementierungen können Sie den öffentlichen Schlüssel vom privaten Schlüssel abrufen. Es wäre möglich, ein RSA-basiertes Kryptosystem aufzubauen, in dem dies nicht möglich war, aber es ist nicht das Richtige.
quelle
quelle