Ты проверяешь код. Он делает гадость. Но результат идеальный. Потому что он знал, где ты будешь смотреть.
Случайность давно стала основой доверия в цифровом мире. Мы полагаемся на неё, когда защищаем пароли, подписываем транзакции, шифруем сообщения. Она делает одни действия непредсказуемыми, а другие — проверяемыми. Но что, если элемент, на котором держится вся эта надёжность, лишь выглядит случайным, а на деле всё — обман?
Многие криптографические протоколы строятся на предположении: хорошая хеш-функция настолько близка к идеальному генератору случайных чисел, что её можно считать таковым. Эта идея получила название «модель случайного оракула» и стала краеугольным камнем в конструкциях блокчейнов , систем доказательств с нулевым разглашением и десятков других решений. Но новое исследование бросает вызов этой концепции.
Три специалиста из разных организаций — Дмитрий Ховратович (Ethereum Foundation), Рон Ротблюм (Succinct, Технион) и Лев Суканов ([alloc] init) — показали, что даже с использованием популярных хешей, таких как Poseidon, можно создать доказательство заведомо ложного утверждения. Например, «доказать», что транзакция произошла, когда на самом деле её не было.
В центре атаки — схема Fiat–Shamir, повсеместно применяемая в криптографии. Её цель — превратить интерактивные доказательства (в формате «вопрос–ответ») в неинтерактивные, пригодные для автоматической проверки тысячами пользователей. Идея кажется простой: если нельзя лично задать вопрос, его можно сгенерировать с помощью хеша.
Как это работает? Допустим, участник хочет доказать некое утверждение (например, что он знает решение задачи). Он делает коммитмент — фиксирует ответ, запечатывая его в «коробку» с помощью хеширования. Затем, вместо реального вопроса от проверяющего, он вычисляет хеш от коммитмента и получает «вызов» — псевдослучайное значение, которое определяет, какие части решения он должен раскрыть. Если всё совпадает — доказательство принято.
Механизм можно сравнить с преподавателем, который проверяет домашнюю работу не полностью, а выборочно. Студент сдаёт 100 заданий, но знает, что лишь 10 из них будут проверены. Какие именно - неизвестно. Поэтому, чтобы не рисковать, он вынужден решать всё. Хеш-функция в этом случае — алгоритмическая рулетка, которая указывает, какие коробки с ответами нужно открыть.
Всё это работает, только если хеш действительно ведёт себя как «случайный оракул». Но в реальности это — детерминированная программа. Если кому-то удаётся предсказать, какие именно «вопросы» выпадут, он может подготовиться, скрыв всё лишнее. Именно такую брешь и использовали исследователи.
В качестве платформы они взяли реальный протокол GKR, применяемый в системах доказательств корректных вычислений. Он позволяет убедительно подтвердить, что некоторая программа дала верный результат, даже если входы известны только доказывающей стороне. Сначала сама программа хешируется — чтобы её нельзя было поменять позже. Затем хеш используется для генерации точек проверки — этапов, на которых программа должна подтвердить корректность своих вычислений.
Здесь и кроется уязвимость . Учёные создали вредоносную программу, способную принять на вход собственный хеш. Зная его, она предугадывает, какие шаги попадут в выборку. Затем подгоняет внутреннюю логику так, чтобы эти конкретные участки выглядели правильно, а остальные выполняли фальшивые действия. Итог: система успешно обманута. И опаснее всего то, что такая подмена может быть встроена в любое приложение. Например, в децентрализованной системе голосования. Пользователь выбирает одного кандидата, но вредоносный код меняет выбор на другого. Система генерирует корректное доказательство, потому что проверяемые участки подстроены заранее. Итог: голос засчитан не туда, а доказательство говорит, что всё честно.
После публикации атаки компания Polyhedra, использующая аналогичный принцип в своём протоколе Expander, срочно внедрила защиту. Теперь программа не может быть сложнее, чем сама хеш-функция. Дополнительную меру предложили исследователи из Симонсовского института — Ейлон Йогев и Гал Арнон. По их версии, ограничение сложности разрывает круг между вычислением и проверкой. Однако даже они признают: в некоторых сценариях — например, в облачных вычислениях или блокчейн-нодах — такие меры неприменимы.
Рон Ротблюм предупреждает: ликвидация конкретной уязвимости не означает, что остальные атаки невозможны. Напротив, вскрытие бреши может стимулировать появление новых вариантов обхода. Джастин Тайлер из Джорджтаунского университета тоже считает, что в реальности такое маловероятно: вредоносный код слишком громоздкий и сложен для встраивания в реальные системы, особенно с учётом аудита и ресурсных ограничений. Но неопределённость остаётся. «Я не смогу спокойно спать, пока не будет ясности», — признался он.
Микал Канетти, один из ветеранов теоретической криптографии, идёт ещё дальше. Он сравнивает ситуацию с пробоиной в лодке: если вы нашли дыру — значит, судно уже под угрозой, даже если ещё не тонет. По его сллвам, аудит всегда связан с компромиссами, а изощрённо замаскированный вредонос способен пройти даже через самые жёсткие проверки.
Современные методы анализа уязвимостей подтверждают: даже проверенные системы могут содержать критические дыры. В блокчейн-контексте особую тревогу вызывают утечки секретов , которые ставят под угрозу устойчивость целых экосистем.
Итак, Fiat–Shamir, модель случайного оракула, автоматические доказательства — все они теперь требуют переосмысления. Даже если схема окажется нерабочей на практике, криптография уже не будет прежней.
Спойлер: мы раскрываем их любимые трюки