Я пытался вручную расшифровать некоторый трафик TLS 1.3 по образовательным причинам и наткнулся на контрольно-пропускной пункт. На данный момент мне удалось выполнить большую часть расписания ключей, включая получение правильных секретов трафика рукопожатия из ключей ECDHE. Однако мне не удалось найти много информации о том, как зашифрованный текст и тег аутентификации форматируются в сообщениях данных приложения.
Вот полная запись.
1703030017bf687d10e2f209661418d92aaf3626dfe5670f3127d6ed
А вот и секрет трафика рукопожатия сервера:
475a0f3b5a86d4797e24545c2eb6388de9507e5e0bc367c74c3e78e0d8033f34b721a2e3a1d89ec5990287954402fc43
Wireshark сообщает мне, что расшифровка этого сообщения дает открытый текст 08 00 00 02 00 00
, соответствующий сообщению Encrypted Extensions.
Из того, что я могу сказать, «связанные данные» должны быть байтами 17 03 03 00 17
, а остальная часть записи представляет собой зашифрованный текст + тег аутентификации.В RFC 8446 говорится, что набор шифров TLS_AES_256_GCM_SHA384 определен в RFC 5116, но в RFC 5116 говорится:
В этом документе не указывается какая-либо конкретная кодировка для AEAD.
входы и выходы, так как кодировка не влияет на безопасность
услуги, предоставляемые алгоритмом AEAD.
Тем не менее, все мои попытки расшифровать данные не прошли аутентификацию, что приводит меня к двум возможностям:
- Я неправильно получаю ключи трафика. Я знаю, что моя процедура HKDF-Expand-Label работает, поскольку все остальные секреты выводятся правильно и соответствуют значениям, зарегистрированным OpenSSL. Однако, по общему признанию, я не уверен на 100%, каковы правильный ключ и длина IV. В настоящее время я использую 32-байтовый ключ и 12-байтовый IV. Я не знаю, использует ли это TLS 1.3.
- Я неправильно читаю тег аутентификации/зашифрованный текст. Мне не удалось найти никаких ссылок на правильный формат, поэтому все мои попытки в этой области были просто догадками. В частности, я не уверен, какова длина тега аутентификации для этого набора шифров, хотя поиск в Google предполагает, что он составляет 12 байт.
Что я делаю не так?