Как работает Tornado Cash?

Прежде чем погрузиться в руководства, объясняющие и упрощающие использование Tornado.Cash, вот общий обзор глобального функционирования протокола.

Глобальный обзор функционирования Tornado.Cash

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

  • Когда пользователь вносит средства в пул (т. е. депозит), создается частная записка. Эта частная записка работает как частный ключ для пользователя, чтобы получить доступ к этим средствам позже. Чтобы вывести их, тот же пользователь может использовать другой адрес — старый или новый — и вернуть свои средства благодаря этому частному ключу.

Для Tornado Cash Nova, нового пула ETH с произвольными суммами и защищенными переводами:

  • Средства напрямую привязаны к указанному адресу кошелька. Частная записка или ключ отсутствуют. Пользователи могут получить доступ к своим средствам, подключившись к пулу с соответствующим адресом.

  • Хранение приобретается либо путем внесения токенов в пул, либо путем регистрации в пуле и получения защищенных переводов с другого адреса.

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

  • Использование релейера для оплаты газа при выводе;

  • Допускание времени между внесением и выводом;

  • Смешивание своих средств с толпой путем ожидания нескольких транзакций перед возвратом своих активов.

Больше рекомендаций приведено в: Советы по сохранению анонимности.

Вклад zk-SNARK и процесса хеширования

Tornado.Cash использует краткий неинтерактивный аргумент знания с нулевым разглашением (также называемый zk-SNARK) для проверки и разрешения транзакций. Для обработки депозита Tornado.Cash генерирует случайную область байтов, вычисляет ее с помощью хэша Педерсена (так как он более дружелюбен к zk-SNARK), затем отправляет токен и 20 MiMC хэш в смарт-контракт. Затем контракт вставит его в дерево Меркла. Для обработки вывода та же область байтов делится на две отдельные части: секрет с одной стороны и нульификатор с другой стороны. Нульификатор хэшируется. Этот нульификатор является публичным входом, который отправляется в цепочку для проверки с помощью смарт-контракта и данных дерева Меркла. Например, это позволяет избежать двойной траты. Благодаря zk-SNARK можно доказать 20 MiMC хэш первоначального обязательства и нульификатора, не раскрывая никакой информации. Даже если нульификатор является публичным, конфиденциальность сохраняется, поскольку нет способа связать хэшированный нульификатор с первоначальным обязательством. Кроме того, даже если информация о транзакции присутствует в корне Merkle, информация о точном пути Merkle и, следовательно, местонахождении транзакции по-прежнему остается конфиденциальной. Депозиты просты с технической точки зрения, но дороги с точки зрения газа, поскольку им необходимо вычислить хэш 20 MiMC и обновить дерево Merkle. С другой стороны, процесс вывода сложен, но дешевле, поскольку газ нужен только для хэша обнулителя и доказательства с нулевым разглашением.

Last updated