BTC $78,976.72 -0.90%
ETH $2,479.31 -0.14%
BNB $739.57 -1.06%
XRP $1.39 -1.31%
SOL $103.72 -2.33%
TRX $0.3340 -0.38%
DOGE $0.0900 +0.95%
ADA $0.2208 +1.02%
BCH $267.17 +4.07%
LINK $12.92 +4.78%
HYPE $85.47 -3.19%
AAVE $132.00 -1.02%
SUI $0.8137 +1.47%
XLM $0.1923 +4.21%
ZEC $1,155.81 -1.96%
BTC $78,976.72 -0.90%
ETH $2,479.31 -0.14%
BNB $739.57 -1.06%
XRP $1.39 -1.31%
SOL $103.72 -2.33%
TRX $0.3340 -0.38%
DOGE $0.0900 +0.95%
ADA $0.2208 +1.02%
BCH $267.17 +4.07%
LINK $12.92 +4.78%
HYPE $85.47 -3.19%
AAVE $132.00 -1.02%
SUI $0.8137 +1.47%
XLM $0.1923 +4.21%
ZEC $1,155.81 -1.96%

Виталик новая работа: неполное руководство по скрытым адресам

Summary: Виталик Бутерин считает, что текущие скрытые адреса могут быть быстро реализованы и значительно повысить конфиденциальность пользователей Ethereum, но также могут привести к проблемам с удобством, таким как сложность восстановления социальных кошельков. В долгосрочной перспективе эти проблемы могут быть решены, однако экосистема скрытых адресов действительно сильно зависит от доказательства с нулевым разглашением.
Виталик Бутерин
2023-01-25 12:37:11
Виталик Бутерин считает, что текущие скрытые адреса могут быть быстро реализованы и значительно повысить конфиденциальность пользователей Ethereum, но также могут привести к проблемам с удобством, таким как сложность восстановления социальных кошельков. В долгосрочной перспективе эти проблемы могут быть решены, однако экосистема скрытых адресов действительно сильно зависит от доказательства с нулевым разглашением.

Оригинальное название: Неполное руководство по скрытым адресам
Автор: Vitalik Buterin
Перевод: Karen, Foresight News

Одной из самых больших проблем в текущей экосистеме Ethereum является конфиденциальность. По умолчанию все, что попадает в публичный блокчейн, является общедоступным, что означает не только активы и транзакционную активность, но и такие вещи, как ENS доменные имена, POAP, NFT и токены, связанные с душой. Использование ряда приложений Ethereum означает, что многие ваши действия будут открыты для просмотра и анализа другими.

Нам нужно улучшить эту ситуацию. Однако до сих пор обсуждения по улучшению конфиденциальности в основном сосредоточены на одном конкретном случае использования, а именно: конфиденциальные переводы ETH и основных токенов ERC20. Эта статья опишет механизм и случаи использования различных категорий инструментов, которые могут улучшить состояние конфиденциальности Ethereum в многих других случаях, а именно концепцию «скрытых адресов» (stealth addresses).

Что такое система скрытых адресов?

Предположим, что Алиса хочет перевести активы Бобу, возможно, определенное количество криптовалюты (например, 1 ETH, 500 RAI), или это может быть NFT. Когда Боб получает активы, он не хочет, чтобы другие знали, что получателем этих активов является он. Скрыть факт перевода невозможно, особенно если передается NFT, который существует только в одном экземпляре в цепочке, однако скрыть, кто является получателем, может быть более осуществимо.

Алиса и Боб скорее всего хотят, чтобы процесс платежа выглядел следующим образом: Боб отправляет Алисе (или поддерживающему ENS доменное имя) некий «адрес», который может принимать платежи, и этой информации достаточно, чтобы Алиса (или любой другой) могла отправить ему активы, и это почти полностью соответствует текущему рабочему процессу платежей.

Важно отметить, что эта конфиденциальность совершенно отличается от той, которую предлагает Tornado Cash. Tornado Cash может скрыть переводы основных заменяемых активов, таких как ETH или основные токены ERC-20 (часто используемые для отправки себе), но очень слабо добавляет конфиденциальность к менее известным переводам ERC20 и совершенно не может добавить конфиденциальность к переводам NFT.

Виталик новая работа: неполное руководство по скрытым адресам

Как упоминалось выше, обычный рабочий процесс платежей с использованием криптовалюты увеличивает конфиденциальность, то есть никто не может знать, что получателем активов является Боб, и рабочий процесс не изменился.

Скрытые адреса могут быть сгенерированы как Алисой, так и Бобом, но только Боб может ими управлять. Боб генерирует ключ расходования (spending key) и хранит его в секрете, затем использует этот ключ для генерации скрытого мета-адреса (stealth meta-address). Он передает этот мета-адрес Алисе (или регистрирует его на ENS). Алиса может выполнить вычисления на этом мета-адресе, чтобы сгенерировать скрытый адрес, принадлежащий Бобу. Затем Алиса может отправить любые активы, которые она хочет, на этот адрес, и Боб будет полностью контролировать эти активы. В процессе перевода Алиса публикует в цепочке некоторые дополнительные зашифрованные данные (временный открытый ключ), чтобы помочь Бобу обнаружить, что этот адрес принадлежит ему.

Другой способ взглянуть на это: скрытые адреса предоставляют Бобу такие же свойства конфиденциальности, создавая новый адрес для каждой транзакции, но не требуют никакого взаимодействия с Бобом.

Полный рабочий процесс схемы скрытых адресов показан ниже:

Виталик новая работа: неполное руководство по скрытым адресам

  1. Боб генерирует свой корневой ключ расходования (m) и скрытый мета-адрес (M).

  2. Боб добавляет запись ENS, чтобы зарегистрировать (M) как скрытый мета-адрес bob.eth.

  3. Предположим, что Алиса знает, что адрес Боба — bob.eth. Алиса ищет скрытый мета-адрес Боба (M) на ENS.

  4. Алиса генерирует временный ключ, который известен только ей, и который может быть использован только один раз (для генерации этого конкретного скрытого адреса).

  5. Алиса использует алгоритм, чтобы объединить свой временный ключ и мета-адрес Боба для генерации скрытого адреса. Теперь она может отправить активы на этот адрес.

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

  7. Чтобы Боб мог обнаружить свой скрытый адрес, ему нужно просмотреть реестр временных открытых ключей, чтобы найти весь список временных открытых ключей, опубликованных кем-либо с момента его последнего сканирования.

  8. Для каждого временного открытого ключа Боб пытается объединить его с корневым ключом расходования, чтобы сгенерировать скрытый адрес, и проверяет, есть ли активы на этом адресе. Если есть, Боб вычисляет ключ расходования для этого адреса и запоминает его.

Все это зависит от двух применений криптографического обмана. Во-первых, нам нужна пара алгоритмов для генерации общего ключа (shared secret): один алгоритм использует временный ключ Алисы и мета-адрес Боба, другой алгоритм использует корневой ключ расходования Боба и временный открытый ключ Алисы. Это можно сделать несколькими способами; Обмен ключами Диффи-Хеллмана является одним из достижений современного криптографического поля, которое как раз это и реализует.

Но просто общий секрет недостаточен: если мы просто сгенерируем закрытый ключ из общего секрета, то Алиса и Боб смогут расходовать с этого адреса. Мы также добавили механизм слепого ключа: в паре алгоритмов Боб может объединить общий ключ с его корневым ключом расходования, в то время как Алиса может объединить общий ключ с мета-адресом Боба, так что Алиса может сгенерировать скрытый адрес, а Боб может сгенерировать ключ расходования для этого скрытого адреса, и все это без создания публичной связи между скрытым адресом и мета-адресом Боба (или между одним скрытым адресом и другим скрытым адресом).

Использование эллиптической кривой для скрытия адресов

Использование эллиптической кривой для скрытия адресов было впервые введено Питером Тоддом в 2014 году в контексте биткойна. Технология работает следующим образом:

· Боб генерирует ключ (m) и вычисляет M = G * m, где G — это общепринятая генеративная точка эллиптической кривой. Скрытый мета-адрес — это (M).

· Алиса генерирует временный ключ (r) и публикует временный открытый ключ R = G * r.

· Алиса может вычислить общий ключ S = M * r, и Боб также может вычислить тот же общий ключ S = m * R.

· В общем, в биткойне и Ethereum (включая правильно спроектированные аккаунты ERC-4337) адреса содержат хэш открытого ключа, используемого для проверки транзакций, исходящих с этого адреса. Поэтому, если вы вычислите открытый ключ, вы сможете вычислить адрес. Чтобы вычислить открытый ключ, Алиса или Боб могут вычислить P = M + G * hash(S)

· Чтобы вычислить закрытый ключ для этого адреса, Боб может вычислить p = m + hash(S)

Это удовлетворяет всем нашим требованиям выше и очень просто.

Существует даже EIP, который пытается определить стандарт скрытых адресов для Ethereum, который поддерживает этот метод и предоставляет пользователям пространство для разработки других методов (например, поддержка того, чтобы Боб имел отдельные ключи расходования и просмотра, или использование различной криптографии для достижения квантовой безопасности). Теперь вы можете подумать: скрытые адреса не так уж сложны, теоретические знания уже прочны, и принятие — это всего лишь деталь реализации. Однако проблема в том, что действительно эффективная реализация требует некоторых важных деталей реализации.

Скрытые адреса и оплата транзакционных сборов

Предположим, кто-то отправил вам NFT. Если вы хотите обеспечить конфиденциальность, они отправят его на скрытый адрес, который вы контролируете. После сканирования временного открытого ключа в цепочке ваш кошелек автоматически обнаружит этот адрес. Теперь вы можете свободно доказать право собственности на NFT или передать его другим. Но есть одна проблема: баланс ETH на этом аккаунте равен 0, поэтому вы не можете оплатить транзакционные сборы. Даже платежи токенами ERC-4337 не сработают, потому что они применимы только к заменяемым токенам ERC20. И вы не можете отправить ETH с вашего основного кошелька на него, потому что в этом случае вы создадите публичную видимую связь, что означает, что конфиденциальность будет потеряна.

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

Другой более умный способ заключается в доверии специализированным агрегаторам транзакций (в терминах MEV — поисковикам). Эти агрегаторы позволят пользователям заплатить один раз за покупку набора «билетов», которые можно использовать для оплаты транзакций в цепочке. Когда пользователю нужно потратить NFT на скрытом адресе, он предоставляет агрегатору один из своих билетов, закодированный с использованием слепого метода Чаума. Это оригинальный протокол, использовавшийся в централизованных схемах электронных денег с защитой конфиденциальности, предложенных в 1980-х и 1990-х годах. Поисковик принимает билет и повторно включает транзакцию бесплатно в свои пакеты до тех пор, пока транзакция не будет успешно принята в блоке.

Скрытые адреса и разделение ключей расходования и просмотра

Предположим, что Боб не имеет только одного главного «корневого ключа расходования», который может делать все, а хочет отдельный корневой ключ расходования и ключ просмотра. Этот ключ просмотра может видеть все скрытые адреса Боба, но не может производить расходы.

В мире эллиптических кривых это можно решить с помощью очень простого криптографического трюка:

· Мета-адрес Боба (M) теперь имеет вид (K, V), кодируя G * k и G * v, где k — это ключ расходования, а v — это ключ просмотра.

· Общий ключ теперь равен S = V * r = v * R, где r по-прежнему является временным ключом Алисы, а R по-прежнему является временным открытым ключом, опубликованным Алисой.

· Открытый ключ скрытого адреса — это P = K + G * hash(S), закрытый ключ — это p = k + hash(S).

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

Это имеет множество случаев использования. Например, если Боб хочет получить POAP, он может дать своему кошельку POAP (или даже менее безопасному веб-интерфейсу) ключ просмотра, чтобы просканировать цепочку и увидеть все свои POAP, не передавая этому интерфейсу полномочия тратить эти POAP.

Скрытые адреса и легкость сканирования

Чтобы упростить сканирование всего набора временных открытых ключей, одной из технологий является добавление метки просмотра к каждому временно открытому ключу. Один из способов реализации этого в вышеупомянутом механизме — сделать метку просмотра одним байтом общего ключа (например, x-координата S по модулю 256 или первый байт hash(S)).

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

Скрытые адреса и квантовая безопасность

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

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

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

Виталик новая работа: неполное руководство по скрытым адресам

A 3-isogeny in CSIDH

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

Виталик новая работа: неполное руководство по скрытым адресам

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

Третий подход заключается в построении схемы скрытых адресов из универсальных черных ящиков. Генерация общего ключа в этой схеме напрямую сопоставляется с обменом ключами, который является важной частью систем с открытым ключом. Более сложная часть заключается в том, чтобы позволить Алисе генерировать только скрытые адреса (а не ключи расходования) и позволить Бобу генерировать ключи расходования с помощью параллельных алгоритмов.

К сожалению, вы не можете использовать более простые компоненты, чем те, которые необходимы для построения системы с открытым ключом, чтобы создать скрытые адреса. Существует простое доказательство того, что можно построить систему с открытым ключом с помощью схемы скрытых адресов. Если Алиса хочет зашифровать сообщение для Боба, она может отправить N транзакций, каждая из которых либо на скрытый адрес Боба, либо на скрытый адрес, принадлежащий ей, и Боб может видеть, какие транзакции он получил, чтобы прочитать сообщение. Это важно, потому что в математическом доказательстве вы не можете использовать только хэш для создания системы с открытым ключом, в то время как вы можете использовать только хэш для создания доказательства с нулевым знанием, поэтому скрытые адреса не могут быть реализованы только с помощью хэша.

Это действительно способ использования относительно простых компонентов: доказательства с нулевым знанием, которые могут состоять из хэша и (скрытого ключа) шифрования с открытым ключом. Мета-адрес Боба — это открытый зашифрованный ключ плюс хэш h = hash(x), его ключ расходования — это соответствующий ключ расшифровки плюс x. Чтобы создать скрытый адрес, Алиса генерирует значение c и публикует зашифрованное Bob-ом c как свой временный открытый ключ. Сам адрес является аккаунтом ERC-4337, код которого проверяет транзакции, требуя доказательства с нулевым знанием, чтобы подтвердить право собственности на значения x и c, так что k = hash(hash(x), c) (где k является частью кода аккаунта). Зная x и c, Боб может самостоятельно восстановить адрес и код.

Виталик новая работа: неполное руководство по скрытым адресам

Шифрование (c) не сообщит никому, кроме Боба, никакой информации, и (k) является хэшем, который почти не раскрывает ничего о c. Код кошелька сам по себе содержит только (k), (c) является приватным, что означает, что (k) не может быть прослежено до (h).

Тем не менее, это требует STARK. В конечном итоге я считаю, что мир постквантового Ethereum, вероятно, будет включать в себя использование множества STARK для приложений, поэтому я выступаю за агрегированные протоколы, описанные здесь, чтобы объединить все эти STARK в один рекурсивный STARK для экономии места.

Скрытые адреса и социальное восстановление, а также мульти L2 кошельки

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

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

Существуют аналогичные опасения относительно взаимодействия социального восстановления и нескольких протоколов L2: если у вас есть аккаунты на Optimism, Arbitrum, StarkNet, Scroll, Polygon, из-за масштабируемости есть десятки параллельных экземпляров, и у вас есть аккаунт на каждом экземпляре, то изменение ключа может быть очень сложной операцией.

Виталик новая работа: неполное руководство по скрытым адресам

Изменение ключей для нескольких аккаунтов на нескольких цепочках — это огромная работа.

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

Более сложный подход включает в себя доказательства с нулевым знанием. Это позволяет множеству аккаунтов, даже через множество протоколов L2, контролироваться одним значением k, изменение которого достаточно для изменения собственности всех аккаунтов, и все это не раскрывает связь между вашими несколькими аккаунтами.

Заключение

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

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

warnning Предупреждение о рисках
app_icon
ChainCatcher Building the Web3 world with innovations.