Entschlüsseln Sie den SSL-Verkehr mit dem Befehlszeilenprogramm openssl - Fortsetzung

526
David B

Ich habe eine Antwort auf meine ursprüngliche Frage hier hoffentlich es in Ordnung ist durch die Veröffentlichung eine andere Frage eine Follow - up - Frage zu stellen. Von meiner ursprünglichen Frage oben konnte ich den Client vor geheimen Master / Schlüssel mit meinem privaten Schlüssel entschlüsseln, wie es mir erklärt wurde unter Verwendung von

OpenSSL rsautl -in cpre.key -inkey key.pem -decrypt -out spre.key

Dieser hübschen scheint direkt und es wurde eine 48-Byte-Datei erstellt. Mir ist klar, dass ich nicht den https-Verkehr entschlüsseln oder verschlüsseln werde, an dem ich gerade arbeite, und zwar in kleinen Schritten. Der nächste Schritt aus meiner Lektüre besteht darin, das Hauptgeheimnis / den Schlüssel zu generieren, und aus der Antwort in meinem vorherigen Beitrag scheint es mir möglich zu sein, dies auch mit openssl zu tun, was ich hier ein wenig zu tun habe. Ich habe mir eine Variation von openssl dgst ausgedacht

echo -n 'value' | openssl dgst -sha256 -mac hmac -macopt hexkey: $ (hexkey) Der

Wert ist "master secret" + client.random + server.random und hexkey ist mein entschlüsseltes Pre-Master-Geheimnis aus dem vorherigen Schritt. Mache ich diesen Schritt richtig? Aus der Art, wie ich den RFC verstehe, produziert er seit diesem ersten Mal 32 Bytes, und der RFC erklärt, dass er 48 Bytes sein wird. Die Art und Weise, wie ich den RFC interpretiere, ist, dass ich dieses Ergebnis nehmen und erneut durchgeben muss, wodurch weitere 32 Bytes generiert werden, von denen ich die ersten 16 nehme und diese am Ende der ersten 32 zusammenfasse, um meine 48 Bytes für den Meistergeheimnis / Schlüssel. Bin ich bei diesem nächsten Schritt vollständig ausgeschaltet, nachdem ich entschlüsselt habe und den serverseitigen Vor-Master-Schlüssel hat? Vielen Dank David B

1

1 Antwort auf die Frage

0
dave_thompson_085

Vorab hoffe ich, dass Sie nicht getan haben, was Sie gezeigt haben. Mit Ausnahme der Bezeichnungen sind alle Daten, die bei der TLS-Schlüsselableitung verwendet werden, Binärdaten, die einem Shell- echoBefehl oder einem anderen Befehl nicht genau als Argument angegeben werden können, außer möglicherweise die integrierte Version von, zshwenn Sie das Deaktivieren von Escape-Anweisungen deaktivieren, und sicherlich nicht "eingegeben" werden. (auch geschnitten & eingefügt) in einem wörtlichen Argument mit einfachen Anführungszeichen.

Wenn Sie die Daten tatsächlich in Dateien gespeichert haben, können diese verwendet werden. Binärdaten können aus Dateien gelesen und in diese geschrieben werden - zumindest auf den Plattformen, die OpenSSL unterstützt. Wenn Sie keine Dateien haben (aber Pipes), können Sie dies umgehen, indem Sie die Daten im Hex-Format übergeben. Abgesehen davon benötigen Sie -macopt hexkey:bereits ein Hex-Skript, entweder mit einem Programm wie xxd -roder printfmit dem Hex-Code, der in Escape-Formaten oder echomit gebildet wird das Hex in nicht-tragbare Fluchten oder Hacks wie GNU sed s///eoder ein allgemeineres Programm awkoder perlzur Umwandlung des Hex in Binär für Eingabe openssl. Und wenn nötig, ähnliche Hacks, um den Binärausgang in Hex umzuwandeln, können aber dgst -mac hmacauch in Hex ausgegeben werden, solange Sie den blahblah=(sp)von vorne entfernen .

Wenn Sie die erste HMAC-Ausgabe wieder selbst ausführen, erhalten Sie nur die A-Blöcke, die Sie dann durch eine andere Ebene von HMACs führen, um die tatsächliche Ausgabe 'P_hash' zu erhalten. Siehe https://crypto.stackexchange.com/questions/46549/tls-1-2-prf-with-hmac-sha256, wobei es sich um dieselbe Frage handelt, die einen Testvektor verwendet, der unter https://www.ietf.org/ veröffentlicht wird. mail-archive / web / tls / current / msg03416.html außer ich habe in Java geantwortet. Hier ist das OpenSSL-Kommandozeilenäquivalent:

$ echo $key; echo $lbsd # start from hex 9bbe436ba940f017b17652849a71db35 74657374206c6162656c a0ba9f936cda311827a6f796ffd5198c $ echo $lbsd | xxd -r -p >a0 $ openssl dgst -sha256 -mac hmac -macopt hexkey:$key <a0 -binary >a1 $ openssl dgst -sha256 -mac hmac -macopt hexkey:$key <a1 -binary >a2 $ openssl dgst -sha256 -mac hmac -macopt hexkey:$key <a2 -binary >a3 $ openssl dgst -sha256 -mac hmac -macopt hexkey:$key <a3 -binary >a4 $ cat a1 a0 | openssl dgst -sha256 -mac hmac -macopt hexkey:$key -binary >k1 $ cat a2 a0 | openssl dgst -sha256 -mac hmac -macopt hexkey:$key -binary >k2 $ cat a3 a0 | openssl dgst -sha256 -mac hmac -macopt hexkey:$key -binary >k3 $ cat a4 a0 | openssl dgst -sha256 -mac hmac -macopt hexkey:$key -binary >k4 $ cat k1 k2 k3 k4 | head -c100 | xxd 0000000: e3f2 29ba 727b e17b 8d12 2620 557c d453 ..).r{.{..& U|.S 0000010: c2aa b21d 07c3 d495 329b 52d4 e61e db5a ........2.R....Z 0000020: 6b30 1791 e90d 35c9 c9a4 6b4e 14ba f9af k0....5...kN.... 0000030: 0fa0 22f7 077d ef17 abfd 3797 c056 4bab .."..}....7..VK. 0000040: 4fbc 9166 6e9d ef9b 97fc e34f 7967 89ba O..fn......Oyg.. 0000050: a480 82d1 22ee 42c5 a72e 5a51 10ff f701 ....".B...ZQ.... 0000060: 8734 7b66 .4' | sed 's/\,/\n/g' \  | xargs -i sss_override user-add {} -g $(getent group AD-group-name \  | awk -F':' '') 

Für uns als Workaround für das NFS 16-Gruppenlimit hervorragend geeignet.

Mein Fehler ist, dass mein MUPMS-Programm den Handshake-Verkehr handhabt, die Daten erfasst und die Daten in Dateien schreibt, sodass sie in binärer Form vorliegen. Während meines MUMPS-Programms kann ich die Dateien erstellen und auf die Befehlszeile von openssl zugreifen, um die Daten nach Bedarf zu verarbeiten. David B vor 5 Jahren 0
mein Folgeteil 3 ist [hier] (https://superuser.com/questions/1343528/decrypt-ssl-traffic-with-the-openssl-command-line-tool-continued-part-3) David B vor 5 Jahren 0