Wasabi Coinjoin

Alex
19.08.2025 14:21
 

Транзакции в сети Биткоин являются публичными по своей природе; они демонстрируют связь входных (неизрасходованные utxo) и выходных данных (новые неизрасходованные utxo) таким образом, чтобы каждый, у кого есть доступ к Биткоин-блокчейну (история транзакций) мог их проследить. Тем не менее, в силу того, что Биткоин-транзакции — не то же самое, что и биткоин-платежи, интерпретация этих транзакций и блокчейна является нетривиальной задачей. И все же существуют способы анализа цепочки для идентификации отправителя. Рассмотрим на примере одной транзакции:

Данная транзакция состоит из двух входов (0.3 BTC и 0.2 BTC) и двух выходов (0.4 BTC и 0.1 BTC). Наблюдателю очевидно, что происходит платеж – отправитель посылает кому-то один из выходов и возвращает себе сдачу. Поскольку были использованы 2 входа, выход большего размера, скорее всего, предназначен получателю. Комиссию в примере игнорируем.

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

В 2013 году Грег Максвелл представил инновационный метод запутывания ончейн связей между неизрасходованными транзакциями (utxo). Он назвал этот метод CoinJoin. https://bitcointalk.org/index.php?topic=279249.0

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

Как выглядит такая транзакция:

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

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


Рассмотрим как этот алгоритм реализован в кошельке Wasabi. Как это работает:

Ваш Кошелек Wasabi генерирует новый Tor identity назовем его Alice. Соединяемся с сервером координатора Wasabi и передаем следующие данные:


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

2) Зашифрованные выходы (используется cлепая подпись https://en.wikipedia.org/wiki/Blind_signature)


Координатор Wasabi проверяет, что:


1) Слепой вывод никогда ранее не регистрировался.

2) Каждый вxод ранее не регистрировался, не запрещен, не израсходован и что вводимые данные действительны.

3) Сумма входов выше минимально необходимого значения.


Только когда все эти проверки действительны, координатор подписывает ослепленный выход. Он не знает адрес, который подписывает, потому что это слепой шифрованный текст. Эта подпись является доказательством того, что координатор проверил, что Alice не обманывает. Координатор отправляет подписанный слепой вывод обратно Алисе вместе с уникальным идентификатором, который является идентификатором этой конкретной Alice в этом раунде.


У Alice есть секретные ключ, необходимые для расшифровки скрытого выхода. С помощью магии криптографии она может расшифровать адрес анонсированного выхлда CoinJoin. Причем подпись координатора по-прежнему прикреплена к этому адресу.


Фаза II. Подтверждение соединений


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


Фаза III. Регистрация выходов


Ваш клиент Wasabi генерирует совершенно новую Tor identity назовем его Bob, который никоим образом не связан с Alice. Bob отправляет координатору Wasabi:


1) Незашифрованный адрес выхода.

2) Подпись координатора, связанную с этим выходом.

3) Хэш всех входов.


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


Фаза IV. Подпись


Теперь, когда все входы и выходы зарегистрированы, координатор Wasabi может начать фазу подписания, создав транзакцию CoinJoin со всеми зарегистрированными входами, анонсированными выходами и выходными данными комиссии координатора. Он отправляет эту транзакцию всем Alice этого раунда. Каждая Alice проверяет, что:


1) Подтвержденный хэш раунда равен хешу всех входных данных в предлагаемой транзакции.

2) Ее входы и выходы включены правильно.


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


Фаза подписания заканчивается, когда координатор получает все действительные подписи для всех зарегистрированных входов.


Фаза V. Публикация транзакции в сеть


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



0
0
0
Опубликовано:
Комментариев:0
Репостов:0
Просмотров: 0