January 7

Приватные протоколы Ethereum

В этом посте сделан краткий обзор приватных EVM-совместимых протоколов: Railgun, Privacy Pools и Stealth Addresses (в тч. Fluidkey и Curvy.box). Приятного чтения;)

Для чего нужны приватные протоколы для Ethereum?

Ethereum — это L1 блокчейн, являющийся полностью открытым/публичным по умолчанию. Если упростить, вся "база данных" Ethereum: все транзакции, активы пользователей и тд., являются видимыми для всех. Причины важности финансовой приватности очевидны; несколько из них:

  • Защита от мошенничества и "кражи" личности — доступ к платежам человека облегчает способы взлома: фишинг, социальную инженерию и тд.
  • Снижение риска целевых атак
  • Личная безопасность
  • Контроль над данными и минимизация “цифрового следа” на будущее

Такие протоколы, как Railgun, позволяют приватно хранить активы он-чейн (FT/NFT), приватно отправлять транзакции, в тч. использовать DeFI и тд.

Railgun

Railgun — открытая инфраструктура для приватности EVM чейнов (live on Ethereum, Arbitrum, BSC). "Создан" и полностью управляется DAO Railgun (держателями токена $RAIL). За операции shield/unshield берется комиссия 0.25% в токене, которая идет в полном объеме в treasury DAO Railgun и делится в пропорциональных долях между стейкерами $RAIL.

Railgun не поставляет кошельки или dapp, а только инфраструктуру. Для использования данной инфраструктуры созданы полностью open-source кошельки (пр. Railway Wallet); также в данный момент Ethereum Foundation ведет разработку проекта Kohaku — SDK для интеграции приватного функционала в кошельки (фактически используя Railgun "под капотом").

Для обеспечения приватности используется zk-криптография (Groth16).

Railgun позволяет переводы любых сумм, благодаря использованию “приватной” UTXO модели, чем отличается, например, от Tornado Cash и Privacy Pools, которые позволяют только депозит / вывод фиксированных сумм:

  • В Tornado Cash пользователь генерирует secret и nullifier, затем делает депозит фиксированной суммы, добавляя hash(secret, nullifier) в общий пул (дерево Меркла). Подобным образом депозиты всех пользователей смешиваются в одном пуле. Для вывода токенов с пула пользователь делает zk-proof, что он один из тех, кто сделал депозит (доказывая знание значения secret, при этом не раскрывая его) и раскрывает значение nullifier для предотвращения повторного вывода средств.
  • В Railgun при депозите токенов в общий пул пользователь создает для себя набор UTXO нот (аналогично Bitcoin). UTXO Railgun — это структура {pk, value, token}, где pk — это публичный ключ ноты, value — значение, token — адрес смарт-контракта токена. Для приватной отправки токенов (A -> B) пользователь A создает новые "выходные" UTXO, где новым владельцем становится пользователь B, и также публикует nullifier, который предотвращает повторное использование тех же UTXO.

Railgun также позволяет использовать “Private” Dapp (в тч. Defi) благодаря системе адаптеров.

Privacy Pools

Privacy Pools — это развитие идей Tornado Cash (пул с депозитами/выводами фиксированных сумм) с отдельным способом доказательства “добропорядочности” (комплаенса):

  • Помимо общего Merkle дерева всех коммитментов, существует AST (Association Set Tree) данного ASP (провайдера). Для вывода средств из пула нужно доказать включение в AST. Провайдер включает депозит в AST на свое усмотрение
  • Используется структура LeanIMT (Lean Incremental Merkle Tree) — оптимизированное дерево Меркла; характеризуется отсутствием “нулевых” хэшей и динамической глубиной, более эффективно он-чейн в сравнении с дефолтным вариантом. Разработана командой PSE Ethereum Foundation

Privacy Pools является Dapp, и не требует отдельных кошельков для использования. Тем не менее, Kohaku SDK также дает выбор использовать Privacy Pools вместо Railgun.

Stealth Addresses

Stealth-адреса — это механизм конфиденциальности, который позволяет отправителю создавать неограниченное количество уникальных одноразовых адресов для получателя на основе его публичного ключа так, что:

  • Связь между этим адресом и реальным владельцем видна только участникам транзакции
  • Только “законный” получатель может вычислить приватный ключ для управления средствами на этом адресе

Подробный обзор на стелс адреса можно почитать в блоге Виталика Бутерина: https://vitalik.eth.limo/general/2023/01/20/stealth.html

Две наиболее известные реализации стелс адресов — это Fluidkey и Curvy.box

Fluidkey

Fluidkey – проект, реализующий механизм Stealth-адресов. Протокол совместим с ERC5564 криптографией, но в отличие от ERC5564 не является полностью Trustless:

  • Нет ERC-5564 он-чейн скана событий
  • Viewing Key делегируется приложению/разработчикам
  • Для резолва мета-адресов используется off-chain resolver Fluidkey; при этом нет возможности этот резолвер сменить
  • Каждый стелс-адрес фактически является Safe смарт-контрактом, управляемым одним и тем ключом (Spending Key), который есть только у пользователя: Self-Custodial, но Data-Trusted!

TL;DR: Fluidkey – это bank-like проект/продукт с удобным UX, но не обеспечивает полную приватность

Curvy.box

Curvy.box – альтернативный Stealth-адрес протокол:

  • Не совместим с ERC-5564
  • Использует пэйринги (Bn254) для вычисления Shared Secret. Сделано это для протокольных оптимизаций, а именно для эффективного сканирования входящих трансферов
  • Менее удобный UX, чем у fluidkey, но при этом Trustless

TL;DR: Curvy.box, в отличие от fluidkey – это полностью Trustless протокол + SDK

Примечания

Спасибо за внимание ✌️

Пишите комментарии, задавайте вопросы! Буду рад обсудить с вами этот пост в моем телеграм канале: @rasulschannel