CoinJoin объединяет средства нескольких людей в одной транзакции Bitcoin. Каждый сохраняет свои ключи и проверяет, что подписывает. Транзакция создаёт новые выходы для участников или их получателей, а наблюдателю может быть сложнее сопоставить выходы с первоначальными владельцами. Результат зависит от структуры транзакции, протокола и других сведений, доступных наблюдателю.
Анна оплачивает услугу и не хочет, чтобы получатель легко проследил остальные её средства. Но у Bitcoin нет закрытой банковской выписки: история транзакций публична. Транзакция расходует ранее созданные неизрасходованные выходы, то есть UTXO, и создаёт новые. Выход содержит сумму и условия, при которых её можно потратить. Если обычный платёж использует несколько таких выходов, аналитик часто предполагает, что ими управляет один человек. Это полезное предположение, или эвристика, а не доказательство. CoinJoin нарушает эту предпосылку, объединяя разных владельцев в одной транзакции. Он не переписывает прошлое, а меняет степень уверенности, с которой можно выводить связи из публичных записей. [1]
В упрощённом примере у Анны и Павла есть по одному выходу на 100 500 sat. Sat — сокращение от satoshi, минимальной единицы биткоина. Они готовят транзакцию, в которой каждый получит новый выход на 100 000 sat. Оставшиеся 1 000 sat — общая комиссия сети на двоих. Дополнительные комиссии сервиса в примере не учитываются. Координатор или взаимодействующие кошельки составляют предложение. Цифровая подпись — это проверяемое согласие, созданное с помощью приватного ключа: секретных данных, позволяющих подписывать. Сам ключ при этом не раскрывается. Прежде чем подписать свои входы, каждый проверяет адрес собственного выхода, сумму, комиссии и все условия. Сам по себе координатор не имеет ни чужих ключей, ни права тратить чужие средства. Если нужная подпись не поступит, эту транзакцию нельзя корректно завершить. Однако защита предполагает исправное ПО и проверку предложения: подпись под отправкой средств мошеннику лишит её смысла. [1] [5]
В примере человек, который смотрит только на блокчейн, видит два новых выхода одинаковой стоимости. Одна лишь сумма не показывает, какой принадлежит Анне, а какой Павлу. Но это не означает автоматически вероятность пятьдесят на пятьдесят или гарантированную анонимность: наблюдатель может знать один адрес или иметь другую зацепку. В настоящих транзакциях распознаваемая сдача, разные суммы, типы выходов и время могут помогать устанавливать связи. Множество анонимности — это кандидаты, которых наблюдатель не может различить, а не просто число записавшихся в раунд людей. Оценка кошелька тоже отражает определённую модель, а не обещает, сколько о вас знает каждый наблюдатель. [1] [4]
Возможность украсть деньги и возможность получить информацию — разные возможности. Простой координатор может знать соответствия входов и выходов; другие протоколы скрывают их криптографическими методами. Важны и сетевые сведения: IP-адреса, время подключения. Есть и Sybil Attack: один противник выдаёт себя за многих участников, знает собственные выходы и сужает круг вариантов для остальных. Участник также может отказаться подписывать транзакцию и сорвать весь раунд. Поэтому важны конкретные правила участия и защита от перегрузки запросами или саботажа, то есть DoS. Большое число входов само по себе не отвечает на эти вопросы. [1] [4]
Позже Анна тратит новый выход вместе со средствами, выведенными с биржи, которая знает её личность. Наблюдатель может получить новую связь именно там, где она пыталась создать неопределённость. Повторное использование адресов или объединение нескольких выходов в один, то есть консолидация, может дать похожий результат. Coin Control позволяет выбирать UTXO, которые потратит кошелёк, и помогает разделять средства из разных контекстов. Это не кнопка абсолютной приватности. Получатель может знать плательщика, а сервис — хранить собственные записи. Поэтому о приватности нужно думать и после успешного раунда; она не сводится к форме одной транзакции. [5]
Сначала определите, какую информацию и от кого вы хотите защитить. Любопытный получатель, координатор и наблюдатель сети обладают разными возможностями. Затем выясните, у кого ключи, что подписывает приложение, какие комиссии берёт и как обращается с полученными выходами. Сервис, которому вы сначала передаёте средства на хранение, требует другого доверия, чем CoinJoin без передачи ключей. CoinJoin не добавляет специального правила Bitcoin: узлы проверяют обычную транзакцию и её условия. Узел — это компьютер с программой, проверяющей транзакции и блоки Bitcoin. CoinJoin не удаляет записи биржи или получателя и не обещает, как конкретный сервис отнесётся к платежу. Новичку полезнее понять эти границы, чем увидеть в приложении пометку «анонимно». [1] [5]
Gregory Maxwell публично объяснил CoinJoin в августе 2013 года. Идея не требовала менять правила сети, но людям по-прежнему нужен был способ найти друг друга и договориться. JoinMarket показал рыночный подход: организатор совместной транзакции платит другим за предоставление средств для участия. Протоколы с координатором устраивают это иначе. Например, WabiSabi поддерживает разные суммы и анонимные удостоверения, позволяющие доказать право на выходы без прямого раскрытия их связи со входами. Поэтому CoinJoin нельзя приравнивать к одному приложению или считать, что каждый вариант требует только одинаковых выходов. [1] [2] [4]
Сообщение Maxwell объясняет основную идею, документация конкретного кошелька описывает его рабочий процесс, а статья о WabiSabi — свойства протокола. Это разные уровни источников. На момент этой редакции исходный репозиторий клиента и сервера JoinMarket архивирован; здесь он служит историческим и техническим материалом, а не рекомендацией к установке. PayJoin по BIP 78 — близкий способ сотрудничества плательщика и получателя, когда оба добавляют входы. Обычно он не нацелен на большую группу одинаковых выходов. Сравнивая подходы, спрашивайте, кто сотрудничает, что может узнать и что именно человек и его кошелёк проверяют перед подписанием, а не ориентируйтесь только на общее слово «приватность». [1] [2] [3] [4] [5] [6]
Совместная транзакция не означает, что все средства принадлежат одному человеку
Alice и Bob контролируют разные входы совместной транзакции и получают собственные выходы. Предположение, что все входы принадлежат одному человеку, здесь неверно. Само объединение не гарантирует скрытого соответствия выходов; суммы, другие сведения и последующие траты могут раскрыть связи.
Для полной картины прочитайте эту статью вместе с Bitcoin, Приватность в Bitcoin, Псевдонимность, Кошелёк, UTXO, Транзакция. На эту статью также ссылаются Change Address, Приватность в Bitcoin, Псевдонимность, KYC.
01Может ли координатор CoinJoin украсть средства из входов?+
В правильно устроенном некастодиальном CoinJoin ключи остаются у участников. Перед подписанием они проверяют всю транзакцию, прежде всего свои выходы, суммы и комиссии. Без нужных подписей координатор не создаст действительную транзакцию, но может сорвать раунд или отказать в участии. Но если участник подпишет транзакцию, отправляющую его деньги мошеннику, он сам одобрит этот платёж.
02Остаются ли выходы анонимными навсегда после CoinJoin?+
Нет. История остаётся публичной. Повторное использование адресов, консолидация, платежи известным контрагентам, узнаваемое поведение кошелька и сетевые метаданные могут уменьшить или устранить неоднозначность. Результат зависит от протокола и дальнейшего обращения с выходами.