Алгоритм, защищающий блокчейн, научился лгать. Десятилетия безопасности летят в бездну?

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


x1v3vc8rbrr71k529soe2odzq42csvuq.jpg


Случайность давно стала источником доверия в цифровом мире. Мы полагаемся на неё, чтобы защищать пароли, подписывать транзакции, шифровать сообщения. Именно она делает одни действия непредсказуемыми, а другие — проверяемыми. Но что, если тот самый элемент, на котором всё держится, лишь выглядит случайным?

На протяжении десятилетий криптография жила в уверенности: хорошая хеш-функция достаточно похожа на настоящий генератор случайных чисел. Это предположение, известное как модель случайного оракула, стало краеугольным камнем современной теории безопасности. Но недавняя работа исследователей с разных концов криптомира поставила эту модель под сомнение. И вместе с ней — стабильность блокчейнов , нулевого раскрытия и десятков других протоколов.

Исследование , проведённое Дмитрием Ховратовичем (Ethereum Foundation), Роном Ротблюмом (Succinct, Технион) и Львом Сукановым ([alloc] init), впервые показало, как можно обмануть доказательство, работающее по протоколу Fiat–Shamir, даже если использовать любую популярную хеш-функцию. Они сумели создать систему, которая доказывает заведомо ложные утверждения — например, будто транзакция состоялась, хотя этого не было.

Для понимания масштаба проблемы стоит разобраться, что такое Fiat–Shamir и зачем он вообще нужен. Этот протокол изначально решает простую задачу: как доказать что-то группе наблюдателей, не вступая с каждым из них в личный диалог. В интерактивной версии доказательства сторона, предоставляющая доказательство, отвечает на случайные вопросы, которые формируются во время общения. Но как исключить человеческий фактор, если доказательство нужно показать тысячам людей в сети?

Здесь и приходит на помощь Fiat–Shamir: вместо живых вопросов, протокол использует хеш-функции, чтобы сгенерировать случайные вызовы. Это позволяет доказательству стать полностью автоматическим: никто не может повлиять на выбор вопросов, потому что они рождаются из уже зафиксированных данных. Протокол работает как магический автомат, превращающий диалог в одностороннее, но убедительное доказательство.

Один из способов объяснить его работу — представить себе преподавателя, проверяющего домашнюю работу. Вместо того чтобы проверять все 100 заданий, он выбирает 10 наугад. Если студент заранее не знает, какие именно — он не сможет заранее подделать выбор. Чтобы избежать манипуляций, он запечатывает каждое своё решение в отдельную коробку, а преподаватель случайным образом выбирает, какие из них вскрыть.

Fiat–Shamir имитирует эту ситуацию с помощью хешей: коробки — это коммитменты (хеши от ответов), а выбор номеров — результат хеширования этих коммитментов. Каждая итерация зависит от предыдущих данных, что исключает возможность манипулировать выбором. Так доказательство становится убедительным — и главное, не требует прямого общения.

Но ключевая деталь, которую десятилетиями игнорировали, заключается в том, что хеш-функция — это не настоящий оракул. Она детерминирована, её можно проанализировать, встроить в программу, использовать предсказуемо. Это открывает двери для атак, которые раньше считались невозможными. Проблемы с генераторами случайных чисел уже затрагивали миллиарды устройств, демонстрируя критическую важность качественной случайности.

В 1996 году Дэвид Пуаншеваль и Жак Стерн доказали, что Fiat–Shamir безопасен, если хеш-функция — идеальный случайный источник. Это если стало тихой оговоркой, на которую почти никто не обращал внимания. Считалось, что реальные хеши достаточно хороши. Даже когда в 2000-х годах появились искусственные примеры протоколов, уязвимых к атакам, большинство специалистов уверяли: в реальных системах так никто не пишет.

Так думали до октября прошлого года.

Всё изменилось, когда Рон Ротблюм получил письмо от Ethereum Foundation. В нём был черновик программы bug bounty — организация собиралась предложить вознаграждение тому, кто взломает Fiat–Shamir-протокол с помощью реального хеша, например Poseidon. Ротблюм заметил: формулировка слишком самоуверенная. Ведь уязвимости были известны, пусть и в искусственных системах. И когда он обсудил это с криптографами Ethereum, оказалось — о тех атаках они даже не слышали.

Это стало отправной точкой сотрудничества. Суканов предложил взять за основу не абстрактный протокол, а вполне реальный и активно используемый — GKR. Его соавтором, иронично, является брат Рота — Гай Ротблюм. GKR позволяет доказать, что определённая программа выдала нужный результат, даже если её вход известен только доказывающей стороне. Например, студент может доказать, что ввёл правильные ответы в автоматическую проверочную систему, даже не показывая сами ответы.

На практике GKR сначала хеширует саму программу — чтобы нельзя было подменить её позже. Затем, как и в Fiat–Shamir, использует хеши для генерации случайных точек проверки: шагов, на которых проверяются вычисления программы. Всё выглядит безопасно — пока программа честная.

Но исследователи нашли тонкую уязвимость . Они создали вредоносную программу, которая получает на вход собственный хеш. Это даёт ей возможность предсказывать, какие участки будут проверяться. Дальше она маскирует внутреннюю логику так, чтобы именно эти места были корректны, несмотря на то, что остальная программа делает совсем не то, что заявлено. Внешне всё совпадает, но результат ложен.

Что делает открытие особенно опасным: злоумышленник может встроить такую вредоносную программу внутрь другой. Например, взять программу проверки домашки, встроить в неё обёртку, и теперь студент может отправить неправильные ответы, но всё равно получить сообщение верно. Программа останется внешне функциональной и даже даст правильные оценки, но будет способна обманывать систему.

Когда исследователи подготовили статью, они уведомили компанию Polyhedra, чей протокол Expander использует ту же архитектуру. Компания быстро выпустила патч, внедрив предложенную в работе защиту: теперь система требует, чтобы программа, которую нужно проверить, была менее сложной, чем хеш-функция. Это ограничивает вредоносный код — он просто не поместится внутрь.

Позже свою версию защиты предложили Ейлон Йогев и Гал Арнон из Симонсовского института. Их метод также основан на ограничении сложности: если вычисляемая программа не может встроить хеш-функцию в себя, она не сможет сымитировать ответы. Это, по их словам, разрывает цикл между вычислением и проверкой.

Но не всё так просто. Такая мера работает не везде. В сложных сценариях — например, при проверке облачных вычислений или в криптовалютных нодах — может потребоваться высокая сложность программ, и новые ограничения просто неприменимы. Более того, как признал сам Ротблюм, даже если текущая атака устранена, это не означает, что не появится новая.

Джастин Тайлер из Джорджтаунского университета и фонда Andreessen Horowitz полагает, что на практике вредоносные программы вряд ли будут выбраны реальными системами — они просто неэффективны. Но всё же отсутствие чёткого понимания уровня угрозы не даёт ему покоя: Я не смогу спокойно спать, пока не будет ясности.

Некоторые исследователи идут дальше. Канетти, один из старейших специалистов в области теоретической криптографии, отмечает: сложные системы легко модифицируются, а аудит — это всегда компромисс. Вредоносный код вполне может проскользнуть незаметно — особенно если его тщательно замаскировать под полезный.

Йогев, один из соавторов защитной модификации, сравнивает ситуацию с пробоиной в лодке: Как только ты нашёл дыру, ты знаешь — лодка уже начала тонуть. Даже если пока не утонула. Он уверен, что атаку можно адаптировать под реальные системы и использовать для реального хищения средств.

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

Даже если этого не произойдёт, под сомнение поставлен сам подход, лежащий в основе огромного числа криптографических решений. Модель случайного оракула, Fiat–Shamir, автоматические доказательства — все они теперь нуждаются в переоценке. Как выразился Канетти: Возможно, пришло время пересмотреть многое из того, что мы считали доказанным.