Программируемая конфиденциальность в блокчейне: внесетевые вычисления с ончейн-верификацией
Публичные блокчейны обеспечивают прозрачность и целостность ценой конфиденциальности — каждая транзакция и состояние контракта открыты для всех участников. Такая открытость создает проблемы, такие как MEV-атаки (Maximum Extractable Value — максимально извлекаемая стоимость), копи-трейдинг и утечка конфиденциальной бизнес-логики. Программируемая конфиденциальность призвана решить эти проблемы, позволяя выполнять вычисления над частными данными без раскрытия самих данных. Это становится возможным благодаря двум развивающимся криптографическим парадигмам: виртуальным машинам с полностью гомоморфным шифрованием (FHE-VM) и копроцессорам с нулевым разглашением (ZK-копроцессорам). Эти подходы позволяют выполнять вычисления вне сети или в зашифрованном виде с верификацией в сети, сохраняя конфиденциальность и обеспечивая бездоверительную корректность. В этом отчете мы подробно рассмотрим архитектуры FHE-VM и ZK-копроцессоров, сравним их компромиссы и изучим варианты использования в финансах, идентификации, здравоохранении, на рынках данных и в децентрализованном машинном обучении.
Виртуальная машина с полностью гомоморфным шифрованием (FHE-VM)
Полностью гомоморфное шифрование (FHE) позволяет выполнять произвольные вычисления над зашифрованными данными без необходимости их расшифровки. Виртуальная машина FHE интегрирует эту возможность в смарт-контракты блокчейна, обеспечивая зашифрованное состояние и логику контракта. В блокчейне с поддержкой FHE (часто называемом fhEVM для EVM-совместимых разработок) все входные данные, хранилище контрактов и выходные данные остаются зашифрованными на протяжении всего процесса выполнения. Это означает, что валидаторы могут обрабатывать транзакции и обновлять состояние, не узнавая никаких конфиденциальных значений, достигая исполнения в сети при соблюдении конфиденциальности данных.
Архитектура и дизайн FHE-VM
Типичная FHE-VM расширяет стандартную среду выполнения смарт-контрактов (такую как Ethereum Virtual Machine) встроенной поддержкой зашифрованных типов данных и операций. Например, FHEVM от Zama вводит зашифрованные целые числа (euint8, euint32 и т. д.), зашифрованные логические значения (ebool) и даже зашифрованные массивы в качестве первоклассных типов. Языки смарт-контрактов, такие как Solidity, дополняются библиотеками или новыми кодами операций (opcodes), чтобы разработчики могли выполнять арифметические (add, mul и т. д.), логические операции и сравнения непосредственно над шифротекстами. Внутри эти операции вызывают примитивы FHE (например, с использованием библиотеки TFHE) для управления зашифрованными битами и получения зашифрованных результатов.
Хранение зашифрованного состояния поддерживается таким образом, что переменные контракта остаются зашифрованными в состоянии блокчейна. Процесс выполнения обычно выглядит так:
- Шифрование на стороне клиента: Пользователи шифруют свои входные данные локально, используя публичный ключ FHE, перед отправкой транзакций. Ключ шифрования является публичным (для шифрования и вычислений), в то время как ключ дешифрования остается в секрете. В некоторых моделях каждый пользователь управляет собственным ключом; в других используется единый глобальный ключ FHE (рассмотрено ниже).
- Гомоморфные вычисления в сети: Майнеры/валидаторы выполняют контракт с использованием зашифрованных кодов операций. Они выполняют одни и те же детерминированные гомоморфные операции над шифротекстами, что позволяет достичь консенсуса относительно нового зашифрованного состояния. Важно то, что валидаторы никогда не видят открытых данных — они видят только «бессмысленный» шифротекст, но при этом могут последовательно его обрабатывать.
- Дешифрование (опционально): Если результат необходимо раскрыть или использовать вне сети, авторизованная сторона с закрытым ключом может расшифровать выходной шифротекст. В противном случае результаты остаются зашифрованными и могут быть использованы в качестве входных данных для последующих транзакций (что позволяет проводить последовательные вычисления над постоянным зашифрованным состоянием).
Важным аспектом проектирования является управление ключами. Один из подходов — ключи для каждого пользователя, где каждый пользователь хранит свой секретный ключ, и только он может расшифровать относящиеся к нему выходные данные. Это максимизирует конфиденциальность (никто другой не сможет расшифровать ваши данные), но гомоморфные операции не могут смешивать данные, зашифрованные разными ключами, без сложных протоколов с несколькими ключами. Другой подход, используемый в FHEVM от Zama, — глобальный ключ FHE: единый публичный ключ шифрует все данные контракта, а распределенный набор валидаторов владеет долями ключа пороговой дешифровки. Публичные ключи шифрования и вычислений публикуются в сети, поэтому любой может зашифровать данные для сети; закрытый ключ разделен между валидаторами, которые могут коллективно выполнить дешифрование при достижении порога, если это необходимо. Чтобы предотвратить сговор валидаторов, Zama использует протокол порогового FHE (основанный на их исследовании Noah’s Ark) с механизмом «зашумления» (noise flooding) для обеспечения безопасности частичных дешифровок. Открытый текст может быть восстановлен только в том случае, если кооперируется достаточное количество валидаторов, например, для обслуживания запроса на чтение. Однако при обычной работе ни один узел никогда не видит открытый текст — данные всегда остаются зашифрованными в сети.
Контроль доступа — еще один важный компонент. Реализации FHE-VM включают детализированные средства управления тем, кто (если вообще кто-либо) может инициировать дешифрование или получать доступ к определенным зашифрованным полям. Например, fhEVM от Cypher поддерживает списки контроля доступа (ACL) для шифротекстов, позволяя разработчикам указывать, какие адреса или контракты могут взаимодействовать с определенными данными или перешифровывать их. Некоторые фреймворки поддерживают перешифрование (re-encryption): возможность передачи зашифрованного значения от ключа одного пользователя к ключу другого без раскрытия открытого текста. Это полезно для таких вещей, как рынки данных, где владелец данных может зашифровать набор данных своим ключом, а после покупки перешифровать его ключом покупателя — и все это в сети, без публичного раскрытия данных.
Обеспечение корректности и конфиденциальности
Возникает вопрос: если все данные зашифрованы, как обеспечить корректность логики контракта? Как сеть может предотвратить недопустимые операции, если она не «видит» значения? FHE сам по себе не предоставляет доказательства корректности — валидаторы могут выполнять гомоморфные шаги, но они не могут изначально определить, были ли зашифрованные входные данные пользователя действительными или следует ли переходить к условной ветке без дешифрования. Доказательства с нулевым разглашением (ZKP) могут дополнить FHE для решения этой проблемы. В FHE-VM пользователи обычно должны предоставлять ZK-доказательство, подтверждающее определенные условия открытого текста, когда это необходимо. Например, в дизайне Zama используется ZK-доказательство знания открытого текста (ZKPoK) для каждого зашифрованного ввода. Это доказывает, что пользователь знает открытый текст, соответствующий его шифротексту, и что он соответствует ожидаемым критериям, не раскрывая сам открытый текст. Такие «сертифицированные шифротексты» не позволяют злоумышленнику отправить некорректное шифрование или значение, выходящее за допустимые пределы. Аналогично, для операций, требующих принятия решения (например, проверка условия «баланс счета ≥ сумма вывода»), пользователь может предоставить ZK-доказательство того, что это условие истинно для открытых текстов, прежде чем будет выполнена зашифрованная операция. Таким образом, сеть не расшифровывает и не видит значения, но получает уверенность в том, что зашифрованные транзакции следуют правилам.
Другой подход в FHE-роллапах заключается в выполнении проверки вне сети с помощью ZKP. Fhenix (L2-роллап на базе FHE) выбирает оптимистичную модель, в которой отдельный сетевой компонент, называемый Threshold Service Network, может расшифровывать или проверять зашифрованные результаты, а любое неверное вычисление может быть оспорено с помощью доказательства мошенничества (fraud-proof). В целом, сочетание FHE + ZK или доказательств мошенничества гарантирует, что зашифрованное исполнение остается бездоверительным. Валидаторы либо коллективно расшифровывают данные только при наличии полномочий, либо проверяют доказательства того, что каждый зашифрованный переход состояния был валидным, без необходимости видеть открытый текст.
Вопросы производительности: FHE-операции требуют больших вычислительных ресурсов — они на много порядков медленнее обычных арифметических операций. Например, простое 64-битное сложение в Ethereum стоит около 3 единиц газа, тогда как сложение зашифрованного 64-битного целого числа (euint64) в FHEVM от Zama стоит примерно 188 000 единиц газа. Даже 8-битное сложение может стоить около 94 000 газа. Такие огромные накладные расходы означают, что прямая реализация на существующих узлах была бы практически невозможной из-за медлительности и стоимости. Проекты FHE-VM решают эту проблему с помощью оптимизированных криптографических библиотек (таких как библиотека TFHE-rs от Zama для бутстраппинга бинарных вентилей) и кастомных модификаций EVM для повышения производительности. Например, модифицированный клиент Geth от Cypher добавляет новые коды операций и оптимизирует выполнение гомоморфных инструкций на C++/ассемблере для минимизации задержек. Тем не менее, для достижения приемлемой пропускной способности требуется аппаратное ускорение. Текущая работа включает использование графических процессоров (GPU), программируемых логических интегральных схем (FPGA) и даже специализированных фотонных чипов для ускорения вычислений FHE. Zama сообщает, что производительность их FHE улучшилась в 100 раз с 2024 года, и целью является достижение тысяч транзакций в секунду (TPS) с ускорением на GPU/FPGA. Специализированные серверы-копроцессоры FHE (такие как узел LightLocker от Optalysys) могут подключаться к узлам валидаторов для разгрузки зашифрованных операций на аппаратное обеспечение, поддерживая более 100 зашифрованных переводов ERC-20 в секунду на один узел. По мере совершенствования оборудования и алгоритмов разрыв между FHE и обычными вычислениями будет сокращаться, что позволит приватным контрактам достичь практически значимых скоростей.
Совместимость: Ключевой целью разработок FHE-VM является сохранение совместимости с существующими рабочими процессами разработки. Реализации fhEVM от Cypher и Zama позволяют разработчикам писать контракты на Solidity с минимальными изменениями, используя библиотеку для объявления зашифрованных типов и операций. Остальную часть инструментария Ethereum (Remix, Hardhat и т. д.) по-прежнему можно использовать, поскольку основные модификации происходят на уровне клиента/узла. Это снижает порог входа: разработчикам не нужно быть экспертами в криптографии для написания конфиденциального смарт-контракта. Например, простое сложение двух чисел может быть записано как euint32 c = a + b;, и FHEVM обработает специфические детали шифрования в фоновом режиме. Контракты могут даже взаимодействовать с обычными контрактами — например, зашифрованный контракт может передавать расшифрованный результат в стандартный контракт, что позволяет смешивать приватные и публичные части в рамках одной экосистемы.
Текущие проекты FHE-VM: Несколько проектов являются первопроходцами в этой области. Zama (парижский стартап в области FHE) разработала концепцию FHEVM и библиотеки (TFHE-rs и библиотеку fhevm-solidity). Они не планируют запускать собственную сеть, а предоставляют инфраструктуру другим. Inco — это L1-блокчейн (построенный на Cosmos SDK с использованием Evmos), который интегрировал FHEVM от Zama для создания модульной конфиденциальной сети. Их тестовые сети (Gentry и Paillier) демонстрируют зашифрованные переводы ERC-20 и другие приватные примитивы DeFi. Fhenix — это оптимистичный роллап второго уровня (L2) для Ethereum, использующий FHE для обеспечения конфиденциальности. Они выбрали оптимистичный подход (с доказательствами мошенничества), а не ZK-роллап, из-за высокой стоимости одновременного выполнения FHE и ZK для каждого блока. Fhenix использует ту же библиотеку TFHE-rs (с некоторыми модификациями) и внедряет Threshold Service Network для децентрализованной обработки дешифрования. Также существуют независимые команды, такие как Fhenix (после ребрендинга), и стартапы, исследующие гибриды MPC + FHE. Кроме того, Cypher (от Z1 Labs) строит сеть третьего уровня (L3), ориентированную на ИИ и конфиденциальность, используя fhEVM с такими функциями, как секретные хранилища и поддержка федеративного обучения. Экосистема находится на начальном этапе, но быстро растет, подкрепляемая значительным финансированием — например, Zama стала «единорогом», привлев более 130 млн долларов к 2025 году для развития технологий FHE.
Таким образом, FHE-VM позволяет создавать смарт-контракты с сохранением конфиденциальности, выполняя всю логику над зашифрованными данными непосредственно в сети. Эта парадигма обеспечивает максимальную конфиденциальность — никакие чувствительные данные никогда не раскрываются в транзакциях или состоянии — при этом для обеспечения целостности используется существующий консенсус блокчейна. Платой за это является повышенная вычислительная нагрузка на валидаторов и сложность в управлении ключами и интеграции доказательств. Далее мы рассмотрим альтернативную парадигму, которая полностью выносит вычисления за пределы сети и использует блокчейн только для верификации: ZK-копроцессор.
ZK-копроцессоры (Zero-Knowledge Coprocessors)
ZK-копроцессор — это новый паттерн архитектуры блокчейна, при котором ресурсоемкие вычисления выполняются вне сети (off-chain), а лаконичное доказательство с нулевым разглашением их правильности проверяется в сети (on-chain). Это позволяет смарт-контрактам задействовать гораздо большие вычислительные мощности и объемы данных, чем позволяло бы ончейн-выполнение, без ущерба для децентрализации (trustlessness). Термин копроцессор используется по аналогии с аппаратными сопроцессорами (такими как математический сопроцессор или GPU), которые обрабатывают специализированные задачи для центрального процессора. В данном случае «процессор» блокчейна (нативная виртуальная машина, такая как EVM) делегирует определенные задачи системе доказательств с нулевым разглашением, которая выступает в роли криптографического сопроцессора. ZK-копроцессор возвращает результат и доказательство того, что результат был вычислен верно, которое ончейн-контракт может проверить и затем использовать.
Архитектура и рабочий процесс
В типичной конфигурации разработчик dApp определяет части логики своего приложения, которые слишком дороги или сложны для ончейн-выполнения (например, объемные вычисления на исторических данных, тяжелые алгоритмы, логический вывод моделей машинного обучения и т. д.). Они реализуют эти части как внечейновую программу (на языке высокого уровня или специализированном DSL для схем), которая может генерировать доказательство с нулевым разглашением своего выполнения. Ончейн-компонентом является смарт-контракт верификатор, который проверяет доказательства и предоставляет результаты остальной части системы. Процесс можно резюмировать следующим образом :
- Запрос (Request) — ончейн-контракт инициирует запрос на выполнение определенных вычислений вне сети. Это может быть инициировано транзакцией пользователя или вызовом интерфейса ZK-копроцессора другим контрактом. Например, DeFi-контракт может вызвать «proveInterestRate(currentState)», или пользователь может вызвать «queryHistoricalData(query)».
- Внечейновое выполнение и генерация доказательства (Off-Chain Execution & Proving) — внечейновая служба (которая может быть децентрализованной сетью пруверов или доверенным сервисом, в зависимости от дизайна) принимает запрос. Она собирает все необходимые данные (состояние блокчейна, внечейновые входные данные и т. д.) и выполняет вычисления в специальной ZK-виртуальной машине (ZKVM) или схеме. Во время выполнения генерируется трассировка доказательства. В конце служба выдает лаконичное доказательство (например, SNARK или STARK), подтверждающее, что «Вычисление функции F на входных данных X дает результат Y», и, опционально, подтверждающее целостность данных (подробнее об этом ниже).
- Ончейн-верификация (On-Chain Verification) — доказательство и результат возвращаются в блокчейн (часто через функцию обратного вызова — callback). Контракт-верификатор проверяет валидность доказательства, используя эффективную криптографическую проверку (проверки спаривания и т. д.). Если доказательство валидно, контракт может доверять результату Y как верному. Результат может быть сохранен в состоянии, передан в виде события или использован в дальнейшей логике контракта. Если доказательство недействительно или не предоставлено в течение определенного времени, запрос считается неудачным (и потенциально срабатывает логика резервного копирования или тайм-аута).
Рисунок 1 : Архитектура ZK-копроцессора (на примере RISC Zero Bonsai). Вне сети программа запускается на ZKVM с входными данными из вызова смарт-контракта. Доказательство выполнения возвращается в сеть через реле-контракт, который инициирует обратный вызов с верифицированными результатами.
Крайне важно, что затраты газа в сети на верификацию являются постоянными (или растут очень медленно) независимо от того, насколько сложными были внечейновые вычисления. Верификация лаконичного доказательства может стоить поряд ка нескольких сотен тысяч единиц газа (небольшая часть блока Ethereum), но это доказательство может представлять миллионы вычислительных шагов, выполненных вне сети. Как пошутил один разработчик : «Хотите доказать одну цифровую подпись? ~ $15. Хотите доказать миллион подписей? Тоже ~ $15». Такая масштабируемость — огромный плюс : dApps могут предлагать сложные функции (аналитика больших данных, сложные финансовые модели и т. д.), не перегружая блокчейн.
Основными компонентами системы ZK-копроцессора являются :
-
Среда генерации доказательств (Proof Generation Environment) : это может быть ZKVM общего назначения (способная запускать произвольные программы) или кастомные схемы, адаптированные для конкретных вычислений. Подходы различаются :
- Некоторые проекты используют созданные вручную схемы (handcrafted circuits) для каждого поддерживаемого запроса или функции (максимизируя эффективность для этой функции).
- Другие предоставляют предметно-ориентированный язык (DSL) или встроенный DSL (Embedded DSL), который разработчики используют для написания своей внечейновой логики, котор ая затем компилируется в схемы (балансируя между простотой использования и производительностью).
- Самым гибким подходом является zkVM : виртуальная машина (часто на основе архитектур RISC), где программы могут быть написаны на стандартных языках (Rust, C и т. д.) и автоматически доказаны. Это требует определенных жертв в производительности (симуляция процессора в схеме добавляет накладные расходы) ради максимального удобства для разработчиков.
-
Доступ к данным и их целостность : уникальной задачей является предоставление внечейновым вычислениям корректных данных, особенно если эти данные находятся в блокчейне (прошлые блоки, состояния контрактов и т. д.). Наивное решение — заставить прувера читать данные из архивного узла и доверять ему, но это вводит допущения о доверии. Вместо этого ZK-копроцессоры обычно доказывают, что любые используемые ончейн-данные действительно были аутентичными, связывая их с доказательствами Меркла или обязательствами по состоянию (state commitments). Например, программа запроса может принимать номер блока и доказательство Меркла для слота хранения или транзакции, а схема проверит это доказательство на соответствие известному хешу заголовка блока. Существует три паттерна :
- Встроенные данные (Inline Data) : поместить необходимые данные в блокчейн (как входные данные для верификатора), чтобы их можно было проверить напрямую. Это очень дорого для больших объемов данных и сводит на нет весь смысл использования копроцессора.
- Доверие оракулу : использовать сервис оракула для передачи данных в доказательство и поручительства за них. Это проще, но снова вводит доверие к третьей стороне.
- Доказательство включения данных через ZK : включить доказательства включения данных в историю блокчейна в саму схему с нулевым разглашением. Это использует тот факт, что каждый заголовок блока Ethereum фиксирует все предшествующее состояние (через корень состояния) и историю транзакций. Проверяя доказательства Merkle Patricia для данных внутри схемы, выходное доказательство гарантирует контракту, что «это вычисление использовало подлинные данные блокчейна из блока N» без необходимости в дополнительном доверии.