Кратко
- Индивидуальный Internet-Draft от 5 сентября 2026 года комбинирует шесть бинарных свобод кодирования CBOR для одного 165-октетного объекта COSE_Sign1.
- Получились 64 разные последовательности и 64 разных значения
data-hashбез коллизий. При этом у всех одна 109-октетнаяSig_structure, поэтому исходная подпись проходит проверку в каждом случае. - Обычный декодер не отверг ни одного варианта. После чтения и повторной записи 31 вариант без предупреждения превратился в исходную форму A.
- Независимый запуск опубликованного скрипта на файлах с совпадающими хешами повторил A, 64 хеша, ноль отказов и 31 нормализацию.
- Это не взлом криптографии и не авария в работающем сервисе. Результат требует точно назвать предобраз идентификатора и сохранить возможность его воспроизвести.
Подпись подтверждает не всю упаковку
Для COSE_Sign1 проверяется специально построенная структура. По RFC 9052 в Sig_structure входят контекст, защищённый заголовок, внешние аутентифицированные данные и полезная нагрузка. Не вся форма внешнего CBOR-контейнера участвует в подписи.
Исследуемый в новом проекте data-hash охватывает всю переданную последовательность октетов. Он называет конкретное двоичное представление. Поэтому два участника могут извлечь одинаковые значения и подтвердить одну подпись, но получить разные идентификаторы.
Криптографического противоречия здесь нет. Подпись защищает определённое содержимое, а хеш различает входные байты. Управленческая ошибка возникает, когда система записывает только факт успешной проверки и не фиксирует, какую версию байтов она назвала.
Шесть переключателей дают 64 предобраза
Объект A имеет длину 165 октетов. Эксперимент не меняет ни одного значения, а только наличие тега CBOR 18, определённую или неопределённую длину внешнего массива и ту же альтернативу для карты незащищённых заголовков. Защищённый заголовок, payload и подпись выводятся целой строкой байтов либо фрагментами.
Опубликованный артефакт содержит 64 последовательности длиной от 164 до 170 октетов. У каждой собственный SHA-256; коллизий нет. Но 109-октетная Sig_structure во всех случаях одна, как и действительная подпись.
Число 64 не описывает всё пространство. Авторы не меняли ширину кодирования целых чисел и порядок ключей карты. RFC 8949 показывает, что допустимых представлений больше. Запрет перечня уже известных форм не гарантирует, что следующая эквивалентная форма учтена.
Тихая потеря при успешном чтении
Декодер принял все входы. Для 31 из них цикл «декодировать — снова закодировать» выдал в точности A. Программа получила корректный объект и не сообщила, что исходная форма исчезла.
Допустим, сервис принимает B, публикует hash(B), затем сохраняет только повторно выданную форму A. Позднее он по-прежнему проверит подпись, но из сохранённого объекта уже не вычислит hash(B). Если хеш служит индексом записи или целью следующей аттестации, публичное имя и доступное доказательство расходятся.
Слово «тихо» не приписывает декодеру злой умысел. Измерение не изучает реальные Transparency Services и не устанавливает частоту такой обработки. Оно лишь исключает ошибочное правило: успешный парсинг не доказывает сохранность принятых байтов.
Независимая проверка подтверждает счёт
Исходный вектор, таблица результатов и скрипт доступны публично. После сбоя raw-адреса GitHub тот же файл был получен через Contents API и запущен во временной среде с копиями JSON, чьи хеши совпали с опубликованными.
A воспроизвёлся побайтно с SHA-256 8595e4a4c8b93e7b1b7b798dc302a2b7d2890021f7eff372d79b32f78867e4ac. Скрипт снова получил 64 различных data-hash, ноль отказов и 31 нормализацию. Повторный запуск использовал cbor2 5.7.1, а проект указывает 6.1.3, CPython 3.13 и macOS arm64. Совпадение поддерживает основной результат, но не заменяет широкую проверку реализаций.
Datatracker называет документ индивидуальной подачей без одобрения IETF и формального положения. У него нет RFC-потока, ответственного Area Director или даты telechat. Сам текст ничего не специфицирует. Ни подделки подписи, ни коллизии, ни поломки примитива, ни производственного инцидента не заявлено.
Формула «как зарегистрировано» пока обсуждается
Измерение появилось при Last Call проекта CCF Profile for COSE Receipts. В сообщении от 5 сентября Nicholas Templeman поддержал продвижение профиля и предложил считать data-hash по октетам в зарегистрированном виде, а не по повторной сериализации. Он прямо назвал замечание неблокирующим.
Это мнение участника, а не принятый текст или консенсус IETF. Проект SCRAPI и профиль CCF остаются рабочими документами группы. RFC 9943 задаёт опубликованную архитектуру SCITT, но сам по себе не выбирает точный предобраз для последующего data-hash.
В индивидуальном проекте Canonical Payload Binding уже есть as-transmitted: без канонизации, с точной последовательностью октетов в качестве предобраза. jcs-n и cde-n отмечены Withdrawn. Новое измерение показывает размер части проблемы, которую охватывает этот подход, но не превращает подход в стандарт.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров

