Версия протокола, дерево Меркла и границы доказательства

CT 2.0: проверка обещаний и истории журнала

Практикум по RFC 9162: отличить SCT от включения, проверить согласованность деревьев, разобрать переход с CT 1.0 и пределы вывода о журнале.

Практика → проверка решения150 минут10 модулей20 вопросов
После курса

Что вы сможете сделать

  1. Выбирать структуры и способ проверки для нужной версии CT.
  2. Связывать SCT и доказательство включения с точной записью и состоянием дерева.
  3. Проверять сохранение старого префикса и распознавать пределы локального аудита.
  4. Отделять правила протокола от политики принятия сертификата клиентом.
Модуль 1 из 10

Какую версию действительно умеет участник?

В проекте ссылаются на новый номер RFC. Проверяем отдельно статус документа, формат метки и возможности участников.

  • RFC 9162 — экспериментальный документ декабря 2021 года, формально заменивший RFC 6962. Это не свидетельство поддержки CT 2.0 выбранным браузером.

  • Журнал версии 2 не выдаёт действительную SCT 1.0. Клиент может поддерживать обе версии для одного сертификата, используя их разные расширения.

Модуль 2 из 10

Что лежит в контейнере и что подписывает CA?

Новая версия меняет и внешний контейнер данных, и форму предварительного сертификата. Начинаем разбор с типа объекта.

  • TransItem идентифицирует тип и версию данных; TransItemList может содержать SCT, STH и доказательства. Старый список только SCT не заменяет этот формат.

  • Предварительный сертификат CT 2.0 является объектом CMS с TBSCertificate внутри и подписью будущего издателя. Старый предварительный X.509-сертификат с poison extension — другая конструкция.

Модуль 3 из 10

Какие байты должны попасть в проверку?

Даже нужный алгоритм не поможет, если хешируется другой объект. Различаем выданный сертификат, его TBSCertificate и запись журнала.

  • Для precert_sct_v2 из TBSCertificate выданного сертификата удаляют Transparency Information и встроенные SCT 1.0. Для x509_sct_v2 TBSCertificate используют без такой реконструкции.

  • Leaf hash вычисляется по HASH(0x00 || TransItem) записи. В ней учитываются тип, время, хеш ключа издателя, TBSCertificate и расширения SCT; хеш всего файла сертификата не подходит.

Модуль 4 из 10

Достаточно ли идентификатора журнала и подписи?

OID помогает выбрать журнал, но не снабжает клиента ключом. Проверенная метка имеет ограниченный смысл и собственный срок обещания.

  • OID журнала CT 2.0 не является хешем ключа. Без соответствующих параметров клиент не может проверить SCT и не учитывает её в оценке соответствия.

  • Проверенная SCT обещает включение точной записи в пределах MMD этого журнала. Единого числа MMD в RFC 9162 нет; SCT сама не подтверждает уже состоявшееся включение.

Модуль 5 из 10

Что журнал разрешает, а что решает клиент?

Журнал может хранить материал, полезный для расследования нарушений. Наличие такого материала не устанавливает пригодность сертификата для соединения.

  • После выполнения минимальных критериев журнал вправе принять, например, просроченный сертификат. Клиент всё равно отдельно проверяет серверный сертификат и цепочку.

  • Вид и количество CT-доказательств задаёт политика клиента. Если ClientHello не содержит одновременно transparency_info и status_request, RFC 9162 запрещает оценивать CT compliance; обычные проверки сертификата сохраняются.

Модуль 6 из 10

Кто доставит доказательство и что узнает журнал?

Носитель CT-данных влияет на обновление сведений и прямые обращения клиента. Он не отменяет проверку полученного доказательства.

  • CT 2.0 использует transparency_info в TLS, расширение X.509 либо расширение вложенного OCSP. В передаваемом TransItemList SCT обязательна; доступные серверу inclusion proof и STH также рекомендуется передавать.

  • Прямой запрос inclusion proof сообщает журналу, с каким сервером общался клиент. Доставка сервером уменьшает это раскрытие и нагрузку на журнал, но полученные данные требуют проверки.

Модуль 7 из 10

В каком именно дереве найдена запись?

Путь Меркла проверяется вместе с индексом, размером и корнем. Самодельное дерево с подходящим корнем не является подписанным ответом выбранного журнала.

  • Проверенное включение относится к конкретному листу и дереву. Для связи с журналом нужен корень из STH с проверенной подписью; этот результат не удостоверяет правильность выпуска или отсутствие скрытых веток.

  • Алгоритм отклоняет индекс вне дерева, лишний или недостаточный путь и несовпадение корня. Совпадения отдельных промежуточных значений недостаточно.

Модуль 8 из 10

Какое состояние подходит для проверки срока?

STH подписывает состояние дерева, а MMD задаёт предел обещания SCT. Для вывода об исполнении нельзя произвольно выбирать ранний снимок.

  • При аудите обещания SCT можно проверить включение относительно STH позже timestamp SCT плюс MMD. Более ранний снимок мог законно ещё не содержать запись; один сетевой тайм-аут не является подписанным доказательством нарушения.

  • STH подписывает время, число записей, корень и расширения дерева. Его действительная подпись ещё не доказывает присутствие выбранной записи.

Модуль 9 из 10

Сохранился ли старый префикс и где нужный лист?

Две задачи требуют разных доказательств: сравнить историю и найти конкретную запись. Не выводим второе только из успешного первого.

  • При положительных размерах m меньше n доказательство согласованности проверяет, что первые m записей большего дерева совпадают со старым деревом. С проверенными STH вывод относится к этой паре состояний одного журнала.

  • Одна проверка согласованности не устанавливает исполнение конкретной SCT. Для выбранной записи нужно отдельно доказать включение; уже доказанное включение можно использовать вместе с сохранением префикса.

Модуль 10 из 10

Мог ли другой наблюдатель увидеть другую историю?

Локальная последовательность состояний может быть согласованной даже у нечестного журнала. Отделяем проверку полученных записей от сравнения разных представлений.

  • Согласованная история у одного наблюдателя не исключает другую ветку у другого. Для обнаружения split view нужны сведения участников друг о друге; RFC 9162 обсуждает gossip, но не задаёт его протокол.

  • Монитор обязан просматривать новые записи наблюдаемых журналов. Рекомендуемый обход проверяет подпись STH, соответствие записей его корню и сохранение истории; одних подписей STH недостаточно.

Финишная прямая

Проверьте инженерное мышление

Вопросы проверяют не память на аббревиатуры, а умение не делать лишних выводов.

01Команда пишет: «RFC 9162 заменил RFC 6962, значит, целевой браузер уже принимает CT 2.0». Что нужно исправить?
02Сертификат должен работать у двух учебных клиентов: один понимает только CT 1.0, другой — обе версии. Можно ли метку журнала v2 считать действительной SCT v1?
03Декодер CT 2.0 получил TransItemList со SCT, STH и inclusion proof. Он пытается читать каждый элемент как SCT и сообщает повреждение. Какое допущение ошибочно?
04CA готовит предварительное объявление сертификата для журнала CT 2.0. Какой объект соответствует описанной в RFC 9162 форме?
05Проверяется precert_sct_v2 для сертификата со встроенными SCT версий 1 и 2. Что сделать при реконструкции TBSCertificate по RFC 9162?
06У сертификата проверена подпись CA. Инженер использует хеш всего DER-файла как leaf hash для CT 2.0. Чем заменить вход?
07Клиент получил SCT с синтаксически корректным OID, но не имеет параметров этого журнала. Как учитывать её при оценке соответствия CT 2.0?
08Подпись SCT 2.0 проверена, доказательства включения ещё нет. Как сформулировать результат и срок обещания?
09Журнал принял просроченный сертификат после выполнения минимальных критериев. Достаточно ли принятия и действительной SCT, чтобы клиент считал срок сертификата допустимым?
10Клиент отправил ClientHello со status_request, но без transparency_info. После ответа сервера он хочет оценить CT compliance по RFC 9162. Какое ограничение действует?
11Сервер CT 2.0 может получить SCT, inclusion proof и STH для передачи TransItemList при полном рукопожатии. Как разделить обязательное и рекомендуемое?
12Сервер доставил inclusion proof и STH вместе с SCT. Какую конкретную пользу имеет отказ от отдельного запроса клиента к журналу за этим доказательством?
13Путь включения сходится к присланному корню, но происхождение корня от выбранного журнала не подтверждено. Чего не хватает выводу «журнал включил запись»?
14В inclusion proof указаны tree_size=8 и leaf_index=8. Вход относится к алгоритму RFC 9162, индексы начинаются с нуля. Как поступить?
15В учебном журнале SCT выдана в 10:00, MMD равен двум часам. STH 11:30 не содержит запись. Как продолжить аудит исполнения обещания?
16Подпись STH нужного журнала проверена. Известны время, размер и корень; inclusion proof для выбранного сертификата нет. Что уже установлено?
17Подписи двух STH одного журнала проверены: размеры деревьев 4 и 7. Проверка consistency proof успешна. Какой вывод относится к этой паре?
18Есть SCT для новой записи и успешная consistency proof между двумя STH. Принадлежность этой записи ни одному дереву ещё не проверялась. Можно ли объявить SCT исполненной?
19Аудитор проверил все полученные им STH и цепочку consistency proof. Как оценить вывод «другим участникам этот журнал не показывает другую историю»?
20Монитор хочет соответствовать описанному обходу RFC 9162. Он проверяет подписи новых STH, но не получает новые записи. Чего не хватает?
Проверяемая база

Источники курса

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

  • Первичная спецификация

    RFC 9162 — Certificate Transparency Version 2.0

    IETF · RFC 9162, December 2021; Experimental; Obsoletes RFC 6962

    Прочитан сохранённый полный текст: 1.3, 2.1.3–2.1.4, 3.2, 4, 6–8, 11, Appendix A. Experimental, не Internet Standards Track; не источник текущей политики браузеров. Сетевой запрос в этом выпуске не выполнялся.

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие