Вчера команда Zcash объявила об активации хардфорка Sapling, который произошел на блоке 419200. Новая версия сети обеспечивает повышенную производительность: на 90% меньше времени на создание транзакции и на 97% меньше потребления памяти. Одна из основных причин для столь резкого сокращения ресурсозатрат связана с центральным элементом архитектуры Zcash — скрытыми адресами.

Проблемы скрытых адресов

В настоящий момент скрытые адреса Zcash требуют настолько больших вычислительных мощностей, что большинство пользователей и бирж не могут их использовать и применяют предусмотренный в Zcash функционал публичных транзакций. Первоначально команда приватной криптовалюты Zash намеренно ввела опцию прозрачных транзакций, которые, являясь менее «требовательными» в техническом плане, способствовали более широкому принятию криптовалюты. Однако существенный минус публичных транзакций в системе Zcash в том, что они снижают анонимность сети в целом. Хардфорк «делает нас на шаг ближе к открытой, эксклюзивной и приватной платежной системе, — говорит команда проекта. — Сделать скрытые адреса повсеместно используемыми — это главное в нашей миссии. “Возможности для всех” — это не просто слова для нашей команды. Это свет, который ведет нас в плане целей и направления по мере того, как мы продолжаем инновации и эксперименты».

В перспективе Zcash планирует полностью отказаться от функционала публичных транзакций. «Мы надеемся увидеть массовый переход на приватный Sapling, и по мере этого перехода мы надеемся переключиться на приватность по умолчанию, когда наступит подходящий момент. Все, что делает Sapling, — это совершенствует производительность и безопасность. Кто же этого не захочет?» — говорит CTO Zcash Натан Уилкокс.

По его словам, старая версия блокчейна была «слишком непроизводительной и громоздкой». В частности, до активации Sapling функционал скрытых транзакций был доступен только пользователям, у которых была запущена полная нода Zcash. Теперь же скрытые адреса смогут применяться в рамках бирж и легких кошельков (которые не хранят полную версию блокчейна на пользовательском устройстве). Это возможно благодаря сильно сниженным техническим требованиям к скрытым транзакциям (теперь они занимают примерно в 100 раз меньше памяти и осуществляются в 6 или более раз быстрее).

При этом Уилкокс отмечает, что легкие клиенты с поддержкой скрытых адресов «не появятся сами собой в день активации [хардфорка]» — они потребуют определенных разработческих усилий. Это связано с тем, что в них должны быть реализованы надежные механизмы безопасности, чтобы они не могли раскрыть транзакционную информацию хостинговому серверу кошелька. В настоящий момент команда работает над proof-of-concept такого кошелька. «Наша цель — сделать легкий кошелек, который имеет защиту приватности даже против собственного провайдера. Наша цель — разработать полноценный пользовательский опыт конкретно для Sapling и убедиться, что мы можем хорошо сочетать практичность и приватность», — сказал Уилкокс в разговоре с CoinDesk. Есть вероятность, что этот кошелек не дойдет до пользователей и будет применяться только в качестве «наглядной модели» для сторонних разработчиков, создающих на его основе собственные реализации.

Cкрытые HD-кошельки

Это еще одно нововведение, реализованное в версии Sapling. Иерархически-детерминированные, или HD-кошельки, были изначально предложены в биткоине в 2012 году. Эти кошельки получают приватные ключи и адреса из сид-фразы — «семени» — представляющего собой рандомный набор слов. Таким образом из сида можно сгенерировать бесконечное число адресов, привязанных к одному кошельку. Эта система позволяет пользователям иметь резервную копию кошелька и полностью восстанавливать его просто с помощью набора слов, тогда как в противном случае приходилось бы делать новые резервные копии каждый раз, когда создается новый адрес внутри кошелька.

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

Модель иерархически-детерминированного Sapling-кошелька
Модель иерархически-детерминированного Sapling-кошелька. Источник.

Как и предполагается при использовании HD-кошельков, владение сидом будет обеспечивать доступ к полному дереву ключей внутри кошелька. Сначала сид устанавливает пару мастер-ключей, которая состоит из «ключа для траты» и «ключа для просмотра». В отличие от традиционной пары приватного и публичного ключа (адреса), оба ключа в HD-кошельке Zcash приватные.

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

Возможность раскрывать детали входящих транзакций с помощью ключа просмотра была доступна в Zcash с версии 1.0.14, вышедшей в январе 2018 года. Команда отмечала, что раскрытие данных исходящих транзакций «представляет собой немного более сложную проблему, которая будет решена в ходе апгрейда Sapling».

Анатомия Sapling-транзакций

Базовые сценарии транзакций останутся доступны в новой версии сети, однако со скрытыми адресами произойдут некоторые изменения.

В транзакциях, использующих скрытые адреса старого формата, технология zero-knowledge proof реализована через JoinSplit. JoinSplit принимает одно или два входных значения и создает одно или два значения выхода транзакции. Эти значения входа и выхода называются записями. JoinSplit не раскрывает, сколько именно значений — одно или два — было создано в каждом случае. А транзакции, которые требуют создания более двух записей, используют несколько JoinSplit'ов. В результате получается скрытая транзакция, о которой нет никакой информации, кроме того, что она создала или приняла несколько записей.

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

Гид для пользователей

Сразу же после активации хардфорка пользователи основного клиента Zcash — Zcashd — получили новые Sapling-адреса. Однако функционал, заложенный в новую версию блокчейна, станет доступен после того, как они переведут средства с адресов старой версии (Sprout) на новые Sapling-адреса. При этом существенный недостаток этого процесса в том, что он предполагает процедуру, которая раскроет объем пользовательских средств на скрытых адресах. Уилкокс отмечает, что подобный допуск к системе — «аудит по принципу турникета» — был намеренным шагом. Его цель — убедиться, что система не была скомпрометирована в процессе задавания параметров zk-snarks.

Устройство Zcash предполагает регулярные церемонии, известные как «Powers of Tau», в ходе которых узкий круг участников в условиях повышенной секретности и самыми разнообразными способами генерирует начальные параметры для протокола zero-knowledge proof. Однако в данном случае речь идет о «генезисной» церемонии, состоявшейся в момент запуска сети в 2016 году. Она критиковалась за уязвимость к атаке, в случае которой пользователи могли создать неограниченное количество монет Zcash. «Чтобы проверить этот риск, мы хотим сделать глобальный аудит и убедиться, что не случилось никакого обмана», — говорит Уилкокс.

В настоящий момент команда разрабатывает инструмент для автоматизированного перевода средств на новые адреса, который «позволит пользователям минимизировать влияние на приватность». И хотя перевести средства на адреса нового формата можно и в «индивидуальном порядке» уже сейчас, команда Zcash рекомендует по возможности дождаться выхода специального инструмента, предупреждая, что это займет несколько месяцев.

В течение этого времени система будет полноценно поддерживать оба формата адресов — и Sapling, и Sprout. И хотя Zcash планирует впоследствии отказаться от старых Sprout-адресов, Уилкокс отмечает, что пользователям не стоит бояться за сохранность своих средств, поскольку никакого дедлайна для перевода монет со старых адресов не будет. Когда протокол полностью перейдет на Sapling, пользователи не смогут принимать средства на старые адреса, но исходящие транзакции с этих адресов будут по-прежнему функционировать.