01.08.2027 335 материалов

Granite: как формальная верификация процессоров борется с утечками через временные побочные каналы

Исследователи из MIT, Google и Вашингтонского университета представили Granite — методологию модульной верификации процессоров, которая доказывает отсутствие утечек информации через временные побочные каналы на уровне RTL.

Granite: как формальная верификация процессоров борется с утечками через временные побочные каналы

Если программа не зависит от секретов по времени выполнения, процессор, проверенный через Granite, гарантированно не сольёт эти секреты через архитектурные побочные каналы — даже если в конвейере есть спекулятивное исполнение и прерывания.

Проблема, которую все знают, но мало кто решает

Тема аппаратных утечек через побочные каналы — давняя головная боль индустрии. Процессоры устроены сложнее, чем предписывает их ISA (набор команд): конвейер, предсказание ветвлений, спекулятивное исполнение, буферы — всё это создаёт нюансы в тайминге, которые можно использовать для извлечения секретной информации. Классические атаки Spectre и Meltdown это наглядно продемонстрировали.

Проблема в том, что верифицировать отсутствие таких утечек на уровне реального RTL-описания процессора (то есть на том уровне абстракции, который используется при проектировании чипов) — задача чудовищной сложности. Существующие методы либо работают на слишком абстрактном уровне, не покрывая реальный микроархитектурный дизайн, либо слишком дорогостоящи для сколько-нибудь сложных ядер.

Что такое Granite

Именно сюда приходят авторы новой работы — Стелла Лау, Андрес Эрбсен и Адам Хлипала, — публикуя на arXiv техническую статью «Granite: A Modular Methodology for Foundational Verification of Hardware-Software Leakage Contracts». Партнёрский альянс MIT, Google и Вашингтонского университета не случаен: здесь соединились компетенции в формальной верификации, промышленном hardware-дизайне и системной безопасности.

Granite — это методология модульной верификации RTL-процессоров, которая проверяет одновременно две вещи:

  • Функциональную корректность — процессор действительно выполняет инструкции в соответствии со спецификацией ISA.
  • Отсутствие утечек (nonleakage) — процессор не выдаёт секретную информацию через временные побочные каналы.

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

Как это работает

Центральный результат работы звучит так: тактовая точность пайплайнизированного RISC-дизайна — со спекуляцией, точными прерываниями и вводом-выводом — определяется исключительно наблюдаемыми величинами, указанными в контракте утечек ISA.

Если перевести это на человеческий: формально доказано, что никакие скрытые микроархитектурные детали (кроме тех, что явно объявлены в спецификации) не влияют на видимое программе поведение процессора по времени.

Для программ, следующих принципу криптографической константности времени (cryptographic constant-time discipline) — то есть написанных так, чтобы время их выполнения не зависело от секретных данных — этот результат полностью исключает утечку информации через известные и неизвестные временные побочные каналы.

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

Почему это важно на практике

У Granite есть несколько практических следствий, которые стоит выделить:

Доверие к криптографическим ускорителям. В мире, где аппаратные модули шифрования встроены практически в каждый SoC, гарантия отсутствия утечек через побочные каналы — вопрос не академический, а вполне коммерческий. Производители чипов для платёжных систем, модулей безопасности и аппаратных кошельков заинтересованы в таких результатах.

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

Модульность как путь к масштабированию. Предыдущие работы в области формальной верификации hardware часто страдали от проблемы «не проходит на реальном размере». Модульный подход Granite позволяет верифицировать отдельные блоки конвейера, а потом собирать доказательство — это открывает дорогу к применению на более сложных дизайнах.

Оговорки и перспективы

Стоит отметить несколько нюансов. Во-первых, Granite работает с RISC-архитектурами — а они заведомо проще CISC-процессоров. Распространить подход на, скажем, x86 с его сложнейшей микроархитектурой — задача совершенно другого порядка.

Во-вторых, гарантия Granite работает в связке с программным обеспечением, написанным по принципу константности времени. Если код не соблюдает эту дисциплину — скажем, использует зависимые от секрета ветвления — то и формальная верификация железа не спасёт.

В-третьих, статья пока опубликована на arXiv (июль 2026) и проходит рецензирование. Технические детали доказательств потребуют времени на проверку сообществом, но сам факт участия Google в исследовании намекает на практическую значимость результатов.

Для индустрии, которая после атак Spectre в 2018 году до сих пор занимается בעיקר паллиативными мерами в виде патчей и отключений фич, Granite — это попытка подойти к проблеме фундаментально. Не исправлять утечки постфактум, а доказать их отсутствие на этапе проектирования. Идея не новая, но её реализация на уровне RTL с модульной верификацией — шаг вперёд, который заслуживает внимания.