2016-12-19 6 views
0

Ich versuche, eine pcap-Datei zu entschlüsseln. Diese pcap-Datei enthält eine Erfassung eines HLS-verschlüsselten Videostreams. Das pcap enthält TLSv1.2-Pakete.Nicht-RSA TLS1.2 Paketentschlüsselung

Im Folgenden sind einige Informationen aus der PCAP-Datei

Server Hallo Nachricht Cipher Suite:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384.

EC Diffie-Hellman-Server Params: pubkey (1)

Das Zertifikat Statusmeldung:

Signatur Hash Algorithm Hash: SHA256

Signatur Hash-Algorithmus Signatur: ECDSA

Client Key Exchange Nachricht

EC Diffie-Hellman-Server Params: pubkey (2)

Ich versuchte this Wireshark SSL decryption tutorial zu folgen. Aber es scheint, dass es nur für RSA-Verschlüsselungen funktioniert. Ich habe eine Weile geforscht und this discussion gefunden. Ich zitiere einen Auszug aus dieser Diskussion:

Es ist ein wichtiger Parameter in dem Sinne: Entschlüsselung einer passiv Sitzung aufgezeichnet (mit einer Kopie des Server privaten Schlüssels) funktioniert nur, wenn der Schlüsselaustausch war vom Typ RSA oder statische DH; mit "DHE" und "ECDHE" Cipher Suites, Sie werden nicht in der Lage sein, eine solche Sitzung zu entschlüsseln, auch mit Kenntnis des privaten Schlüssels des Servers. In diesem Fall müssen Sie entweder auf das Verhandlungs „master secret“, oder den Server privaten Schlüssel verwenden aktiv die Verbindung des

Es abzufangen bemerkenswert, dass ich den Client privaten Schlüssel verfügen. In meinem Fall ist der Client FFmpeg Video Streamer (FFplay). Ich habe mir auch die TLS v1.2 RFC angesehen.

Meine Frage:

Ist es möglich, eine Entschlüsselung in diesem Szenario zu tun? Wenn ja, was muss ich tun?

Wird die Entschlüsselung mit dem privaten Schlüssel des Clients oder mit dem pre_shared_master (d. H. Diffie-Hellman) durchgeführt?

+1

Pre-Shared-Secret wäre erforderlich. Was ist ein Clientschlüssel? Ist es der private Schlüssel eines Zertifikats? Es wird nur zur Authentifizierung verwendet. –

+0

Danke für Ihre Antwort wirklich zu schätzen! Wenn das Pre-Shared-Secret benötigt wird, dann sind es die öffentlichen Diffie-Hellman-Schlüssel? Es ist nicht wirklich klar im RFC (https://tools.ietf.org/html/rfc5246#section-8.1.2). Der private Schlüssel des Clients (FFmpeg-Schlüssel) befindet sich in (https://github.com/FFmpeg/FFmpeg/blob/415f907ce8dcca87c9e7cfdc954b92df399d3d80/libavformat/tests/rtmpdh.c)..Es ist eine 256 lange Zeichenfolge statisch const char * private_key –

Antwort

1

Nein, in diesem Szenario ist eine Entschlüsselung nicht möglich. Das würde bedeuten, EC Diffie-Hellman zu brechen.

Entschlüsselungs sind nicht direkt die pre_master_secret Verwendung durchgeführt, aber es wird durchgeführt, indem Schlüssel abgeleitet direkt aus dem pre-master secret. Das heißt: die Client- und Server-Entschlüsselungsschlüssel, die daraus abgeleitet werden, indem zuerst die master_secret abgeleitet wird und dann die PRF ausgeführt wird und die Ausgabe in die Sitzungsschlüssel und IVs unterteilt wird.

+0

Danke für Ihre Antwort. Das war es, was ich von Anfang an dachte, aber ich wollte es mit Experten überprüfen. Schätzen Sie Ihre Hilfe –

+0

Der Wortlaut wurde etwas geändert, es gibt keinen "pre_shared_master" (im TLS-RFC) und "pre_shared_key" ist eine völlig andere Art, Sitzungsschlüssel zu erstellen. –

+0

Nein, die Entschlüsselung wird nicht mit pre_master_secret durchgeführt. Es wird mit dem Sitzungsschlüssel durchgeführt. – EJP

2

Zuerst sind die privaten oder öffentlichen Schlüssel des Clients nicht am Schlüsselaustausch beteiligt, sondern nur zur Authentifizierung des Clients (falls vom Server angefordert). Was beim Schlüsselaustausch verwendet wird, sind die Server privaten und öffentlichen Schlüssel, aber nur wenn RSA Schlüsselaustausch verwendet wird. Für DHE/ECDHE werden sie nicht verwendet, daher reichen private/öffentliche Schlüssel nicht aus. Details dazu finden Sie unter it is possible to decrypt HTTPS with the (private, public) pair if it uses DHE?.

Was Sie anstelle des privaten Schlüssels benötigen, ist eigentlich der ausgetauschte Schlüssel, der für jede TLS-Sitzung einzigartig ist, selbst wenn der private Schlüssel der gleiche ist.Einige Clients können diesen Schlüssel für die spätere Verwendung speichern und wenn Ihr Client es tun kann, siehe Decrypting TLS Browser Traffic With Wireshark – The Easy Way!, wie fortzufahren, dann den Verkehr zu entschlüsseln.

+0

Danke für Ihre Antwort wirklich zu schätzen wissen! Ich habe mich angeschaut (es ist möglich, HTTPS mit dem (privaten, öffentlichen) Paar zu entschlüsseln, wenn es DHE verwendet), bevor ich meine Frage stelle. Ich bin allerdings neugierig ... Wie kann der FFplay-Client die verschlüsselten Videopakete entschlüsseln? Wie könnte ich diese Pre-Shared-Exchange-Schlüssel manuell berechnen? Der Client ist ein Opensource-Code und ich nehme alle Pakete auf, daher sollte ich den Videoverkehr manuell entschlüsseln können. –

+1

@JosephWahba: ffplay ist ein TLS-Client, d.h. er baut eine TLS-Verbindung mit dem Server auf, der den Schlüsselaustausch beinhaltet. Nach diesem Schlüsselaustausch kennen sowohl der Server als auch der Client den Verschlüsselungsschlüssel. Aber jemand, der nur den Verkehr beobachtet, kennt den Schlüssel nicht. Ich empfehle dir, eines der verschiedenen Videos auf youtube anzuschauen, die spielerisch den diffie hellman key exchange erklären, um zu verstehen, wie das funktioniert. –

+1

@JosephWahba Warum nicht einfach den Client ändern, kompilieren und alle entschlüsselten Daten in eine Datei ablegen lassen? –

Verwandte Themen