2

Я пытался понять, что является содержанием Готового Finished Message TLS. Я использую Wireshark для захвата трафика между моим браузером и Интернетом. Я заметил "stangeness", когда выбранный шифр AES_GCM. Beign это потоковый шифр, он не хэширует отступы. Если я правильно понял, данные, отправляемые в готовом сообщении:

  • 8 байтов Явный одноразовый номер
  • 12 байтов verify_data
  • Тег аутентификации 16 байтов

То есть всего 36 байтов. "Проблема" в том, что размер пакета "Готовое сообщение" составляет 40 байт.

И вот оно:

Почему пакет сообщения составляет 40 байтов и каковы красные байты?

И почему Wireshark видит два приветственных запроса?

И еще одно ... Клиент отвечает пакетом из 176 байтов :

Я схожу с ума ...

Что мне не хватает?

2 ответа2

2

РЕДАКТИРОВАТЬ: первоначально я думал, что сообщение было повреждено, но комментарий dave_thompson является правильным, и сообщение Finished зашифровано с помощью GCM (я изначально предполагал CBC), поэтому ответ исправлен в свете этой новой информации.

Если посмотреть на двоичный контент сервера, то 14 03 03 00 01 01 - это сообщение Spec Change Cipher Spec, за которым следуют следующие байты (и мое объяснение их значения):

16 (заголовок записи рукопожатия)
03 03 (TLS версия 1.2)
00 28 (длина сообщения)
00 00 ... [40 байт] (зашифрованное сообщение)

Приведенный ниже комментарий Дейва правильно описывает зашифрованную структуру AES GCM. Однако, исходя из анализа Wireshark, кажется, что Wireshark не понимает, что зашифрованное сообщение является следующим (после Change Cipher Spec), поэтому он пытается проанализировать его как незашифрованное рукопожатие. Ведущий 0x00 указывает тип сообщения Hello Request, и более поздние данные не противоречат этому, поэтому Wireshark неверно анализирует его как незашифрованный Hello Hello вместо зашифрованного сообщения Finished.

Что касается 36 байтов против 40 байтов, готовое сообщение составляет 16 байтов:
1-байтовый заголовок (0x14 для Готово)
Длина 3 байта (0x00000c для 12 байтов)
12 байт данных

Эти дополнительные 4 байта (заголовок и длина сообщения «Готово») учитывают разницу.

Для 176-байтового клиентского сообщения 176 байт - это длина зашифрованной записи. Не расшифровывая, я не могу сказать, что в нем, но оно начинается с 0x16, что означает рукопожатие, так что это, вероятно, сообщение «Завершено клиентом» вместе с одним или несколькими другими сообщениями рукопожатия.

1

Почему 40 байт?

Почему пакет сообщения составляет 40 байтов и каковы красные байты?

Я не знаю. Все, что находится после "Change Cipher Spec", зашифровано.
С http://tools.ietf.org/html/rfc5246#section-7.1 :

The ChangeCipherSpec message is sent [...]
before the verifying Finished message is sent.
[...] once the ChangeCipherSpec has been sent, the
new CipherSpec MUST be used.

С http://tools.ietf.org/html/rfc5246#section-7.4.9 :

The Finished message is the first one protected with
the just negotiated algorithms, keys, and secrets.  

Почему два?

И почему Wireshark видит два приветственных запроса?

Я думаю, что это запуталось, пытаясь интерпретировать зашифрованные данные.

Предложение

  • Попробуйте захватить снова, но на этот раз Firefox запишет секрет перед мастером. Затем используйте секрет мастера для расшифровки с помощью WireShark. Смотрите: SecSE вопрос

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .