2016-12-19 5 views
0

Я пытаюсь расшифровать файл pcap. Этот файл pcap содержит захват зашифрованного видео потока HLS. Pcap содержит пакеты TLSv1.2.Non-RSA TLS1.2 Расшифровка пакетов

Ниже приведены некоторые данные из файла PCAP

сервера Привет сообщение Cipher Suite:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384.

EC сервер Диффи-Хеллмана Params: Публичных (1)

Состояние сертификата сообщение:

Подпись Hash Algorithm Hash: SHA256

Подпись Hash Algorithm Подпись: ECDSA

Клиентский обменный код

EC Диффи-Хеллмана сервера Params: Публичных (2)

Я пытался следовать this Wireshark SSL decryption tutorial. Но похоже, что он работает только для шифрования RSA. Я искал какое-то время и нашел this discussion. Я цитирую отрывок из этой дискуссии:

Существует очень важный параметр для ума: дешифрование пассивно записанной сессии (с копией секретного ключа сервера) работает только тогда, когда обмена ключей был типа RSA или статический DH; с наборами «DHE» и «ECDHE» , вы не сможете расшифровать такой сеанс, даже с знаниями секретного ключа сервера. В этом случае вам нужно будет либо переговоров «главный секрет», или использовать серверную частный ключ активно перехватывать соединительном

сведению это достойно, что у меня есть секретный ключ клиента. В моем случае клиентом является видеопоток FFmpeg (FFplay). Я также посмотрел на TLS v1.2 RFC.

Мой вопрос:

Можно ли сделать расшифровку в этом случае? Если да, что мне нужно сделать для этого?

Выполняется ли дешифрование с использованием закрытого ключа клиента или с использованием pre_shared_master (т. Е. Diffie-Hellman)?

+1

Необходим предварительный общий секрет. Что такое клиентский ключ? Это личный ключ сертификата? Он используется только для аутентификации. –

+0

Спасибо за ваш ответ, действительно оцените! Если необходим общий секрет, то это ключи от Диффи-Хеллмана? В RFC это не совсем ясно (https://tools.ietf.org/html/rfc5246#section-8.1.2). Закрытый ключ клиента (ключ FFmpeg) находится в (https://github.com/FFmpeg/FFmpeg/blob/415f907ce8dcca87c9e7cfdc954b92df399d3d80/libavformat/tests/rtmpdh.c)..It является 256 длинной строкой static const char * private_key –

ответ

1

Нет, это невозможно расшифровать в этом сценарии. Это будет связано с нарушением EC Diffie-Hellman.

дешифрование не непосредственно выполняется с использованием pre_master_secret, но она выполняется с помощью клавиш получены непосредственно из предварительно главного секрета. То есть: ключи дешифрования клиента и сервера, которые производятся от него, сначала вызывая master_secret, а затем выполняя PRF и деля вывод на ключи сеанса и IV.

+0

Спасибо за ваш ответ. Это то, что я думал с самого начала, но хотел дважды проверить с экспертами. Цените свою помощь –

+0

Измените формулировку несколько, нет такой вещи, как 'pre_shared_master' (в TLS RFC), а' pre_shared_key' - совсем другой способ установления ключей сеанса. –

+0

Нет, дешифрование не выполняется с использованием pre_master_secret. Он выполняется с использованием ключа сеанса. – EJP

2

Во-первых, закрытый или закрытый ключ клиентов не участвует в обмене ключами каким-либо образом, а используется только для аутентификации клиента (если запрашивается сервером). В обмене ключами используются серверы закрытый и открытый ключ, но только если используется обмен ключами RSA. Для DHE/ECDHE они не используются, поэтому закрытого/открытого ключа недостаточно. См. it is possible to decrypt HTTPS with the (private, public) pair if it uses DHE?, чтобы узнать, почему это так.

Что вам понадобится вместо частного ключа - это фактически обменный ключ, который уникален для каждого сеанса TLS, даже если закрытый ключ является тем же.Некоторые клиенты могут хранить этот ключ для последующего использования, и если ваш клиент может это сделать, см. Decrypting TLS Browser Traffic With Wireshark – The Easy Way!, как действовать дальше, чтобы расшифровать трафик.

+0

Спасибо для вашего ответа действительно ценю это! Я посмотрел (можно расшифровать HTTPS с помощью (частной, общедоступной) пары, если она использует DHE?), Прежде чем задавать свой вопрос. Мне любопытно, хотя ... Как получилось, что клиент FFplay может расшифровать зашифрованные видеопакеты? Как вы думаете, что я смогу вручную вычислить эти предварительно обмененные ключи? Клиент является кодом с открытым исходным кодом, и я собираю все пакеты, поэтому в идеале я должен иметь возможность дешифровать видео трафик вручную. –

+1

@JosephWahba: ffplay - клиент TLS, то есть он устанавливает соединение TLS с сервером, который включает обмен ключами. После этого обмена ключами сервер и клиент знают ключ шифрования. Но кто-то просто смотрит на трафик, не знает ключа. Я рекомендую вам взглянуть на одно из различных видеороликов на youtube, которое игриво объясняет diffie hellman key exchange, чтобы понять, как это работает. –

+1

@JosephWahba Почему бы просто не модифицировать клиента, не компилировать его и не удалять все дешифрованные данные в файл? –