Понимание и использование CoinJoin
Cover

Понимание и использование CoinJoin в сети Биткоин

19 июля 2022 г.

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

Перевод статьи Лоика Мореля

Поддержать проект

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

Сатоши Накамото решил эту проблему с помощью своего протокола Биткоин — одноранговой электронной платежной сети, работающей без вмешательства какого-либо центрального органа. В своей “Белой книге” он объясняет, что единственный способ подтвердить происхождение транзакции, а значит, и убедиться в отсутствии попытки двойного расходования средств, — это быть в курсе всех транзакций, проводимых в распределенной платежной сети.

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

Этот принцип распределения реестра и публичного объявления о новых транзакциях уже применялся в более ранних моделях криптовалюты, таких как b-money, изобретенной Вэй Даем в 1998 году.

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

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

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

CoinJoin — это способ разорвать историю UTXO, чтобы повысить уровень приватности пользователей сети Биткоин.

В этой статье мы рассмотрим, что такое CoinJoin, как он работает и как правильно его использовать. Мы поговорим в основном о Whirlpool, самой эффективной, на мой взгляд, реализации CoinJoin на сегодняшний день, но также рассмотрим и другие существующие реализации. Я также расскажу о показателях, которые можно использовать для расчета уровня приватности ваших биткоинов. Чтобы не увязнуть в теории, я покажу вам на практике, как провести CoinJoin-транзакцию различными способами. Наконец, мы рассмотрим лучшие практики, которых следует придерживаться, чтобы не потерять приватность, заработанную после серии CoinJoin-транзакций, и я познакомлю вас с различными инструментами в кошельке Samourai, которые позволят вам это сделать.

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

Если вы начинающий пользователь Биткоин, то перед прочтением этой статьи я настоятельно рекомендую вам разобраться в структуре Биткоин-транзакции (UTXO, входы и выходы), прочитав раздел из книги “Изобретаем Биткоин”.

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

CoinJoin требует использования программного кошелька, подключенного к Интернету (известного как “горячий кошелек”). Существует вероятность того, что ваши средства могут быть потеряны и/или украдены.

Я советую провести собственное исследование возможных рисков. Данная статья — далеко не единственный источник информации по этим вопросам.

В 2023 году компанией Trezor в сотрудничестве с Wasabi Wallet была произведена первая в истории реализация CoinJoin с использованием аппаратного кошелька.

— Прим. переводчика

CoinJoin и смешивание биткоинов #

Прежде чем приступить к работе, важно понять разницу между CoinJoin и смешиванием.

Смешивание (также известное как “mixer”, “blender” или “tumbler”) — это техника, используемая для смешивания UTXO (т. е. смешивания биткоинов), чтобы разорвать их историю и запутать процесс отслеживания. Цель этого типа операций — псевдонимизировать UTXO, чтобы пользователь получил бо́льшую приватность. Псевдонимизация происходит, когда UTXO входит в группу из нескольких других неотличимых друг от друга UTXO.

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

Смешивание быстро потеряло популярность, когда появился CoinJoin, по сей день привлекающий все больше и больше пользователей. До сих пор существует несколько сервисов смешивания, такие как ChipMixer, однако сегодня эта техника существует лишь на периферии.

В повседневном языке биткоинеров многие используют слово “миксер” для обозначения CoinJoin. Даже если эта семантика изначально неверна, она стала общепринятой среди пользователей. Термин “смешанные биткоины” используется для обозначения UTXO, выпущенных в результате CoinJoin-транзакции.

CoinJoin — это техника для разрыва истории UTXO. Она основана на совместной транзакции с особой структурой — CoinJoin-транзакции. Этот тип транзакции был предложен Грегори Максвеллом в 2013 году на форуме Bitcoin Talk: https://bitcointalk.org/index.php?topic=279249.0.

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

Чтобы участники имели контроль над своими средствами в любой момент, транзакция сначала создается координатором, а затем передается каждому пользователю. Затем каждый пользователь самостоятельно подписывает транзакцию, проверяя, соответствует ли она его требованиям, после чего все подписи добавляются к транзакции. Если кто-то из пользователей или координатор попытается украсть средства у других, изменив выходные данные в CoinJoin-транзакции, то подписи будут недействительными, и транзакция будет отклонена узлами.

Если использовать аналогию, то CoinJoin можно представить как погоню вертолета за автомобилем. Представим себе вертолет, пытающийся преследовать белый автомобиль. Вертолет представляет человека, который хочет проанализировать ваши платежи, а белая машина — ваш UTXO. Вертолет может легко преследовать машину, пролетая над ней.

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

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

Технической задачей пользователей CoinJoin является получение максимально возможного уровня анонимности для их UTXO. Это понятие очень важно усвоить для дальнейшего изложения. Уровни анонимности (Anonymity Sets, или Anon Sets) являются параметрами, используемыми для оценки приватности UTXO. Их два: перспективный и ретроспективный.

Перспективная оценка показывает размер группы UTXO, в которой скрывается принадлежащий нам UTXO. Например, если я совершу CoinJoin с четырьмя другими пользователями, то сразу после CoinJoin-транзакции моя перспективная оценка будет равна 5.

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

Более подробно я объясню эти два параметра в разделе: “Уровни анонимности”. Пока же просто запомните, что чем выше уровни анонимности для смешанного UTXO, тем сложнее наблюдателю будет его выследить.

Различные реализации CoinJoin #

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

Существует 3 основные реализации CoinJoin в Биткоине:

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

Как вы, возможно, поняли, следя за мной в Twitter, лично я предпочитаю использовать реализацию Whirlpool. Поэтому я вкратце расскажу вам о том, как теоретически работают два других решения и почему я считаю их менее подходящими. Затем мы более подробно рассмотрим, как работает Whirlpool — реализация, разработанная командой Samourai Wallet, которая, по моему мнению, является лучшим решением для CoinJoin на данный момент.

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

JoinMarket #

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

Когда вы хотите сделать CoinJoin в JoinMarket, вы должны выбрать между тем, чтобы предоставить свои биткоины другим пользователям для смешивания за определенную плату, или взять средства у других пользователей для смешивания напрямую, заплатив необходимую комиссию. Таким образом, есть “мейкеры”, которые предоставляют свои биткоины, и “тейкеры”, которые используют средства. Тейкеры платят мейкерам за их услуги.

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

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

С точки зрения функциональности CoinJoin-транзакций, JoinMarket имеет несколько слабых мест по сравнению с Whirlpool. Например, структура CoinJoin-транзакции предполагает, что между входами и выходами не может быть 0% детерминированных связей. Также следует отметить, что JoinMarket не включает в себя инструмент для предотвращения нового CoinJoin между монетами, которые уже встречались в прошлом.

Что касается дополнительных услуг, предлагаемых пользователю, JoinMarket не включает в себя инструмент для легкого расчета уровней анонимности UTXO. Что касается инструментов для траты смешанных UTXO, то здесь предлагается только PayJoin.

В итоге, JoinMarket — это интересная реализация CoinJoin, но она не для всех. Если вам удобно работать с командной строкой, вы хорошо понимаете, как работает CoinJoin, и вам нравится модель тейкер/мейкер, то эта реализация вам подойдет.

Wasabi 2.0 #

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

Однако структура самой CoinJoin-транзакции сильно отличается от Whirlpool. Как мы увидим в следующем разделе, увеличение оценки перспективного уровня анонимности UTXO, смешанного в Whirlpool, основано на множестве CoinJoin с небольшим количеством пользователей каждый раз. В отличие от этого, уровень анонимности UTXO, смешанных в Wasabi, основан на нескольких транзакциях с большим числом пользователей.

Пример Coinjoin, возможно, сделанный в Wasabi 1.0: https://kycp.org/#/b994a9cbdc20e971207bde4f800b9ce99dba35478a2a997bc48e7f9f80bd2d02.

Пример Coinjoin, сделанный в Whirlpool: https://kycp.org/#/323df21f0b0756f98336437aa3d2fb87e02b59f1946b714a7b09df04d429dec2.

Эти две реализации также отличаются друг от друга способом управления сдачей. В Whirlpool сдача изолирована от остальных UTXO до CoinJoin благодаря Tx0 (об этом я расскажу в следующем разделе). В Wasabi сдача является выходом в CoinJoin-транзакции. Выбор такой структуры CoinJoin в Wasabi означает, что между входами и определенными выходами сохраняются детерминированные связи.

В версии 2.0 Wasabi полностью изменила свою политику комиссий за CoinJoin. Теперь комиссия координатора составляет 0,3 % для UTXO с суммой выше 0,01 BTC и бесплатна для UTXO, сумма которых ниже или равна 0,01 BTC. Более мелкие UTXO также получают бесплатные ремиксы. Следует отметить, что, несмотря на комиссию координатора, пользователям все равно придется платить комиссию майнерам за все транзакции, включая ремикс-транзакции.

Поэтому, в отличие от Whirlpool, чем более высокую оценку уровня анонимности вы хотите получить для вашего UTXO, тем больше вам придется заплатить. Это справедливо как для Wasabi версии 1.0, так и для версии 2.0. Даже несмотря на то, что последняя версия убирает комиссию координатора для небольших UTXO, комиссия за майнинг все равно остается. Более того, при использовании версии 2.0 у меня сложилось впечатление, что максимально возможный перспективный уровень анонимности в Wasabi составляет 300. В Whirlpool вы можете легко достичь пятизначного показателя за несколько месяцев, и этот показатель не ограничен.

Помимо самой структуры CoinJoin, на мой взгляд, Wasabi очень не хватает инструментов, дополняющих CoinJoin, особенно для правильной траты смешанных UTXO. В версии 1.0 нет такого инструмента для траты. В версии 2.0 Wasabi все же включила инструмент для расходования смешанных UTXO, который автоматически настраивает входы и выходы, чтобы максимизировать приватность за счет исключения сдачи. Хотя эта функция может быть полезной, она кажется гораздо менее эффективной и удобной в использовании, чем огромное количество инструментов, предлагаемых в Samourai и Sparrow Wallet для правильной траты UTXO, смешанных с помощью Whirlpool. Обо всех этих инструментах я расскажу позже в статье, в разделе “Инструменты для траты UTXO”.

В отличие от Whirlpool, Wasabi не разделяет счета для смешанных UTXO, несмешанных UTXO и UTXO сдачи. Такая структура портфеля означает, что возможно повторное использование адресов между смешанными UTXO и другими UTXO. Если это произойдет, это может полностью разрушить результат CoinJoin.

Наконец, после опробования версии 2.0 у меня осталось впечатление, что я не контролирую свой Coinjoin, когда использую Wasabi. Все упрощено и автоматизировано, пользовательский интерфейс великолепен, но разве это то, что мы ожидаем от реализации CoinJoin?

Теория работы Whirlpool #

В отличие от других упомянутых реализаций, Whirlpool отличается построением “ZeroLink” CoinJoin-транзакций, то есть строго без возможной внутренней связи между всеми входами и всеми выходами.

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

При такой ограничительной конструкции для входов/выходов, CoinJoin-транзакция в Whirlpool является единственной, которая позволяет пользователям иметь 0% детерминированных связей между входами и выходами. Это означает, что каждый выход имеет точно такую же вероятность принадлежать пользователю, как и все остальные выходы в транзакции.

Количество участников в каждом миксе ограничено 5: 2 новых участника и 3 ремиксера (подробнее об этом мы узнаем позже). Таким образом, любая CoinJoin-транзакция в Whirlpool всегда имеет 5 входов и 5 выходов.

В мае 2023 года обновление Surge Cycles позволило осуществлять CoinJoin-транзакции в Whirlpool с бо́льшим количеством участников: 6, 7 и 8 входов/выходов. В январе 2024 года, благодаря Surge Cycles, была проведена транзакция из 15 участников.

— Прим. переводчика

Схематическое изображение CoinJoin-транзакции в Whirlpool

Модель Whirlpool #

Таким образом, модель, предложенная Whirlpool, основана на очень маленьких транзакциях. В отличие от Wasabi и JoinMarket, высокий показатель уровня анонимности достигается не количеством пользователей, участвующих в CoinJoin, а последовательностью нескольких небольших CoinJoin по 5 участников каждый раз.

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

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

Whirlpool был разработан в соответствии с 2 основными критериями:

  • Реализация должна быть удобной для использования на мобильном телефоне.
  • Циклы ремиксов должны быть быстрыми.

По этим двум причинам команда Samourai решила ограничить количество пользователей до 5 за цикл. Меньшее число не позволило бы CoinJoin быть достаточно эффективным и слишком сильно сократило бы показатель уровня анонимности за цикл. Большее число не было бы приемлемым на мобильных клиентах и уменьшило бы количество циклов.

Наконец, в Whirlpool нет необходимости иметь большое количество участников в CoinJoin-транзакции, поскольку уровень анонимности основан на накоплении нескольких циклов смешивания.

Пулы и комиссии #

Для того чтобы многократные циклы CoinJoin увеличивали уровень анонимности UTXO, необходимо установить определенные рамки, ограничивающие сумму каждого UTXO. В Whirlpool существует несколько различных пулов.

Пул — это группа пользователей, желающих смешивать UTXO, которые договорились о сумме UTXO для оптимизации работы CoinJoin. Каждый пул определяет фиксированную сумму UTXO, который пользователь должен предоставить, чтобы войти в него. С практической точки зрения, когда вы хотите совершить CoinJoin, вам нужно выбрать пул, в который вы хотите войти, чтобы начать смешивание. В настоящее время в Whirlpool доступны следующие пулы:

  • 0,5 BTC
  • 0,05 BTC
  • 0,01 BTC
  • 0,001 BTC (100 000 сат)

Так что здесь найдется место для каждого.

Каждый пул имеет максимальную сумму, которую можно ввести:

Пул (BTC)Максимальная сумма (BTC)
0,535
0,053,5
0,010,7
0,0010,025

Чтобы присоединиться к пулу, необходимо заплатить комиссию. Эта комиссия фиксирована для каждого пула и предназначена для выплаты вознаграждения команде, которая разрабатывает и управляет Whirlpool. Комиссия списывается только один раз, когда вы присоединяетесь к пулу. Как только вы вступите в пул, вы сможете делать ремиксы бесплатно столько раз, сколько захотите.

Здесь указаны текущие комиссии для каждого пула:

Пул (BTC)Комиссия (BTC)
0,50,0175
0,050,00175
0,01​0,0005 (50 000 сат)
0,001​0,00005 (5 000 сат)

На этом сайте вы можете легко рассчитать расходы на смешивание в Whirlpool: https://bitcoiner.guide/wpfees/

Обратите внимание, что эти комиссии являются “входным билетом” в пул. Таким образом, входите ли вы в пул номиналом 0,01 с 0,01 BTC или с 0,5 BTC, комиссии будут абсолютно одинаковыми. Поэтому перед смешиванием пользователь должен спросить себя, хочет ли он платить меньше в маленьком пуле, в этом случае он получит много маленьких UTXO, или же он предпочитает использовать более крупный пул, платя больше, но получая меньше UTXO.

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

Другая комиссия, которую следует учитывать, — это комиссия за майнинг, присущая любой биткоин-транзакции. Как пользователю Whirlpool, вам придется заплатить за майнинг Tx0 и за майнинг начального микса. Все остальные ремиксы будут для вас бесплатными, так как модель оплаты Whirlpool основана на привлечении новых участников.

Каждый CoinJoin состоит из 5 пользователей. Из них 2 новых участника (премиксера) и 3 ремикера. Таким образом, два участника в каждом миксе будут оплачивать майнинг за всех 5 пользователей, а затем эти два участника, в свою очередь, смогут воспользоваться бесплатными ремиксами.

Эта модель оплаты отличает Whirlpool от других сервисов CoinJoin тем, что уровень анонимности UTXO непропорционален комиссии, которую платит пользователь. Поэтому вы можете получить очень высокий уровень анонимности, просто заплатив комиссию пула и комиссию майнерам за две транзакции (Tx0 и начальный микс).

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

Как объяснялось выше, считается, что UTXO находится в пуле, когда он доступен для смешивания. Это не означает, что пользователь теряет право собственности. На протяжении всех CoinJoin-транзакций в Whirlpool вы полностью контролируете свои ключи, а значит, и свои биткоины.

Аккаунты Whirlpool #

Чтобы организовать этот тип CoinJoin-транзакции, кошелек, использующий Whirlpool, должен иметь несколько аккаунтов.

Аккаунт — это подраздел HD-кошелька. Это разделение происходит на глубине 3 HD-кошелька, то есть на уровне xpub/xprv.

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

Вам, конечно, не нужно понимать все это, чтобы использовать Whirlpool, но просто помните, что аккаунт — это подраздел HD-кошелька, который полностью отделен от других аккаунтов и имеет свой собственный xpub/zpub.

Такое строгое разделение аккаунтов делает невозможным повторное использование адресов между несмешанными и смешанными в Whirlpool биткоинами.

Для каждого HD-кошелька может быть создано до 2^(32/2) разных аккаунтов. Первый аккаунт, который вы используете по умолчанию в своем кошельке (даже не подозревая об этом), — это аккаунт 0'.

Когда вы используете кошелек, адаптированный для Whirlpool, он автоматически создает 5 аккаунтов:

  • Аккаунт Deposit, имеющий индекс 0'.
  • Аккаунт Bad Bank (или Doxxic Change), индекс 2 147 483 644'.
  • Аккаунт Premix, индекс 2 147 483 645'.
  • Аккаунт Postmix, индекс 2 147 483 646.
  • Аккаунт Ricochet, индекс 2 147 483 647’ — этот аккаунт не используется непосредственно в протоколе Whirlpool, но он связан с ним. Я поделюсь подробностями ниже, в разделе, посвященном инструментам для траты.

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

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

Теперь давайте рассмотрим различные этапы CoinJoin в Whirlpool на этих аккаунтах.

Tx0 #

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

Tx0 — это первая транзакция в процессе смешивания Whirlpool. Ее цель — подготовить UTXO, подлежащие смешиванию, перед отправкой их в первый микс. Эта транзакция разделит входной UTXO на несколько UTXO, соответствующих номиналу выбранного пула. Все эти равные UTXO будут отправлены на Premix аккаунт. Оставшаяся сдача, которая не может быть включена в выбранный пул, будет отправлена на специальный аккаунт: Bad Bank (или Doxxic Change).

Tx0 также будут использована для оплаты услуг координатора.

За Tx0 вам придется заплатить комиссию майнерам.

Источник: KYCP.org

В этом примере транзакции Tx0 мы видим вход 2,2550 биткоинов с депозитного аккаунта пользователя, инициирующего Tx0. Этот вход делится на несколько UTXO, которые представляют собой:

  • Комиссия координатора, здесь: 0,0250 ₿.
  • Четыре UTXO, готовые к смешиванию, которые поступают на Premix аккаунт пользователя. Эти UTXO также регистрируются у координатора.
  • Разница, которая не может быть включена в пул, потому что она слишком мала — это Doxxic-сдача1, которая поступает на собственный специальный аккаунт.
Комиссии здесь отличаются от тех, что я привел в таблице выше, потому что команда Samourai снизила комиссию в Whirlpool в марте 2021 года.

Аккаунт Doxxic Change #

Сдача, которая не может быть введена в пул, отправляется на аккаунт Doxxic Change (также известный как “Bad Bank”), чтобы держать ее полностью изолированной от остальных аккаунтов.

Этот UTXO опасен для приватности пользователей, поскольку он не только все еще привязан к своему прошлому, а значит, возможно, и к личности своего владельца, но и отмечен как принадлежащий владельцу, совершившему CoinJoin.

Если этот UTXO будет объединен со смешанными UTXO, последние потеряют всю ранее полученную приватность. Если его объединить с другими Doxxic-сдачами, пользователь так же рискует потерять приватность. Поэтому к нему следует относиться с осторожностью. В этом разделе я объясню, как именно следует поступать с этим “токсичным” UTXO.

Аккаунт Premix #

Аккаунт Premix содержит UTXO, разделенные на равные суммы во время осуществления транзакции Tx0 и готовые к смешиванию. Эти UTXO немного больше, чем номинал пула, так как они должны заплатить комиссию за майнинг их начального микса.

Как только эти UTXO перейдут в начальный микс, аккаунт Premix опустеет, и новые UTXO появятся на следующем аккаунте.

Аккаунт Postmix #

В аккаунте Postmix хранятся UTXO, смешанные в результате первоначального смешивания. В нем также хранятся все остальные UTXO, которые все еще доступны для ремиксов.

Если клиент Whirlpool запущен, UTXO в аккаунте Post Mix доступны для ремиксов. Они будут случайным образом выбраны для ремиксов.

Когда пользователи захотят потратить ремикшированные UTXO, они смогут сделать это прямо с аккаунта Postmix. Рекомендуется оставлять UTXO на этом аккаунте не только для того, чтобы их можно было бесплатно ремикшировать, но и для того, чтобы они не покидали контур Whirlpool, иначе они рискуют потерять свою приватность.

Уровни анонимности (Anon Sets) #

Как объяснялось выше, уровни анонимности — это два параметра, которые позволяют рассчитать, насколько приватным является UTXO, и, следовательно, насколько эффективна ваша сессия CoinJoin.

Первый параметр — это перспективный уровень анонимности (Forward-looking Anon Set). Несмотря на неправильную семантику, этот показатель часто называют просто “уровень анонимности” для краткости.

Перспективная оценка представляет собой размер группы, в которой UTXO скрывается в данный момент времени.

Чтобы дать вам представление, перспективная оценка — это количество UTXO, которые могут соответствовать данному UTXO в будущем. Например, представим себе наблюдателя, анализирующего цепочку Биткоин в попытке отследить принадлежащий вам UTXO прежде чем он попадет в пул CoinJoin. После того как ваша монета прошла через несколько миксов, наблюдатель задается вопросом, куда она делась. Тогда он начинает отслеживать различные возможные пути и, благодаря природе CoinJoin, натыкается на несколько UTXO, которые потенциально могут совпадать с вашим. Это количество потенциальных UTXO и есть перспективная оценка вашего UTXO среди них.

Таким образом, когда будет произведена первая CoinJoin-транзакция в Whirlpool, один UTXO будет иметь перспективную оценку равную 5. Другими словами, он будет спрятан в вероятной группе из 5 UTXO:

Если кто-то следит за моим входным UTXO, он не сможет определить, какой из 5 выходных UTXO принадлежит мне.

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

Что действительно интересно в Whirlpool, так это то, что даже если мой UTXO не будет ремикширован, поскольку он входит в группу, в которой он неотличим от других, его оценка будет расти в соответствии с ремиксами других участников, встречавшихся в прошлом.

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

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

Такой экспоненциальный рост возможен благодаря уникальной модели Whirlpool, состоящей из множества последовательных небольших CoinJoin-транзакций.

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

Второй показатель, который можно определить для оценки уровня приватности данного UTXO — это ретроспективный уровень анонимности (Backward-looking Anon Set).

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

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

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

Например, представим, что наблюдатель цепочки Биткоин знает о неком UTXO и хотел бы проследить, откуда он взялся, чтобы попытаться определить его происхождение. Затем он увидит, что этот UTXO пересек CoinJoin, и он столкнется с множеством UTXO на входах в CoinJoin, которые потенциально могут быть тем, что он ищет. Это количество потенциальных UTXO и есть ретроспективная оценка отслеживаемого UTXO.

Чтобы рассчитать этот ретроспективный показатель, сначала нужно подсчитать все входные UTXO из Tx0 в транзакции, содержащей целевой UTXO. Затем нам нужно проанализировать UTXO для ремикса на входе этой транзакции и отследить их до 3 предыдущих транзакций CoinJoin, из которых они произошли. Для каждой из этих трех транзакций мы выполним аналогичный расчет. Мы продолжаем в том же духе, пока не достигнем генезис-транзакции CoinJoin, то есть первой CoinJoin-транзакции в пуле.

На приведенной выше диаграмме расчет ретроспективной оценки одного из UTXO, выходящего из CoinJoin на самом верху, сводится к подсчету количества Tx0 (синих пузырьков), присутствующих в CoinJoin-транзакциях, поднимающихся к целевому CoinJoin от генезис-транзакции.

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

Whirlpool Stats Tool (WST) #

Чтобы легко рассчитать уровни анонимности одного из ваших смешанных UTXO в Whirlpool, вы можете воспользоваться программой Whirlpool Stats Tool (WST). Это инструмент, специально разработанный для подсчета ваших уровней анонимности в Whirlpool.

Если вы являетесь пользователем RoninDojo, этот инструмент уже предустановлен на вашей ноде. Чтобы получить доступ к нему из RoninCLI, перейдите по ссылке:

Samourai Toolkit > Whirlpool Stat Tool

Если у вас нет RoninDojo, вы можете установить инструмент WST на машину под управлением Linux следующим образом:

Вам понадобится: Tor Browser (или Tor), Python 3.4.4 или выше, git и pip3.

Чтобы проверить версию установленных программ, введите команды:

python --version
git --version
pip --version

Установите зависимости:

pip install PySocks
pip install requests[sock5]
pip install plotly
pip install datasketch
pip install numpy

Установите программу Whirlpool Stats Tool:

#Клонируйте репозиторий:
git clone https://code.samourai.io/whirlpool/whirlpool_stats.git

#Перейдите в каталог whirlpool_stats:
cd whirlpool_stats

#Установите зависимости с помощью pip:
pip3 install -r ./requirements.txt
У меня лично возникло несколько проблем с последней версией WST. Если она у вас не работает, вы можете клонировать предыдущую версию с github, которая отлично работает: https://github.com/Samourai-Wallet/whirlpool_stats. Следующие шаги будут такими же. Только учтите, что пула на 100 000 сатов в то время не существовало, поэтому вам придется добавить его в код вручную, если вы используете старый релиз.

Затем создайте рабочий каталог для хранения данных транзакций и запустите WST:

#Перейдите в нужную директорию, например, домашнюю (ваш home):
cd ~

#Создайте специальный каталог, например, с именем "wst":
mkdir wst

#Перейдите в поддиректорию whirlpool_stats:
cd whirlpool_stats/whirlpool_stats/

#Запустите WST:
python3 wst.py

После установки и запуска WST вы можете рассчитать уровни анонимности. Эти шаги одинаковы как на обычной машине, так и на RoninDojo:

Введите следующую команду, чтобы запустить прокси в Tor (для RoninDojo это должна быть именно эта команда):

socks5 127.0.0.1:9050

Если вы используете Tor Browser, он должен быть запущен, и команда будет выглядеть так:

socks5 127.0.0.1:9150

Затем используйте команду workdir для доступа к рабочему каталогу, созданному на предыдущем шаге. Если вы находитесь в RoninDojo, пропустите этот шаг:

workdir /home/psyduck/wst

#Замените имя пользователя в вашем пути к каталогу.

Затем скачайте данные из пула, содержащего вашу транзакцию:

download 0001

#Замените 0001 на интересующий вас код пула.

Коды пулов в WST следующие:

  • Пул 0,5 BTC: 05
  • Пул 0,05 BTC: 005
  • Пул 0,01 BTC: 001
  • Пул 0,001 BTC: 0001

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

load 0001

#Замените 0001 на интересующий вас код пула.

После загрузки данных введите команду score, а затем свой TXID (идентификатор транзакции), чтобы получить свои уровни анонимности:

score TXID

#Замените TXID на ваш идентификатор транзакции.

WST отобразит оценку уровня анонимности, ориентированного на прошлое (Backward-looking metrics), и оценку уровня, ориентированного на будущее (Forward-looking metrics). Помимо оценок уровней анонимности, WST также рассчитывает коэффициент распространения вашего UTXO в пуле (spread) в соответствии с уровнем анонимности.

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

Приведем пример: если всего в пуле 100 UTXO, ожидающих ремикса, и ваш UTXO имеет перспективный уровень 70, то спред этого UTXO составляет 70%.

— Прим. переводчика

Обратите внимание, что перспективная оценка для вашего UTXO рассчитывается на основе TXID вашего начального микса, а не последнего. В отличие от этого, ретроспективный показатель UTXO рассчитывается по TXID последнего цикла.

Использование калькулятора Больцмана #

Данный раздел взят из другой статьи Лоика Мореля

Калькулятор Больцмана - это инструмент, позволяющий легко рассчитать различные расширенные показатели Биткоин-транзакции, в том числе уровень ее энтропии. Все эти данные позволят вам оценить уровень приватности транзакции и обнаружить любые ошибки. Этот инструмент предустановлен на ноде RoninDojo.

Чтобы получить доступ к нему из RoninCLI, подключитесь по SSH, затем перейдите в меню:

Samourai Toolkit > Boltzmann Calculator

Если у вас нет RoninDojo, вы можете установить калькулятор Больцмана на машину под управлением Linux следующим образом:

Вам понадобится: Python 3.3.3 или выше, git и pip3.

#Клонируйте репозиторий:
git clone https://code.samourai.io/oxt/boltzmann.git

#Перейдите в каталог boltzmann:
cd boltzmann

#Установите зависимости с помощью pip:
pip3 install -r ./requirements.txt

Для запуска программы перейдите в подкаталог boltzmann, который находится внутри папки склонированного репозитория:

cd boltzmann

Запустите программу с параметром --help, чтобы получить список поддерживаемых параметров:

python3 ludwig.py --help

По умолчанию калькулятор использует API blockchain.info. Вы можете использовать API от Blockstream с помощью опции --blockstream или, для большей приватности, свою собственную ноду, указав параметр --rpc.

Кроме того, для использования вашего Биткоин-узла, необходимо задать переменные окружения, чтобы калькулятор мог к нему подключиться: BOLTZMANN_RPC_USERNAME, BOLTZMANN_RPC_PASSWORD, BOLTZMANN_RPC_HOST, BOLTZMANN_RPC_PORT. Например:

export BOLTZMANN_RPC_USERNAME=myusername
export BOLTZMANN_RPC_PASSWORD=mysecretpassword
#Используйте значение "127.0.0.1", если запускаете калькулятор непосредственно на машине с Биткоин-нодой
export BOLTZMANN_RPC_HOST=127.0.0.1
export BOLTZMANN_RPC_PORT=8332

В вашем bitcoin.conf должны быть указаны следующие параметры:

rpcuser=myusername
#Используйте надежный пароль
rpcpassword=mysecretpassword
rpcport=8332
txindex=1

Запустите программу с идентификаторами интересующих вас транзакций, указав их в параметре --txids через запятую, например:

python3 ludwig.py --blockstream --txids=8e56317360a548e8ef28ec475878ef70d1371bee3526c017ac22ad61ae5740b8,812bee538bd24d03af7876a77c989b2c236c063a5803c720769fc55222d36b47

— Прим. переводчика

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

Эти показатели можно использовать для любой Биткоин-транзакции, но они особенно интересны для изучения качества Coinjoin-транзакции.

Первый показатель, рассчитываемый этой программой, - количество возможных комбинаций. В калькуляторе он обозначен как “Nb combinations”. Учитывая суммы UTXO, этот показатель представляет собой количество возможных сопоставлений входов с выходами.

Другими словами, этот показатель представляет собой количество возможных интерпретаций для данной транзакции. Например, для CoinJoin со структурой Whirlpool 5x5 количество возможных комбинаций будет равно 1496:

Второй показатель — энтропия транзакции (“Tx entropy”). Учитывая, что количество возможных комбинаций для транзакции может быть очень большим, мы можем использовать энтропию. Энтропия представляет собой двоичный логарифм числа возможных комбинаций. Ее формула выглядит следующим образом:

  • E: энтропия транзакции.
  • C: количество возможных комбинаций для транзакции.
E = log2(C)

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

Поэтому:

E = log2(C)
C = 2^E

Этот показатель выражается в битах. Например, вот расчет энтропии транзакции CoinJoin со структурой Whirlpool 5x5, число возможных комбинаций которой, как мы видели ранее, равно 1496:

C = 1496
E = log2(1496)
E = 10.5469 бит

Таким образом, энтропия этой Coinjoin-транзакции составляет 10.5469 бит, что очень хорошо.

Чем выше этот показатель, тем больше различных интерпретаций транзакции, а значит, тем более она приватна.

Давайте рассмотрим другой пример. Вот “классическая” транзакция с одним входом и двумя выходами:

Существует только одна возможная интерпретация этой транзакции:

[(Вход 0) > (Выход 0 ; Выход 1)]

Поэтому ее энтропия будет равна 0:

C = 1
E = log2(C)
E = 0

Третий показатель, рассчитываемый калькулятором Больцмана, — эффективность кошелька (“Wallet efficiency”) Этот показатель просто сравнивает введенную транзакцию с наилучшей возможной транзакцией в той же конфигурации.

Поэтому мы введем понятие максимальной энтропии, которая представляет собой максимально достижимую энтропию для данной структуры транзакций. Например, структура Whirlpool 5x5 будет иметь максимальную энтропию, равную 10.5469. Показатель эффективности сравнивает максимальную энтропию с фактической энтропией введенной транзакции. Его формула выглядит следующим образом:

  • ER: реальная энтропия, выраженная в битах.
  • EM: Максимальная энтропия с той же структурой, выраженная в битах.
  • Ef: Эффективность, выраженная в битах.
Ef = ER - EM
Ef = 10.5469 - 10.5469
Ef = 0 бит

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

  • CR: Количество реальных возможных комбинаций.
  • CM: Максимальное количество возможных комбинаций при той же структуре транзакции.
  • Ef: Эффективность, выраженная в процентах.
Ef = CR/CM
Ef = 1496/1496
Ef = 100%

Эффективность 100% означает, что данная транзакция максимально приватна с точки зрения ее структуры.

Четвертый показатель — плотность энтропии (“Entropy density”). Он представляет собой расчет энтропии для каждого входа или выхода. Этот показатель можно использовать для сравнения эффективности нескольких транзакций разного размера.

Расчет очень прост: мы делим энтропию транзакции на количество присутствующих входов и выходов. Например, для CoinJoin-тпанзакции Whirlpool 5x5 мы будем иметь:

  • ED: плотность энтропии, выраженная в битах.
  • E: энтропия транзакции, выраженная в битах.
  • T: общее количество входов и выходов в транзакции.
T = 5 + 5 = 10
ED = E / T
ED = 10.5469 / 10
ED = 1.054 бит

Пятая категория информации, предоставляемая калькулятором Больцмана, — это таблица вероятностей связей между входами и выходами: “Linkability Matrix (probabilities)”. Эта таблица просто показывает вам вероятность (коэффициент Больцмана) того, что данный вход соответствует данному выходу.

Если мы вернемся к нашему примеру с Whirlpool, то таблица вероятностей будет выглядеть так:

%Выход 0Выход 1Выход 2Выход 3Выход 4
Вход 034%34%34%34%34%
Вход 134%34%34%34%34%
Вход 234%34%34%34%34%
Вход 334%34%34%34%34%
Вход 434%34%34%34%34%

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

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

%Выход 0Выход 1
Вход 0100%100%

В этом примере мы видим, что вероятность того, что каждый выход придет с входа 0, равна 100%.

Чем меньше эта вероятность, тем выше будет приватность.

Шестым показателем является количество детерминированных связей. Вам также будет представлен коэффициент детерминированных связей. Этот показатель отражает количество связей между входами и выходами данной транзакции, которые имеют вероятность 100%, то есть являются неоспоримыми.

Коэффициент “Deterministic link ratio” представляет собой количество детерминированных связей в транзакции по отношению к общему количеству связей.

Например, Coinjoin-транзакция Whirlpool не имеет детерминированных связей между входами и выходами. Поэтому показатель будет равен нулю, а коэффициент — 0%.

С другой стороны, для второй исследуемой транзакции (1 вход и 2 выхода) показатель равен 2, а коэффициент равен 100%.

Таким образом, если этот показатель равен нулю, это говорит о хорошей приватности.

Теперь, когда мы рассмотрели показатели, давайте посмотрим, как рассчитать их с помощью этой программы. В RoninCLI перейдите в меню:

Samourai Toolkit > Boltzmann Calculator

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

Затем калькулятор отобразит все показатели, которые мы рассматривали ранее:

Введите команду “Quit”, чтобы выйти из программы и вернуться в меню RoninCLI.

Утечка xpub? #

Существует много дезинформации о том, как работает Whirlpool. Самой распространенной, безусловно, является критика того, что Samourai имеет доступ к пользовательским xpub на своем сервере.

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

  • Если вы используете Whirlpool в кошельке Samourai без использования собственного Dojo, то да, Dojo-сервер Samourai знает ваш xpub.
  • Если вы используете Whirlpool в кошельке Samourai с собственным Dojo, утечки xpub не будет.
  • Если вы используете Whirlpool в кошельке Sparrow без использования собственной ноды, сторонний узел, к которому вы подключены, видит, какие транзакции вы производите.
  • Если вы используете Whirlpool в кошельке Sparrow с собственной нодой, утечки не происходит.

Как и в случае с любым другим Биткоин-кошельком, вам необходимо использовать свою собственную ноду. В противном случае вы теряете независимость и приватность, а также становитесь вынужденными доверять другим операторам нод. Но в конечном итоге это не имеет никакого отношения к протоколу Whirlpool. В этом вопросе Samourai Wallet ведет себя так же, как и все остальные существующие кошельки.


Теперь, когда мы ознакомились с теорией и тем, как это работает в целом, давайте попробуем применить это на практике!

Руководство: Whirlpool в кошельке Sparrow #

Существует множество вариантов использования Whirlpool. Первый, который я хотел бы представить, — это использование Sparrow Wallet, программного обеспечения для управления Биткоин-кошельком на ПК с открытым исходным кодом.

Преимущества этого метода в том, что он довольно прост в освоении, быстро настраивается и не требует никакого оборудования, кроме компьютера и подключения к Интернету. С другой стороны, у этого метода есть одно существенное ограничение:

Смешивание будет происходить только тогда, когда кошелек Sparrow запущен и подключен. Это означает, что если вы хотите смешивать и ремикшировать свои биткоины 24 часа в сутки, вам придется постоянно оставлять компьютер включенным.

Единственное решение этой проблемы — использовать свой собственный сервер Dojo. Об этом я расскажу в следующем разделе.

Если вы никогда раньше не использовали Whirlpool и хотите сделать это на данный момент скорее для понимания, чем для практических целей, я бы посоветовал вам начать со Sparrow, пока вы полностью не разберетесь с механизмами.

Итак, давайте приступим:

Чтобы начать, вам, очевидно, понадобится кошелек Sparrow. Вы можете скачать его прямо с официального сайта Sparrow Wallet или с их GitHub:

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

После установки программы вам нужно будет создать Биткоин-кошелек. Обратите внимание, что для смешивания у вас должен быть программный кошелек (известный как “горячий” кошелек). Вы не сможете смешивать с использованием аппаратного кошелька.

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

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

Здесь вы можете видеть, что я только что создал кошелек и отправил в него чуть более 199 000 сат:

На данный момент вы используете классический аккаунт. Этот аккаунт с индексом 0’ станет вашим депозитным аккаунтом для смешивания.

Чтобы смешать только что полученные UTXO, перейдите к списку UTXO в аккаунте, нажав на “UTXOs” в левой части интерфейса:

Затем выберите UTXO, которые вы хотите смешать, щелкнув на них. Если вы хотите выбрать несколько, удерживайте клавишу Ctrl и щелкайте на каждом из них. После того как вы выберете UTXO, он будет выделен синим цветом.

Затем нажмите на кнопку “Mix Selected” в нижней части интерфейса:

Откроется окно с описанием работы Whirlpool. Это упрощенное объяснение того, что я рассказал в предыдущем разделе.

После прочтения нажмите кнопку “Next”.

Далее также объясняется, как работают аккаунты. После прочтения нажмите кнопку “Next”.

На следующей странице вы можете ввести SCODE, если он у вас есть. SCODE — это код скидки, который применяется к комиссии за вход в пул. Samourai Wallet иногда дарит их своим пользователям по особым случаям (например, на Рождество). Не забудьте следить за ними в Twitter, чтобы не пропустить следующие SCODE: https://twitter.com/SamouraiWallet.

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

Выбрав размер комиссии, нажмите “Next”.

В следующем окне вы можете выбрать, в какой пул вступить, нажав на выпадающий список. В окне также будет указана комиссия пула и количество UTXO, которые войдут в этот пул. Затем нажмите на кнопку “Preview Premix”.

В моем примере UTXO составлял 199 000 сат, поэтому я собираюсь войти только с одним UTXO в пул 100 000 сат:

Затем Sparrow попросит вас ввести пароль вашего кошелька, который вы задали при его создании в программе.

Откроется окно обзора вашего Tx0.

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

Вы также можете увидеть структуру вашей транзакции с несколькими выходами:

  • Комиссия пула (координатора).
  • Премикс-UTXO.
  • Doxxic-сдача.

Если транзакция вас устраивает, нажмите на кнопку “Broadcast Premix Transaction” для трансляции вашего Tx0. Если нет, вы также можете изменить параметры этого Tx0, нажав на кнопку “Clear” и перезапустив построение этой транзакции.

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

Здесь вы можете видеть, что мой UTXO из Tx0 был подтвержден один раз. Вы также можете увидеть начальный микс, который был создан и отправлен в сеть, но ожидает подтверждения:

Если вы зайдете в аккаунт Postmix, то увидите, что UTXO из первоначального микса уже появился, но еще не подтвержден. Как только транзакция подтвердится, он автоматически станет доступным для будущих ремиксов, за которые не будет удерживаться комиссия.

В колонке “Mixes” вы можете увидеть количество ремиксов ваших UTXO. Помните, что важно не столько количество ремиксов, сколько значения Anon Set, хотя эти два показателя частично связаны.

Вот и все, ваш UTXO был смешан. В настоящее время он находится в пуле и ждет ремиксов. Если вы хотите прекратить смешивание, просто нажмите на кнопку “Stop Mixing”. Вы можете возобновить его, нажав на кнопку “Start Mixing”.

Если вы хотите оставить UTXO доступным для ремикширования, вы должны оставить программу Sparrow Wallet открытой, а компьютер включенным (не в режиме ожидания).

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

Tools > Prevent Computer Sleep

Кнопка “Mix to” в вашем аккаунте Postmix в разделе UTXO позволяет настроить автоматическую отправку вашего смешанного UTXO в выбранный вами кошелек. Вы можете выбрать количество ремиксов, которые будут выполнены перед отправкой в этот кошелек.

Эта опция позволяет, например, автоматически отправлять смешанные UTXO на аппаратный кошелек. Однако имейте в виду, что обычно использовать эту опцию не рекомендуется. Я объясню почему в разделе: “Лучшие практики для UTXO после смешивания”.

Это лишь один из вариантов смешивания в Whirlpool, но есть и другие. Например, вы можете смешивать прямо со своего смартфона, используя приложение Samourai Wallet для Android. Смешивание работает так же, как и описано в этом разделе.

Руководство: Whirlpool CLI на сервере Dojo и Whirlpool GUI #

Если вы хотите выйти на новый уровень, вы можете смешивать в Whirlpool на своем собственном сервере Dojo.

Dojo — это реализация узла Биткоина, разработанная командой кошелька Samourai. Если вы используете собственный Dojo для CoinJoin в Samourai, xpub-ключи ваших аккаунтов не будут передаваться на сторонние серверы. Таким образом, вы выиграете в приватности, устранив один из рисков, присущих Whirlpool.

Более того, в Dojo интегрирован Whirlpool CLI, так что вы сможете ремикшировать 24/7 без необходимости постоянно оставлять свой кошелек открытым на другом устройстве.

Это решение требует наличия работающего узла Биткоина и несколько сложнее в настройке, чем в предыдущем примере. Тем не менее, оно позволяет вам наслаждаться CoinJoin в Whirlpool с минимальными рисками.

Чтобы запустить свой собственный Dojo, вы можете либо установить узел Dojo напрямую, либо использовать Dojo на другой реализации Биткоин-узла. В настоящее время это позволяют сделать следующие системы:

  • RoninDojo, который представляет собой Dojo с дополнительными инструментами и включает в себя мастер установки и мастер администрирования.
  • Umbrel с помощью приложения “Samourai Server”.
  • MyNode с помощью приложения “Dojo”.
  • Nodl с помощью приложения “Dojo”.

В нашем примере мы будем использовать три разных интерфейса:

  • Samourai Wallet.
  • Whirlpool GUI.
  • Whirlpool CLI.

Whirlpool CLI будет работать на сервере Dojo, чтобы воспользоваться вышеупомянутыми преимуществами. Он будет отвечать за связь с координатором и управление миксами.

Whirlpool GUI — это графический интерфейс, который мы будем использовать, чтобы видеть, что происходит в Whirlpool CLI, и инициировать миксы удаленно. GUI будет установлен на другом компьютере, отличном от Dojo, чтобы им можно было легко управлять.

Samourai Wallet будет содержать наш кошелек для CoinJoin. Это бесплатное приложение с открытым исходным кодом, которое можно скачать на Android или запустить на эмуляторе. Благодаря этому приложению вы всегда будете держать под контролем свой кошелек для миксов и сможете легко тратить свои постмиксы, находясь вне дома.

Шаг 1: Подготовка Dojo #

Первым шагом будет настройка Dojo. Вам нужно будет получить URL для подключения к Dojo, который является адресом Tor. Вы также можете использовать QR-код. Этот адрес позволит вам подключить кошелек Samourai к ноде через Dojo.

Если вы используете Umbrel, перейдите в App Store в левом меню и установите “Samourai Server”. Запустив приложение, вы увидите QR-код для подключения к Dojo.

Если вы используете RoninDojo, зайдите в RoninUI через браузер, авторизуйтесь, затем нажмите на ссылку “Manage” в нижней части окна “Dojo”. Вы можете получить доступ к QR-коду Dojo, нажав на “Display values”.

Шаг 2: Подготовка кошелька #

В качестве кошелька мы будем использовать Samourai Wallet. Вы можете загрузить его из Google Play Store или скачать APK-файл на их официальном сайте.

Запустите приложение и подключитесь к своему Dojo, используя QR-код из предыдущего шага. После подключения нажмите на кнопку “Create a new wallet”.

Затем Samourai попросит вас создать парольную фразу. Если вы не знаете, что такое парольная фраза и как ее правильно создать, настоятельно советую прочитать статью на эту тему: “Насколько надежна ваша парольная фраза?”.

Выберите надежную парольную фразу и сделайте физическую резервную копию. Нажмите “Далее”, чтобы продолжить.

Далее вам нужно будет выбрать PIN-код для доступа к приложению. Этот PIN-код очень важен, но он не имеет никакого отношения к вашему Биткоин-кошельку. Он необходим для работы приложения Samourai. Он понадобится вам для доступа к кошельку в приложении Samourai. Однако если вам понадобится восстановить кошелек, потребуется только ваша парольная фраза и фраза восстановления (мнемоника). Выберите надежный PIN-код, сделайте резервную копию и нажмите “Далее”.

Вам будет предложено подтвердить этот PIN-код второй раз. После этого вы сможете получить доступ к мнемонической фразе для восстановления вашего кошелька Samourai. Как и парольная фраза, эта информация должна быть сохранена на физическом, защищенном носителе, иначе в случае проблем вы можете навсегда потерять доступ к своим биткоинам.

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

Настройки > Кошелек > Показать BIP44 XPUB

Вам будет выдан QR-код со значением xpub. Просто запишите последние 8 символов этого xpub на листе бумаги. Например:

X2GGWaLt

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

Затем переустановите приложение Samourai и попробуйте восстановить его, используя созданные ранее резервные копии. Для этого, после подключения к Dojo, нажмите на “Restore an existing wallet”.

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

Если вам удалось получить доступ к кошельку, проверьте, что XPUB BIP44 остался прежним. Перейдите:

Настройки > Кошелек > Показать BIP44 XPUB

Убедитесь, что последние 8 символов совпадают с теми, которые вы записали на листе бумаги ранее. Если нет, значит, ваша парольная фраза была сохранена неправильно (или вы допустили опечатку). Повторите шаг 2 с самого начала.

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

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

Шаг 3: Подготовка Whirlpool GUI #

Сейчас мы установим Whirlpool GUI, графический интерфейс, который позволит вам управлять CoinJoin. Перейдите к персональному компьютеру.

Прежде всего, вам нужно будет установить Java Developer Kit (JDK). Вы можете, например, бесплатно установить OpenJDK с этого сайта: https://adoptopenjdk.net/. Это позволит вам компилировать и запускать программы, разработанные на Java.

После установки OpenJDK вы можете установить Whirlpool GUI с официального сайта Samourai Wallet: https://samouraiwallet.com/download/whirlpool.

Запустите Whirlpool GUI. Чтобы Whirlpool GUI мог подключиться, на вашем компьютере должны быть запущены в фоновом режиме Tor Daemon или Tor Browser. Вам нужно будет не забывать запускать их перед каждым использованием Whirlpool GUI на этом компьютере. Если у вас не установлен Tor, перед началом работы установите его с официального сайта: https://www.torproject.org/download/.

В Whirlpool GUI нажмите на “Advanced: remote CLI”, чтобы подключиться к вашему Whirlpool CLI на сервере Dojo. Вам понадобится Tor-адрес вашего Whirlpool CLI.

  • Чтобы найти его в Umbrel: просто запустите приложение Samourai Server, вы найдете его на странице приложения.
  • Чтобы найти его в RoninDojo: зайдите в главное меню RoninCLI, а затем перейдите в раздел Credentials > Whirlpool.

В Whirlpool GUI введите адрес Tor, который вы нашли ранее, в поле “CLI address”. Оставьте “http://”, но не ставьте “:8899”. Просто вставьте полученный адрес.

В следующем поле введите 9050, если вы используете Tor Daemon, или 9150, если вы используете Tor Browser. Если вы впервые подключаетесь к Whirlpool CLI через графический интерфейс Whirlpool, можете оставить поле API-ключа пустым. В противном случае заполните его.

Нажмите кнопку “Connect”, чтобы выполнить сопряжение Whirlpool GUI с Whirlpool CLI. Будьте терпеливы, установка соединения может занять несколько минут.

Теперь вы можете выполнить сопряжение со своим кошельком Samourai. Нажмите на символ QR-кода в правой части экрана для сканирования.

В кошельке Samourai перейдите в раздел :

Настройки > Транзакции > Связать с Whirlpool GUI

Отсканируйте QR-код из вашего кошелька Samourai в Whirlpool GUI.

Убедитесь, что соединение установлено в Whirlpool GUI. На следующей странице активируйте опцию “Use Dojo as wallet backend”. Затем нажмите на кнопку “Initialize GUI”.

Затем вам будет предложено подтвердить парольную фразу вашего кошелька Samourai. По окончании нажмите на кнопку “Sign in”.

Подождите несколько минут. После завершения настройки вы попадете в графический интерфейс Whirlpool:

Шаг 4: Смешивание! #

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

Нажмите на кнопку “Deposit”, чтобы сгенерировать адрес получения.

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

Отправьте свои биткоины на сгенерированный адрес. Вы можете сгенерировать новый адрес, нажав на кнопку “Renew address”.

Для большей безопасности вносите средства через кошелек Samourai. Просто нажмите на синий “+” в правом нижнем углу приложения, а затем на “Получить”.

Как только депозит будет подтвержден, вы увидите, что он появился на счету “Deposit” в Whirlpool GUI. Чтобы начать серию CoinJoin, выберите UTXO, которые будут отправлены в микс, и нажмите на кнопку “Premix”. Обратите внимание, что если вы выберете несколько UTXO одновременно, они будут объединены во время Tx0. Это может привести к потере приватности, особенно если источники UTXO разные.

Откроется страница конфигурации Whirlpool. Выберите пул, в который вы хотите войти. Выберите комиссию за майнинг, выделенную на Tx0, и начальный CoinJoin. Внизу страницы вы увидите сумму сдачи, а также сумму и количество выровненных по сумме UTXO. Если вас устраивает конфигурация, нажмите на кнопку “Premix”, чтобы начать процесс CoinJoin.

После создания Tx0 вы можете увидеть выровненные по сумме UTXO в аккаунте “Premix”, ожидающие подтверждения. Если вы хотите, чтобы ваш премикс автоматически смешивался, а ваши будущие постмиксы автоматически ремикшировались 24/7, активируйте опцию “Automatically mix premix & postmix” на вкладке “Configuration” в левой части окна.

Теперь вы можете выйти из Whirlpool GUI, ваши UTXO доступны для CoinJoin 24/7 благодаря Whirlpool CLI на вашем сервере Dojo.

Вы можете просмотреть свои UTXO из аккаунта “Postmix” в Whirlpool GUI или из интерфейса Whirlpool в Samourai Wallet. Для этого нажмите на маленький белый логотип Samourai в левом верхнем углу экрана. Аккаунты Whirlpool легко отличить в Samourai Wallet по светло-голубому цвету:

В новом интерфейсе Samourai Wallet необходимо нажать ⋮ в правом верхнем углу экрана и выбрать “Postmix transactions”.

— Прим. переводчика

Чтобы потратить UTXO после смешивания, просто нажмите на “+” в правом нижнем углу экрана, а затем выберите подходящий инструмент для траты.

Чтобы легко отслеживать автоматические миксы, я также рекомендую настроить кошелек только для просмотра с помощью приложения Sentinel для Android. Введите ZPUB вашего аккаунта Postmix (после смешивания) и отслеживайте ваши CoinJoin в режиме реального времени.

Лучшие практики для UTXO после смешивания #

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

UTXO после смешивания #

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

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

Самая распространенная ошибка — это консолидация UTXO. Очень важно не объединять, то есть не включать в одну транзакцию смешанные и несмешанные UTXO. Это означает, что нужно управлять своими UTXO в рамках кошелька и маркировать их, чтобы не допустить ошибку. Помимо CoinJoin, объединение UTXO — это вообще плохая практика, которая часто приводит к потере приватности, если их не контролировать.

Также нужно быть осторожным с консолидацией смешанных UTXO. Можно делать небольшие консолидации, если ваши смешанные UTXO имеют высокие уровни анонимности, но это снизит уровень приватности ваших биткоинов.

Будьте очень внимательны, чтобы консолидация не была слишком большой или чтобы она не происходила после слишком малого количества ремиксов, иначе простым вычислением можно будет установить связь между вашими UTXO до CoinJoin и после CoinJoin. Если вы плохо разбираетесь в этих понятиях, то самое безопасное — не консолидировать UTXO после ремикса, а отправлять их по одному на аппаратный кошелек, каждый раз указывая новый пустой адрес. И снова не забывайте маркировать каждый полученный UTXO.

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

Как и при любой другой Биткоин-транзакции, вы не должны повторно использовать адреса получения. Напоминаю, что адреса получения предназначены только для одноразового использования. Любая новая входящая транзакция требует генерации нового пустого адреса.

1 UTXO = 1 адрес

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

UTXO Doxxic-сдачи #

Во-вторых, вы должны быть осторожны в обращении с “Doxxic Change” — сдачей, которая не попала в пул для смешивания. Эти UTXO, созданные в результате использования Whirlpool, опасны для вашей приватности, потому что они создают связь между вами и использованием CoinJoin. Поэтому не используйте их просто так и не объединяйте с другими UTXO. Вот что вы можете сделать с ними:

  • Смешивайте их в пулах меньшего номинала: если ваш UTXO достаточно велик, чтобы самостоятельно поместиться в пул меньшего номинала, смешивайте его. Это, безусловно, одно из лучших решений. С другой стороны, вы никогда не должны объединять несколько Doxxic-сдач вместе, чтобы они попали в один пул. Это плохая идея, которая создаст связь между различными входами в Whirlpool.
  • Пометьте их как “нерасходуемые” (“Do not spend”) и оставьте на специальном аккаунте: еще одно хорошее решение — просто не трогать их и пометить как “нерасходуемые”, чтобы вы были уверены, что не будете их использовать. Если цена биткоина вырастет, наверняка будут созданы новые, более мелкие пулы, которые позволят вам смешивать ваши маленькие Doxxic-сдачи.
  • Пожертвования: очень важно делать небольшие пожертвования, по мере своих возможностей, различным разработчикам, работающим над Биткоин и связанным с ним программным обеспечением, а также производителям контента, которые помогают нам понять, как использовать это программное обеспечение. Вы также можете сделать пожертвование в различные ассоциации, которые принимают платежи в биткоинах. Если ваша Doxxic-сдача является для вас обузой, пожертвуйте её, например проекту 21 идея или переводчику этого труда.
  • Используйте их для покупки подарочных карт: некоторые сайты, например, площадка RoboSats (гид) позволяют покупать подарочные карты в обмен на биткоины, чтобы вы могли совершать покупки в различных известных торговых точках. Покупая подарочные карты такого типа, вы можете избавиться от Doxxic-сдачи.

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

В январе 2024 года разработчики Samourai Wallet и разработчик Monero-кошелька Mysu выпустили тестовую бета-версию приложения Samourai Swaps, для атомарных p2p-обменов BTC/XMR, что также позволит вам эффективно потратить Doxxic-сдачу.

— Прим. переводчика

Инструменты для траты UTXO #

Как вы уже поняли, самая безопасная практика для UTXO после смешивания — оставить смешанные UTXO на специальном аккаунте и не трогать их до тех пор, пока вы не захотите с ними расстаться.

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

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

PayJoin — Stowaway #

PayJoin — это CoinJoin между двумя людьми с определенной структурой. Он используется для траты биткоинов. Он может быть использован для траты как смешанных, так и несмешанных биткоинов.

Эта специфическая структура транзакций была впервые реализована в кошельке Samourai с помощью инструмента Stowaway. За ней последовал BIP, который взял идею PayJoin и переименовал ее в P2EP (Pay-to-End-Point).

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

Например, если вы покупаете багет у пекаря за 4 000 сатов с UTXO в 10 000 сатов и хотите совершить PayJoin, пекарь добавит к транзакции UTXO в 15 000 сатов на входе, который он полностью вернет на выходе, чтобы запутать эвристический анализ:

В этом примере мы видим, что пекарь вложил 15 000 и получил 19 000. Разница составляет 4 000 сатов — цену его багета. Если вы хотите купить багет за 4 000 сатов, то вы вложили 10 000, а получили 6 000. Разница составляет 4 000 сатов — цена багета. В этом примере я намеренно не учитываю стоимость майнинга для простоты.

Благодаря такой структуре PayJoin разрушает эвристику владения совместными входами Биткоин-транзакции. Когда кто-то посмотрит на этот платеж, он подумает, что вы просто объединили 2 своих UTXO, чтобы купить что-то за 19 000 сатов, и получили 6 000 сатов обратно в виде сдачи. В действительности, как мы видели, ситуация совершенно иная. Поэтому анализ цепочки размыт, а параметры платежа трудно понять внешнему наблюдателю.

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

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

Как мы видели ранее, у Samourai Wallet есть собственный инструмент PayJoin — Stowaway. Вы можете использовать его либо в Sparrow Wallet, либо из приложения Samourai Wallet.

Stowaway принадлежит к типу транзакций, который разработчики называют “Cahoots” (в переводе с англ. — “сговор”), то есть совместная транзакция между несколькими пользователями, требующая обмена информацией вне блокчейна Биткоина. В настоящее время в Samourai существует два инструмента Cahoots — Stowaway и StonewallX2, который мы рассмотрим позже.

Совместные транзакции Cahoots требуют обмена частично подписанными транзакциями между участниками. Это может занять много времени, особенно если вы работаете с другим человеком удаленно. Однако всегда есть возможность сделать это вручную с другим пользователем Samourai Wallet, что может быть хорошим вариантом, если вы физически находитесь рядом с ним. Ручной процесс состоит из обмена 5 QR-кодами, которые нужно сканировать по очереди.

На расстоянии этот процесс становится слишком сложным. Поэтому Samourai разработала отличное решение: собственный зашифрованный протокол связи на основе Tor — Soroban. С помощью Soroban пользователям больше не нужно обмениваться QR-кодами. Обмен происходит автоматически в фоновом режиме, скрытый за удобным пользовательским интерфейсом.

Зашифрованный обмен информацией требует определенной формы связи и аутентификации между участниками Cahoots. Поэтому транзакции с использованием Soroban основаны на PayNym пользователей. Если вы не знаете, что такое PayNym, я расскажу вам о них в этой статье: “BIP47, или гадкий утенок”.

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

Чтобы провести удаленную Cahoots-транзакцию, в нашем примере — PayJoin в Samourai или Sparrow, вам нужно “соединиться” (Follow) с другим пользователем через его PayNym. В данном случае, чтобы совершить Stowaway (PayJoin), вам нужно соединиться с человеком, которому вы хотите отправить биткоины.

Чтобы сделать это в Sparrow Wallet, просто введите PayNym или отсканируйте QR-код получателя в поле “Find Contact”, см. предыдущий скриншот.

В кошельке Samourai нажмите на синий “+” в правом нижнем углу экрана, а затем на значок “PayNym’ы” фиолетового цвета. Если у вас еще нет PayNym, вы можете сгенерировать свой собственный, следуя инструкциям.

Транзакции производятся в Testnet — это не настоящие биткоины.

Оказавшись в интерфейсе PayNym, снова нажмите на синий “+”. Затем вы можете соединиться с PayNym вашего коллеги, вставив его идентификатор (Payment Code) или отсканировав QR-код.

Затем нажмите на кнопку “Соединять”:

Затем вас спросят, хотите ли вы “подключиться” к нему. Эта функция позволит вам впоследствии использовать BIP47. За это взимается небольшая комиссия. В нашем случае она нам не нужна, поэтому мы не будем подключаться.

В моем примере я создал PayJoin между кошельком Samourai и кошельком Sparrow. Чтобы получить доступ к PayNym в Sparrow Wallet, просто нажмите на “Tools”, а затем на “Show PayNym”.

Здесь вы можете видеть, что мой оранжевый PayNym получил запрос Follow от моего белого PayNym (в Samourai). Я соединился с ним в ответ:

Теперь, когда PayNym’ы подключены, они смогут общаться друг с другом через Soroban в зашифрованном виде. Поэтому мы можем запустить Cahoots-транзакцию.

Чтобы совершить Stowaway в кошельке Samourai, вам нужно создать транзакцию. Если вы хотите потратить смешанные UTXO, перейдите в аккаунт Postmix перед запуском транзакции.

Нажмите на синий “+”, затем на “Отправить”. Вы также можете выбрать, какие именно UTXO вы хотите отправить:

В новом интерфейсе Samourai Wallet необходимо нажать на ваш PayNym-аватар в левом верхнем углу экрана, выбрать Collaborate > Initiate > Transaction type > Stowaway > Online > Collaborator > Set up transaction.

— Прим. переводчика

Затем введите сумму, которую вы хотите отправить. В моем примере я отправляю 45 000 сатов в Testnet:

Затем нажмите на кнопку “Cahoots”. Откроется окно, в котором вы можете выбрать, что создать: StonewallX2 или Stowaway. В данном случае мы хотим сделать Stowaway:

Как объяснялось выше, вы можете выполнить PayJoin вручную или удаленно. Удаленный способ быстрее и проще, но для этого вам нужно быть соединенным через PayNym. В нашем случае мы выберем вариант “Online”:

Затем вам предлагается выбрать второго участника из PayNym-контактов. Здесь я выбрал “luckyfrost”, который является моим оранжевым PayNym в Sparrow:

Затем нажмите “Просмотр транзакции” для подтверждения.

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

Затем вам предлагается подождать, пока ваш коллега подтвердит свое согласие на выполнение этой совместной операции.

Чтобы подтвердить Cahoots-запрос в Samourai, нажмите на синий “+”, а затем на зеленую кнопку “Получить”. Появится адрес. В правом верхнем углу нажмите на три маленькие точки, а затем на “Receive online Cahoots”.

В новом интерфейсе Samourai Wallet необходимо нажать на ваш PayNym-аватар в левом верхнем углу экрана, выбрать Collaborate > Participate > Выбрать аккаунт (Deposit или Postmix) > Listen for Cahoots requests.

— Прим. переводчика

Для подтверждения в Sparrow Wallet перейдите на вкладку “Tools”, затем на “Find Mix Partner”. Откроется окно, нажмите на “Next”, а затем снова на “Next”, чтобы подтвердить совместную транзакцию.

Cahoots-транзакция находится в процессе. Ваши два кошелька обмениваются частично подписанными транзакциями через Tor в зашифрованном виде благодаря Soroban.

Как только транзакция Stowaway будет создана, вы можете транслировать ее на узлы сети Биткоин.

Транзакция Stowaway завершена. Поздравляю.

Если вы посмотрите на транзакцию, то увидите входы и выходы двух пользователей. Разница между выходом и входом для белого PayNym составляет -45 000 сатов, а разница для оранжевого PayNym — +45 000 сатов, то есть сумма, которую я в итоге отправил.

Stonewall #

Stonewall — это особая структура транзакции, имитирующая CoinJoin между двумя людьми, но не являющаяся таковой на самом деле.

Эта транзакция не является совместной — в ней участвуют только UTXO, принадлежащие инициатору транзакции. Поэтому вы можете создать транзакцию Stonewall, не согласовывая ее с кем-либо еще.

Работает она довольно просто: вы вводите несколько UTXO, принадлежащих вам, и получаете 4 выхода. 2 из этих выходов будут абсолютно одинаковыми, остальные будут сдачей. Из двух одинаковых выходов только один будет действительно отправлен получателю.

Такая структура вносит бо́льшую энтропию в транзакцию и запутывает процесс отслеживания. Глядя на это со стороны, вы можете подумать, что эта транзакция — CoinJoin между двумя людьми. В действительности же это платеж. Поэтому она вызывает сомнения при анализе цепочки.

Инструмент Stonewall используется по умолчанию в кошельке Samourai, если ваш кошелек соответствует необходимым условиям. Давайте рассмотрим, как создать Stonewall. Для этого я отправлю 50 125 сатов с помощью этого инструмента:

Как видно из этого видео, опция Stonewall выбрана по умолчанию.

Вот как выглядит транзакция Stonewall, которую я только что выполнил на видео:

Мы видим, что Samurai объединил 2 UTXO, принадлежащие мне, на входе:

  • 130 450 сат
  • 454 504 сат

И мы видим 4 выхода транзакции Stonewall:

  • 50 125 сат, который является фактическим платежом, который я только что совершил.
  • 50 125 сат, который отправляется на другой адрес, принадлежащий мне.
  • Две сдачи: 80 168 сат и 404 222 сат, которые также возвращаются мне.

Таким образом, мой контрагент получил только 50 125 сат — сумма платежа, который я хотел произвести.

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

Samourai не взимает с вас никаких комиссий за создание транзакции Stonewall. Разумеется, вам придется заплатить комиссию за майнинг. Она будет выше, чем у “классической” транзакции, поскольку в ней больше входов и выходов.

Если вы хотите использовать этот инструмент в Sparrow, я отсылаю вас к этому руководству, в котором подробно объясняется, как выполнить эту операцию: https://sparrowwallet.com/docs/spending-privately.html#paying-to-a-paynym.

StonewallX2 #

StonewallX2 работает точно так же, как и Stonewall, за исключением того, что входы для транзакции принадлежат не только отправителю, но и третьей стороне. Таким образом, StonewallX2 — это совместная транзакция между двумя пользователями Samourai. Как и в Stowaway (PayJoin), связь между участниками может осуществляться вручную (если вы находитесь в одном месте) или удаленно с помощью Soroban через Tor.

Разница между Stowaway и StonewallX2 заключается в роли второго участника. В Stowaway ваш коллега обязательно является получателем платежа. В случае StonewallX2 второй участник просто предоставляет свои биткоины для микса, но не является получателем платежа.

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

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

Если посмотреть на транзакцию StonewallX2 со стороны, то ее структура будет точно такой же, как и у транзакции Stonewall. Это вызывает еще больше сомнений.

Чтобы провести транзакцию StonewallX2 удаленно, вам нужно соединиться (Follow) с PayNym второго участника, как и в случае с Stowaway. Как только вы соединитесь с ним, давайте вместе посмотрим, как провести удаленную транзакцию StonewallX2. В этом примере я работаю со своим вторым PayNym в Sparrow Wallet. Я не покажу вам в видео, но коллега по Cahoots должен подтвердить в своем кошельке, что он хочет принять участие в данной транзакции.

В новом интерфейсе Samourai Wallet необходимо нажать на ваш PayNym-аватар в левом верхнем углу экрана, выбрать Collaborate > Initiate > Transaction type > StonewallX2 > Online > Collaborator > Set up transaction.

— Прим. переводчика

Вот как выглядит транзакция StonewallX2 из видео:

Первая сумма 102 588 сат поступила из моего кошелька Samourai. Второй вход 104 255 сат — с кошелька моего коллеги. Есть 4 выхода, 2 из которых на одну и ту же сумму, чтобы запутать анализ цепочки:

  • 50 125 сат, которые идут получателю моего платежа.
  • 52 306 сат, представляют собой мою сдачу и, следовательно, идут на адрес в моем кошельке.
  • 50 125 сат отправляются моему коллеге.
  • 53 973 сат возвращаются в виде сдачи моему коллеге.

При транзакциях StonewallX2 затраты на майнинг делятся между двумя участниками. Если мы подсчитаем баланс каждого после транзакции, то получим:

  • Второй участник, который вошел с 104 255 сат, а вышел с 104 098 сат. Разница представляет собой его долю в комиссии за майнинг. Если мы не будем учитывать эти расходы, то участник совершил пустую транзакцию.
  • Что касается отправителя, то я вошел с 102 588 сат, а вышел с 52 306 сат. Разница в 50 282 сат представляет собой сумму, которую я должен получателю (50 125 сат), плюс моя доля в комиссии за майнинг.
  • Получатель не входил в транзакцию и вышел с 50 125 сат — это сумма, которую я ему заплатил.

Samourai не будет взимать с вас плату за создание транзакции StonewallX2. Разумеется, вам придется платить комиссию за майнинг вашей транзакции. Она будут выше, чем у “классической” транзакции, поскольку у нее больше входов и выходов.

Если вы хотите использовать этот инструмент в Sparrow, я отсылаю вас к этому руководству, в котором подробно объясняется, как выполнить эту операцию: https://sparrowwallet.com/docs/spending-privately.html#paying-to-a-paynym.

Ricochet #

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

Если вы проводите CoinJoin-транзакции и отправляете смешанные биткоины напрямую на биржу, поставщик услуг может заблокировать ваш счет или попросить вас обосновать происхождение ваших средств. Чтобы избежать этих лицемерных и несправедливых блокировок, вы можете использовать Ricochet для отправки смешанных средств на биржу.

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

Чтобы уменьшить этот след, Ricochet проведет 4 транзакции, в которых вы отправите средства себе на разные адреса, а затем инструмент отправит их получателю (бирже). Цель состоит в том, чтобы увеличить расстояние между транзакцией CoinJoin и транзакцией депозита. Благодаря этому инструменты анализа блокчейна посчитают, что после CoinJoin произошла смена владельца, поэтому провайдер, скорее всего, не рискнет блокировать ваш счет или просить вас предоставить обоснование.

Этот инструмент может оказаться незаменимым, если вам нужно обменять смешанные биткоины или просто если вы хотите уменьшить “след” от их смешивания в прошлом.

Как мы видели ранее, аккаунт Ricochet, используемый для адресов “отскока”, является совершенно отдельным аккаунтом от депозитного.

Существует два варианта “Рикошета”:

  • Усиленный Ricochet: также известный как “смещенная доставка”, этот вариант распределит комиссию, выплачиваемую Samourai, между пятью транзакциями-отскоками. Он также гарантирует, что каждый отскок будет присутствовать в отдельном блоке. Таким образом, эта опция рассчитана на медленную работу, но она оптимизирует приватность и устойчивость вашей транзакции к анализу цепочки.
  • Обычный Ricochet: этот вариант позволяет выполнить операцию быстро, но он будет менее приватным и устойчивым к анализу, чем предыдущий вариант. Он предпочтителен для срочных отправлений.

Ricochet — это платная услуга. Вам придется заплатить Samourai 100 000 сат.

Вот как сделать Ricochet в кошельке Samourai:

Теперь вы готовы использовать Whirlpool наилучшим образом и правильно тратить UTXO после смешивания. Инструменты траты Samourai Wallet, большинство из которых также включены в Sparrow Wallet, теперь не являются для вас секретом. Я советую вам попрактиковаться и опробовать все эти инструменты. Чтобы не рисковать своими личными средствами, не стесняйтесь сначала использовать их в Testnet! Эта сеть предназначена не только для разработчиков.

Можно ли смешивать биткоины? #

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

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

Как объяснялось выше, CoinJoin просто позволяет пользователям разорвать историю своих биткоинов, тем самым обеспечивая бо́льшую приватность платежей, особенно если в прошлом их личность была связана с UTXO.

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

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

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

Я также поддерживаю аргумент Грегори Максвелла, высказанный на форуме Bitcoin Talk в 2013 году, когда он впервые представил CoinJoin: “В действительности настоящим преступникам не нужен CoinJoin, […] они могут позволить себе купить приватность так, как обычные пользователи не могут, это просто дополнительные расходы в их (часто очень прибыльном) бизнесе”.

В любом случае, давайте помнить, что CoinJoin — это инструмент. Как и любой другой инструмент, он может быть использован как конструктивно, так и деструктивно.

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

Сам Сатоши Накамото посвятил целый раздел своей “Белой книги” соблюдению приватности пользователей Биткоина. В этом документе он подчеркивает риск потери приватности, если владелец пары ключей будет раскрыт. Он объясняет, что если это произойдет, то все транзакции владельца можно будет отследить. CoinJoin на данный момент является лучшим решением для разрыва связи между биткоинами и их владельцами, как и предписывал Сатоши Накамото в “Белой книге”.

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

Внешние источники: #

Ветка в Twitter Why we CoinJoin от @SamouraiWallet.

Статья HOW TO WHIRLPOOL ON DESKTOP WITH RONINDOJO от ECONOALCHEMIST.

Статья THE EASIEST WAY TO WHIRLPOOL YOUR BITCOIN AND PRESERVE PRIVACY от ECONOALCHEMIST.

Статья HOW TO WHIRLPOOL YOUR BITCOIN ON DESKTOP WITH SPARROW WALLET от ECONOALCHEMIST.

Статья Diving head first into Whirlpool Anonymity Sets от Samourai Wallet.

Ветка в Twitter от @BrotherRabbit_ о расчете перспективного уровня анонимности в Whirlpool.

Видео Tutoriel Samouraï par JohnOnChain (Vie privée) от Youtube-канала Découvre Bitcoin.

Материалы по Ricochet:

Материалы по инструментам для траты UTXO в Sparrow Wallet:

Материалы по инструментам для траты UTXO в Samourai Wallet:

Статья об установке и использовании WST (на испанском языке).

Статья Dealing with Coinjoin Change Outputs от BitcoinQ+A.

Серия из 4 статей Понимание приватности в сети Биткоин с помощью OXT от Samourai Wallet.

Материалы по Whirlpool от Samourai Wallet:

Материалы по калькулятору Больцмана:

Поддержите переводчика #

Поддержать переводчика можно, отправив немного сат в сети Лайтнинг:

LNURL1DP68GURN8GHJ7MRW9E6XJURN9UH8WETVDSKKKMN0WAHZ7MRWW4EXCUP0X9UX2VENXDJN2CTRXSUN2VE3XGCRQPNAPC6


  1. Термин “Doxxic” происходит от игры слов “доксинг” и “toxic” — токсичный. Он подразумевает что-то вредное и раскрывающее вашу личность. ↩︎


Подключитесь к нашему релею, чтобы оставить комментарий. Подробнее.