Биткоин часто называют цифровой наличностью, но это сравнение спорное. Если Алиса заплатит Бобу 10 долларов наличными, Боб не узнает, откуда взялись эти деньги. А если позже Боб передаст купюру Кэрол, та не сможет понять, что сначала она была у Алисы.
С биткоином всё иначе — как раз из-за его открытой природы. Историю конкретной монеты (то есть непотраченного выхода транзакции, или UTXO) может без труда просмотреть кто угодно. Это больше похоже на ситуацию, когда при каждом использовании биткоина сумму и имя получателя записывают в счёт-фактуру.
Впрочем, публичные адреса не содержат имён, поэтому личность пользователя не раскрывается сама собой. Полностью приватным биткоин от этого не становится. Анализ блокчейна становится всё изощрённее и всё успешнее связывает адреса с конкретными людьми. Помимо таких методов слежки, раскрыть личность пользователей криптовалют может и подразделение, созданное специально для этой задачи. Чтобы этому помешать, за годы появились приёмы, разрывающие связь между транзакциями.
Что такое микширование монет?
В широком смысле микширование монет — это операции, которые скрывают происхождение средств, обменивая их на другие средства. Но в криптомире под микшированием чаще всего понимают услуги сторонних сервисов. Провайдер принимает монеты пользователя (и небольшую комиссию) и возвращает ему другие монеты, никак не связанные с отправленными. Такие сервисы также называют тумблерами или миксерами.
Разумеется, безопасность и приватность подобных централизованных сервисов вызывают вопросы. Никто не гарантирует, что миксер действительно вернёт средства и что у полученных монет нет проблемной истории транзакций. Ещё один момент, о котором стоит помнить: IP-адреса и биткоин-адреса может фиксировать третья сторона. По сути, пользователь доверяет свои средства постороннему в надежде получить взамен монеты без прошлого.
Более интересный подход — транзакции CoinJoin, которые создают значительную степень правдоподобного отрицания. То есть после проведения транзакции CoinJoin невозможно предъявить доказательство, однозначно связывающее пользователя с его предыдущими операциями. Многие решения на базе CoinJoin служат более децентрализованной альтернативой миксерам: пользователю не нужно передавать кому-то контроль над своими средствами, даже если в процессе участвует координатор.
Что такое CoinJoin?
Транзакции CoinJoin впервые представил разработчик Bitcoin Грегори Максвелл в 2013 году. В своей статье он кратко описал, как устроены такие операции и как с их помощью можно добиться масштабного прироста приватности без каких-либо изменений в протоколе.
По сути CoinJoin — это объединение входов от разных пользователей в одну транзакцию. Прежде чем разобрать, как (и зачем) это делается, вспомним базовую структуру транзакции.
Биткоин-транзакции состоят из входов и выходов. Когда пользователь хочет провести операцию, он использует свои UTXO в качестве входов, задаёт выходы и подписывает входы. Важно, что каждый вход подписывается независимо, а пользователь может создать сразу несколько выходов — то есть отправить средства на разные адреса.

Разбирая транзакцию из четырёх входов (по 0,2 BTC каждый) и двух выходов (0,7 BTC и 0,09 BTC), можно построить несколько предположений. Первое: совершается платёж — отправитель посылает один из выходов другому человеку, а сдачу себе. Поскольку задействованы четыре входа, наибольший выход, скорее всего, уходит получателю. Если в сумме не хватает 0,01 BTC, это комиссия, уплаченная майнеру.
Не менее вероятно и то, что отправитель хочет собрать из мелких UTXO один крупный и объединяет небольшие входы, чтобы получить нужные 0,7 BTC.
Ещё одно предположение вытекает из того, что каждый вход подписывается отдельно. Транзакция вполне могла быть построена так, что входы подписали четыре разные стороны. Именно этот принцип и делает CoinJoin работающим.
Как работает CoinJoin?
Основная идея в том, что несколько сторон договариваются и вместе создают транзакцию, сообщая свои входы и желаемые выходы. После объединения всех входов невозможно с уверенностью сказать, какой выход принадлежит какому пользователю. Процесс показан на схеме ниже:

Здесь четыре пользователя хотят разорвать связь между своими операциями. Они координируются между собой (или через координатора), чтобы сообщить, какие входы и выходы хотят включить.
Координатор собирает все данные, формирует из них транзакцию и даёт каждому участнику подписать её, прежде чем разослать в сеть. После того как пользователи поставили подписи, изменить транзакцию, не сделав её недействительной, уже нельзя. Так исключается риск того, что координатор украдёт средства.
Транзакция работает как чёрный ящик, в котором перемешиваются монеты. Чтобы создать новые UTXO, старые нужно уничтожить. Единственное звено между старыми и новыми UTXO — сама транзакция, но на этом этапе отделить участников друг от друга уже невозможно. В лучшем случае можно сказать, что один из входов добавил конкретный участник и что он может быть новым владельцем соответствующего выхода.
Но и это не даёт полной уверенности. Можно ли вообще заключить из приведённой транзакции, что участников четверо? А вдруг один человек отправляет средства на четыре собственных адреса? Или два человека совершают две разные покупки и возвращают себе по 0,2 BTC? Или четыре человека переводят средства другим либо самим себе? Точных ответов на эти вопросы у нас нет.
Приватность через отрицаемость
Уже само существование приложений CoinJoin заставляет усомниться в методах, которыми анализируют транзакции. Вы можете сделать вывод, что во многих операциях применяется CoinJoin, но всё равно не узнаете, кому принадлежат выходы. По мере роста популярности таких приложений допущение, что все входы принадлежат одному пользователю, ослабло — и это большой шаг к приватности для всей экосистемы.
В предыдущем примере у транзакции анонимити-сет равен 4, поэтому владельцем выхода может быть любой из четырёх участвующих пользователей. Чем больше анонимити-сет, тем сложнее связать транзакцию с её первоначальным владельцем. К счастью, благодаря новейшим реализациям CoinJoin пользователи могут объединять свой вход с десятками других, никому при этом не доверяя, и получать высокую степень отрицаемости. Не так давно была успешно проведена транзакция со 100 участниками.
Заключение
Инструменты для микширования монет — важное подспорье для всех, кому небезразлична приватность. В отличие от других приватных обновлений (например, Confidential Transactions), пользоваться ими можно, не меняя протокол в его нынешнем виде.
Тем, кто доверяет добросовестности и методам сторонних сервисов, микширование даёт простое решение. Тем, кто предпочитает проверяемые варианты без передачи средств на хранение, CoinJoin подходит гораздо лучше. Такие операции технически подкованные пользователи могут собрать вручную, а можно доверить их программным инструментам, которые избавляют от возни со сложными механизмами. Несколько подобных решений уже существует, и их популярность растёт по мере того, как пользователи требуют больше приватности.
