Виталик Бутерин представил концепцию скрытых адресов для повышения конфиденциальности пользователей Ethereum

1 год назад 0

Виталик Бутерин представил концепт скрытых, или невидимых адресов (stealth addresses), который может решить проблему анонимности криптопользователей — новая разработка поможет анонимизировать одноранговые транзакции, передачу NFT и регистрацию в службе Ethereum ENS.

Stealth addresses — Принципы работы скрытых адресов в сети Ethereum

— Желающий получить активы создает и сохраняет «ключ расходов», который потребуется для создания скрытого мета-адреса.

— Мета-адрес, который можно зарегистрировать в ENS, передают отправителю.

— Принадлежность скрытого адреса получателю подтверждает временный ключ.

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

— Для каждой новой транзакции потребуется создавать отдельный скрытый адрес.

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

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

Далее, публикуем перевод оригинальной статьи Виталика Бутерина

Неполное руководство по скрытым адресам

Особая благодарность Бену Дифранческо, Мэтту Соломону, Тони Варштеттеру и Антонио Сансо за отзывы и обзоры

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

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

Что такое скрытая адресная система?

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

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

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

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

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

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

Боб генерирует свой корневой расходный ключ (m) и скрытый мета-адрес (M).
Боб добавляет запись ENS для регистрации M в качестве скрытого мета-адреса для bob.eth.
Мы предполагаем, что Алиса знает, что Боб — это bob.eth. Алиса ищет его скрытый мета-адрес M на ENS.
Алиса генерирует эфемерный ключ, который знает только она и который она использует только один раз (для генерации этого конкретного скрытого адреса).
Алиса использует алгоритм, который объединяет ее эфемерный ключ и мета-адрес Боба для генерации скрытого адреса. Теперь она может отправлять активы по этому адресу.

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

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

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

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

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

Скрытые адреса с криптографией эллиптической кривой

Скрытые адреса, использующие криптографию с эллиптической кривой, были первоначально введены в контексте биткойна Питером Тоддом в 2014 году. Этот метод работает следующим образом (это предполагает предварительное знание базовой криптографии с эллиптическими кривыми; смотрите здесь, здесь и здесь некоторые учебные пособия):

Боб генерирует ключ m и вычисляет M = G * m, где G — общепринятая точка генератора для эллиптической кривой. Скрытый мета-адрес представляет собой кодировку M.
Алиса генерирует эфемерный ключ r и публикует эфемерный открытый ключ R = G * r.
Алиса может вычислить общий секрет S = M * r, а Боб может вычислить тот же общий секрет S = m * R.

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

Это удовлетворяет всем нашим требованиям, изложенным выше, и удивительно просто!

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

Скрытые адреса и оплата комиссий за транзакции

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

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

Есть один «простой» способ решить проблему: просто используйте 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)).

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

Скрытые адреса и защита, устойчивая к квантам

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

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

The main weakness of isogeny-based cryptography is its highly complicated underlying mathematics, and the risk that possible attacks are hidden under this complexity. Some isogeny-based protocols were broken last year, though others remain safe. The main strength of isogenies is the relatively small key sizes, and the ability to port over many kinds of elliptic curve-based approaches directly.

A 3-isogeny in CSIDH, source here.

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

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

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

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

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

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

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

Однако для этого требуется СТАРК, а старки большие. В конечном счете, я думаю, вполне вероятно, что постквантовый мир Ethereum будет включать множество приложений, использующих множество старков, и поэтому я бы выступил за протокол агрегации, подобный описанному здесь, чтобы объединить все эти старки в один рекурсивный СТАРК для экономии места.

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

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

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

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

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

Более сложный подход предполагает доказательства с нулевым разглашением. Рассмотрим схему на основе ZKP выше, но изменив логику следующим образом. Вместо k = hash(hash(x), c)прямого удержания учетной записи учетная запись будет содержать (скрытую) привязку к местоположению kв цепочке. Расходы с этой учетной записи потребовали бы предоставления доказательства с нулевым разглашением, что (i) вы знаете местоположение в цепочке, которое соответствует этому обязательству, и (ii) объект в этом местоположении содержит некоторую ценность k(которую вы не раскрываете), и что у вас есть некоторые значенияxcкоторые удовлетворяют k = hash(hash(x), c).

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

Выводы

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

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

Нам очень интересно ваше мнение! Оставьте свой комментарий пожалуйста!