Как взломать время с помощью C2PA

· Безопасность
Исследователь безопасности Дэвид Бьюкенен создал фотографию с криптографически «неподделываемой» меткой времени, доказывающей, что выигрышные номера лотереи были известны ему за несколько часов до розыгрыша. Весь фокус — в одной особенности спецификации C2PA.

cover.svg

Самым впечатляющим хакерским трюком в истории кино Дэвид Бьюкенен (он же retr0id) называет момент из фильма «Kung Fury», где герой взламывает само время. Автор решил, что сам распорядился бы такой способностью скромнее: вернулся бы на пару часов назад и подсказал себе выигрышные номера лотереи. Именно это, если верить криптографической метке времени стандарта C2PA, он и проделал — приложив к заметке фотографию лотерейного билета с номерами, якобы снятую за часы до розыгрыша EuroMillions.

Фотография, по честному признанию автора, грубо отредактирована — никакого реального мошенничества он не замышляет. Интересно другое: все имеющиеся инструменты проверки C2PA подтверждают подлинность подписи и метки времени.

Две подписи

Типичный манифест C2PA содержит две подписи. Первая — «подпись заявления»: приложение камеры утверждает, например, что это снимок, сделанный в таких-то координатах в такой-то момент. В предыдущей статье Бьюкенен показал, что эта подпись почти ничего не стоит: подписать можно любое заявление, в том числе на флагманских реализациях вроде приложения камеры Google Pixel.

Вторая подпись выдаётся удостоверяющим центром меток времени (TSA) по протоколу RFC 3161. Поскольку устройствам не доверяют знание собственного времени, внешний сервер подтверждает: «да, я видел этот хеш в такой-то момент». Это работает как независимый свидетель. В Pixel 10 Google решила, что устройству всё же можно доверить время самому, — к чему автор относится скептически, но в этой статье он TSA не атакует и считает, что та функционирует честно.

Подводный камень спецификации

Фокус основан на любимом классе ошибок Бьюкенена — «ловушке в спецификации». C2PA допускает произвольные «исключения»: диапазоны байтов файла, не учитываемые при вычислении подписи. На это ещё в июне 2025 года указывал доктор Нил Кравертц в своём перечне недостатков C2PA.

Новизна в том, что злонамеренный подписант может намеренно исключить весь файл. Тогда подпись вычисляется над пустой строкой — её хеш совпадает с хешем /dev/null. Файл после этого можно изменять как угодно, не нарушая ни подпись заявления, ни метку времени. Так автор снял реальный билет, получил честную метку времени, а номера дорисовал уже после объявления результатов.

Можно ли это исправить?

Не так-то просто. Обнаружить исключение всего файла легко, но как отличить безобидный малый диапазон от такого, изменение которого полностью меняет картинку (вспомним коллизии MD5)? Полностью убрать исключения тоже нельзя: они нужны для ряда форматов — скажем, в PNG контрольная сумма CRC32 каждого блока иначе создавала бы круговую зависимость. Решение автор видит в том, чтобы явно прописать для каждого формата, какие части разрешено исключать, и обязать верификаторы это проверять.


Источник: Lobsters

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.