Приватные протоколы 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
Примечания
- Интересные тейки по приватности от a16z crypto: https://x.com/a16zcrypto/status/2008611265565127086
- Hinkal Protocol — приватный кошелек для Ethereum и др. сетей, работающий поверх своего приватного пула
- Aztec — приватный L2 Chain
Спасибо за внимание ✌️
Пишите комментарии, задавайте вопросы! Буду рад обсудить с вами этот пост в моем телеграм канале: @rasulschannel