Блог им. Ilia_Zavialov
Перед тем как вы погрузитесь в изучение статьи, обратите внимание на тот факт что всё упомянутое в ней не является финансовой рекомендацией для принятие более взвешенного решения просьба провести свое собственное исследование.
Одна из первоначальных проблем любой одноранговой платежной системы — двойные траты. Как предотвратить злоупотребление платежной сетью со стороны злоумышленников, которые могут потратить одни и те же средства несколько раз, не обращаясь при этом к центральному органу?
Сатоши Накамото решил эту проблему с помощью своего протокола Биткоин — одноранговой электронной платежной сети, работающей без вмешательства какого-либо центрального органа. В своей “Белой книге” он объясняет, что единственный способ подтвердить происхождение транзакции, а значит, и убедиться в отсутствии попытки двойного расходования средств, — это быть в курсе всех транзакций, проводимых в распределенной платежной сети.
Чтобы каждый пользователь был в курсе транзакций, те должны быть публично объявлены. Таким образом, одноранговая система платежей, предлагаемая протоколом Биткоин, стала возможной благодаря полностью прозрачной и распределенной инфраструктуре. Это означает, что любой обладатель узла может проверить цепочку электронных подписей и историю каждой монеты, начиная с момента ее создания майнером.
Такая прозрачность и распределенность означает, что каждый пользователь сети Биткоин может отслеживать и наблюдать за транзакциями всех остальных пользователей. Поэтому приватность невозможна на уровне платежей. Вместо этого она обеспечивается на уровне персональной идентификации.
Вместо того чтобы связывать каждую учетную единицу с персональным идентификатором (фамилией, именем и т. д.), как в традиционной банковской системе, биткоины ассоциируются с парой ключей. Таким образом, пользователи анонимно представлены криптографическим идентификатором.
Потеря приватности в Биткоине происходит, когда наблюдатель может установить связь между определенными UTXO (грубо говоря, монетами) и определенными пользователями. Когда такая связь устанавливается между пользователем и его UTXO, появляется возможность отслеживать его платежи и анализировать историю передвижения его биткоинов.
CoinJoin — это способ разорвать историю UTXO, чтобы повысить уровень приватности пользователей сети Биткоин.
В этой статье мы рассмотрим, что такое CoinJoin, как он работает и как правильно его использовать. Мы поговорим в основном о Whirlpool, самой эффективной, на мой взгляд, реализации CoinJoin на сегодняшний день, но также рассмотрим и другие существующие реализации. Я также расскажу о показателях, которые можно использовать для расчета уровня приватности ваших биткоинов. Чтобы не увязнуть в теории, я покажу вам на практике, как провести CoinJoin-транзакцию различными способами. Наконец, мы рассмотрим лучшие практики, которых следует придерживаться, чтобы не потерять приватность, заработанную после серии CoinJoin-транзакций, и я познакомлю вас с различными инструментами в кошельке Samourai, которые позволят вам это сделать.
Прежде чем приступить к работе, важно понять разницу между CoinJoin и смешиванием.
Смешивание (также известное как “mixer”, “blender” или “tumbler”) — это техника, используемая для смешивания UTXO (т. е. смешивания биткоинов), чтобы разорвать их историю и запутать процесс отслеживания. Цель этого типа операций — псевдонимизировать UTXO, чтобы пользователь получил бо́льшую приватность. Псевдонимизация происходит, когда UTXO входит в группу из нескольких других неотличимых друг от друга UTXO.
Смешивание и CoinJoin — это две техники с одинаковой целью, но работают они по-разному. Смешивание опирается на доверенную третью сторону, которой мы доверяем свои биткоины для смешивания, в то время как CoinJoin опирается исключительно на координатора, который синхронизирует действия пользователей, но никогда не имеет контроля над средствами.
Смешивание быстро потеряло популярность, когда появился CoinJoin, по сей день привлекающий все больше и больше пользователей. До сих пор существует несколько сервисов смешивания, такие как ChipMixer, однако сегодня эта техника существует лишь на периферии.
В повседневном языке биткоинеров многие используют слово “миксер” для обозначения CoinJoin. Даже если эта семантика изначально неверна, она стала общепринятой среди пользователей. Термин “смешанные биткоины” используется для обозначения UTXO, выпущенных в результате CoinJoin-транзакции.
CoinJoin — это техника для разрыва истории UTXO. Она основана на совместной транзакции с особой структурой — CoinJoin-транзакции. Этот тип транзакции был предложен Грегори Максвеллом в 2013 году на форуме Bitcoin Talk.
Общая схема работы такова: разные пользователи, желающие смешать UTXO, вносят определенную сумму в качестве входов в транзакцию. Эти входы преобразуются в выходы с одинаковой суммой (возможно, со сдачей, но об этом мы поговорим позже). Поэтому в результате транзакции невозможно определить, какой выход принадлежит тому или иному пользователю. Технически, между входами и выходами CoinJoin-транзакции нет никакой связи. Связь между каждым пользователем и каждым UTXO нарушена, как и история каждой монеты.
Чтобы участники имели контроль над своими средствами в любой момент, транзакция сначала создается координатором, а затем передается каждому пользователю. Затем каждый пользователь самостоятельно подписывает транзакцию, проверяя, соответствует ли она его требованиям, после чего все подписи добавляются к транзакции. Если кто-то из пользователей или координатор попытается украсть средства у других, изменив выходные данные в CoinJoin-транзакции, то подписи будут недействительными, и транзакция будет отклонена узлами.
Если использовать аналогию, то CoinJoin можно представить как погоню вертолета за автомобилем. Представим себе вертолет, пытающийся преследовать белый автомобиль. Вертолет представляет человека, который хочет проанализировать ваши платежи, а белая машина — ваш UTXO. Вертолет может легко преследовать машину, пролетая над ней.
Представим, что по этой дороге в непосредственной близости от преследуемого автомобиля движутся еще четыре таких же белых автомобиля. Вертолет по-прежнему может следовать за белым автомобилем, за которым он первоначально следил.
Теперь представим, пять автомобилей въезжают в туннель, что на некоторое время лишает вертолет возможности видеть эти машины. Когда они выедут из туннеля, вертолет не сможет определить, какая из пяти белых машин является той, за которой он изначально следовал. В этом примере туннель действует как CoinJoin. Ваш UTXO, выходящий из CoinJoin-транзакции, будет скрыт среди группы других UTXO. Потенциальный наблюдатель будет знать, что ваш UTXO находится в этой группе, но не сможет с уверенностью определить, какой из них ваш.
Технической задачей пользователей CoinJoin является получение максимально возможного уровня анонимности для их UTXO. Это понятие очень важно усвоить для дальнейшего изложения. Уровни анонимности (Anonymity Sets, или Anon Sets) являются параметрами, используемыми для оценки приватности UTXO. Их два: перспективный и ретроспективный.
Перспективная оценка показывает размер группы UTXO, в которой скрывается принадлежащий нам UTXO. Например, если я совершу CoinJoin с четырьмя другими пользователями, то сразу после CoinJoin-транзакции моя перспективная оценка будет равна 5.
Если вернуться к примеру с вертолетом, то каждый белый автомобиль, выезжающий из туннеля, имеет перспективную оценку, равную 5. Вертолет знает, что его цель находится среди этой группы из пяти машин, но он не может определить, какая машина является его первоначальной целью.
CoinJoin-транзакцию вполне можно провести вручную, напрямую с другими пользователями Биткоина. Однако, помимо того, что это очень утомительно, такое решение не очень эффективно. Для того чтобы CoinJoin-транзакция была эффективной, быстрой и охватывала всю сеть, необходимо, чтобы вы могли найти общий язык с любым другим пользователем в мире. Вместо этого мы пользуемся услугами координатора, роль которого заключается в формировании модели транзакции и реализации ее механизма, обеспечении связи различных пользователей друг с другом и передаче информации, необходимой для проведения совместной транзакции.
Существует 3 основные реализации CoinJoin в Биткоине:
JoinMarket;
Wasabi;
Whirlpool.
Несмотря на то что конечная цель этих трех реализаций одинакова – разорвать историю UTXO путем проведения CoinJoin-транзакций – работают они совершенно по-разному. Поэтому важно понять, как работает каждая из них, чтобы вы могли выбрать ту реализацию, которая лучше всего подходит для ваших нужд.