Кратко
- CRYPTO-фрейм содержит непрерывный диапазон с offset и length из потока рукопожатия одного уровня шифрования.
- Границы фрейма и пакета не доказывают полное сообщение TLS, последовательность сообщений, принятие сертификата, доступность ключа или готовность приложения.
- В учёте нужно раздельно фиксировать перенос QUIC, сборку по уровням, разбор TLS, ключи, повторную передачу и квитанции завершения.
Наблюдатель видит защищённый QUIC-пакет, снимает защиту и обнаруживает CRYPTO-фрейм. Следующий шаг часто ошибочен: фрейм объявляют полным ClientHello или Finished. На самом деле QUIC сообщает только offset и length непрерывного блока байтов рукопожатия внутри конкретного уровня шифрования. Фрейм не заявляет, что блок совпадает с TLS-сообщением, и не содержит явной отметки конца сообщения.
Фрейм целиком помещается в один QUIC-пакет, однако данные рукопожатия не обязаны ограничиваться одним пакетом. Сообщение TLS или последовательность сообщений может пересекать несколько CRYPTO-фреймов и пакетов. Один фрейм может начинаться в середине сообщения и заканчиваться до его конца. Потерянные криптографические сведения заново оформляются в новых CRYPTO-фреймах и защищаются ключами того же уровня шифрования, к которому относятся исходные байты; границы при этом могут измениться. Иная упаковка не означает второе сообщение или повтор на уровне смысла.
У соединения нет единого глобального CRYPTO-потока. Каждый уровень шифрования имеет собственную последовательность, а offset начинается с нуля. CRYPTO бывает в пакетах Initial, Handshake и 1-RTT, но отсутствует в 0-RTT. Одинаковые offset разных уровней нельзя соединять. QUIC размещает данные в последовательности нужного уровня, хранит пропуски и может ждать данные будущего уровня, пока TLS не будет к ним готов. В TLS передаются только вновь ставшие непрерывными байты и в правильном порядке.
Обязанности также разделены. QUIC упорядочивает байты и буферизует данные, пришедшие не по порядку. TLS буферизует уже упорядоченные байты и определяет, когда доступно полное сообщение или завершённая последовательность сообщений. TLS может обрабатывать данные постепенно либо ждать завершённую структуру. Успешное снятие защиты пакета не равно успешному разбору TLS. Доступность ключа является результатом обработки TLS, а не фактом наличия одного CRYPTO-фрейма. Фрейм также не доказывает, что ключ уже установлен.
Операционный журнал должен содержать версию QUIC, тип пакета, пространство номеров пакетов, уровень шифрования, результат защиты и номер пакета. Отдельно фиксируются смещение, длина и безопасный для конфиденциальности контрольный хеш, непрерывный диапазон для уровня, пропуски в буфере QUIC и диапазон, переданный TLS. Тип сообщения TLS указывается только после разбора полного сообщения. Проверка сертификата, предупреждения TLS, доступность и удаление ключей, завершение TLS, подтверждение QUIC и готовность приложения требуют отдельных квитанций.
CRYPTO переносит только сообщения рукопожатия TLS. Предупреждения TLS преобразуются в коды ошибок QUIC CONNECTION_CLOSE; прикладные данные и другие типы содержимого TLS нельзя переносить в CRYPTO-фреймах. CRYPTO не управляется механизмом контроля потока, не имеет идентификатора потока, FIN или явного конца. Реализация должна поддерживать как минимум 4096 байт CRYPTO, пришедших не по порядку. Чрезмерно большое максимальное смещение может привести к FRAME_ENCODING_ERROR или CRYPTO_BUFFER_EXCEEDED. Это сигналы транспорта и защиты ресурсов, а не доказательства принятия сертификата, перехода ключей или готовности сервиса.
Если TLS перешёл на более высокий уровень, пока данные прежнего уровня остаются не потреблёнными TLS, конечная точка рассматривает это как PROTOCOL_VIOLATION. При удалении ключей соответствующего пространства номеров пакетов удаляются и данные Initial или Handshake. Но это не граница TLS-сообщения. TLS-рукопожатие завершено только после того, как стек TLS сообщил о завершении, отправив свой Finished и проверив Finished другой стороны. Подтверждение рукопожатия QUIC и готовность приложения являются отдельными, более поздними состояниями.
Нужно также сохранять пять различий. TR-048 посвящён подтверждению рукопожатия и готовности приложения. TR-049 — коалесценции пакетов в одной UDP-дейтаграмме. TR-045 — тому, что доказывает ACK. TR-056 — восстановлению номеров пакетов. TR-063 — миграции к предпочтительному адресу. Ни один из этих вопросов не превращает границу CRYPTO в границу TLS-сообщения.
Корректное правило простое: утверждение не должно быть сильнее соответствующей квитанции. Фрейм доказывает перенос диапазона байтов на определённом уровне. Сборка доказывает непрерывность внутри уровня. Парсер TLS доказывает полное сообщение. Сертификат, ключи, завершение TLS, подтверждение QUIC и готовность приложения требуют собственных свидетельств.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров

