Ich muss jemanden bitten, geheime Daten mit meinem öffentlichen Schlüssel zu verschlüsseln, den ich dann mit meinem privaten Schlüssel entschlüsseln kann. Ich habe mit OpenSSL ein privates / öffentliches RSA-Schlüsselpaar erstellt, das ihnen den öffentlichen Schlüssel gegeben hat und alles funktioniert.
In jüngerer Zeit hat jemand darauf hingewiesen, dass wir einem möglichen Man-in-the-Middle-Angriff ausgesetzt sind wo die bösen Jungs meinen öffentlichen Schlüssel akzeptieren und ihren eigenen öffentlichen Schlüssel an die andere Seite weitergeben würden. Die andere Seite würde dann die geheimen Daten pflichtbewusst verschlüsseln, an das MITM weiterleiten, das sie entschlüsseln würde, sie mit meinem öffentlichen Schlüssel erneut verschlüsseln, bevor sie an mich weitergegeben werden, ohne dass ich der Klügere wäre. Die empfohlene Lösung besteht darin, meinen öffentlichen Schlüssel von einer Zertifizierungsstelle signieren zu lassen, der die andere Seite vertraut, bevor er übergeben wird.
Als Experiment habe ich eine CSR erstellt, die ich mit meiner eigenen Zertifizierungsstelle signieren konnte Das resultierende Zertifikat enthält auch den (verschlüsselten) privaten Schlüssel. Ich würde meinen geheimen Schlüssel lieber nicht verschlüsselt oder nicht an andere weitergeben.
Gibt es eine Möglichkeit, nur meinen öffentlichen Schlüssel signieren zu lassen?
Kommentare
- Zertifikat enthält privaten Schlüssel? Huh? Wie haben Sie das geschafft? Können Sie diese Datei auf pastebin.com veröffentlichen? (Wiederholen Sie es mit einem zweiten Schlüsselpaar, damit Sie das Original nicht ‚ teilen müssen.)
- Ich glaube, ich fange an zu verstehen. Obwohl ich den privaten Schlüssel benötige, um eine CSR zu erstellen, enthalten die CSR und das resultierende Zertifikat nicht den privaten Schlüssel. Ein Zertifikat ist praktisch ein signierter öffentlicher Schlüssel, genau das, was ich möchte.
Antwort
Signieren eines öffentlichen Schlüssels ist effektiv ein Zertifikat. Dies sind die Schritte, die ich unternehme, um ein öffentliches Schlüsselzertifikat zu erstellen, das ich an andere verteilen kann, damit diese sicher mit mir kommunizieren können:
Setup
- Generieren Sie die privaten Schlüssel:
openssl genrsa -out private.pem 2048
- Generieren Sie die öffentlichen Schlüssel:
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
- Erstellen Sie eine CSR (Certificate Signing Request)
openssl req -new -key private.pem -out certificate.csr
- Erstellen Sie ein selbstsigniertes Zertifikat (Sie können dieses Zertifikat freigeben)
openssl x509 -req -days 365 -in Zertifikat.csr -signkey private.pem -out Zertifikat.crt
Verschlüsselung
openssl rsautl -encrypt -inkey private.pem -keyform PEM -in data> encrypted_data
Entschlüsseln
- Extrahieren Sie den öffentlichen Schlüssel aus den Zertifikaten
openssl x509 -pubkey -noout -in certificate.crt> certpubkey.pem
- Entschlüsseln Sie die Daten
openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data> data
Wenn Sie beabsichtigen, Ihren Schlüssel von einer Zertifizierungsstelle signieren zu lassen, müssen Sie Ihre CSR-Datei (und etwas Bargeld) an die Zertifizierungsstelle Ihrer Wahl senden. Sie erhalten dann das Zertifikat, das Sie anstelle des selbstsignierten Zertifikats I verwenden können in den obigen Schritten erwähnt.
Kommentare
- Dies ist eine Art Umkehrung dessen, was ich frage, aber es wird zu Diskussionszwecken tun. Damit die andere Seite entschlüsseln kann, benötigen sie entweder den von mir extrahierten öffentlichen Schlüssel, der dem MITM-Angriff ausgesetzt ist, oder das gesamte Zertifikat, das den (verschlüsselten) privaten Schlüssel enthält.
- @ user1683793 The Das andere Ende benötigt zwei Zertifikate. Das erste, das sie bereits haben sollten (das selbstsignierte CA-Zertifikat). Der zweite enthält den öffentlichen Schlüssel, den Sie überprüfen möchten, und ist mit dem CA-Zertifikat signiert (unter Verwendung des zugehörigen privaten CA-Schlüssels). Die Gültigkeit des zweiten Zertifikats wird mithilfe des öffentlichen Schlüssels im CA-Zertifikat getestet. Private Schlüssel werden immer privat gehalten.
- Ich denke, Sie möchten “ -encrypt “ und “ -decrypt “ anstelle von “ -sign “ und “ -verify „. (Details hier: czeskis.com/random/openssl-encrypt-file.html )
- Funktioniert nicht: 2. Das Entschlüsseln der Daten hat bei mir nicht funktioniert. Mit:
openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data > data
erhalte ich diesen Fehler / msg:A private key is needed for this operation
- Abschnitt
Setup
, Schritt2
gibtpublic.pem
an – es wird ‚ nicht weiter verwendet Schritte. Was ist die Verwendung dieses öffentlichen Schlüssels, wenn der CSR mit einem privaten Schlüssel generiert wird?
Antwort
An dem Prozess sollten drei Entitäten beteiligt sein:
- Der Absender – Sie
- Der Empfänger – Der Benutzer
- Zertifizierungsstelle – Vertrauenswürdiger Dritter (oder in einigen Fällen Sie)
Der Prozess „Die Absender“ generiert ein Schlüsselpaar (öffentlich und privat). Ich bezeichne diese gerne als Schlüssel und Schloss für eine bessere visuelle Darstellung. Der Schlüssel (privat) sollte niemals den Besitz des Absenders verlassen. Deshalb wird er als privater Schlüssel bezeichnet.
Der Absender generiert dann eine Zertifikatsignierungsanforderung (Certificate Signing Request, CSR) mit dem öffentlichen Schlüssel (Sperre) ), die an die Zertifizierungsstelle (Trusted Third Party) weitergeleitet wird, signiert die Zertifizierungsstelle den öffentlichen Schlüssel (Sperre) mit dem privaten Schlüssel der Zertifizierungsstelle.
Die Zertifizierungsstelle sendet jetzt den öffentlichen Schlüssel „The Senders“ Dies wird vom privaten Schlüssel der Zertifizierungsstelle zurück zu „Der Absender“ signiert, der jetzt das Zertifikat ist.
Der Empfänger erhält das Zertifikat (z. B. über den Webbrowser) und überprüft, ob es gültig ist den öffentlichen Schlüssel der Zertifizierungsstellen, über den sowohl „The Sender“ als auch „The Receiver“ verfügen, da sie vertrauenswürdige Dritte sind. Nach der Überprüfung kann dem öffentlichen Schlüssel im Zertifikat * vertraut werden, dass er unverändert der öffentliche Schlüssel von „The Sender“ ist.
Wenn „The Receiver“ Daten an „The Sender“ senden muss, wird der verwendet öffentlicher Schlüssel aus dem vertrauenswürdigen Zertifikat zum Verschlüsseln der Daten in Cypertext, der dann an „The Sender“ weitergeleitet wird. Da nur der private Schlüssel von „The Sender“ den mit dem öffentlichen Schlüssel von „The Sender“ verschlüsselten Chiffretext entschlüsseln kann In der Mitte befindet sich im Wesentlichen nutzloser verstümmelter Text.
In bestimmten Fällen kann „Der Absender“ seine eigene Zertifizierungsstelle generieren, indem er seine eigene CSR mit einem anderen Schlüsselsatz signiert oder sich selbst mit demselben Satz von Signaturen signiert Schlüssel. In diesem Fall muss der öffentliche Schlüssel des Absenders beiden Parteien über einen sicheren Kanal bekannt sein, um Vertrauen zu haben. In der Software können Sie ein Zertifikat in das Lieferobjekt aufnehmen, das als vertrauenswürdiger Dritter verwendet werden kann.
* vertrauenswürdig ist nur gültig, wenn die Zertifizierungsstelle eine CRL (Certificate Revocation List) verwaltet und alle Parteien die Liste überwachen um sicherzustellen, dass das ausgestellte Zertifikat nicht kompromittiert wurde. Der Fall, in dem die Zertifizierungsstelle komprimiert ist und der private Schlüssel durchgesickert ist, liegt vor. In diesem Fall kann der kompromittierende Agent den privaten Schlüssel verwenden, um ein vertrauenswürdiges Zertifikat zu generieren, das „The Sender“ nachahmt. In diesem Fall ist ein MITM möglich und das MITM kann Daten von „The Sender“ empfangen, entschlüsseln, speichern, mit einem gültigen Zertifikat verschlüsseln, das wie „The Sender“ aussieht, und dieses dann an „The Receiver“ übergeben.
Antwort
Nehmen Sie den verschlüsselten privaten Schlüssel aus der Kopie des CA-Zertifikats, das Sie erstellt haben (wenn Sie es anderen geben). Der private Schlüssel tut dies Sie müssen nicht dort sein, es sei denn, Sie werden damit ein Zertifikat mit einem anderen Zertifikat unterschreiben er öffentlicher Schlüssel.
Wenn Sie über Ihren öffentlichen Schlüssel senden, senden Sie stattdessen ein gesamtes Zertifikat (mit Ausnahme des privaten Schlüssels), das mit dem zugehörigen privaten CA-Schlüssel signiert wurde. Um die Gültigkeit des darin enthaltenen öffentlichen Schlüssels zu überprüfen, müssen Sie den Hash des Zertifikats mit dem verschlüsselten Hash vergleichen (der mit dem privaten Schlüssel der Zertifizierungsstelle verschlüsselt wurde). Dieser wird mit dem öffentlichen Schlüssel der Zertifizierungsstelle entschlüsselt . Wenn die Entschlüsselung erfolgreich ist und der Hash mit dem Hash des Zertifikats übereinstimmt, kann den Informationen im Zertifikat vertraut werden.
Es steckt auch mehr dahinter als nur Verschlüsselung, beispielsweise ein Wiederholungsangriff, bei dem Ein Angreifer sendet zuvor gespeicherte verschlüsselte Daten. TLS deckt viel mehr ab, als der Durchschnittsmensch denkt, und die Implementierung eines ähnlichen Systems wird absolut nicht empfohlen. Verwenden Sie TLS nach Möglichkeit für alles, was privat sein soll.