Подробно объясните принцип построения Tornado Cash V2.

Разработчик ameen.eth сочетает концепцию «доказательства невиновности» с Tornado Cash, чтобы дать еще одно направление, согласно которому «конфиденциальность не равна преступлению».

Сценарист: Альберт Лин

Предисловие

TornadoCash — известный сервис анонимных транзакций в мире криптовалют. TornadoCash использует технологию ZKP (Zero-Knowledge Proof), чтобы скрыть источник средств. Правительство США утверждало, что такой механизм способствовал незаконным финансовым операциям, и в конечном итоге был санкционирован Министерством финансов США в августе 2022 года и вынужден снять его с полок. Защита конфиденциальности и отмывание денег во многих случаях всегда идут рука об руку. Преследуя конфиденциальность, преступники часто используют эти функции конфиденциальности для отмывания незаконных средств. Можно ли найти способ, позволяющий людям сохранять конфиденциальность и эффективно препятствующий отмыванию денег? Privacy-Pools от ameen.eth, одного из первых разработчиков TornadoCash, может дать направление. (Только внешний веб-сайт и репозиторий GitHub затронуты в части исключения из списка, а контрактная часть не затронута, поскольку она находится в блокчейне. Наконец, GitHub восстановил репозиторий благодаря усилиям Electronic Frontier Foundation. Для получения подробной информации, пожалуйста, обратитесь сюда)

Введение Принцип TornadoCash

Прежде чем вводить Privacy-Pools, вам необходимо понять принципы проектирования, связанные с TornadoCash. Для подробного ознакомления, пожалуйста, обратитесь к моей предыдущей статье «Разборка TornadoCash: руководство для начинающих по объяснению его функциональности друзьям». Вот краткий обзор принципов дизайна TornadoCash.

TornadoCash использует квитанции (обязательства) для контроля доступа. Квитанция генерируется путем хэширования секрета (секретного значения) и обнулителя (кода выхода), и каждая квитанция может быть отозвана только один раз. Используйте Merkle Tree (хеш-дерево) для записи информации о депозите, используйте квитанцию в качестве конечного узла и вычислите Merkle Root (хеш-дерево). Пользователю нужно только предоставить данные от листа к корню, чтобы доказать, что данные являются одним из листьев дерева Меркла, и косвенно доказать, что ранее средства были внесены в TornadoCash. Используйте доказательство с нулевым разглашением, чтобы скрыть источник депозита, и используйте нуллификатор, чтобы предотвратить атаку двойного вывода средств.

Чек TornadoCash имеет два значения

  • Доказательство того, что отправитель вносил средства ранее
  • Убедитесь, что каждый получатель может запросить средства только один раз

「Доказательство невиновности」

По принципу построения TornadoCash можно только знать, что полученные средства должны поступать с предыдущего депозита, но неизвестно с какого именно депозита. Это основная цель преступников, использующих TornadoCash для незаконной деятельности по отмыванию денег, а также причина, по которой правительство США регулирует TornadoCash. Если мы можем предложить другое Доказательство (ЗКП) для доказательства того, что полученные средства не от депозитов в списке отказа, может ли оно доказать, что платеж не от преступников, это «Доказательство невиновности» («Доказательство невиновности»). невиновность») ключевое понятие.

Понятие «Доказательство невиновности» можно разделить на два направления

  • Доказательства того, что полученные средства являются сбором средств, внесенных в разрешенный список (список разрешенных)
  • Доказательства того, что выводимые средства не пришли из набора депозитных средств в списке отклонения (reject list)

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

источник:

Принцип проектирования Privacy-Pools

Privacy-Pools добавляет в TornadoCash концепцию «доказательства невиновности». Помимо первоначального значения квитанции TorandoCash, платежная квитанция Privacy-Pools имеет и третье значение: «доказать, что полученные средства поступили из депозитов в разрешенном списке».

Получение Privacy-Pools означает:

  • Доказательство того, что отправитель вносил средства до
  • Убедитесь, что каждый получатель может запросить средства только один раз
  • Доказательства того, что средства к выводу поступают с депозитов из разрешенного списка

Здесь мы используем Разрешить дерево Меркла, чтобы объяснить, как Privacy-Pools использует «Доказательство невиновности» в этой системе (Разрешить дерево Меркла — это концепция использования списка разрешений). Во-первых, Allow Merkle Tree имеет несколько характеристик.

  • Разрешить дерево Меркла, как следует из названия, является деревом Меркла.
  • Высота дерева и количество узлов такие же, как и в Депозитном дереве пулов конфиденциальности Merkle. *Все листья дерева Меркла разрешений соответствуют положению листа (депозита) дерева Депозит Меркла.

Разрешить листовые данные Merkle Tree можно разделить на следующие две категории:

  • разрешено: указывает, что депозит в этом месте разрешен. (Позиции, которые еще не были депонированы, также разрешены по умолчанию)
  • заблокировано: указывает, что депозит в этом месте отклонен.

Как показано на рисунке ниже, позиции индекса 0 и 1 являются юридическими средствами в Депозитном дереве Меркла, и соответствующие позиции листа Разрешить Меркла также разрешены.

Предполагая, что сегодня преступник хочет осуществлять деятельность по отмыванию денег, он размещает незаконные средства, полученные после атаки, в Privacy-Pools, а место депозита — Депозитный индекс Merkle Tree: 2. Мы знаем, что это незаконные средства, поэтому мы обновляем их до заблокированных в соответствующем индексе Allow Merkle Tree index: 2 position.

Ситуация со списком разрешений

Если предположить, что сегодня пользователь, внесший депозит в список разрешенных правительством США, хочет вывести средства, ему необходимо предоставить «доказательство того, что депозит находится в дереве Dposit Merkle» и «доказательство того, что тот, что находится в разрешенном списке США, разрешен». Доказательство, соответствующее разрешенному списку США, включает в себя Allow Merkle Root (предоставляется пользователем, subetRoot в коде) и значение узла, которое будет передано по пути. Когда Privacy-Pools проверит этап ZKP, он будет использовать значение листа как разрешенное (keccak256 (разрешено) в фактическом коде) и заданное значение узла для прохождения для построения корня Меркла. Убедитесь, что этот Merkle Root совпадает с Allow Merkle Root, предоставленным пользователем. Если проверка одного и того же представителя пройдена, это означает, что средства для вывода из депозита, который существует в списке разрешений правительства США.

Ситуация со списком отклонения

Сегодня пользователь, которого нет в списке разрешенных правительством США, хочет вывести средства, а соответствующее место депозита помечено как заблокированное в списке разрешенных правительством США. Это приведет к тому, что пользователь не сможет использовать Allow Merkle Root из списка разрешений правительства США для вывода средств, потому что соответствующее доказательство не может быть сгенерировано, и проверка не будет выполнена (поскольку Privacy-Pools использует значение, разрешенное для листа, чтобы сделать расчеты, а в списке разрешений правительства США будет место помечено как заблокированное, поэтому тот же Merkle Root не может быть рассчитан).

Такой дизайн вынуждает пользователя предоставить другой Allow Merkle Root для снятия средств (другие Allow Merkle Trees должны пометить место депозита как разрешенное, чтобы вычислить тот же Allow Merkle Root для прохождения проверки). Это другое дерево разрешений Меркла может поддерживаться другими правительствами или учреждениями или даже создаваться самим пользователем. Сегодня правительство США может использовать Allow Merkle Root, используемый при снятии средств, чтобы определить, соответствуют ли средства пользователя законам и постановлениям правительства США, чтобы достичь цели отслеживания. Если пользователь использует дерево Allow Merkle, созданное им самим или не заслуживающее доверия, в основном средства для снятия, скорее всего, будут поступать с проблемного депозита (каждое заслуживающее доверия стороннее дерево Allow Merkle помечает место депозита как заблокированное).

Часто задаваемые вопросы

**В: Если Allowroot предоставляет выводящая сторона, можно ли подделать поддельный Allow Merkle Root, чтобы доказать, что лист является депозитом в списке разрешенных, значит ли это, что деньги все равно можно забрать? **

A: Ответ — да, деньги действительно можно забрать. Автор специально указал, что такой механизм не для того, чтобы запретить преступникам забирать деньги, но даже если они смогут их забрать, будет известно, что средства находятся в списках отказа. Когда отзывающий предоставляет неубедительный Разрешить Merkle Root, его можно рассматривать как выход из списка отклоненных. Автор предполагает, что причиной разрешения этого является сохранение децентрализованного характера этого сервиса. Потому что каждое дерево Allow Merkle нуждается в определенном управлении полномочиями для обновления статуса каждого листа. Если определенный корень дерева разрешений является обязательным, это означает, что кто-то имеет определенные полномочия контролировать вывод средств, что не соответствует духу децентрализации.

**В: Кто будет решать, будет ли транзакция произведена из средств из списка отклоненных? **

О: Та часть, которую я видел, не была конкретно упомянута, и, насколько я понимаю, эта часть должна выполняться каждым регулирующим органом. Предполагая, что сегодня правительство США хочет проверить грязные деньги Privacy-Pools, он может проверить, являются ли они грязными деньгами, проверяя Allow Merkle Root каждой транзакции. Что касается того, какой тип Allow Merkle Root разрешен, то каждый регулирующий орган должен судить сам.

Код пулов конфиденциальности

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

// схемы/снять_from_subset.circom

шаблон WithdrawFromSubset (уровни, ожидаемое значение) {

// публичный

корень входного сигнала;

вход сигнала subsetRoot;

обнулитель входного сигнала;

входной сигнал актив Метаданные; // abi.encode(токен, количество).snarkHash();

входной сигнал отзыва метаданных; // abi.encode(получатель, возврат, отправитель, комиссия).snarkHash();

// частный

секрет ввода сигнала;

тракт ввода сигнала; // Указать, представляют ли данные левый или правый лист.

входной сигнал mainProof [levels] ; // Создаем данные, необходимые для корня депозита.

входной сигнал subsetProof [levels] ; // Создаем данные, необходимые для разрешения root.

// Рассчитываем нуллификатор и обязательство.

хэш компонента = CommitmentNullifierHasher();

hasher.secret <== секрет;

hash.path <== путь;

hasher.assetMetadata <== assetsMetadata;

nullifier === hasher.nullifier;

// ожидаемое значение: keccak256("разрешено") % p

компонент doubleTree = DoubleMerkleProof (уровни, ожидаемое значение);

doubleTree.leaf <== hasher.commitment;

// Преобразование пути в биты, чтобы указать, является ли он левым или правым листом.

// Можно заметить, что дерево депозитов и дерево разрешений имеют один и тот же путь.

doubleTree.path <== путь;

for ( я = 0; я < уровней; я ++) {

doubleTree.mainProof [i] <== основное доказательство [i] ;

doubleTree.subsetProof [i] <== защита от подмножества [i] ;

}

корень === doubleTree.root; // Проверяем корень депозита.

subsetRoot === doubleTree.subsetRoot; // Проверяем разрешающий корень.

сигнал отозватьMetadataSquare;

removeMetadataSquare <== removeMetadata * removeMetadata;

}

TLDR

  • «Доказательство невиновности» заключается в использовании другого доказательства, чтобы доказать, что платеж происходит из депозита в разрешенном списке. «Доказательство невиновности» может быть построено с двух точек зрения: разрешенный список и запрещенный список.
  • Privacy-Pools накладывает понятие «Доказательство невиновности» на основе TornadoCash.Первоначальная квитанция представляет собой третье значение: «Доказательство того, что полученные средства получены из депозитов в разрешенном списке».
  • Существование Allow Merkle Tree может доказать, что вывод средств существует в разрешенном списке. Положение листа Разрешающего дерева Меркла соответствует положению листа депозита Депозитного дерева Меркла. Разрешить Листовые данные Merkle Tree разрешены и заблокированы.
  • В дополнение к информации, необходимой для построения Депозита Merkle Root, получатель также должен предоставить Разрешить Merkle Root и информацию для построения Разрешить Merkle Root, чтобы доказать, что вывод средств существует в разрешенном списке.
  • Поскольку Allow Merkle Root предоставляется получателем, у преступников все еще есть способ забрать незаконные средства через поддельный Allow Merkle Root. Поддельный Allow Merkle Root по-прежнему будет появляться в цепочке и будет рассматриваться другими как сомнительный в отношении платежа, чтобы отслеживать поток незаконных средств.

Разработчик ameen.eth сочетает концепцию «доказательства невиновности» с TornadoCash, чтобы обеспечить еще одно направление, согласно которому «конфиденциальность не равна преступлению». Автору интересно использовать еще один ZKP для доказательства еще одного факта, что немного похоже на добавление ZKP. Такой способ использования будет проще и эффективнее, чем сооружение более крупного и сложного ЗКП. Что касается выбора Allow Merkle Tree, я чувствую, что в будущем оно будет построено более справедливой единицей, которая будет более убедительной для других.

Наконец, спасибо Chih-Cheng Liang и Ping Chen за помощь в рецензировании статьи и ценные мнения!

Ссылка:

Скрытый адрес

Анализ экземпляра Tornado Cash

Введение в разработку ZKP и смарт-контрактов

[Читающий клуб ZKP] TornadoCash

Tornado Cash — как это работает | DeFi + доказательство с нулевым разглашением

Глубокое понимание технических деталей TornadoCash

0xhhh Тема, представляющая новые функции и их принципы

демонстрационное видео

Доклад Виталика о том, как улучшить Tornadov2

пулы конфиденциальности v0tweet

Представляем Proof of Innocence, построенный на TornadoCash

Посмотреть Оригинал
Содержание носит исключительно справочный характер и не является предложением или офертой. Консультации по инвестициям, налогообложению или юридическим вопросам не предоставляются. Более подробную информацию о рисках см. в разделе «Дисклеймер».
  • Награда
  • комментарий
  • Поделиться
комментарий
0/400
Нет комментариев
  • Закрепить