
Ich versuche, mit dem openssl
Befehlszeilentool einige Daten manuell zu extrahieren/verschlüsseln/entschlüsseln.
Ich habe RFC5246 durchgesehen, um herauszufinden, was ich tun muss. Mir ist nicht ganz klar, ob ich diesen Schritt mit diesem Tool durchführen kann. Ich gehe davon aus, dass der private Schlüssel in der Erklärung der private Schlüssel ist, der generiert wurde, als ich mein selbstsigniertes Zertifikat erstellt habe.
Wenn RSA für die Serverauthentifizierung und den Schlüsselaustausch verwendet wird, wird vom Client ein 48 Byte langes Pre_Master_Secret generiert, mit dem öffentlichen Schlüssel des Servers verschlüsselt und an den Server gesendet. Der Server entschlüsselt das Pre_Master_Secret mit seinem privaten Schlüssel. Beide Parteien konvertieren das Pre_Master_Secret dann wie oben angegeben in das Master_Secret.
Kann mir jemand sagen, ob meine Annahmen richtig sind? Kann das openssl
Befehlszeilentool verwendet und mit meinem privaten Serverschlüssel und dem verschlüsselten pre_master_secret vom Client versorgt werden, um den pre_master_key für den Server zu generieren, sodass dieser zum Erstellen des Hauptschlüssels verwendet werden kann?
Wenn ja, bin ich nicht sicher, wie das geht, da ich mit dem Tool nicht sehr vertraut bin.
Außerdem sollte ich darauf hinweisen, dass ich mit der Verschlüsselungssammlung TLS_RSA_WITH_AES_256_CBC_SHA arbeite. Außerdem kann ich in Wireshark sehen, dass das pre_master_secret vom Client 256 Byte lang ist.
Antwort1
Ich bin mir nicht ganz sicher, aber ich glaube, die Antwort ist nein. Der openssl
Befehlszeilen-Client ist eine heterogene Sammlung von Tools. Die X.509-Befehle können nützlich sein, um Zertifikate zu manipulieren, aber die Kryptografiebefehle sind selten für etwas anderes nützlich als zum Testen von OpenSSL selbst.
Wenn Sie kryptografische Berechnungen mit gängigen Algorithmen durchführen müssen, empfehle ich die interaktive Python-Befehlszeile mit demKryptodomBibliothek.
Zum Entschlüsseln von SSL-Verbindungen ist die Verwendung von Wireshark jedoch normalerweise am einfachsten.Sagen Sie Wireshark, wo der private Schlüssel zu finden istund es wird eine TLS-Verbindung entschlüsseln, die RSA-Verschlüsselung verwendet. Bei Verbindungen mit flüchtigem Diffie-Hellman können Sie den Datenverkehr nicht allein mit dem Schlüssel entschlüsseln, Sie benötigenzusätzliche Informationen entweder vom Client oder vom Server.
Beachten Sie, dass die Verwendung der TLS_RSA_WITH_AES_256_CBC_SHA
Cipher Suite aus mehreren Gründen keine gute Idee ist:
- Es gibt keineGeheimhaltung vorwärts, wenn also der private Schlüssel des Servers jemals kompromittiert wird, sind auch alle mit diesem Schlüssel hergestellten Verbindungen kompromittiert. Cipher Suites, die einen Diffie-Hellman-Schlüsselaustausch verwenden (mit EDH oder ECDHE im Namen), verfügen über Vorwärtsgeheimnis.
- Es verwendet RSA-Entschlüsselung, die Auffüllungen beinhaltet, eine klassische Quelle von Implementierungsfehlern und Lecks über Nebenkanäle. Cipher Suites mit EDH oder ECDHE in ihrem Namen zusätzlich zu RSA oder mit DSA oder ECDSA verwenden Signaturen anstelle von Entschlüsselung und leiden weniger wahrscheinlich unter Implementierungsfehlern.
- Es verwendet CBC-Entschlüsselung, die Auffüllung beinhaltet, was eine klassische Quelle von Implementierungsfehlern und Lecks über Nebenkanäle ist. Ciphersuites ohne CBC in ihrem Namen leiden weniger wahrscheinlich unter Implementierungsfehlern.
Antwort2
RSAES-PKCS1v1_5, das für den SSL/TLS-bis-1.2-Plain-RSA-Schlüsselaustausch verwendet wird, kann durch OpenSSL-Befehlszeilenoperationen entschlüsselt werden.rsautl
oderpkeyutl
(letzteres seit 1.1.0 im Jahr 2010). Siehe die entsprechenden Manpages, die auf Ihrem System verfügbar sein sollten, wenn es sich nicht um Windows handelt, oderonline.
Beachten Sie, dass Sie dadurch das Premaster-Geheimnis erhalten, das allein den Datenverkehr nicht entschlüsseln (oder authentifizieren) kann. Sie müssen das Premaster-Geheimnis plus Nonces verwenden, um das Master-Geheimnis abzuleiten, und dann das Master-Geheimnis plus Nonces, um die Arbeitsschlüssel (Plural) abzuleiten. Die Ableitungsfunktion „PRF“ unterscheidet sich zwischen SSLv3 (nicht mehr verwendet), TLS 1.0 und 1.1 (RFCs 2246 und 4346) und TLS 1.2 (RFC 5246). (PRF wird in TLS 1.3 in der vorliegenden Fassung wieder anders sein, aber das wird auch den einfachen RSA-Schlüsselaustausch vollständig eliminieren.)
Die Befehlszeile kann nicht direkt auf die SSL/TLS-PRFs zugreifen, aber auf die HMACs, aus denen sie erstellt werden (außer SSLv3); weitere Informationen finden Sie auf der Manpage an dgst
den gleichen Stellen wie oben. Beachten Sie, -hmac $key
dass nur Bytefolgen verarbeitet werden können, die von der Shell usw. übergeben werden können. Dies ist nicht alles, Sie benötigen daher möglicherweise -mac hmac -macopt hexkey:$hexkey
stattdessen.
Trotzdem stimme ich Gilles zu, dass es viel einfacher ist, dies Wireshark zu überlassen. Wenn Ihr Problem darin besteht, dass Sie die Daten in einer anderen Form als einer Capture-Datei haben, werden Wireshark-Distributionen mit mehreren zusätzlichen Befehlszeilentools zum Bearbeiten von Dateien geliefert, mit denen normalerweise eine gefälschte Capture erstellt werden kann, die in diesem Fall Wireshark oder Tshark Main dann entschlüsseln können.