name: Конфиденциальность в биткойне goal: Понять и освоить принципы защиты конфиденциальности при использовании Bitcoin objectives:


Защитите свою конфиденциальность в Bitcoin

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

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

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

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

Введение

Обзор курса

Добро пожаловать на курс BTC204!

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

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

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

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

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

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

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

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

Раздел 1: Определения и ключевые понятия

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

BTC204

Раздел 2: Понимание и защита от цепного анализа

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

BTC204

Раздел 3: Освоение передовых методов защиты конфиденциальности

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

BTC204

Раздел 4: Понимание транзакций coinjoin

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

BTC204

Раздел 5: Понимание проблем других передовых методов обеспечения конфиденциальности

В пятом разделе мы рассмотрим все остальные методы защиты конфиденциальности в Биткойне, помимо coinjoin. За прошедшие годы разработчики проявили удивительную креативность в создании инструментов, предназначенных для защиты конфиденциальности. Мы рассмотрим все эти методы, такие как payjoin, совместные транзакции, Coin Swap и Atomic Swap, подробно описав, как они работают, их цели и слабые стороны.

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

BTC204 Готовы исследовать лабиринты конфиденциальности в Биткойне? Вперёд!

Определения и ключевые понятия

Модель UTXO биткойна

Биткойн - это прежде всего валюта, но знаете ли вы, как BTC представлены в протоколе?

UTXO на биткойне: что это такое?

Протокол биткойна основан на модели UTXO, которая расшифровывается как "Unspent Transaction Output".

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

BTC204

Биткойн работает по-другому. Понятия счета не существует, а денежные единицы управляются не через балансы, а через UTXO. UTXO представляет собой определенное количество биткоинов, которое еще не было потрачено, образуя таким образом "кусочек биткоина", который может быть большим или маленьким. Например, один UTXO может стоить 500 BTC или просто 700 SATS.

**> Сатоши, часто сокращаемый до сата, - это наименьшая единица биткойна, сопоставимая с центом в фиатных валютах.

1 BTC = 100 000 000 SATS

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

**> Крупнейший UTXO, когда-либо созданный на Bitcoin, имел стоимость 500 000 BTC. Он был создан платформой MtGox во время операции по консолидации в ноябре 2011 года: 29a3efd3ef04f9153d47a990bd7b048a4b2d213daaa5fb8ed670fb85f13bdbcf

UTXO и условия расходования средств

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

BTC204

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

BTC204

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

- 2 BTC
- 8 BTC
- 5 BTC
- 2 BTC

Общий баланс вашего портфеля составит 17 BTC.

BTC204

Структура транзакций биткойна

Входы и выходы транзакций

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

BTC204

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

BTC204

**> Теоретически транзакция биткоина может иметь бесконечное количество входов и выходов. Единственным ограничением является максимальный размер блока.

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

BTC204

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

Чтобы транзакция считалась действительной в соответствии с правилами консенсуса, общее количество выходов должно быть меньше или равно общему количеству входов. Другими словами, сумма новых UTXO, созданных в результате транзакции, не должна превышать сумму UTXO, потребленных в качестве входов. Этот принцип логичен: если у вас есть только 500,000 SATS, вы не можете совершить покупку 700,000 SATS.

Обмен и объединение в транзакции Bitcoin

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

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

Биткойн работает аналогичным образом. Представим, что у Алисы есть UTXO в размере 10 000 SATS и она хочет купить багет стоимостью 4 000 SATS. Алиса совершит транзакцию с 1 UTXO стоимостью 10 000 SATS в качестве входа, который она полностью потребляет, и 2 UTXO стоимостью 4 000 SATS и 6 000 SATS в качестве выхода. UTXO в размере 4 000 SATS будет отправлен пекарю в оплату за багет, а UTXO в размере 6 000 SATS вернется к Алисе в виде сдачи. Этот UTXO, который возвращается к первоначальному эмитенту транзакции, на жаргоне биткойна известен как "обмен".

BTC204

Теперь представим, что у Алисы не один UTXO с 10 000 SATS, а два UTXO с 3 000 SATS каждый. В этой ситуации ни одного из UTXO по отдельности не хватит, чтобы установить 4 000 SATS палочки. Поэтому Алиса должна одновременно использовать два UTXO по 3 000 SATS в качестве исходных данных для своей операции. Таким образом, общее количество входов достигнет 6 000 SATS, что позволит ей удовлетворить платеж пекарю в размере 4 000 SATS. Этот метод, при котором несколько UTXO группируются вместе в качестве входов для операции, часто называют "объединением".

BTC204

Комиссионные за транзакции

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

Frais = total inputs - total outputs

Возьмем пример Алисы, у которой UTXO составляет 10 000 SATS и которая хочет купить багет по цене 4 000 SATS. Алиса создает транзакцию со своим UTXO в размере 10 000 SATS в качестве входа. Затем она генерирует вывод в размере 4 000 SATS, чтобы пекарь заплатил за багет. Чтобы поощрить майнеров интегрировать ее транзакцию в блок, Алиса выделяет 200 SATS в качестве комиссии. Затем она создает второй вывод, обмен, который будет ей возвращен, на сумму 5 800 SATS.

BTC204

Применяя формулу платы, мы видим, что для несовершеннолетних действительно осталось 200 SATS:

Frais = total inputs - total outputs
Frais = 10 000 - (4 000 + 5 800)
Frais = 10 000 - 9 800
Frais = 200

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

Создание UTXO на биткойне

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

Ответ находится в транзакциях coinbase.

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

Транзакция coinbase уникальна тем, что она единственная способна создавать биткоины ex nihilo, без необходимости потреблять входные данные для генерации выходных. Эти вновь созданные биткоины можно назвать "оригинальными UTXO".

BTC204

Биткоины с поддержкой блока - это новые BTC, созданные с нуля, в соответствии с заранее установленным графиком эмиссии в правилах консенсуса. Субсидия на блокчейн уменьшается вдвое каждые 210 000 блоков, то есть примерно раз в четыре года, в процессе, известном как "халвинг". Первоначально с каждой субсидией создавалось 50 биткоинов, но постепенно это количество уменьшилось; в настоящее время оно составляет 3,125 биткоина за блок.

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

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

Последствия модели UTXO

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

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

Модель конфиденциальности биткойна

Деньги: подлинность, честность и двойные траты

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

BTC204

Именно поэтому мы используем деньги для перемещения стоимости в пространстве и времени.

BTC204

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

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

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

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

BTC204

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

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

BTC204

Предотвращение двойных расходов на биткойн

Единственный способ избежать такого дублирования цифрового актива - быть в курсе всех обменов в системе. Таким образом, мы сможем знать, кто чем владеет, и обновлять данные каждого человека в соответствии с проведенными транзакциями. Именно так происходит, например, с криптовалютными деньгами в банковской системе. Когда вы платите 10 евро торговцу кредитной картой, банк фиксирует обмен и обновляет книгу счетов.

BTC204

В биткойне двойная трата предотвращается аналогичным образом. Мы ищем подтверждение отсутствия транзакции, в которой уже были потрачены данные монеты. Если монеты никогда не использовались, то мы можем быть уверены, что двойной траты не произойдет. Этот принцип был описан Сатоши Накамото в Белой книге знаменитой фразой:

** Единственный способ подтвердить отсутствие транзакции - это быть в курсе всех транзакций

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

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

Модель конфиденциальности: банковская система против биткойна

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

BTC204

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

BTC204

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

BTC204

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

BTC204

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

Понимание и защита от цепного анализа

Что такое анализ цепочки биткойнов?

Определение и работа

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

Говоря простым языком, анализ цепочки состоит из трех основных этапов:

  1. ** Наблюдение за блокчейном ;**

  2. Идентификация известных особенностей ;

  3. *Выведение предположений

BTC204

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

Цели анализа цепи

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

BTC204

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

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

BTC204

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

Наиболее распространенным является KYC (Know Your Customer). Если вы выводите свои биткойны с регулируемой платформы на один из ваших личных адресов получения, то некоторые люди могут связать вашу личность с этим адресом. В более широком смысле точкой входа может быть любая форма взаимодействия между вашей реальной жизнью и транзакцией Биткойна. Например, если вы публикуете адрес получения в своих социальных сетях, это может стать точкой входа для анализа. Если вы совершите платеж в биткойнах своему пекарю, он сможет связать ваше лицо (часть вашей личности) с биткойн-адресом.

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

BTC204

Защита от цепного анализа

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

BTC204

Что может быть лучше анализа блокчейна, чем узнать о методах, используемых в нем? Если вы хотите знать, как улучшить свою конфиденциальность в Биткойне, вам нужно понять эти методы. Это позволит вам лучше понять такие методы, как coinjoin или payjoin (методы, которые мы рассмотрим в заключительных частях курса), и сократить количество ошибок, которые вы можете совершить.

https://planb.network/tutorials/privacy/on-chain/coinjoin-samourai-wallet-e566803d-ab3f-4d98-9136-5462009262ef

https://planb.network/tutorials/privacy/on-chain/payjoin-848b6a23-deb2-4c5f-a27e-93e2f842140f

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

Методы анализа цепей

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

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

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

Сатоши Накамото и анализ цепочки

Первые две эвристики анализа цепочки были открыты самим Сатоши Накамото. Он рассказывает о них в 10-й части "Белой книги биткойна". Это :

BTC204

Источник: С. Накамото, "Биткойн: одноранговая система электронных денег", https://bitcoin.org/bitcoin.pdf, 2009.

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

Модели транзакций

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

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

BTC204

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

Одно отправление (или один платеж)

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

BTC204

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

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

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

Например, вот транзакция Bitcoin, в которой используется схема простой отправки:

b6cc79f45fd2d7669ff94db5cb14c45f1f879ea0ba4c6e3d16ad53a18c34b769
BTC204

Source : Mempool.space

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

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

Подметание

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

BTC204

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

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

Например, здесь представлена транзакция Bitcoin, в которой используется схема sweep:

35f1072a0fda5ae106efb4fda871ab40e1f8023c6c47f396441ad4b995ea693d
BTC204

Source : Mempool.space

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

Возьмем пример Алисы: если сканирование приводит к адресу, известному платформе (например, Binance), это может означать, что биткоины были переведены из непосредственного владения Алисы, вероятно, с намерением продать их или хранить на этой платформе. С другой стороны, если адрес назначения неизвестен, разумно предположить, что это просто другой кошелек, по-прежнему принадлежащий Алисе. Но этот тип исследования относится скорее к категории эвристик, чем к закономерностям.

Консолидация

Для этой модели характерно потребление нескольких UTXO на входе и производство одного UTXO на выходе.

BTC204

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

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

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

Например, вот транзакция Bitcoin, в которой используется модель консолидации:

77c16914211e237a9bd51a7ce0b1a7368631caed515fe51b081d220590589e94
BTC204

Source : Mempool.space

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

BTC204

Сгруппированные расходы

Для этой модели характерно потребление нескольких UTXO в качестве входов (часто только одного) и производство многих UTXO в качестве выходов.

BTC204

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

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

Например, вот биткойн-транзакция, в которой использован шаблон bundled spend (предположительно, это транзакция, выпущенная платформой Bybit):

8a7288758b6e5d550897beedd13c70bcbaba8709af01a7dbcc1f574b89176b43
BTC204

Source : Mempool.space

Транзакции, специфичные для протокола

Среди шаблонов транзакций можно также выделить те, которые свидетельствуют об использовании определенного протокола. Например, коинджоины Whirlpool (о которых шла речь в части 5) будут иметь легко идентифицируемую структуру, которая отличает их от других, более обычных транзакций.

BTC204

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

Например, здесь показана транзакция Bitcoin, в которой используется шаблон совместной транзакции coinjoin:

00601af905bede31086d9b1b79ee8399bd60c97e9c5bba197bdebeee028b9bea
BTC204

Source : Mempool.space

Существует множество других протоколов со своими специфическими структурами. Например, существуют транзакции вабисаби, транзакции марок и транзакции рун.

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

Внутренняя эвристика

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

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

BTC204

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

Внутренние сходства

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

Наиболее очевидной особенностью является повторное использование адреса приема в одной и той же транзакции.

BTC204

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

Например, вот транзакция, к которой, вероятно, можно применить эту эвристику:

54364146665bfc453a55eae4bfb8fdf7c721d02cb96aadc480c8b16bdeb8d6d0
BTC204

Source : Mempool.space

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

BTC204

На этой диаграмме видно, что вход n° 0 разблокирует скрипт P2WPKH (SegWit V0, начинающийся с bc1q). Выход n° 0 использует тот же тип скрипта. Выход n° 1, с другой стороны, использует скрипт P2TR (SegWit V1, начинающийся с bc1p). Интерпретация этой особенности заключается в том, что, скорее всего, адрес с той же версией, что и входной, является адресом обмена. Поэтому он всегда будет принадлежать одному и тому же пользователю.

Вот сделка, к которой, вероятно, можно применить эту эвристику:

db07516288771ce5d0a06b275962ec4af1b74500739f168e5800cbcb0e9dd578
BTC204

Source : Mempool.space

На последнем мы видим, что вход № 0 и выход № 1 используют скрипты P2WPKH (SegWit V0), а выход № 0 - другой скрипт P2PKH (Legacy).

В начале 2010-х годов эта эвристика, основанная на версионировании скриптов, была относительно бесполезной из-за ограниченного количества доступных типов скриптов. Однако со временем и с последующими обновлениями Bitcoin появилось все большее разнообразие типов скриптов. Таким образом, эта эвристика становится все более актуальной, поскольку при более широком спектре типов скриптов пользователи делятся на более мелкие группы, что увеличивает шансы на применение этой внутренней эвристики повторного использования версий. По этой причине, исключительно с точки зрения конфиденциальности, рекомендуется выбирать наиболее распространенный тип сценария. Например, сейчас, когда я пишу эти строки, скрипты Taproot (bc1p) используются реже, чем скрипты SegWit V0 (bc1q). Несмотря на то, что первые обеспечивают экономические преимущества и конфиденциальность в некоторых специфических контекстах, для более традиционного использования одной подписи, возможно, имеет смысл придерживаться более старого стандарта по соображениям конфиденциальности, пока новый стандарт не получит более широкого распространения.

Платежи с круглыми числами

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

BTC204

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

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

Тем не менее аналитик может попытаться произвести такую конвертацию с учетом обменного курса, действовавшего на момент трансляции транзакции в сети. Рассмотрим пример транзакции с входом 97 552 сата и двумя выходами, один из которых составляет 31 085 сатов, а другой - 64 152 сата. На первый взгляд, в этой операции не используются круглые суммы. Однако, применив обменный курс в 64 339 евро на момент совершения операции, мы получим следующий перевод в евро:

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

BTC204

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

Например, вот транзакция, к которой, вероятно, можно применить эту эвристику:

2bcb42fab7fba17ac1b176060e7d7d7730a7b807d470815f5034d52e96d2828a
BTC204

Source : Mempool.space

Самый большой объем производства

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

BTC204

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

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

Например, вот транзакция, к которой, вероятно, можно применить эту эвристику:

b79d8f8e4756d34bbb26c659ab88314c220834c7a8b781c047a3916b56d14dcf
BTC204

Source : Mempool.space

Внешние эвристики

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

Повторное использование адреса

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

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

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

BTC204

Как объясняется во введении к части 3, эта эвристика была обнаружена самим Сатоши Накамото. В "Белой книге" он упоминает решение, которое поможет пользователям избежать его генерации, - просто использовать пустой адрес для каждой новой транзакции:

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

BTC204

Источник: С. Накамото, "Биткойн: одноранговая система электронных денег", https://bitcoin.org/bitcoin.pdf, 2009.

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

bc1qqtmeu0eyvem9a85l3sghuhral8tk0ar7m4a0a0
BTC204

Источник : Mempool.space

Сходство сценариев и оттиски кошельков

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

Во-первых, аналитик может искать сходства в использовании скриптов. Например, некоторые миноритарные скрипты, такие как multisig, могут быть легче обнаружены, чем скрипты SegWit V0. Чем больше группа, в которой мы прячемся, тем сложнее нас обнаружить. Это одна из причин, по которой в хороших протоколах Coinjoin все участники используют совершенно одинаковые скрипты.

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

Например, мы сможем определить, что отслеженный пользователь систематически отправляет свои изменения на адреса P2TR (bc1p...). Если этот процесс повторяется, мы можем использовать его в качестве эвристики для остальной части нашего анализа. Мы также можем использовать другие "отпечатки пальцев", такие как порядок UTXO, место изменения в выводах, сигнализация RBF (Replace-by-Fee) или номер версии, поле nSequence и поле nLockTime.

BTC204

Как отмечает @LaurentMT в Space Kek #19 (франкоязычный подкаст), полезность портфельных отпечатков для анализа цепочек со временем значительно возрастает. Действительно, растущее количество типов скриптов и все более прогрессивное внедрение этих новых функций портфельным программным обеспечением подчеркивают различия. В некоторых случаях можно даже определить, какое именно программное обеспечение используется отслеживаемым субъектом. Поэтому важно понимать, что изучение портфельных следов особенно актуально для недавних сделок, а не для тех, которые были начаты в начале 2010-х годов.

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

Эвристика владения общим входом (CIOH)

Эвристика владения общими входами (CIOH) - это эвристика, которая утверждает, что если в сделке имеется несколько входов, то все они, скорее всего, исходят от одного субъекта. Следовательно, право собственности на них является общим.

BTC204

Чтобы применить CIOH, мы сначала наблюдаем транзакцию с несколькими входами. Это может быть 2 входа или 30 входов. После выявления этой характеристики мы проверяем, вписывается ли транзакция в известную модель транзакций. Например, если есть 5 входов с примерно одинаковой суммой и 5 выходов с абсолютно одинаковой суммой, мы будем знать, что это структура coinjoin. Мы не сможем применить CIOH.

BTC204

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

BTC204

CIOH был обнаружен Сатоши Накамото. Он рассказывает об этом в десятой части White Paper:

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

BTC204

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

В качестве примера можно привести сделку, к которой мы, вероятно, можем применить CIOH:

20618e63b6eed056263fa52a2282c8897ab2ee71604c7faccfe748e1a202d712
BTC204

Source : Mempool.space

Данные вне цепи

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

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

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

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

Анализ каналов также включает в себя несколько более общий компонент OSINT (Open Source Intelligence), включающий поиск информации в Интернете. Именно по этой причине мы не рекомендуем публиковать адреса непосредственно в социальных сетях или на веб-сайтах, будь то псевдонимные или нет.

BTC204

Темпоральные модели

Мы меньше задумываемся об этом, но некоторые модели поведения человека можно распознать по цепочке. Возможно, самым полезным для анализа является режим сна! Да, когда вы спите, вы не транслируете биткойн-транзакции. Но обычно вы спите примерно в одно и то же время. Именно поэтому при анализе блокчейна принято использовать временной анализ. Проще говоря, это перепись времени, в которое транзакции данного субъекта передаются в сеть Биткойн. Анализируя эти временные закономерности, мы можем получить огромное количество информации.

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

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

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

Напротив, если мы видим, что временная картина распределена на 16 конкретных часов, то можно предположить, что мы имеем дело с отдельным пользователем или, возможно, локальной компанией, в зависимости от объемов обмена.

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

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

bc1qqtmeu0eyvem9a85l3sghuhral8tk0ar7m4a0a0
BTC204

Источник : OXT.me

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

В другом ключе, анализ времени такого типа также привел к гипотезе, что Сатоши Накамото действовал не из Японии, а из США: Временные зоны Сатоши Накамото

Применение на практике с помощью проводника блоков

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

В идеале для выполнения этих упражнений предпочтительнее использовать профессиональный инструмент для анализа цепочек. Однако после ареста создателей кошелька Samourai Wallet единственный бесплатный инструмент анализа OXT.me больше недоступен. Поэтому для этих упражнений мы выберем классический блокчейн-проводник. Я рекомендую использовать Mempool.space за его многочисленные возможности и набор инструментов для анализа цепочек, но вы можете выбрать и другой проводник, например Bitcoin Explorer.

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

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

Упражнение 1

Идентификатор анализируемой транзакции :

3769d3b124e47ef4ffb5b52d11df64b0a3f0b82bb10fd6b98c0fd5111789bef7

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

Упражнение 2

Идентификатор анализируемой транзакции :

baa228f6859ca63e6b8eea24ffad7e871713749d693ebd85343859173b8d5c20

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

Упражнение 3

Идентификатор анализируемой транзакции :

3a9eb9ccc3517cc25d1860924c66109262a4b68f4ed2d847f079b084da0cd32b

Какова модель этой сделки?

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

Упражнение 4

Идентификатор анализируемой транзакции :

35f0b31c05503ebfdf7311df47f68a048e992e5cf4c97ec34aa2833cc0122a12

Какова модель этой сделки?

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

Упражнение 5

Представим, что Лоик опубликовал один из своих адресов получения биткойнов в социальной сети Twitter:

BTC204
bc1qja0hycrv7g9ww00jcqanhfpqmzx7luqalum3vu

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

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

Упражнение 6

Выполняя упражнение 5, благодаря эвристике повторного использования адресов вы смогли определить несколько транзакций Bitcoin, в которых, по-видимому, участвует Лоик. Обычно среди выявленных транзакций вы должны были заметить эту:

2d9575553c99578268ffba49a1b2adc3b85a29926728bd0280703a04d051eace

Эта транзакция - самая первая, отправившая средства на адрес Лоика. Как вы думаете, откуда взялись биткоины, полученные Лоиком в результате этой транзакции?

Упражнение 7

После выполнения упражнения 5, благодаря эвристике повторного использования адресов, вы смогли определить несколько транзакций Bitcoin, в которых, похоже, участвовал Лоик. Теперь вы хотите выяснить, откуда взялся Лоик. На основе найденных транзакций проведите анализ времени, чтобы определить часовой пояс, который, скорее всего, использует Лоик. Исходя из этого часового пояса, определите место, где, по всей видимости, живет Лоик (страна, штат/регион, город...).

BTC204

Упражнение 8

Вот транзакция Bitcoin для изучения:

bb346dae645d09d32ed6eca1391d2ee97c57e11b4c31ae4325bcffdec40afd4f

Какую информацию мы можем интерпретировать, глядя только на эту сделку?

Решения упражнений

Упражнение 1:

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

Упражнение 2:

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

Упражнение 3:

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

Я лично выявил как минимум две внутренние эвристики, которые подтверждают ту же гипотезу:

Наиболее очевидной эвристикой является повторное использование одного и того же типа сценария. Действительно, выход 0 - это P2SH, узнаваемый по адресу приема, начинающемуся с 3 :

3Lcdauq6eqCWwQ3UzgNb4cu9bs88sz3mKD

В то время как выход 1 - это P2WPKH, идентифицируемый по адресу, начинающемуся с bc1q:

bc1qya6sw6sta0mfr698n9jpd3j3nrkltdtwvelywa

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

bc1qyfuytw8pcvg5vx37kkgwjspg73rpt56l5mx89k

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

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

Я выявил еще как минимум одну эвристику. Это самая большая эвристика вывода. Выход 0 измеряет 123,689 сатов, а выход 1 измеряет 505,839 сатов. Таким образом, между этими двумя выходами существует значительная разница. Эвристика наибольшего объема выпуска предполагает, что наибольший объем выпуска, скорее всего, приходится на иностранную валюту. Эта эвристика еще больше укрепляет нашу первоначальную гипотезу.

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

Упражнение 4:

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

Я лично выявил как минимум две внутренние эвристики, которые подтверждают ту же гипотезу:

Наиболее очевидной эвристикой является повторное использование одного и того же типа сценария. Действительно, выход 0 - это P2SH, узнаваемый по адресу приема, начинающемуся с 3 :

3FSH5Mnq6S5FyQoKR9Yjakk3X4KCGxeaD4

В то время как выход 1 - это P2WPKH, идентифицируемый по адресу, начинающемуся с bc1q:

bc1qvdywdcfsyavt4v8uxmmrdt6meu4vgeg439n7sg

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

bc1qku3f2y294h3ks5eusv63dslcua2xnlzxx0k6kp

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

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

Я обнаружил еще как минимум одну эвристику. Это вывод круглой суммы. Вывод 0 измеряет 70 000 сатов, а вывод 1 измеряет 22 962 сата. Таким образом, мы имеем совершенно круглый вывод в единице счета BTC. Эвристика круглого вывода предполагает, что UTXO с круглой суммой, скорее всего, является платежной единицей, и что, если исключить ее, другая представляет собой обмен. Эта эвристика еще больше укрепляет нашу первоначальную гипотезу.

Однако в данном примере другая эвристика может опровергнуть нашу первоначальную гипотезу. Действительно, выход 0 больше, чем выход 1. Основываясь на эвристике, согласно которой наибольший выход обычно является иностранной валютой, мы могли бы сделать вывод, что выход 0 - это иностранная валюта. Однако эта контргипотеза кажется неправдоподобной, поскольку две другие эвристики выглядят гораздо более убедительными, чем эвристика наибольшего объема выпуска. Следовательно, представляется разумным сохранить нашу первоначальную гипотезу, несмотря на это кажущееся противоречие.

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

Упражнение 5:

Мы видим, что с личностью Лоика можно связать 8 транзакций. Из них 4 связаны с получением биткоинов:

2d9575553c99578268ffba49a1b2adc3b85a29926728bd0280703a04d051eace
8b70bd322e6118b8a002dbdb731d16b59c4a729c2379af376ae230cf8cdde0dd
d5864ea93e7a8db9d3fb113651d2131567e284e868021e114a67c3f5fb616ac4
bc4dcf2200c88ac1f976b8c9018ce70f9007e949435841fc5681fd33308dd762

Остальные 4 касаются поставок биткоинов:

8b52fe3c2cf8bef60828399d1c776c0e9e99e7aaeeff721fff70f4b68145d540
c12499e9a865b9e920012e39b4b9867ea821e44c047d022ebb5c9113f2910ed6
a6dbebebca119af3d05c0196b76f80fdbf78f20368ebef1b7fd3476d0814517d
3aeb7ce02c35eaecccc0a97a771d92c3e65e86bedff42a8185edd12ce89d89cc

Упражнение 6:

Если мы посмотрим на модель этой сделки, то станет ясно, что это пакетные расходы. Действительно, транзакция имеет один вход и 51 выход, что указывает на высокий уровень экономической активности. Поэтому мы можем предположить, что Лоик вывел биткоины с обменной платформы.

Несколько факторов подтверждают эту гипотезу. Во-первых, тип скрипта, используемого для защиты входа UTXO, - это мультисигмальный скрипт P2SH 2/3, что указывает на продвинутый уровень безопасности, характерный для биржевых платформ:

OP_PUSHNUM_2
OP_PUSHBYTES_33 03eae02975918af86577e1d8a257773118fd6ceaf43f1a543a4a04a410e9af4a59
OP_PUSHBYTES_33 03ba37b6c04aaf7099edc389e22eeb5eae643ce0ab89ac5afa4fb934f575f24b4e
OP_PUSHBYTES_33 03d95ef2dc0749859929f3ed4aa5668c7a95baa47133d3abec25896411321d2d2d
OP_PUSHNUM_3
OP_CHECKMULTISIG

Более того, изученный адрес 3PUv9tQMSDCEPSMsYSopA5wDW86pwRFbNF повторно использовался в более чем 220 000 различных транзакций, что часто характерно для обменных площадок, в целом не заботящихся о своей конфиденциальности.

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

И наконец, объемы, обрабатываемые этой структурой, колоссальны. С декабря 2022 года по март 2023 года по этому адресу было получено и отправлено 44 BTC в 222 262 транзакциях. Такие большие объемы еще раз подтверждают вероятный характер деятельности обменной платформы.

Упражнение 7:

Анализируя время подтверждения транзакций, можно определить следующее время UTC:

05:43
20:51
18:12
17:16
04:28
23:38
07:45
21:55

Анализ этих расписаний показывает, что UTC-7 и UTC-8 соответствуют диапазону текущей активности человека (между 08:00 и 23:00) для большинства расписаний:

05:43 UTC > 22:43 UTC-7
20:51 UTC > 13:51 UTC-7
18:12 UTC > 11:12 UTC-7
17:16 UTC > 10:16 UTC-7
04:28 UTC > 21:28 UTC-7
23:38 UTC > 16:38 UTC-7
07:45 UTC > 00:45 UTC-7
21:55 UTC > 14:55 UTC-7
05:43 UTC > 21:43 UTC-8
20:51 UTC > 12:51 UTC-8
18:12 UTC > 10:12 UTC-8
17:16 UTC > 09:16 UTC-8
04:28 UTC > 20:28 UTC-8
23:38 UTC > 15:38 UTC-8
07:45 UTC > 23:45 UTC-8
21:55 UTC > 13:55 UTC-8
BTC204

Часовой пояс UTC-7 особенно актуален в летний период, поскольку в него входят такие штаты и регионы, как :

Эта информация позволяет предположить, что Лоик, скорее всего, проживает на западном побережье США или Канады.

Упражнение 8:

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


Для написания этой части 3, посвященной анализу цепей, я использовал следующие ресурсы:

Я хотел бы поблагодарить их авторов, разработчиков и продюсеров. Спасибо также корректорам, которые тщательно выправили статью, на которой основана эта часть 3, и дали мне свои экспертные советы :

Освоение передовых методов защиты конфиденциальности

Повторное использование адреса

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

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

Что такое адрес получения?

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

Технически адрес приема биткоинов не "получает" биткоины в прямом смысле, а скорее определяет условия, при которых биткоины могут быть потрачены. Говоря конкретнее, когда вам отправляется платеж, транзакция отправителя создает для вас новый UTXO в качестве выхода из UTXO, которые она потребляла в качестве входа. К этому выходу он прикрепляет скрипт, определяющий, как этот UTXO может быть потрачен позже. Этот скрипт известен как "ScriptPubKey" или "Locking Script". Ваш адрес получения, а точнее, его полезная нагрузка, интегрирована в этот скрипт. Говоря простым языком, этот скрипт в основном гласит:

"Чтобы потратить этот новый UTXO, вы должны предоставить цифровую подпись, используя закрытый ключ, связанный с этим адресом получения." BTC204

Биткойн-адреса бывают разных типов, в зависимости от используемой модели криптовалют. Первые модели, известные как "Legacy*", включают адреса P2PKH (Pay-to-PubKey-Hash) и P2SH (Pay-to-Script-Hash). Адреса P2PKH всегда начинаются с 1, а P2SH - с 3. Хотя эти форматы по-прежнему безопасны, они уже устарели, поскольку влекут за собой более высокие транзакционные издержки и обеспечивают меньшую конфиденциальность, чем новые стандарты.

Адреса SegWit V0 (P2WPKH и P2WSH) и Taproot / SegWit V1 (P2TR) представляют современные форматы. Адреса SegWit начинаются с bc1q, а адреса Taproot, представленные в 2021 году, начинаются с bc1p.

Например, вот адрес приема Taproot:

bc1ps5gd2ys8kllz9alpmcwxqegn7kl3elrpnnlegwkm3xpq2h8da07spxwtf5

Способ создания ScriptPubKey зависит от используемого стандарта:

| ScriptPubKey | Шаблон сценария

| ---------------- | ----------------------------------------------------------- |

| P2PKH | OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG |

| P2SH | OP_HASH160 <scriptHash> OP_EQUAL |

| P2WPKH | 0 <pubKeyHash> |

| P2WSH | 0 <witnessScriptHash> |

| P2SH - P2WPKH | OP_HASH160 <redeemScriptHash> OP_EQUAL |

| P2SH - P2WSH | OP_HASH160 <redeemScriptHash> OP_EQUAL |

| P2TR | 1 <pubKey> |

Построение адресов приема также зависит от выбранной модели сценария:

BTC204

Адреса, отображаемые в программном обеспечении портфеля, также включают HRP (Human-Readable Part), обычно bc для пост-SegWit адресов, разделитель 1 и номер версии q для SegWit V0 и p для Taproot/SegWit V1. Также добавляется контрольная сумма, гарантирующая целостность и достоверность адреса при передаче.

Наконец, адреса приводятся к стандартному формату:

Здесь приведена матрица сложения для форматов bech32 и bech32m (SegWit и Taproot) из базы 10:

| + | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |

| --- | --- | --- | --- | --- | --- | --- | --- | --- |

| 0 | q | p | z | r | y | 9 | x | 8 |

| 8 | g | f | 2 | t | v | d | w | 0 |

| 16 | s | 3 | j | n | 5 | 4 | k | h |

| 24 | c | e | 6 | m | u | a | 7 | l |

Что такое повторное использование адреса?

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

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

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

Почему повторное использование адресов является проблемой?

Поскольку блокчейн является публичным, можно легко увидеть, на каких адресах заблокированы UTXO и сколько биткоинов. Если один и тот же адрес используется для нескольких транзакций, можно сделать вывод, что все биткоины, связанные с этим адресом, принадлежат одному и тому же человеку. Такая практика ставит под угрозу конфиденциальность пользователей, позволяя устанавливать детерминированные связи между различными транзакциями и отслеживать биткоины в блокчейне. Сам Сатоши Накамото уже указывал на эту проблему в "Белой книге" биткойна:

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

Источник: С. Накамото, "Биткойн: одноранговая система электронных денег", https://bitcoin.org/bitcoin.pdf, 2009.

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

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

BTC204

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

При анализе строк существует 2 типа повторного использования адресов:

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

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

BTC204

Повторное использование адресов - настоящий бич для биткойна. По данным сайта OXT.me (в настоящее время недоступного), в 2022 году общий уровень повторного использования адресов в Биткойне составлял около 52 %:

BTC204

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

Как избежать повторного использования адресов?

Избежать повторного использования адресов довольно просто: просто используйте новый, пустой адрес для всех новых платежей в ваш кошелек.

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

BTC204

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

PS: Недавно некоторые программы для создания кошельков объявили о своем намерении прекратить генерировать пустые адреса, опасаясь, что это будет воспринято властями как форма отмывания денег. Если ваша программа относится к их числу, я настоятельно советую вам немедленно заменить ее, поскольку это неприемлемо для пользователей. Если вам нужен статический идентификатор для получения платежей, например пожертвований, не рекомендуется использовать классический адрес Bitcoin из-за риска повторного использования. Вместо этого используйте адрес Lightning или выберите статический платежный идентификатор onchain, например BIP47 или Silent Payments. Эти протоколы подробно рассматриваются в части 6 данного учебного курса.

Маркировка и проверка деталей

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

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

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

Что такое маркировка?

Маркировка - это практика присвоения аннотации или метки конкретному UTXO в кошельке Биткойн. Эти аннотации хранятся локально в программном обеспечении кошелька и никогда не передаются по сети Биткойн. Таким образом, маркировка - это инструмент персонального управления.

Например, если у меня есть UTXO от P2P-покупки на Bisq с Charles, я могу пометить его "Non-KYC Bisq Charles".

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

Что такое угловой контроль?

Активное использование маркировки становится еще более интересным в сочетании с опцией контроля монет в программном обеспечении для портфолио.

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

BTC204

Использование портфельного программного обеспечения с контролем монет в сочетании с маркировкой UTXO позволяет пользователям различать и точно выбирать UTXO для своих сделок.

Как вы маркируете свои UTXO?

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

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

Самое важное, что нужно указать на этикетке, - это источник UTXO. Вы должны просто указать, как монета оказалась в вашем кошельке. Является ли она результатом покупки на обменной платформе? Оплата счета от клиента? Пиринговый обмен? Или она представляет собой обмен на расходы? Например, вы можете указать:

BTC204

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

BTC204

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

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

Как выбрать подходящие детали?

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

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

BTC204

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

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

Помимо информации, которая потенциально может быть раскрыта получателю, выбор входных данных также влияет на то, что вы раскрываете всем наблюдателям блокчейна. Действительно, используя несколько UTXO в качестве входных данных для своей транзакции, вы раскрываете, что они принадлежат одному и тому же субъекту, согласно эвристике CIOH (Common Input Ownership Heuristic).

BTC204

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

BTC204

Возьмем пример с UTXO от Bisq, не имеющим KYC; я хочу избежать объединения его с UTXO, скажем, от регулируемой биржевой платформы, которая знает мою личность. Действительно, если я когда-нибудь использую эти два UTXO в качестве входов в одну и ту же транзакцию, регулируемая платформа сможет связать мою личность с UTXO, который я купил на Bisq и который ранее не был связан с моей личностью.

BTC204

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

Понимание автоматического выбора деталей

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

Методы выбора UTXO, такие как FIFO (First In First Out) и LIFO (Last In First Out), являются одними из самых простых, но и наименее эффективных. При FIFO в первую очередь используются самые старые части портфеля. Этот подход в целом неэффективен как с точки зрения минимизации транзакционных издержек, так и с точки зрения сохранения конфиденциальности, за исключением случаев, когда используются относительные временные часы, которые необходимо регулярно обновлять. И наоборот, при LIFO приоритет отдается использованию самых последних UTXO. Оба метода, несмотря на свою простоту, часто оказываются неэффективными.

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

Метод Branch-and-Bound (BNB), часто называемый "алгоритмом Мерча" в честь его изобретателя, заменил Knapsack Solver в Bitcoin Core начиная с версии 0.17. Этот более продвинутый метод нацелен на поиск набора UTXO, который точно соответствует сумме, необходимой для удовлетворения выходов транзакции. Цель BNB - минимизировать сумму обмена, а также комиссионные сборы, уменьшив так называемый критерий отходов, который учитывает как непосредственные затраты, так и ожидаемые будущие затраты на обмен. Этот метод основан на оригинальной концепции Branch-and-Bound, придуманной в 1960 году Эйлсой Лэнд и Элисон Харкорт, и предлагает более точную оптимизацию комиссионных, чем Knapsack Solver.

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

Учебник по маркировке UTXO

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

https://planb.network/tutorials/privacy/on-chain/utxo-labelling-d997f80f-8a96-45b5-8a4e-a3e1b7788c52

KYC и ключевая идентификация

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

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

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

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

Облегчение отслеживания цепочки

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

BTC204

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

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

BTC204

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

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

Подверженность государственному надзору

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

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

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

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

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

Еще одна проблема, которую создает KYC с точки зрения государственного надзора, - это обязательная отчетность регулируемых платформ. Хотя я не знаком с правилами в других юрисдикциях, во Франции Prestataires de Services sur Actifs Numériques (PSAN) обязаны сообщать органам финансового надзора о любом движении средств, которое они считают подозрительным.

В 2023 году во Франции PSAN сообщили о 1 449 подозрительных действиях. На данный момент большинство этих действий связано с преступностью. Однако власти также просят регулируемые платформы сообщать о любых подозрительных биткойн-транзакциях исключительно на основании их структуры. Если вы проводите совместную транзакцию или даже просто транзакцию с несколько нетипичной структурой, и эта транзакция происходит недалеко от вывода ваших биткойнов с этих платформ, вы можете попасть в поле зрения властей. Даже в отсутствие злоупотреблений и при законном осуществлении ваших прав такое сообщение может привести к усилению проверок и слежки - неудобствам, которых вы могли бы избежать без KYC.

Риск утечки персональных данных

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

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

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

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

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

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

Некоторые предвзятые представления о KYC

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

Прежде всего, ошибочно думать, что защита конфиденциальности биткойнов, приобретенных через KYC, бессмысленна. Инструменты и методы защиты конфиденциальности в Биткойне разнообразны и служат разным целям. Например, использование транзакций coinjoin для биткоинов, приобретенных через KYC, - неплохая идея. Конечно, нужно быть осторожным с регулируемыми обменными платформами, чтобы избежать замораживания или блокировки аккаунта, но с чисто технической точки зрения эти методы не являются несовместимыми. Coinjoin имеет эффект разрыва истории монеты, что помогает вам предотвратить некоторые риски анализа цепочки, связанные с KYC. Хотя это и не устраняет все риски, но представляет собой значительное преимущество.

BTC204

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

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

Можно ли отменить KYC?

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

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

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

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

Разница между KYC и идентификацией ключей

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

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

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

BTC204

Однако избегание регулируемых платформ и выбор в пользу P2P-методов приобретения не устраняет полностью риск идентификации ключа, а лишь снижает его. Возьмем пример покупки на Bisq или другой P2P-платформе. Чтобы расплатиться с контрагентом, вы, скорее всего, воспользуетесь своим банковским счетом. Если власти допросят человека, с которым вы торговали, и спросят ваше имя, мы вернемся к рискам 1 и 2. Хотя эти риски гораздо ниже, чем при покупке на платформе без KYC, и даже ниже, чем при покупке с KYC, они все равно присутствуют в той или иной степени.

BTC204

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

BTC204

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

Методы продаж и приобретения

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

Денежные биржи P2P

Как мы уже убедились, лучшим методом с точки зрения конфиденциальности остается P2P (person-to-person) обмен с наличным расчетом. Этот метод позволяет минимизировать оставляемые следы и значительно снижает вероятность идентификации ключа, будь то покупка или продажа.

BTC204

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

BTC204

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

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

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

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

BTC204

P2P-обмен через платформу для поиска партнеров

Менее рискованная с точки зрения личной безопасности альтернатива - осуществлять P2P-обмен исключительно онлайн, используя электронные способы оплаты, такие как PayPal, банковские переводы или Revolut.

BTC204

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

BTC204

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

BTC204

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

BTC204

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

Еще одним недостатком P2P-покупок является то, что цена зачастую выше, чем на регулируемых платформах. Продавцы часто взимают наценку от 1 %, а иногда и более 10 %. Такая разница в цене объясняется несколькими причинами. Во-первых, это обычная практика среди продавцов P2P, которая установилась с течением времени. Во-вторых, продавцы берут комиссию за отправку средств покупателю. Также существует повышенный риск кражи при P2P-продажах по сравнению со сделками на платформе, что оправдывает компенсацию за принятый риск. Наконец, дополнительные расходы могут быть связаны со спросом и качеством обмена с точки зрения конфиденциальности. Как покупатель, выигрыш в конфиденциальности имеет свою цену, которая отражается в наценке, применяемой продавцом. Некоторые биткойнеры также считают, что наценка на BTC, купленные на P2P, отражает их истинную цену, и утверждают, что более низкие цены на регулируемых платформах являются результатом компромисса в отношении конфиденциальности ваших личных данных.

BTC204

Что касается решений, то лично я всегда использовал Bisq и был очень доволен. Их система проверена и испытана и кажется надежной. Однако Bisq доступна только на ПК, и ее интерфейс может оказаться слишком сложным для новичков. Еще одним недостатком является то, что Bisq работает только с транзакциями onchain, что может стать дорогостоящим в периоды высоких комиссий за транзакции Bitcoin.

-> См. наш учебник по Bisq.

https://planb.network/tutorials/exchange/peer-to-peer/bisq-fe244bfa-dcc4-4522-8ec7-92223373ed04

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

-> Смотрите наш учебник по работе с персиками.

https://planb.network/tutorials/exchange/peer-to-peer/peach-c6143241-d900-4047-9b73-1caba5e1f874

Еще один онлайн вариант - HodlHodl, хорошо зарекомендовавшая себя платформа, которая предлагает хорошую ликвидность, хотя лично я ее не тестировал.

-> См. наш учебник по HodlHodl.

https://planb.network/tutorials/exchange/peer-to-peer/hodlhodl-d7344cd5-6b18-40f5-8e78-2574a93a3879

Для решений на основе Lightning Network попробуйте RoboSats и LNP2PBot. RoboSats доступен через веб-сайт и относительно прост в использовании. LNP2PBot более нетипичен, поскольку работает через систему обмена в приложении для обмена сообщениями Telegram.

-> Смотрите наш учебник по RoboSats.

-> Смотрите наш учебник по LNP2PBot.

https://planb.network/tutorials/exchange/peer-to-peer/robosats-b60e4f7c-533a-4295-9f6d-5368152e8c06

https://planb.network/tutorials/exchange/peer-to-peer/lnp2pbot-v2-e6bcb210-610b-487d-970c-7cce85273e3c

BTC204

Регулируемые платформы без KYC

В зависимости от страны, в которой вы живете, у вас может быть доступ к регулируемым платформам, которые не требуют процедур KYC для покупки или продажи биткоинов. В Швейцарии, например, вы можете использовать такие платформы, как Relai и MtPelerin.

-> См. наш учебник по Relai.

https://planb.network/tutorials/exchange/centralized/relai-v2-30a9671d-e407-459d-9203-4c3eae15b30e

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

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

Банкоматы

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

BTC204

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

Основным недостатком банкоматов является высокая комиссия за обмен, которая варьируется от нескольких процентов до 15 % от суммы обмена.

Подарочные карты

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

Лучший способ потратить BTC - это, конечно, использовать биткойн или Lightning Network непосредственно для покупки товара или услуги. Однако во многих странах количество торговых точек, принимающих Bitcoin, по-прежнему ограничено. Практичная альтернатива - использование подарочных карт.

Несколько платформ, не требующих прохождения процедуры KYC, предлагают возможность обмена биткоинов на подарочные карты, которые можно использовать в крупных розничных магазинах. К ним относятся CoinsBee, The Bitcoin Company и Bitrefill. Эти платформы значительно упрощают ежедневное использование биткоинов, предоставляя вам доступ к широкому спектру товаров и услуг без необходимости конвертировать их в фиатную валюту.

https://planb.network/tutorials/exchange/centralized/bitrefill-8c588412-1bfc-465b-9bca-e647a647fbc1

BTC204

Другие методы приобретения

К другим способам получения биткоинов при сохранении конфиденциальности относится, конечно же, майнинг. Чтобы начать добывать саты, вам не нужно раскрывать свою личность; просто найдите действительный документ, подтверждающий работу, и отправьте его в сеть. Если вы выберете пул для майнинга, некоторые пулы требуют идентификации личности, например KYC, а другие - нет.

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

*Для написания этой главы я воспользовался учебным курсом BTC205, проведенным @pivi___ в сети Plan ₿ (пока доступен только на французском языке)

Консолидация, управление UTXO и CIOH

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

Что такое консолидация?

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

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

Не все транзакции биткойна имеют одинаковый вес. Те, в которых больше входов и выходов, имеют больший вес. Например, представим себе 2 транзакции:

BTC204

В этом примере, хотя транзакция B предлагает более высокую общую плату, майнеры предпочтут транзакцию A, поскольку она предлагает лучшее соотношение между платой и весом. Вот расчеты для каждой транзакции, выраженные в сатах за виртуальный байт (sat/vB):

TXA : 1994 / 141 = 14 sats/vB
TXB : 2640 / 220 = 12 sats / vB

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

BTC204

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

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

BTC204

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

Каков минимальный размер для ваших UTXO?

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

\frac {P \times F}T = M

Где:

Предположим, что вы планируете покрыть комиссию за стандартную SegWit-транзакцию с 1 входом и 2 выходами, весом 141 vB. Если вы хеджируете до 800 сатов/vB и готовы потратить на комиссию максимум 12% от стоимости UTXO, то расчет будет таким:

\frac{141 \times 800}{0.12} = 940\ 000

Поэтому в данном примере было бы разумно сохранить минимальное значение в 940 000 сат для UTXO в вашем портфеле.

Консолидация и CIOH

Одной из наиболее широко используемых эвристик при анализе блокчейна является эвристика CIOH (Common Input Ownership Heuristic), которая предполагает, что все входы в транзакцию биткойна принадлежат одному и тому же субъекту. Сам принцип консолидации заключается в использовании нескольких UTXO в качестве входов и создании одного UTXO в качестве выхода. Таким образом, консолидация позволяет применять ICOH.

BTC204

На практике это означает, что сторонний наблюдатель может сделать вывод, что все консолидированные UTXO, вероятно, принадлежат одному и тому же человеку, и что сгенерированный уникальный вывод также принадлежит ему или ей. Такая ситуация может поставить под угрозу вашу конфиденциальность, связав различные истории транзакций. Например, допустим, я консолидирую 3 UTXO, приобретенные через P2P, с одним UTXO, полученным через платформу, которая требует KYC:

BTC204

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

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

Если вам удастся избежать консолидации, сохранив при этом значительные UTXO, это будет идеальным вариантом. Для этого оптимизируйте методы приобретения. Если вы покупаете биткоины в DCA, старайтесь как можно чаще совершать разовые покупки, чтобы консолидировать стоимость на меньшем количестве UTXO. Будет проще совершать единовременную покупку на сумму €1 000 раз в 2 месяца, чем покупать €120 каждую неделю. Это минимизирует количество генерируемых UTXO и упростит управление вашим портфелем, сохраняя конфиденциальность.

Если вы столкнулись с необходимостью консолидировать свои биткоины, отдайте предпочтение объединению UTXO из одного источника. Например, объединение 10 UTXO с одной платформы повлияет на вашу конфиденциальность меньше, чем смешивание 5 UTXO с платформы A с 5 UTXO с платформы B. Если объединение разных источников неизбежно, постарайтесь разделить их по характеристикам. Например, объедините UTXO, полученные через KYC, в одну транзакцию, а полученные через P2P - в другую.

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

Другие лучшие практики

Давайте рассмотрим еще несколько лучших практик для оптимизации вашей конфиденциальности в Bitcoin.

Полный узел

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

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

BTC204

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

BTC204

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

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

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

Эвристика обманчивого анализа

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

Первый совет, который я могу дать, - это смешаться с самой плотной толпой. В биткойне это означает использование наиболее распространенных шаблонов скриптов. Например, скрипты P2WSH, часто используемые для мультисиговых конфигураций SegWit V0, очень редки. Они не позволяют скрыть большой набор анонимности. То же самое касается и старых моделей, таких как P2PKH или P2SH. Хотя они широко представлены в наборе UTXO, они все реже используются для новых транзакций.

Вообще говоря, разумнее выбирать самый последний стандарт скриптов, при условии, что он достаточно принят. Так, если в 2022 году я бы не советовал использовать P2TR (Taproot) из-за его низкого уровня принятия, то в 2024 году я бы рекомендовал вместо него выбрать этот тип скрипта или, в противном случае, скрипт SegWit V0, поскольку количество транзакций, использующих P2TR, начинает составлять очень значительную долю.

BTC204

Источник : txstats.com

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

BTC204

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

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

Понимание транзакций coinjoin

Что такое транзакция coinjoin?

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

Coinjoin часто считается самым эффективным методом защиты конфиденциальности пользователей Биткойна. Но что именно представляет собой транзакция coinjoin? Давайте узнаем.

Основные принципы объединения

Coinjoin - это техника взлома отслеживания биткоина в блокчейне. Она основана на совместной транзакции с одноименной структурой: транзакция coinjoin.

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

BTC204

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

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

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

BTC204

Как работают коинджоины?

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

BTC204

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

BTC204

Возьмем пример Алисы. Она хочет отправить около 100 000 сатов своей сестре Еве на день рождения. Однако Алиса не хочет, чтобы Ева могла отследить историю ее транзакций, поскольку она не хочет раскрывать, сколько у нее биткоинов и как она их получила. С этой целью Алиса решает прервать свою историю UTXO с помощью транзакции coinjoin. Она объединяется с Бобом, Чарльзом, Дэвидом и Фрэнком для проведения совместной транзакции:

BTC204 BTC204 BTC204 BTC204

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

Однако coinjoin также предлагает возможность усиления конфиденциальности при анализе из прошлого в настоящее, что известно как перспективная анонсет. Давайте вернемся к нашему примеру, в котором Алиса отправила Еве 98 000 сатов на день рождения, но поменяем роли. Теперь представим, что это Ева беспокоится о своей конфиденциальности. Действительно, у Алисы может возникнуть соблазн отследить монету, которую она отправила Еве, чтобы извлечь из нее информацию. Ева вполне может объединить только что полученный UTXO со всеми остальными UTXO, что может раскрыть Алисе количество биткоинов в ее кошельке. Чтобы избежать этого, Ева может нарушить историю только что полученной монеты:

BTC204 BTC204 BTC204

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

BTC204

Миксер, коинджойн, миксер... В чем разница?

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

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

BTC204

С другой стороны, важно отличать coinjoin от шаффлеров. Шаффлер - это сервис, на который пользователи отправляют свои биткоины для перетасовки. Эти сервисы были популярны в 2010-х годах, но их использование сократилось из-за двух основных недостатков по сравнению с coinjoin:

BTC204

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

Zerolink и chaumian coinjoins

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

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

BTC204

Но как сделать так, чтобы координатор никогда не имел доступа к биткоинам пользователей, и, несмотря на то, что именно он создает транзакцию coinjoin, как сделать так, чтобы он не мог связать входы и выходы пользователей, что могло бы стать утечкой конфиденциальности?

Слепые подписи Чаума

Современные реализации coinjoin используют слепые подписи Дэвида Чаума, чтобы избежать утечки информации. Давайте вкратце рассмотрим, как работают эти слепые подписи.

Слепые подписи Чаума - это форма цифровой подписи, при которой выдающий подпись не знает содержимого подписываемого сообщения. Но подпись может быть проверена по оригиналу сообщения. Эта техника была разработана криптографом Дэвидом Чаумом в 1983 году.

BTC204

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

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

Чаумианские союзы

Так называемые "чаумовские" коинджоины сочетают использование Tor и слепых подписей Дэвида Чаума, чтобы координатор не мог узнать, какой вывод принадлежит тому или иному пользователю.

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

**Шаг 1: Входная регистрация

BTC204 BTC204

Шаг 2: Регистрация выходов

BTC204 BTC204

Шаг 3: Подписание сделки

BTC204 BTC204

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

Наконец, регистрируя свой выход в транзакции, пользователь coinjoin хочет иметь гарантии, аналогичные тем, что дает гражданин, голосующий на выборах. Существует двойственность между публичными и частными аспектами этих действий. С одной стороны, есть то, что вы хотите сохранить в тайне: избиратель не хочет, чтобы его бюллетень был связан с его личностью; пользователь coinjoin не хочет, чтобы его выход был связан с его входом. Действительно, если координатору или любой другой стороне удается установить связь между входом и выходом, коинджойн теряет всякий интерес. Как объяснялось выше, коинджойн должен функционировать как остановка в истории монеты. Эта остановка происходит именно из-за невозможности связать конкретный вход с конкретным выходом в транзакции коинджоина (проспективная анонсет) и наоборот (ретроспективная анонсет).

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

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

Кто придумал концепцию coinjoin?

Трудно сказать наверняка, кто первым представил идею coinjoin в Биткойне и кто придумал использовать слепые подписи Дэвида Чаума в этом контексте. Часто считается, что первым об этом упомянул Грегори Максвелл в [сообщении на BitcoinTalk в 2013 году] (https://bitcointalk.org/index.php?topic=279249.0):

*"Использование слепых подписей Чаума: Пользователи входят в систему и предоставляют входные данные (и адреса обмена), а также криптографически замаскированную версию адреса, на который они хотят отправить свои приватные части; сервер подписывает токены и отправляет их обратно. Пользователи анонимно переподключаются, снимают маску с адресов выхода и отправляют их обратно на сервер. Сервер видит, что все выходные данные были подписаны им и что, следовательно, все выходные данные исходят от действительных участников. Позже люди снова подключаются и регистрируются Максвелл, Г. (2013, 22 августа). CoinJoin: Биткойн-приватность для реального мира. Форум BitcoinTalk. https://bitcointalk.org/index.php?topic=279249.0

BTC204

Однако есть и другие более ранние упоминания, как о подписях Чаума в составе микшеров, так и о коинджоинах. В июне 2011 года Дункан Таунсенд представил на BitcoinTalk микшер, который использует подписи Чаума в манере, весьма похожей на современные чаумовские коинджоины.

В том же потоке мы можем найти сообщение от hashcoin в ответ Дункану Таунсенду, чтобы улучшить его миксер. Процесс, описанный в этом сообщении, - это именно то, чем занимаются коинджоины. Упоминание о подобной системе также можно найти в сообщении Алекса Мизрахи в 2012 году, когда он консультировал создателей Tenebrix, одного из первых альткоинов, послужившего впоследствии основой для создания Litecoin. Даже сам термин "coinjoin", как утверждается, не был придуман Грегом Максвеллом, а возник из идеи Питера Тодда.

BTC204

Zerolink

Zerolink - это комплексный протокол смешивания, который включает в себя коинджойнты Чаумиана и различные стратегии для защиты анонимности пользователей от нескольких форм анализа цепочек, в частности, минимизируя ошибки, связанные с управлением портфелем. Этот протокол [был представлен nopara73 и TDevD в 2017 году] (https://github.com/nopara73/ZeroLink/blob/master/README.md).

BTC204

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

BTC204

Важной превентивной мерой, принятой компанией Zerolink, является полное разделение несмешанных UTXO и смешанных UTXO с использованием отдельных наборов криптографических ключей или даже отдельных портфелей. Это отличает кошелек "pre-mix", предназначенный для деталей до смешивания, от кошелька "post-mix", предназначенного для деталей, которые были смешаны.

BTC204

Такое строгое разделение UTXO служит, прежде всего, для предотвращения случайных связей между смешанным UTXO и несмешанным UTXO. Действительно, если такие связи возникают, эффективность коинджоина на смешанном UTXO отменяется без ведома пользователя, что ставит под угрозу конфиденциальность UTXO, историю которого он считал нарушенной. Такие связи могут возникать либо за счет повторного использования адресов при обеспечении смешанного UTXO несмешанным, либо за счет применения CIOH (Common-Input-Ownership Heuristic), если пользователь использует смешанные и несмешанные UTXO в качестве входов для одной и той же транзакции. Разделяя портфели до и после смешивания, мы избегаем таких случайных ассоциаций и защищаем пользователя от непреднамеренных ошибок.

BTC204

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

На данный момент Whirlpool - единственная реализация coinjoin, которая строго применяет протокол Zerolink. В следующей главе мы рассмотрим различные существующие реализации coinjoin, а также преимущества и недостатки каждой из них.

Реализации объединений

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

На данный момент в Биткойне существует в основном 3 различных реализации coinjoin:

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

JoinMarket

JoinMarket, основанная в 2015 году Адамом Гибсоном и Крисом Белчером, заметно выделяется на фоне других реализаций coinjoin благодаря своей уникальной модели объединения пользователей. Система основана на P2P-обменном рынке, где одни пользователи, "производители", предоставляют свои биткоины для обмена, а другие, "принимающие", используют эти деньги для совершения коинджоинов в обмен на вознаграждение.

BTC204

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

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

BTC204

Источник : JAM

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

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

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

Вабисаби

Wabisabi - еще одна реализация coinjoin с подходом, при котором координация транзакций осуществляется централизованно. Эта модель была придумана Адамом Фиксором (nopara73), Ювалем Когманом, Лукасом Онтиверо и Иштваном Андрашем Сересом в 2021 году и в следующем году была интегрирована в программное обеспечение Wasabi 2.0. Wabisabi - это эволюция программной модели коинджойнта Wasabi, запущенной в 2018 году.

BTC204

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

Методы управления обменом также отличали две реализации. В Whirlpool иностранная валюта исключалась и изолировалась от UTXO перед циклами coinjoin благодаря TX0 - концепции, о которой я расскажу в следующей главе. В Wasabi, с другой стороны, иностранная валюта формировала один из выходов транзакции coinjoin, поддерживая детерминированные связи между определенными входами и выходами.

BTC204

В Wabisabi версии 2.0 Wasabi адаптировал свой подход к коинджоинам к подходу Whirlpool. Хотя транзакции коинджойн остаются очень большими, теперь можно выстраивать несколько последовательных циклов, следуя модели Whirlpool. Особое внимание также было уделено управлению обменным курсом: в отличие от Wasabi 1.0, где обменный курс был напрямую связан с пользовательскими данными, Wabisabi стремится разделить обменный курс на несколько небольших сумм, разделенных на равные номиналы для всех участников.

Давайте проиллюстрируем это на упрощенном примере с участием всего двух пользователей: Алиса хочет смешать 115 000 сатов, а Боб - 210 000 сатов. Если не учитывать комиссионные, то в Wasabi 1.0 транзакция coinjoin привела бы к 3 выходам по 100 000 сатов, плюс 1 обмен на 15 000 сатов для Алисы и 1 обмен на 10 000 сатов для Боба. Выходы обмена по-прежнему были бы связаны с входами:

BTC204

При "Вабисаби" одна и та же сделка привела бы к 3 выходам по 100 000 сат и 5 выходам по 5 000 сат, таким образом рассредоточив обмен так, что его нельзя было бы напрямую связать с конкретным входом:

BTC204

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

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

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

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

Пока я пишу эти строки, использование "Вабисаби" значительно усложнилось в результате последних событий. После ареста основателей кошелька Samourai компания zkSNACKs, финансирующая и управляющая развитием Васаби, объявила о прекращении работы сервиса координатора присоединения монет 1 июня 2024 года. Этот координатор, который был установлен в Wasabi по умолчанию, отвечал за подавляющее большинство ликвидности.

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

Помимо технических вопросов, решение zkSNACKs, компании, создавшей Wasabi, воспользоваться услугами компании по анализу строк для фильтрации участников коинджоинов вызывает серьезные этические и стратегические вопросы. Изначально идея заключалась в том, чтобы предотвратить использование коинджоинов на Wasabi преступниками, и этот шаг может показаться вполне законным. Однако он порождает парадокс: платить деньги координатору, чья основная задача - укреплять конфиденциальность пользователей, только для того, чтобы он финансировал компанию, цель которой - нарушить эту самую конфиденциальность.

Еще большее беспокойство вызывает принцип фильтрации, который радикально контрастирует с философией Биткойна, предлагающего открытую, неподцензурную финансовую систему. Хотя стремление исключить преступную деятельность может показаться оправданным, такая фильтрация может затронуть и людей, чьи действия, хотя и классифицируются как незаконные в определенных контекстах, могут быть морально оправданными или социально полезными. Пример Эдварда Сноудена прекрасно иллюстрирует эту дихотомию: одни правительства считают его преступником за его разоблачения, другие - информатором, действовавшим в интересах общества. Эта сложность подчеркивает потенциальную опасность фильтрации, которая, хотя и преследует благие цели, в конечном итоге может подорвать права и безопасность законных пользователей. Я также мог бы упомянуть активистов и журналистов, которые преследуются в некоторых авторитарных режимах.

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

Как работает Whirlpool

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

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

BTC204

Как работает Whirlpool

Изначально количество участников в каждом коинджоине Whirlpool было ограничено 5, из них 2 новых участника и 3 ремиксера (мы объясним эти понятия позже). Однако рост комиссий за транзакции на цепочке, наблюдавшийся в 2023 году, заставил команду Самурая пересмотреть свою модель, чтобы повысить конфиденциальность и одновременно снизить расходы. Таким образом, принимая во внимание ситуацию на рынке сборов и количество участников, координатор теперь может организовывать коинджоины, включающие 6, 7 или 8 участников. Эти расширенные сессии известны как "циклы всплеска". Важно отметить, что, независимо от конфигурации, в коинджоинах Whirlpool всегда участвуют только 2 новых участника.

Таким образом, сделки Whirlpool характеризуются одинаковым количеством входов и выходов, которые могут быть :

BTC204 BTC204 BTC204 BTC204

Модель Whirlpool основана на небольших транзакциях coinjoin. В отличие от Wabisabi и JoinMarket, где устойчивость анонсов основана на объеме участников одного цикла (или нескольких циклов), Whirlpool опирается на последовательность нескольких небольших циклов.

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

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

BTC204

При разработке Whirlpool учитывались два важных требования:

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

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

Пулы и сборы за совместное использование

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

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

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

| Пул (биткоин) | Максимальная сумма за вход (биткоин) |

|----------------|--------------------------------------|

| 0,5 | 35 |

| 0,05 | 3,5 |

| 0,01 | 0,7 |

| 0,001 | 0,025 |

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

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

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

| Пул (биткоин) | Вступительный взнос (биткоин) |

|----------------|---------------------------------|

| 0,5 | 0,0175 |

| 0,05 | 0,00175 |

| 0,01 | 0,0005 (50 000 сатов)|

| 0,001 | 0,00005 (5 000 сатов)|

Эти сборы, по сути, выполняют функцию входного билета в выбранный пул, независимо от суммы, которую вы внесли в coinjoin. Таким образом, независимо от того, входите ли вы в пул 0,01 с суммой ровно 0,01 BTC или 0,5 BTC, сборы останутся одинаковыми в абсолютном выражении.

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

Обычно не рекомендуется объединять несколько смешанных UTXO после циклов coinjoin, так как это может нарушить конфиденциальность приобретенных данных, особенно из-за эвристики общего владения входом (CIOH: Common-Input-Ownership-Heuristic). Следовательно, возможно, имеет смысл выбрать больший пул, даже если это означает, что придется заплатить больше, чтобы избежать слишком большого количества UTXO с малой стоимостью на выходе. Пользователь должен оценить эти компромиссы, чтобы выбрать предпочтительный пул.

Помимо платы за обслуживание, необходимо также учитывать плату за майнинг, характерную для каждой транзакции Bitcoin. Как пользователь Whirlpool, вы должны будете оплатить майнинг за подготовительную транзакцию (Tx0), а также за первое присоединение к монете. Все последующие ремиксы будут бесплатными, благодаря модели Whirlpool, основанной на оплате новых участников.

Фактически, в каждом Whirlpool coinjoin 2 пользователя среди входов - это новые участники. Остальные входы поступают от ремиксеров. В результате затраты на майнинг для всех участников транзакции несут эти 2 новых участника, которые затем также могут получить выгоду от бесплатных ремиксов:

BTC204

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

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

Портфельные счета HD

Чтобы создать coinjoin через Whirlpool, кошелек должен сгенерировать несколько отдельных учетных записей. Именно на этом принципе основан протокол ZeroLink. Счет в контексте HD (иерархического детерминированного) портфеля представляет собой секцию, полностью изолированную от других, причем это разделение происходит на уровне третьей глубины иерархии портфеля, то есть на уровне xpub.

BTC204

В кошельке HD теоретически может быть создано до 2^(31) различных счетов. Начальный счет, используемый по умолчанию во всех кошельках Bitcoin, соответствует индексу 0.

Для портфелей, адаптированных к Whirlpool, используются 4 счета, чтобы удовлетворить потребности процесса ZeroLink:

Каждый из этих аккаунтов выполняет определенную функцию в процессе объединения, которую мы рассмотрим в следующих разделах.

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

Давайте рассмотрим различные этапы присоединения Whirlpool к этим счетам.

TX0

Отправной точкой любого коинджоина Whirlpool является счет deposit. Это счет, который вы автоматически используете при создании нового кошелька Bitcoin. На этот счет нужно будет зачислить биткоины, которые вы хотите объединить.

Tx0" - это первый шаг в процессе смешивания Whirlpool. Его цель - подготовить и уравнять UTXO для коин-джойнта, разделив их на единицы, соответствующие количеству выбранного пула, чтобы обеспечить однородное смешивание. Уравненные таким образом UTXO отправляются на счет premix. Что касается разницы, которая не может попасть в пул, то она отделяется на особый счет: плохой банк (или "доксичная мелочь").

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

BTC204

В этом примере транзакции Tx0 входная сумма 372,000 сат с нашего депозитного счета разбивается на несколько выходных UTXO, которые распределяются следующим образом:

Например, вот настоящий Whirlpool Tx0 (не мой): edef60744f539483d868caff49d4848e5cc6e805d6cdc8d0f9bdbbaedcb5fc46

BTC204

Доксические изменения

Излишки, которые не удалось интегрировать в пул, а это эквивалентно 40 000 сат, перенаправляются на счет плохой банк, также известный как "доксический обмен", чтобы обеспечить строгое отделение от других UTXO в портфеле.

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

BTC204

Если этот UTXO объединить со смешанными выходами, последние потеряют всю конфиденциальность, полученную во время циклов coinjoin, в частности, из-за CIOH (Common-Input-Ownership-Heuristic). Если его объединить с другими доксическими изменениями, пользователь рискует потерять конфиденциальность, поскольку это свяжет различные записи цикла coinjoin. Поэтому к нему следует относиться с осторожностью. Более подробно об управлении этими UTXO doxxic мы поговорим в последнем разделе этой главы.

Исходная смесь

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

По окончании этих первых смешиваний счет premix будет пуст, а наши монеты, оплатившие майнинг за это первое присоединение, будут скорректированы в точности до суммы, определенной выбранным пулом. В нашем примере, наши первоначальные UTXO в размере 108,000 сатов будут уменьшены ровно до 100,000 сатов.

BTC204

Ремиксы

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

Напоминаем, что ремиксы в этом случае на 100% бесплатны: никаких дополнительных платежей за обслуживание или майнинг не требуется. Таким образом, хранение UTXO на счете postmix сохраняет их ценность и одновременно улучшает их анонсы. Именно поэтому важно позволить этим монетам участвовать в нескольких циклах coinjoin. Это абсолютно ничего вам не стоит и повышает уровень их анонимности.

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

Как вы управляете своими постмиксами?

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

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

Слияние UTXO - самая распространенная ошибка. Чтобы избежать CIOH (Common-Input-Ownership-Heuristic), вы должны избегать объединения смешанных UTXO с несмешанными UTXO в одной сделке. Это требует тщательного управления UTXO в вашем портфеле, особенно в плане маркировки.

BTC204

Также необходимо соблюдать осторожность при консолидации смешанных UTXO. Умеренная консолидация возможна, если ваши смешанные UTXO имеют значительные анонсы, но это неизбежно снизит конфиденциальность ваших частей. Следите за тем, чтобы консолидация не была слишком обширной и не проводилась после недостаточного количества ремиксов, что чревато установлением выводимых связей между вашими UTXO до и после циклов объединения. Если вы сомневаетесь в правильности этих манипуляций, лучше всего не консолидировать UTXO после ремиксов, а переводить их по одному на аппаратный кошелек, каждый раз генерируя новый пустой адрес. И снова не забывайте маркировать каждый полученный UTXO.

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

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

Самое простое и безопасное решение - оставить смешанные UTXO в покое на их постмиксном счете, позволив им ремиксировать и трогать их только для того, чтобы потратить. Кошельки Samurai и Sparrow имеют дополнительные средства защиты от всех этих рисков, связанных с анализом цепочки. Эти средства защиты помогут вам избежать ошибок.

Как вы управляете токсичными обменами?

Далее вам нужно будет внимательно отнестись к управлению doxxic exchange - биржей, которая не попала в пул coinjoin. Эти токсичные UTXO, полученные в результате использования Whirlpool, представляют собой риск для вашей конфиденциальности, поскольку они устанавливают связь между вами и пользователем coinjoin. Поэтому необходимо обращаться с ними осторожно и не объединять их с другими UTXO, особенно смешанными UTXO.

Вот несколько стратегий их использования:

Как пользоваться Whirlpool?

После ареста основателей Samourai Wallet и изъятия их серверов 24 апреля 2024 года инструмент Whirlpool больше не работает, даже для тех, у кого есть собственный Dojo. Ранее он был доступен на Samourai Wallet и Sparrow Wallet.

BTC204

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

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

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

https://planb.network/tutorials/privacy/on-chain/coinjoin-sparrow-wallet-84def86d-faf5-4589-807a-83be60720c8b

https://planb.network/tutorials/privacy/on-chain/coinjoin-samourai-wallet-e566803d-ab3f-4d98-9136-5462009262ef

https://planb.network/tutorials/privacy/on-chain/coinjoin-dojo-c4b20263-5b30-4c74-ae59-dc8d0f8715c2

Наборы для анонимности

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

Напоминание о пользе coinjoin

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

Другими словами, аналитик, который знает вашу начальную транзакцию (Tx0) на входе в циклы coinjoin, не должен быть в состоянии с уверенностью определить ваш UTXO на выходе из циклов remix (анализ входа в цикл и выхода из цикла).

BTC204

И наоборот, аналитик, который знает ваш UTXO на выходе из циклов coinjoin, должен быть не в состоянии определить исходную сделку на входе в циклы (анализ "выход из цикла - вход в цикл").

BTC204

Чтобы оценить, насколько сложно аналитику связать прошлое с настоящим и наоборот, нужно определить размер групп однородных частей, внутри которых скрыта ваша часть. Этот показатель говорит нам о том, сколько анализов имеют одинаковую вероятность. Так, если правильный анализ утоплен среди 3 других анализов равной вероятности, уровень скрытности очень низок. С другой стороны, если правильный анализ находится в наборе из 20 000 одинаково вероятных анализов, ваша часть очень хорошо скрыта. Размер этих групп представляет собой показатели, известные как "анонсеты".

Понимание анонсов

Анонсеты используются в качестве индикаторов для оценки степени секретности конкретного UTXO. Более конкретно, они измеряют количество неразличимых UTXO в наборе, включающем исследуемую часть. Требование однородности набора UTXO означает, что анонсеты обычно рассчитываются на циклах coinjoin. Использование этих показателей особенно актуально для коинджойнтов Whirlpool, благодаря их однородности.

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

существует два типа анонсов:

Перспективный анонсет

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

Этот показатель измеряет устойчивость конфиденциальности помещения к анализу "прошлое-настоящее" (вход-выход).

BTC204

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

Например, если ваша транзакция приняла участие в первом цикле объединения монет и завершила два последующих нисходящих цикла, то перспективный анонсет вашей монеты будет равен 13:

BTC204

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

BTC204

Ретроспективный анонс

Ретроспективный анонсет показывает количество возможных источников для данной детали, зная UTXO в конце цикла. Этот показатель измеряет устойчивость конфиденциальности детали к анализу "настоящее - прошлое" (выход - вход), т. е. насколько сложно аналитику отследить вашу деталь до ее происхождения, до начала циклов сопряжения. Этот показатель называется "backward anonset", или "backward-looking metrics".

BTC204

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

BTC204

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

BTC204

Как вы рассчитываете анонсеты?

Для небольших ансамблей можно рассчитать анонсеты вручную с помощью проводника блоков. Однако для больших анонсетов использование специализированного инструмента становится необходимым. Насколько мне известно, единственным программным обеспечением, способным выполнить эту задачу, является Whirlpool Stats Tool, инструмент на языке Python, разработанный командами Samourai и OXT. К сожалению, в настоящее время этот инструмент не работает после ареста основателей Samourai и прекращения работы OXT, которая использовалась для извлечения данных из блокчейна.

BTC204

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

https://planb.network/tutorials/privacy/analysis/wst-anonsets-0354b793-c301-48af-af75-f87569756375

Энтропия

Как мы уже видели в этом разделе, посвященном коинджоинам, однородность UTXO на входе и выходе играет важную роль в повышении конфиденциальности транзакции биткоина. Этот параметр создает правдоподобную отрицаемость перед лицом анализа блокчейна. Для измерения этой однородности можно использовать несколько методов, но одним из самых эффективных, на мой взгляд, является использование показателей, предоставляемых инструментом Boltzmann, разработанным командами OXT и Samourai Wallet, и, в частности, энтропии транзакции. Именно его мы подробно рассмотрим в этой главе.

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

Количество интерпретаций

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

Например, простая платежная операция с 1 входом и 2 выходами будет иметь только одну интерпретацию, а именно, что вход #0 финансирует выход #0 и выход #1. Других возможных интерпретаций не существует:

BTC204

С другой стороны, угол Whirlpool 5x5 имеет 1\,496 возможных комбинаций:

BTC204

У монетоприемника Whirlpool Surge Cycle 8x8 есть 9\,934\,563 возможных интерпретаций:

BTC204

Энтропия

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

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

В конкретном контексте анализа блокчейна энтропия - это также название показателя, производного от энтропии Шеннона и [изобретенного ЛораномМТ] (https://gist.github.com/LaurentMT/e758767ca4038ac40aaf), который может быть рассчитан для транзакции биткойна.

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

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

Энтропия определяется как двоичный логарифм числа возможных комбинаций. Вот формула, в которой E - энтропия транзакции, а C - количество возможных интерпретаций:

E = \log_2(C)

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

Рассмотрим пример расчета энтропии для транзакции coinjoin, структурированной по модели Whirlpool 5x5, которая, как уже говорилось в предыдущем разделе, имеет число возможных интерпретаций 1\,496:

\begin{align*}
C &= 1\,496 \\
E &= \log_2(1\,496) \\
E &= 10.5469 \text{ bits}
\end{align*}

Таким образом, энтропия этой транзакции coinjoin составляет 10,5469 бит, что считается весьма удовлетворительным показателем. Чем выше это значение, тем больше различных интерпретаций допускает транзакция, что повышает уровень ее конфиденциальности.

Для транзакции coinjoin 8x8 с 9\,934\,563 интерпретаций энтропия будет равна :

\begin{align*}
C &= 9\,934\,563 \\
E &= \log_2(9\,934\,563) \\
E &= 23.244 \text{ bits}
\end{align*}

Рассмотрим еще один пример с классической платежной транзакцией, имеющей 1 вход и 2 выхода: 1b1b0c3f0883a99f1161c64da19471841ed12a1f78e77fab128c69a5f578ccce

BTC204

В случае с этой транзакцией единственной возможной интерпретацией является: (In.0) > (Out.0 ; Out.1). Следовательно, ее энтропия равна 0 :

\begin{align*}
C &= 1 \\
E &= \log_2(1) \\
E &= 0 \text{ bits}
\end{align*}

Эффективность

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

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

Используется следующая формула с :

Ef = E_R - E_M

Например, для структуры Whirlpool 5x5 coinjoin максимальная энтропия составляет 10,5469:

\begin{align*}
E_R &= 10.5469 \\
E_M &= 10.5469 \\
Ef &= E_R - E_M \\
Ef &= 10.5469 - 10.5469 \\
Ef &= 0 \text{ bits}
\end{align*}

Этот показатель также выражается в процентах. Используется следующая формула: :

\begin{align*}
E_f &= \frac{C_R}{C_M} \\
E_f &= \frac{1\,496}{1\,496} \\
E_f &= 100 \%
\end{align*}

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

Плотность энтропии

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

Чтобы рассчитать его, нужно просто разделить общую энтропию транзакции на общее количество входов и выходов, задействованных в транзакции:

E_D = \frac{E}{T}

Возьмем для примера монетное соединение Whirlpool 5x5:

\begin{align*}
T &= 5 + 5 = 10 \\
E &= 10.5469 \\
E_D &= \frac{E}{T} \\
E_D &= \frac{10.5469}{10} \\
E_D &= 1.054 \text{ bits}
\end{align*}

Давайте также рассчитаем плотность энтропии для коинджойнта 8x8 Whirlpool:

\begin{align*}
T &= 8 + 8 = 16 \\
E &= 23.244 \\
E_D &= \frac{E}{T} \\
E_D &= \frac{23.244}{16} \\
E_D &= 1.453 \text{ bits}
\end{align*}

Анализируя плотность энтропии этих двух типов объединений, становится ясно, что даже при нормировании энтропии на количество элементов объединение "Surge Cycle 8x8" создает больше неопределенности для анализа.

Показатель Больцмана

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

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

| % | Выход 0 | Выход 1 | Выход 2 | Выход 3 | Выход 4 |

| ------- | -------- | -------- | -------- | -------- | -------- |

| Вход 0 | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34%

| Вход 1 | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | Вход 1

| Вход 2 | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34%

| Вход 3 | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | Вход 3

| Вход 4 | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34%

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

Оценка Больцмана рассчитывается путем деления количества интерпретаций, в которых происходит определенное событие, на общее количество доступных интерпретаций. Таким образом, чтобы определить балл, связывающий вход #0 с выходом #3 (событие, присутствующее в 512$ интерпретаций), мы поступаем следующим образом:

\begin{align*}
\text{Interpretations (IN.0 > OUT.3)} &= 512 \\
\text{Interpretations totales} &= 1496 \\
\text{Score} &= \frac{512}{1496} \\
\text{Score} &= 34 \%
\end{align*}

Если мы возьмем пример с объединением Whirlpool 8x8 Surge Cycle, таблица Больцмана будет выглядеть следующим образом:

| OUT.0 | OUT.1 | OUT.2 | OUT.3 | OUT.4 | OUT.5 | OUT.6 | OUT.7 |

|-------|-------|-------|-------|-------|-------|-------|-------|-------|

| IN.0 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23%

| IN.1 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23%

| В.2 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23%

| В.3 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23%

| В.4 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23%

| В.5 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23%

| В.6 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23%

| В.7 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23%

Однако в случае простой транзакции с одним входом и двумя выходами ситуация иная:

| Выход 0 | Выход 1 |

|---------|----------|----------|

| Вход 0 | 100% | 100% | 100% |

Здесь мы видим, что вероятность того, что каждый выход произойдет от входа № 0, равна 100%. Таким образом, более низкая вероятность отражает большую конфиденциальность, размывая прямые связи между входами и выходами.

Детерминированные связи

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

Например, транзакция Whirlpool coinjoin не имеет детерминированных связей между входами и выходами, поэтому индикатор показывает 0 связей и отношение 0 %. И наоборот, во второй рассмотренной нами простой платежной транзакции (с одним входом и двумя выходами) индикатор говорит нам о наличии двух детерминированных связей, а соотношение достигает 100 %. Другими словами, нулевой показатель свидетельствует об отличной конфиденциальности, благодаря отсутствию прямых и неоспоримых связей между входами и выходами.

Как вы рассчитываете эти показатели?

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

Ранее существовал инструмент на языке Python под названием Boltzmann Calculator, разработанный командами OXT и Samourai, который автоматически рассчитывал все эти показатели для транзакции биткоина:

BTC204

Также для этих анализов можно было использовать веб-сайт KYCP.org:

BTC204

К сожалению, после ареста основателей Samourai эти инструменты больше не работают.

Теперь, когда мы подробно рассмотрели коинджоины, в заключительном разделе нашего курса мы рассмотрим другие методы обеспечения конфиденциальности, доступные в Биткойне. Мы рассмотрим payjoins, особые типы транзакций pseudo-coinjoin, протоколы статических адресов, а также меры по укреплению конфиденциальности не на уровне самих транзакций, а на уровне сети узлов.

https://planb.network/tutorials/privacy/analysis/boltzmann-entropy-738e45af-18a6-4ce6-af1a-1bf58e15f1fe

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

Транзакции Payjoin

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

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

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

Что такое транзакция payjoin?

Payjoin - это особая структура транзакций Bitcoin, которая повышает конфиденциальность пользователя при совершении трат, сотрудничая с получателем платежа.

В 2015 году LaurentMT впервые упомянул этот метод под названием "steganographic transactions", как указано в документе, доступном здесь. Позже эту технику принял кошелек Samourai Wallet, который в 2018 году первым внедрил её с помощью инструмента Stowaway. Концепция payjoin также представлена в BIP79, BIP78 и BIP77. Для обозначения payjoin используются различные термины:

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

Давайте рассмотрим пример, чтобы лучше понять этот процесс. Алиса покупает багет за 4 000 сатов, используя UTXO в 10 000 сатов, и выбирает payjoin. Ее пекарь, Боб, добавляет принадлежащий ему UTXO в 15 000 сатов в качестве входа, который он полностью возмещает в качестве выхода, в дополнение к 4 000 сатов Алисы.

BTC204

В этом примере Боб-пекарь вводит 15 000 сатов на вход и выходит с 19 000 сатов, разница составляет ровно 4 000 сатов, то есть цену багета. Со стороны Алисы, она вводит 10 000 сатов и получает на выходе 6 000 сатов, что представляет собой баланс в -4 000 сатов, то есть цену багета. Чтобы упростить пример, я намеренно опустил затраты на добычу в этой сделке.

Для чего нужен payjoin?

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

Во-первых, payjoin стремится ввести в заблуждение стороннего наблюдателя, создавая приманку в анализе цепочки. Это становится возможным благодаря эвристике CIOH (Common Input Ownership Heuristic). Как мы видели в части 3, обычно, когда транзакция в блокчейне имеет несколько входов, предполагается, что все эти входы принадлежат одному и тому же субъекту или пользователю.

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

Возьмем наш пример с транзакцией payjoin для оплаты багета:

BTC204

Увидев эту транзакцию в блокчейне, сторонний наблюдатель, руководствующийся обычной эвристикой анализа блокчейна, сделал бы следующую интерпретацию: "Алиса объединила 2 UTXO в качестве входных данных для транзакции, чтобы заплатить 19 000 сатов Бобу".

BTC204

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

BTC204

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

Стеганографическая транзакция

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

Если мы вернемся к нашему примеру с покупкой багета, аналитик будет думать, что сумма платежа соответствует либо UTXO в 6 000 сатов, либо UTXO в 19 000 сатов. В данном случае аналитик скорее подумает, что сумма платежа равна 19 000 сат, потому что на выходе есть 2 UTXO, по крайней мере один из которых больше 6 000 сат (нет никакой логической причины использовать 2 UTXO для оплаты 6 000 сат, когда для этого платежа было бы достаточно одного UTXO).

BTC204

Но в действительности этот анализ несовершенен. Сумма платежа не соответствует ни одному из выходов. На самом деле это разница между UTXO получателя на выходе и UTXO получателя на входе.

BTC204

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

Стеганография - это техника сокрытия информации внутри других данных или объектов таким образом, чтобы присутствие скрытой информации было незаметно. Например, секретное сообщение может быть спрятано в точке в несвязном тексте, что делает его незаметным для невооруженного глаза (это техника microdot).

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

Можно провести аналогию между криптографией и coinjoin, а также между стеганографией и payjoin. Коинджойн имеет схожие с шифрованием признаки: метод узнаваем, но информация не поддается расшифровке. И наоборот, payjoin похож на стеганографию: информация теоретически доступна, но поскольку метод сокрытия не распознается, она становится недоступной.

Как использовать payjoin?

Среди известных программ, поддерживающих payjoin, - Sparrow Wallet, Wasabi Wallet, Mutiny, BitMask, BlueWallet и JoinMarket, а также платежный процессор BTCPay.

BTC204

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

BTC204

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

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

https://planb.network/tutorials/privacy/on-chain/payjoin-sparrow-wallet-087a0e49-61cd-41f5-8440-ac7b157bdd62

https://planb.network/tutorials/privacy/on-chain/payjoin-samourai-wallet-48a5c711-ee3d-44db-b812-c55913080eab

Платежный мини-коинджойн

Если вы хотите провести платежную операцию, сохранив при этом определенную степень конфиденциальности, payjoin - хороший вариант. Но, как мы только что увидели, payjoin требует участия получателя. Что же делать, если получатель отказывается участвовать в payjoin или если вы просто предпочитаете не привлекать его? Одна из альтернатив - использовать транзакцию Stonewall или Stonewall x2. Давайте рассмотрим эти два типа транзакций подробнее.

Стоунволлская сделка

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

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

Таким образом, в сделке Stonewall есть только 2 роли:

Давайте рассмотрим пример, чтобы понять эту структуру транзакций. Алиса идет к булочнику Бобу, чтобы купить багет, который стоит 4 000 сатов. Она хочет расплатиться биткойнами, сохранив при этом некоторую конфиденциальность платежа. Поэтому она решает создать транзакцию Stonewall для оплаты.

BTC204

Анализируя эту транзакцию, мы видим, что Боб-пекарь фактически получил 4 000 сатов в оплату за багет. Алиса использовала 2 UTXO в качестве входов: один за 10 000 сатов и один за 15 000 сатов. На выходе она получила 3 UTXO: один на 4 000 сатов, один на 6 000 сатов и один на 11 000 сатов. Таким образом, чистый баланс Алисы по этой сделке составляет -4 000 сатов, что соответствует цене багета.

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

Какие цели преследует сделка Stonewall?

Структура Stonewall добавляет огромное количество энтропии в транзакцию, размывая границы анализа цепочки. Если смотреть со стороны, то такая транзакция может быть истолкована как мини-связь между двумя людьми. Но в действительности это платеж. Таким образом, этот метод создает неопределенность в анализе цепочек или даже приводит к ложным выводам.

Возьмем пример Алисы в пекарне Боба. Транзакция в блокчейне будет выглядеть следующим образом:

BTC204

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

BTC204

Эта интерпретация неточна, поскольку, как вы знаете, один UTXO был отправлен Бобу-пекарю, 2 входа UTXO поступили от Алисы, и она получила 3 выхода обмена.

BTC204

И что особенно интересно в структуре сделки Stonewall, так это то, что с точки зрения стороннего наблюдателя она во всех отношениях напоминает сделку Stonewall x2.

Стоунволлская сделка x2

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

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

Таким образом, в транзакциях Stonewall x2 определены три различные роли:

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

BTC204

Анализируя эту транзакцию, мы видим, что Боб-пекарь фактически получил 4 000 сатов в оплату за багет. Алиса использовала 10 000 сатов на входе и получила 6 000 сатов на выходе, то есть чистый баланс составил -4 000 сатов, что соответствует цене багета. Что касается Чарльза, то он предоставил 15 000 сатов на входе и получил два выхода: один в размере 4 000 сатов, а другой - 11 000 сатов, что дает баланс в 0.

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

Каковы цели сделки Stonewall x2?

Как и структура Stonewall, структура Stonewall x2 вносит в транзакцию большую энтропию и запутывает цепной анализ. Со стороны такая транзакция может быть истолкована как небольшое объединение монет между двумя людьми. Но в действительности это платеж. Таким образом, этот метод создает неопределенность в анализе цепочки или даже приводит к ложным выводам.

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

BTC204

Сторонний наблюдатель, полагающийся на эвристику анализа общей цепочки, может ошибочно заключить, что "Элис и Чарльз совершили небольшой coinjoin, с одним UTXO на входе и двумя UTXO на выходе". Опять же, анализ этой транзакции со стороны не приводит к применению ICOH, так как наличие двух выходов на одну и ту же сумму предполагает паттерн coinjoin. Поэтому с внешней точки зрения CIOH в данном конкретном случае неприменим.

BTC204

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

BTC204

И опять же, что особенно интересно в структуре сделки Stonewall x2, так это то, что с точки зрения стороннего наблюдателя она во всем похожа на сделку Stonewall.

В чем разница между Stonewall и Stonewall x2?

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

BTC204

С внешней точки зрения схема транзакций точно такая же.

BTC204

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

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

Когда следует использовать транзакции Stonewall и Stonewall x2?

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

Как использовать транзакции Stonewall и Stonewall x2?

Транзакции Stonewall и Stonewall x2 доступны как в приложении Samourai Wallet, так и в программном обеспечении Sparrow Wallet.

BTC204

Однако, как и в случае с payjoins, после ареста основателей Samourai, транзакции Stonewall x2 теперь работают только при ручном обмене PSBT между заинтересованными сторонами. К сожалению, автоматический обмен через Soroban больше не доступен.

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

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

https://planb.network/tutorials/privacy/on-chain/stonewall-033daa45-d42c-40e1-9511-cea89751c3d4

https://planb.network/tutorials/privacy/on-chain/stonewall-x2-05120280-f6f9-4e14-9fb8-c9e603f73e5b

Рикошеты

Использование структур транзакций Биткойна, которые вносят неоднозначность в анализ цепочки, таких как coinjoin, особенно полезно для защиты конфиденциальности. Однако, как мы уже говорили в главе о payjoins, транзакции coinjoin естественным образом идентифицируются в цепочке. Вспомните аналогию, которую мы проводили между шифрованием и коинджоинами: когда файл зашифрован, третья сторона, обнаружившая зашифрованный файл, не может получить доступ к его содержимому, но может четко определить, что файл был изменен, чтобы скрыть его содержимое. То же самое относится и к коинджоинам: когда аналитик изучает транзакцию коинджоина, то, хотя он не может установить прямые связи между входами и выходами (и наоборот), он, тем не менее, может понять, что наблюдаемая транзакция является коинджоином.

В зависимости от того, как вы собираетесь использовать свою часть после циклов coinjoin, тот факт, что она прошла этот процесс, может быть проблематичным. Например, если вы планируете продать свою монету на регулируемой биржевой платформе, но она недавно прошла через coinjoin, инструмент анализа цепочки платформы обнаружит этот факт. Платформа может отказаться принять вашу монету UTXO или даже потребовать от вас объяснений, что чревато приостановкой работы вашего счета или замораживанием средств. В некоторых случаях платформа может также сообщить о вашем поведении в государственные органы (например, именно этого требует TRACFIN от PSAN во Франции).

BTC204

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

BTC204

Что такое рикошет?

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

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

BTC204

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

BTC204

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

BTC204

Почему это работает?

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

BTC204

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

Наблюдаемое здесь явление в некотором роде аналогично теории шести степеней разделения.

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

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

Когда и как использовать рикошет?

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

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

Идея метода рикошета изначально принадлежит команде Samourai Wallet, которая интегрировала его в свое приложение, чтобы автоматизировать процесс. Услуга не является бесплатной для Samourai, поскольку за рикошет взимается плата в размере 100 000 сатов, а также расходы на майнинг. Поэтому его использование рекомендуется при переводах значительных сумм.

BTC204

Приложение Samurai предлагает два варианта рикошета:

BTC204 BTC204

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

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

https://planb.network/tutorials/privacy/on-chain/ricochet-e0bb1afe-becd-44a6-a940-88a463756589

Тайная передача прав собственности

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

Обмен монетами

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

BTC204

Представим себе наивный пример с Алисой и Бобом. Алиса владеет 1 BTC, защищенным закрытым ключом A, а Боб также владеет 1 BTC, защищенным закрытым ключом B. Теоретически они могут обменяться своими закрытыми ключами по внешнему каналу связи, чтобы осуществить секретную передачу.

BTC204

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

BTC204

Более того, нет никакой гарантии, что Алиса не получит закрытый ключ Боба B и не передаст в обмен свой закрытый ключ A. Таким образом, этот обмен опирается на чрезмерное доверие между сторонами и неэффективен для обеспечения безопасной секретной передачи прав собственности.

BTC204

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

Этого можно достичь с помощью протоколов HTLC (Hash Time-Locked Contracts) или PTLC (Point Time-Locked Contracts). Эти два протокола работают одинаково, используя систему временной блокировки, которая гарантирует, что обмен будет либо успешно завершен, либо полностью отменен, защищая таким образом целостность средств обеих сторон. Основное различие между HTLC и PTLC заключается в том, что HTLC использует хэши и предварительные изображения для защиты транзакции, в то время как PTLC использует адаптивные подписи.

В сценарии обмена монетами с использованием HTLC или PTLC между Алисой и Бобом обмен происходит безопасно: либо он проходит успешно, и каждый получает BTC другого, либо он терпит неудачу, и каждый сохраняет свои собственные BTC. Таким образом, ни одна из сторон не может обмануть или украсть BTC другой стороны.

HTLC также является механизмом, используемым для безопасной маршрутизации платежей через двунаправленные каналы Lightning Network Использование адаптивных подписей особенно интересно в этом контексте, поскольку позволяет отказаться от традиционных скриптов (этот механизм иногда называют "скриптами без скриптов"). Эта возможность позволяет снизить затраты, связанные с обменом. Еще одним важным преимуществом адаптивных подписей является то, что они не требуют использования общего хэша для обеих сторон транзакции, что позволяет избежать необходимости раскрытия прямой связи между ними при некоторых видах обмена.

Подписи адаптеров

Адаптирующие подписи - это криптографический метод, который объединяет действительную подпись с дополнительной подписью, называемой "адаптирующей подписью", для раскрытия секретных данных. Этот механизм устроен таким образом, что знание двух из трех следующих элементов: действительной подписи, подписи-адаптера и секрета, позволяет нам вывести недостающий третий элемент. Интересным свойством этого метода является то, что если мы знаем подпись адаптера нашего коллеги и конкретную точку на эллиптической кривой, связанную с секретом, который использовался для вычисления этой подписи адаптера, мы можем вывести свою собственную подпись адаптера, которая будет совместима с тем же секретом, не имея прямого доступа к самому секрету.

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

s_A = n_A + t + H(N_A + T \parallel P_A \parallel m_A) \cdot p_A

s_A' = s_A - t

s_A' \cdot G = N_A + H(N_A + T \parallel P_A \parallel m_A) \cdot P_A

s_B' = n_B + H(N_B + T \parallel P_B \parallel m_B)\cdot p_B

s_B = s_B' + t

(s_B' + t)\cdot G = N_B + T + H(N_B + T \parallel P_B \parallel m_B)\cdot P_B

t = (s_B' + t) - s_B' = s_B - s_B'

s_A = s_A' + t

(s_A' + t)\cdot G = N_A + T + H(N_A + T \parallel P_A \parallel m_A) \cdot P_A

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

Обратите внимание, что обмен монетами был впервые предложен Грегори Максвеллом в октябре 2013 года на BitcoinTalk.

Атомный обмен

По аналогии с coinswap и с использованием тех же типов смарт-контрактов можно проводить атомарные свопы. Атомарный своп позволяет напрямую обменивать различные криптовалюты, например BTC и XMR, между двумя пользователями без необходимости доверия или вмешательства посредника. Такие обмены называются "атомарными", поскольку они имеют только два возможных исхода: либо своп проходит успешно и обе стороны остаются довольны, либо он терпит неудачу, и каждый сохраняет свои первоначальные криптовалюты, избавляясь от необходимости доверять другой стороне.

BTC204

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

BTC204

Однако имейте в виду, что в отличие от coinswap, при атомарном свопе может возникнуть дисбаланс с точки зрения доступной ликвидности, особенно на биржах BTC/XMR. Как правило, обменять биткоины на альткоины проще, поскольку на них существует высокий спрос, что поддерживает низкие премии для этого направления конвертации. Однако обмен альткоинов на BTC может быть более сложным из-за более низкого спроса, что часто приводит к очень высоким премиям.

Наконец, когда в атомарном обмене участвуют биткоины в сети onchain и биткоины в сети Lightning, мы говорим о "подводном обмене".

Действительно ли это полезно?

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

Действительно, когда Алиса совершает обмен монетами или атомарный обмен с Бобом, она обменивает свои биткоины на биткоины Боба. В случае атомарного обмена в обмен включается альткоин, но принцип остается тем же. Таким образом, Алиса в итоге получает монету B, а Боб - монету A. Это добавляет сомнений в анализ цепочки, но история монет остается прослеживаемой. Если аналитик изучит часть A, он сможет проследить предыдущие действия Алисы, и наоборот, для части B.

BTC204

С точки зрения Алисы, риск заключается в том, что история монеты B может показаться подозрительной определенным организациям. Если, например, Боб приобрел монету B в результате преступных действий, таких как взлом, то монета останется связанной с его незаконной деятельностью. Алиса может оказаться владельцем монеты, которую она не сможет перевести на регулируемые обменные платформы без риска заморозить свои средства или даже быть обвиненной в преступлениях Боба, даже если она не имеет к ним никакого отношения.

BTC204

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

При coinjoin, даже если ваша монета смешивается с контролируемыми биткоинами, история монеты нарушается, обеспечивая форму правдоподобного отрицания, которая не существует в секретных протоколах передачи прав собственности, таких как coinswap или atomic swap.

BTC204

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

Чтобы секретные методы передачи прав собственности были действительно эффективными и исключали риск связывания истории пользователя A с пользователем B, как ни парадоксально, необходимо, чтобы об их использовании было широко известно. Если coinswap используется массово и власти знают об этой распространенной практике, то можно создать правдоподобную форму отрицания. Однако до тех пор, пока использование этих переводов остается незначительным, я думаю, что эти методы будут оставаться слишком рискованными для пользователей.

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

Конфиденциальность в сети P2P

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

Одуванчик

Один из способов избежать различных атак деанонимизации - использовать предложение Dandelion. Этот широковещательный протокол был формализован в BIP156, но так и не был реализован в Биткойне.

Идея Dandelion заключается в повышении конфиденциальности маршрутизации транзакций в сети Bitcoin для противодействия различным формам атак. Ее основная задача - скрыть узел-источник, который первоначально транслирует транзакцию в сеть. Раскрытие этого узла может позволить связать транзакцию Bitcoin с определенным IP-адресом (если узел работает в сети), что может стать точкой входа для анализа цепочки.

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

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

BTC204

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

BTC204

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

BTC204

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

BTC204

Затем транзакция распространяется по всей сети на этапе «Fluff».

BTC204

Стадии «стебель» и «Fluff» ссылаются на поведение распространения транзакции в сети, которое напоминает форму и развитие одуванчика (по-английски "Dandelion").

Таким образом, узлы-шпионы потенциально могут отследить транзакцию до узла, который инициировал фазу «Fluff» (массовую рассылку), но этот узел не является тем, кто изначально передал транзакцию, так как он получил её от последнего узла стебля. Если узлы-шпионы не могут отследить стебель, они также не могут идентифицировать исходный узел.

BTC204

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

BTC204

Этот метод маршрутизации размывает след, ведущий к узлу-источнику, что затрудняет отслеживание транзакции по сети до ее происхождения. Таким образом, Dandelion повышает конфиденциальность, ограничивая возможности противников по деанонимизации сети. Этот метод тем более эффективен, когда на этапе "стебля" транзакция проходит через узел, который шифрует свои сетевые соединения, как, например, Tor или P2P Transport V2.

BIP156 не был интегрирован в Bitcoin Core и в настоящее время классифицируется как "отклоненный". Одна из главных проблем этого протокола заключается в том, что на этапе стейблкоина транзакции должны проходить через промежуточные узлы, прежде чем будут проверены. Как мы уже видели, в обычной модели Bitcoin каждый узел сначала проверяет транзакцию, прежде чем передать ее своим коллегам. Если транзакция не соответствует правилам консенсуса узла или локальным правилам стандартизации, узел игнорирует ее и не распространяет. Этот процесс важен для противодействия DoS-атакам, поскольку только действительные транзакции транслируются во всю сеть. Недействительные транзакции, которые могут массово генерироваться для перегрузки сети, останавливаются на первом попавшемся узле и не распространяются. Основной риск, связанный с Dandelion, заключается в том, что этот новый протокол может создать новые векторы для DoS-атак, позволяя транслировать недействительные транзакции в часть сети.

P2P-транспорт V2

P2P transport V2 - еще один сетевой протокол, представленный в BIP324. Это новая версия транспортного протокола Bitcoin P2P, которая включает оппортунистическое шифрование для повышения конфиденциальности и безопасности связи между узлами.

Это усовершенствование призвано решить несколько проблем, связанных с базовой версией протокола P2P. С одной стороны, оно делает обмен данными неотличимым от других типов данных, циркулирующих в Интернете, для пассивного наблюдателя. Основная цель - помешать правительствам, интернет-провайдерам и VPN-провайдерам массово следить за пользователями биткоина. Это также усложняет задачу определения того, является ли пользователь Интернета также пользователем Биткойна, т. е. работает ли он с полноценным узлом.

P2P V2 также помогает снизить риск цензуры и атак, обнаруживая специфические шаблоны в пакетах данных. Это усложняет и удорожает проведение различных типов атак Sybil на сетевом уровне. Атака Sybil происходит, когда субъект создает несколько ложных идентификаторов, чтобы получить несправедливое преимущество. В контексте сети Биткойн это часто проявляется в том, что субъект контролирует большое количество полных узлов и агрессивно использует их для умножения соединений. Атаки Sybil могут быть пассивными, направленными на сбор информации и нарушение конфиденциальности пользователей, или активными, в виде атак Eclipse. Последние изолируют определенный узел от остальной сети, либо подвергая пользователя цензуре, либо изменяя получаемые им данные. Наконец, P2P V2 также делает атаки Man-In-The-Middle (MITM) более дорогостоящими и легко обнаруживаемыми.

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

Транспорт P2P V2 был включен в качестве опции (отключен по умолчанию) в Bitcoin Core версии 26.0, выпущенной в декабре 2023 года. Затем он был включен по умолчанию в версии 27.0 от апреля 2024 года. Его можно изменить с помощью опции v2transport= в конфигурационном файле.

Тор

Еще одно простое решение, позволяющее избежать риска потери конфиденциальности для узла сети, - запустить его полностью под Tor.

Tor - это сеть ретрансляционных серверов (узлов), которые анонимизируют происхождение TCP-соединений в Интернете. Она работает путем инкапсуляции данных в несколько слоев шифрования. Каждый ретрансляционный узел снимает слой, чтобы раскрыть адрес следующего узла, пока не будет достигнут конечный пункт назначения. Сеть Tor обеспечивает анонимность за счет того, что узлы-посредники не могут знать ни происхождения, ни назначения данных, что значительно затрудняет отслеживание действий пользователя.

BTC204

Tor не только шифрует данные, но и маскирует происхождение и назначение сообщений. Используя Tor для связи с вашим личным узлом, вы укрепляете конфиденциальность ваших транзакций: ваш интернет-провайдер не сможет расшифровать сообщения, а другие узлы сети Биткойн не смогут определить IP-адрес узла-источника. Более того, Tor также скрывает от вашего провайдера само использование биткойна.

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

Также важно отметить, что обмен данными в Tor происходит медленнее. Эта задержка особенно раздражает при первоначальном запуске узла, поскольку IBD (Initial Block Download) требует большого количества коммуникаций. В результате начальная синхронизация с сетью Биткойн может занять значительно больше времени при использовании Tor. Также можно выполнить IBD в сети, а затем активировать Tor в качестве второго шага. Хотя этот метод раскрывает существование вашего узла Биткойна вашему интернет-провайдеру, он защищает вашу личную информацию о транзакциях после перехода на Tor.

Рассмотрев различные методы обеспечения конфиденциальности на сетевом уровне, в следующих нескольких главах я хотел бы познакомить вас с двумя элегантными решениями, позволяющими избежать повторного использования адресов: BIP47 и Silent Payments.

BIP47 и многоразовые коды платежей

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

BTC204

В традиционной банковской системе, например, мы привыкли делиться своим IBAN, который всегда остается неизменным. Как только мы передаем его кому-то, он может отправить нам несколько платежей, не взаимодействуя с нами снова. Нео-банки также предлагают более современные возможности, такие как использование уникальных адресов электронной почты в PayPal или RevTags в Revolut. Даже за пределами финансовой сферы наши повседневные идентификаторы, такие как почтовый адрес, номер телефона и адрес электронной почты, также уникальны и постоянны. Нам не нужно обновлять их при каждом новом взаимодействии.

BTC204

Однако Bitcoin работает по-другому: для каждой входящей транзакции необходимо генерировать новый адрес получения. Этот компромисс между простотой использования и конфиденциальностью восходит к самому истоку "Белой книги" Биткойна. Уже в конце 2008 года, публикуя первую версию своего документа, Сатоши Накамото предупреждал нас об этом риске:

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

Существует множество способов получения нескольких платежей по одному идентификатору без необходимости повторного использования адреса. Каждый из них имеет свои компромиссы и недостатки. Среди таких способов - BIP47, предложение, разработанное Юстусом Ранвье и опубликованное в 2015 году. Это предложение направлено на создание многоразовых платежных кодов, которые позволяют проводить несколько транзакций против одного и того же лица, избегая при этом повторного использования адреса. Одним словом, BIP47 призван предложить платежную систему, столь же интуитивно понятную, как и уникальный идентификатор, сохраняя при этом конфиденциальность транзакций.

BTC204

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

Изначально BIP47 был предложен для интеграции в Bitcoin Core, но так и не был реализован. Однако некоторые программные приложения решили реализовать его самостоятельно. Например, команда Samourai Wallet разработала собственную реализацию BIP47 под названием "PayNym".

Общий принцип работы BIP47 и PayNym

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

BTC204

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

Для проведения транзакции обеим сторонам необходим биткойн-кошелек с реализацией BIP47, например, PayNym на Samurai Wallet или Sparrow Wallet. Совместное использование их платежных кодов создает секретный канал между ними. Чтобы эффективно установить этот канал, эмитент должен провести определенную транзакцию в блокчейне Биткойна, известную как "транзакция с уведомлением" (подробнее об этом позже).

Объединение платежных кодов двух пользователей создает общие секреты, которые, в свою очередь, создают большое количество уникальных адресов получения Bitcoin (ровно 2^32, или около 4 миллиардов). Таким образом, платежи, совершаемые через BIP47, на самом деле адресуются не на сам платежный код, а на классические адреса получения, полученные из платежных кодов участвующих пользователей.

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

BTC204

Цель деривации для BIP47 идентифицируется индексом 47' (0x8000002F), относящимся к BIP47. Пример пути деривации для многоразового платежного кода может быть следующим:

m/47'/0'/0'/

Чтобы дать вам представление о том, как выглядит код платежа, вот мой:

PM8TJSBiQmNQDwTogMAbyqJe2PE2kQXjtgh88MRTxsrnHC8zpEtJ8j7Aj628oUFk8X6P5rJ7P5qDudE4Hwq9JXSRzGcZJbdJAjM9oVQ1UKU5j2nr7VR5

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

Что касается PayNym Bots, роботов, которых иногда можно увидеть в Twitter, то это визуальные представления платежного кода, созданные Samourai Wallet. Они генерируются с помощью хэш-функции, что делает их практически уникальными. Они имеют вид небольшой строки символов, начинающейся с +:

+throbbingpond8B1
+twilightresonance487
+billowingfire340

Эти аватары также могут быть представлены в виде изображений:

BTC204

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


В следующих разделах этой главы, посвященных BIP47, мы подробно рассмотрим, как она работает, уделив особое внимание используемым криптографическим методам. Чтобы полностью понять эти несколько технические объяснения, необходимо сначала разобраться в структуре HD-кошельков, процедурах выведения ключей и основах криптографии на эллиптических кривых. Если вы хотите углубиться в эти понятия, на Plan ₿ Network доступен еще один бесплатный обучающий курс :

https://planb.network/courses/46b0ced2-9028-4a61-8fbc-3b005ee8d70f

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


Многоразовый код платежа

Как уже упоминалось ранее, многоразовый платежный код расположен на глубине 3 кошелька HD, что делает его сравнимым с xpub, как по его положению в структуре кошелька, так и по его роли.

80-байтовый код платежа выглядит следующим образом:

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

0x010002a0716529bae6b36c5c9aa518a52f9c828b46ad8d907747f0d09dcd4d9a39e97c3c5f37c470c390d842f364086362f6122f412e2b0c7e7fc6e32287e364a7a36a00000000000000000000000000
BTC204

Далее в начале добавляется префиксный байт P, чтобы четко указать, что это код платежа. Этот байт представлен в виде 0x47:

0x47010002a0716529bae6b36c5c9aa518a52f9c828b46ad8d907747f0d09dcd4d9a39e97c3c5f37c470c390d842f364086362f6122f412e2b0c7e7fc6e32287e364a7a36a00000000000000000000000000

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

0x47010002a0716529bae6b36c5c9aa518a52f9c828b46ad8d907747f0d09dcd4d9a39e97c3c5f37c470c390d842f364086362f6122f412e2b0c7e7fc6e32287e364a7a36a00000000000000000000000000567080c4
BTC204

После выполнения этих шагов код платежа готов. Осталось только преобразовать его в базу 58, чтобы получить окончательную версию:

PM8TJSBiQmNQDwTogMAbyqJe2PE2kQXjtgh88MRTxsrnHC8zpEtJ8j7Aj628oUFk8X6P5rJ7P5qDudE4Hwq9JXSRzGcZJbdJAjM9oVQ1UKU5j2nr7VR5

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

m/47'/0'/0'/

Если говорить конкретно, то для генерации сжатого открытого ключа и строкового кода, связанного с многоразовым платежным кодом, мы начинаем с вычисления главного закрытого ключа из семени кошелька. Затем мы вычисляем пару дочерних ключей, используя индекс 47 + 2^31 (усиленная деривация). Затем следуют еще два последовательных вычисления дочерних пар, каждая из которых использует индекс 2^31 (усиленная деривация).

BTC204

Обмен ключами Диффи-Хеллмана на эллиптических кривых (ECDH)

Криптографический протокол, лежащий в основе BIP47, известен под аббревиатурой ECDH, что означает Elliptic-Curve Diffie-Hellman. Этот метод является вариантом оригинального обмена ключами Диффи-Хеллмана.

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

BTC204

Этот общий секрет (в данном случае синий ключ) можно использовать для других операций. Как правило, этот общий секрет может использоваться для шифрования и дешифрования сообщений в незащищенной сети:

BTC204

Чтобы добиться этого, Диффи-Хеллман использует модульную арифметику для вычисления общего секрета. Вот как это работает в простых терминах:

BTC204

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

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

Прежде чем мы перейдем к рассмотрению механизмов Диффи-Хеллмана, позвольте мне кратко напомнить вам о двух важных математических понятиях, которые нам понадобятся:

Обмен ключами Диффи-Хеллмана между Алисой и Бобом происходит следующим образом:

A равно g, возведенному в степень a по модулю p:

A = g^a \bmod p

B равно g, возведенному в степень b по модулю p:

B = g^b \bmod p

z равно B, возведенному в степень a по модулю p:

z = B^a \bmod p

Напоминание:

B = g^b \bmod p

В результате :

z = B^a \bmod p
z = (g^b)^a \bmod p

Применяя правила питания:

(x^n)^m = x^{nm}

В результате :

z = g^{ba} \bmod p

z равно A, возведенному в степень b по модулю p:

z = A^b \bmod p

В результате :

z = (g^a)^b \bmod p
z = g^{ab} \bmod p
z = g^{ba} \bmod p

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

BTC204

Злоумышленник, даже владея p, g, A и B (открытые значения), не сможет вычислить a, b или z (закрытые значения). Чтобы добиться этого, экспоненту придется перевернуть, а это невозможно, если не перебрать все возможности по очереди, так как это равносильно вычислению дискретного логарифма, то есть обратной экспоненты в конечной циклической группе.

Таким образом, пока значения a, b и p достаточно велики, протокол Диффи-Хеллмана безопасен. Как правило, при параметрах в 2048 бит (600-значное десятичное число) проверка всех возможностей для a и b была бы непрактичной. На сегодняшний день при таких числах этот алгоритм считается безопасным.

Здесь кроется главный недостаток протокола Диффи-Хеллмана. Чтобы быть безопасным, алгоритм должен использовать большие числа. Поэтому в наши дни мы предпочитаем использовать алгоритм ECDH (Elliptic Curve Diffie-Hellman) - вариант Диффи-Хеллмана, основанный на алгебраической кривой, точнее, на эллиптической кривой. Такой подход позволяет работать с гораздо меньшими числами при сохранении эквивалентной безопасности, что сокращает ресурсы, необходимые для вычислений и хранения.

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

Если кратко объяснить принцип криптографии на эллиптических кривых, то закрытый ключ представляет собой случайное число в диапазоне от 1 до n-1, где n - порядок кривой. Открытый ключ, с другой стороны, представляет собой определенную точку на этой кривой, полученную из закрытого ключа путем сложения и удвоения точек из порождающей точки в соответствии с уравнением :

K = k \cdot G

В этой формуле K обозначает открытый ключ, k - закрытый ключ, а G - точку генератора.

Существенной особенностью этих ключей является легкость, с которой K можно вычислить из k и G, в то время как найти k из K и G практически невозможно. Эта асимметрия создает одностороннюю функцию. Другими словами, легко вычислить открытый ключ, если известен закрытый ключ, но получить закрытый ключ по открытому невозможно. Эта безопасность также подкрепляется вычислительной сложностью дискретного логарифма.

Мы будем использовать это свойство для адаптации нашего алгоритма Диффи-Хеллмана. Принцип работы ECDH заключается в следующем:

K_a = k_a \cdot G
K_b = k_b \cdot G
(x,y) = k_a \cdot K_b
(x,y) = k_b \cdot K_a

Они получают один и тот же общий секрет, потому что :

(x,y) = k_a \cdot K_b = k_a \cdot (k_b \cdot G) = (k_a \cdot k_b) \cdot G = (k_b \cdot k_a) \cdot G = k_b \cdot (k_a \cdot G) = k_b \cdot K_a

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

Таким образом, ECDH - это алгоритм обмена ключами. Он часто используется в сочетании с другими криптографическими методами для создания полноценного протокола. Например, ECDH лежит в основе TLS (Transport Layer Security), протокола шифрования и аутентификации, используемого на транспортном уровне Интернета. TLS использует ECDHE для обмена ключами - вариант ECDH, в котором ключи являются эфемерными, - чтобы обеспечить постоянную конфиденциальность. Кроме того, в TLS используются алгоритмы аутентификации, такие как ECDSA, алгоритмы шифрования, такие как AES, и хэш-функции, такие как SHA256.

TLS отвечает за s вhttps` и висячий замок в адресной строке вашего браузера - символы зашифрованных коммуникаций. Пройдя этот курс, вы будете использовать ECDH, и весьма вероятно, что вы будете использовать его ежедневно, даже не подозревая об этом.

Транзакция уведомления

Как мы видели в предыдущем разделе, ECDH - это вариант обмена Диффи-Хеллмана с использованием пар ключей, созданных на эллиптической кривой. Хорошо, что у нас уже есть множество пар ключей, соответствующих этому стандарту, в наших кошельках Биткойн! Идея BIP47 заключается в использовании пар ключей из иерархических детерминированных кошельков Bitcoin обеих сторон для создания общих эфемерных секретов между ними. Вместо этого BIP47 использует ECDHE (Elliptic Curve Diffie-Hellman Ephemeral).

BTC204

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

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

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

BTC204

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

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

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

Модель конфиденциальности BIP47

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

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

Это связано с тем, что код платежа не используется для непосредственного получения адресов, принимающих платежи BIP47. Вместо этого адреса генерируются с помощью приложения ECDH между ключами, полученными из платежных кодов двух участвующих сторон.

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

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

Давайте рассмотрим конкретный пример: Я хочу сделать пожертвование политическому движению через BIP47 :

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

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

BTC204

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

Конечно, классическая модель конфиденциальности Биткойна по-прежнему применима к эфемерным открытым ключам, которые получаются из комбинации двух платежных кодов. На самом деле эти две модели дополняют друг друга. Я хочу подчеркнуть, что, в отличие от обычного использования открытого ключа для получения биткойнов, платежный код может быть привязан к конкретной личности, поскольку информация "Алиса совершает сделку с Бобом" разрушается на другом этапе. Платежный код используется для генерации платежных адресов, но, основываясь исключительно на наблюдении за блокчейном, невозможно связать платежную транзакцию BIP47 с платежными кодами, использованными для ее совершения, если только соответствующие UTXO не были ранее связаны с идентичностью и пользователи не связали свои платежные коды с соответствующими идентичностями.

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

Построение транзакции уведомления

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

1- Алиса вычисляет общий секрет с помощью ECDH :

a

B = b \cdot G

S = a \cdot B

f = \text{HMAC-SHA512}(o, x)

**2 - Алиса переводит свой персональный платежный код в основание 2 (двоичный) **

3- Он использует этот фактор ослепления в качестве ключа для симметричного шифрования полезной нагрузки своего платежного кода. Используемый алгоритм шифрования представляет собой простое XOR. Выполняемая операция сопоставима с шифром Вернама, также известным как "одноразовый блокнот".

f = f1 || f2

x' = x \oplus f1

c' = c \oplus f2

4- Таким образом, Алиса в настоящее время имеет свой код платежа с зашифрованной полезной нагрузкой. Она создаст и передаст в эфир транзакцию с открытым ключом A в качестве входа, выходом на адрес уведомления Боба и выходом OP_RETURN, состоящим из ее платежного кода с зашифрованным полезным грузом. Эта транзакция является транзакцией уведомления.

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

Как мы видели в предыдущих разделах, ECDH используется для создания общего секрета между двумя пользователями, общающимися по незащищенной сети, и потенциально может быть замечен злоумышленниками. В BIP47 ECDH используется для обмена данными в сети Bitcoin, которая по своей природе является прозрачной коммуникационной сетью и наблюдается многими злоумышленниками. Общий секрет, вычисленный в результате обмена ключами ECDH, затем используется для шифрования секретной информации, которую необходимо передать: платежного кода отправителя (Алисы).

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

BTC204

Уведомление о сделке: практическое исследование

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

BTC204

Глядя на эту транзакцию, мы видим, что она имеет один вход и 4 выхода:

Наиболее интересным для изучения, очевидно, является вывод 0 с помощью OP_RETURN. Давайте рассмотрим подробнее, что он содержит. Вот `scriptPubKey в шестнадцатеричном виде :

6a4c50010002b13b2911719409d704ecc69f74fa315a6cb20fdd6ee39bc9874667703d67b164927b0e88f89f3f8b963549eab2533b5d7ed481a3bea7e953b546b4e91b6f50d800000000000000000000000000

В этом скрипте есть несколько частей. Во-первых, в скрипте используется файл :

6a4c

Среди опкодов можно выделить 0x6a, обозначающий OP_RETURN, и 0x4c, обозначающий OP_PUSHDATA1.

Байт, следующий за этим последним опкодом, указывает на размер последующей полезной нагрузки. Он указывает 0x50, или 80 байт:

6a4c50

Далее у нас есть метаданные моего кода платежа открытым текстом:

010002

Зашифрованная абсцисса открытого ключа моего платежного кода:

b13b2911719409d704ecc69f74fa315a6cb20fdd6ee39bc9874667703d67b164

Зашифрованный строковый код моего платежного кода:

927b0e88f89f3f8b963549eab2533b5d7ed481a3bea7e953b546b4e91b6f50d8

И, наконец, добавление 80 байт, стандартный размер OP_RETURN:

00000000000000000000000000

Чтобы помочь вам понять, вот мой код платежа открытым текстом в базе 58:

PM8TJQCyt6ovbozreUCBrfKqmSVmTzJ5vjqse58LnBzKFFZTwny3KfCDdwTqAEYVasn11tTMPc2FJsFygFd3YzsHvwNXLEQNADgxeGnMK8Ugmin62TZU

А в базе 16 :

4701000277507c9c17a89cfca2d3af554745d6c2db0e7f6b2721a3941a504933103cc42add94881210d6e752a9abc8a9fa0070e85184993c4f643f1121dd807dd556d1dc000000000000000000000000008604e4db

Если мы сравним мой открытый код платежа с OP_RETURN, то увидим, что HRP (0x47) и контрольная сумма (0x8604e4db) не передаются. Это нормально, так как эта информация предназначена для людей.

Далее мы можем узнать версию (0x01), битовое поле (0x00) и четность открытого ключа (0x02). Все эти метаданные передаются в незашифрованном виде.

Наконец, мы видим, что абсцисса открытого ключа (0x77507c9c17a89cfca2d3af554745d6c2db0e7f6b2721a3941a504933103cc42a) и код строки (0xdd94881210d6e752a9abc8a9fa0070e85184993c4f643f1121dd807dd556d1dc) были зашифрованы. Это полезная нагрузка платежного кода.

Что такое XOR?

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

XOR - это побитовый логический оператор, основанный на булевой алгебре. При задании двух операндов в битах он возвращает 1, если биты одного ранга различны, и возвращает 0, если биты одного ранга равны. Вот таблица истинности XOR в соответствии со значениями операндов D и E:

| D | E | D XOR E |

| --- | --- | ------- |

| 0 | 0 | 0 |

| 0 | 1 | 1 |

| 1 | 0 | 1 |

| 1 | 1 | 0 |

Например:

0110 \oplus 1110 = 1000

Или

010011 \oplus 110110 = 100101

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

D \oplus D = 0
D \oplus 0 = D
D \oplus E = E \oplus D
D \oplus (E \oplus Z) = (D \oplus E) \oplus Z = D \oplus E \oplus Z

Если

D \oplus E = L

Затем

D \oplus L = D \oplus (D \oplus E) = D \oplus D \oplus E = 0 \oplus E = E \\
\therefore D \oplus L = E

Во-вторых, этот метод шифрования очень похож на шифр Вернама (One-Time Pad) - единственный известный на сегодняшний день алгоритм шифрования, обладающий безусловной (или абсолютной) безопасностью. Для того чтобы шифр Вернама обладал этой особенностью, ключ шифрования должен быть совершенно случайным, иметь тот же размер, что и сообщение, и использоваться только один раз. В методе шифрования, используемом здесь для BIP47, ключ действительно имеет тот же размер, что и сообщение, а коэффициент ослепления в точности равен конкатенации абсциссы открытого ключа и кода строки платежного кода. Этот ключ шифрования используется только один раз. С другой стороны, этот ключ не является производным от совершенной случайности, поскольку это HMAC. Скорее, он является псевдослучайным. Таким образом, это не шифр Вернама, но метод близок к нему.

Получение уведомления о транзакции

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

1- Боб отслеживает транзакции, создающие выходы с его адресом уведомления.

2- Когда транзакция имеет выход по адресу уведомления, Боб анализирует его на предмет наличия в нем выхода OP_RETURN, соответствующего стандарту BIP47.

3- Если первый байт полезной нагрузки OP_RETURN равен 0x01, Боб начинает поиск возможного секрета, совместно используемого с ECDH:

A = a \cdot G

b

S = b \cdot A

f = \text{HMAC-SHA512}(o, x)

4- Боб интерпретирует данные OP_RETURN в транзакции уведомления как код платежа. Он просто расшифрует полезную нагрузку этого потенциального платежного кода, используя фактор ослепления f:

x = x' \oplus f1

c = c' \oplus f2

5- Боб проверяет, входит ли значение открытого ключа платежного кода Алисы в группу secp256k1. Если да, то он интерпретирует его как действительный код платежа. Если нет, он игнорирует транзакцию.

Теперь, когда Боб знает код платежа Алисы, Алиса может отправить ему до 2^32 платежей, без необходимости повторять транзакцию уведомления такого типа.

Почему это работает? Как Боб может определить тот же фактор ослепления, что и Алиса, и таким образом расшифровать ее платежный код? Давайте подробнее рассмотрим действие ECDH в том, что мы только что описали.

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

f = f1 || f2

Поэтому Алиса и Боб должны получить одно и то же значение для f, не передавая его напрямую, поскольку злоумышленник может украсть его и расшифровать секретную информацию. Этот коэффициент ослепления получается путем применения HMAC-SHA512 к двум значениям:

Поэтому Бобу нужны обе эти части информации, чтобы расшифровать полезную нагрузку платежного кода Алисы. Что касается входного UTXO, Боб может просто получить его, наблюдая за транзакцией уведомления. Для секретной точки Бобу придется использовать ECDH. Как было показано в предыдущем разделе о Диффи-Хеллмане, просто обменявшись своими открытыми ключами и тайно применив свои закрытые ключи к открытому ключу друг друга, Алиса и Боб могут найти точную секретную точку на эллиптической кривой. Транзакция уведомления основана на этом механизме:

B = b \cdot G

A = a \cdot G

S = a \cdot B = a \cdot (b \cdot G) = (b \cdot a)\cdot G = b \cdot A

BTC204

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

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

BTC204

Платежная операция BIP47

Давайте рассмотрим процесс оплаты с помощью BIP47. Чтобы напомнить вам о текущей ситуации:

Прежде чем объяснять этот процесс, думаю, важно вспомнить, над какими индексами мы сейчас работаем. Путь деривации для кода платежа описывается следующим образом: m/47'/0'/0'. Следующая глубина делит индексы следующим образом:

Каждый раз, когда Алиса хочет отправить платеж Бобу, она получает новый, уникальный, пустой адрес, снова используя протокол ECDH:

a

B = b \cdot G

S = a \cdot B

S = (Sx, Sy)

s = \text{SHA256}(Sx)

K0 = B + s \cdot G

После того как Алиса получила адрес получения Боба K0, она может провести транзакцию Bitcoin стандартным способом. Для этого она выбирает принадлежащий ей UTXO, защищенный парой ключей из другой ветки ее HD-кошелька, и расходует его, чтобы удовлетворить вывод на адрес Боба K0. Важно отметить, что этот платеж, после того как адрес был выведен, происходит по классической схеме и больше не зависит от ключей, связанных с BIP47.

Я подведу итог рассмотренным нами шагам по отправке платежа BIP47:

BTC204

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

BTC204

Он может продолжать в том же духе и вывести до 2^32 пустых адресов, принадлежащих Бобу.

Со стороны, глядя на блокчейн, теоретически невозможно отличить платеж BIP47 от обычного платежа. Вот пример платежной транзакции BIP47 в Testnet:

94b2e59510f2e1fa78411634c98a77bbb638e28fb2da00c9f359cd5fc8f87254

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

BTC204

Получение платежа BIP47 и получение закрытого ключа

Алиса только что совершила свой первый платеж на пустой адрес BIP47, принадлежащий Бобу. Теперь давайте посмотрим, как Боб получает этот платеж. Мы также увидим, почему у Алисы нет доступа к закрытому ключу адреса, который она сама сгенерировала, и как Бобу найти этот ключ, чтобы потратить только что полученные биткоины.

Как только Боб получает от Алисы транзакцию с уведомлением, он получает открытый ключ BIP47 K0 еще до того, как его корреспондент отправил платеж. Поэтому он наблюдает за любым платежом на связанный с ним адрес. Фактически, он сразу же выводит несколько адресов, которые он наблюдает (K0, K1, K2, K3...). Вот как он выводит этот открытый ключ K0 :

b

A = a \cdot G

S = b \cdot A

s = \text{SHA256}(Sx)

K0 = B + s \cdot G

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

k0 = b + s

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

K0 = k0 \cdot G

Я обобщу только что рассмотренные нами шаги по получению платежа BIP47 и вычислению соответствующего закрытого ключа:

BTC204

Поскольку Алиса не может получить b (закрытый ключ Боба), она не может определить k0 (закрытый ключ, связанный с адресом приема BIP47 Боба). Схематично вычисление общего секрета S можно представить следующим образом:

BTC204

После того как общий секрет найден с помощью ECDH, Алиса и Боб вычисляют открытый ключ K0 для платежа BIP47, а Боб также вычисляет соответствующий закрытый ключ k0:

BTC204

Возврат платежа за BIP47

Поскольку Боб знает код многоразового платежа Алисы, у него уже есть вся информация, необходимая для отправки ей возмещения. Ему не нужно будет снова связываться с Алисой, чтобы запросить какую-либо информацию. Он просто должен уведомить ее с помощью транзакции уведомления, чтобы она могла получить свои адреса BIP47 со своим семенем, а затем он также может отправить ей до 2^32 платежей.

Функция возврата средств характерна только для BIP47 и является одним из его преимуществ перед другими методами, такими как Silent Payments, которые мы рассмотрим в последующих главах.

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

BTC204

*Большое спасибо [Фанису Михалакису] (https://x.com/FanisMichalakis) за вычитку и экспертные советы по статье, которая вдохновила на написание этой главы!

https://planb.network/tutorials/privacy/on-chain/paynym-bip47-a492a70b-50eb-4f95-a766-bae2c5535093

Безмолвные платежи

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

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

Для ситуаций, когда пользователь планирует совершить лишь несколько платежей на статический идентификатор, были разработаны другие решения. К ним относится протокол Silent Payments, описанный в BIP352. Этот протокол позволяет использовать статический идентификатор для получения платежей без повторного использования адресов и без необходимости использования транзакций с уведомлениями. Давайте рассмотрим, как работает этот протокол.


Чтобы полностью понять эту главу, необходимо освоить принципы работы ECDH (Elliptic Curve Diffie-Hellman) и деривации криптографических ключей в HD-кошельке. Эти понятия были подробно рассмотрены в предыдущей главе о BIP47. Я не буду повторять их здесь. Если вы еще не знакомы с этими понятиями, я рекомендую вам обратиться к предыдущей главе, прежде чем продолжать работу над этой. Я не буду повторять риски, связанные с повторным использованием адресов приема, а также важность наличия уникального идентификатора для приема платежей. Я просто упомяну несколько моментов, которые я хотел бы здесь отметить


Почему бы не перенести уведомление?

Как уже говорилось в главе BIP47, транзакция уведомления выполняет две основные функции:

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

Все эти ограничения делают использование уведомления на цепочке необходимым для BIP47. Однако Silent Payments стремится избежать этого шага уведомления на цепочке именно из-за его стоимости. Поэтому принятое решение заключается не в переносе уведомления, а в его полном исключении. Для этого необходимо принять компромиссный вариант: сканирование. В отличие от BIP47, где пользователь точно знает, где найти свои средства благодаря транзакциям с уведомлениями, в Silent Payments пользователь должен изучить все существующие транзакции биткоина, чтобы обнаружить предназначенные для него платежи. Чтобы снизить эту операционную нагрузку, поиск Silent Payments ограничивается только транзакциями, которые могут содержать такие платежи, т. е. теми, в которых есть хотя бы один выход Taproot P2TR. Кроме того, проверка фокусируется исключительно на транзакциях, начиная с даты создания кошелька (нет необходимости проверять транзакции, датированные 2009 годом, если кошелек был создан в 2024 году).

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

Давайте рассмотрим техническую работу Silent Payments, чтобы лучше понять, о чем идет речь. Для этого я предлагаю использовать тот же подход, что и в пояснительном документе BIP352. Мы постепенно, элемент за элементом, разложим на составляющие расчеты, обосновывая каждое новое дополнение.

Несколько понятий для понимания

Прежде чем приступить к работе, важно отметить, что Silent Payments опирается исключительно на использование типов скриптов P2TR (Pay to Taproot). В отличие от BIP47, здесь нет необходимости извлекать адреса получателей из дочерних открытых ключей путем хеширования. В стандарте P2TR подстроенный открытый ключ используется в адресе напрямую и без шифрования. Таким образом, адрес приема Taproot - это, по сути, открытый ключ с некоторыми метаданными. Этот подправленный открытый ключ представляет собой совокупность двух других открытых ключей: один позволяет осуществлять прямые традиционные траты с помощью простой подписи, а другой представляет собой корень Меркла MAST, который разрешает траты при условии выполнения одного из условий, потенциально вписанных в дерево Меркла.

BTC204

Решение ограничить Silent Payments исключительно Taproot объясняется двумя основными причинами:

Наивная деривация открытого ключа Silent Payments

Давайте начнем с простого примера, чтобы понять суть работы SP (Silent Payments). Возьмем Алису и Боба, двух пользователей Биткойна. Алиса хочет отправить Биткойны Бобу на пустой адрес получения. У этого процесса есть три цели:

У Алисы есть UTXO в защищенном кошельке Bitcoin со следующей парой ключей:

У Боба есть адрес SP, который он опубликовал в Интернете с помощью :

Получив адрес Боба, Алиса может вычислить новый пустой адрес, принадлежащий Бобу, используя ECDH. Назовем этот адрес P :

P = B + \text{hash}(a \cdot B) \cdot G

В этом уравнении Алиса просто вычислила скалярное произведение своего закрытого ключа a и открытого ключа Боба B. Этот результат она передала в хэш-функцию, известную всем. Затем полученное значение скалярно умножается на порождающую точку G эллиптической кривой `secp256k1'. Наконец, Алиса добавляет полученную точку к открытому ключу Боба B. Получив адрес P, Алиса использует его в качестве выхода в транзакции, то есть отправляет на него биткоины.

В контексте Silent Payments функция "хэш" соответствует хэш-функции SHA256, специально помеченной BIP0352/SharedSecret, которая гарантирует, что генерируемые хэши уникальны для данного протокола и не могут быть повторно использованы в других контекстах, а также обеспечивает дополнительную защиту от повторного использования несов в подписях. Этот стандарт соответствует стандарту указанному в BIP340 для подписей Шнорра на ecp256k1. Благодаря свойствам эллиптической кривой, на которой основан ECDH, мы знаем, что :

a \cdot B = b \cdot A

Таким образом, Боб сможет вычислить адрес получателя, на который Алиса отправила биткойны. Для этого он отслеживает все транзакции биткойнов, которые соответствуют критериям Silent Payments, и применяет к каждой из них следующее вычисление, чтобы узнать, адресован ли платеж ему (сканирование):

P' = B + \text{hash}(b \cdot A) \cdot G

Когда он сканирует транзакцию Алисы, он понимает, что P' равна P. Поэтому он знает, что платеж адресован ей:

P' = B + \text{hash}(b \cdot A) \cdot G = B + \text{hash}(a \cdot B) \cdot G = P

Отсюда Боб сможет вычислить закрытый ключ p, который позволит потратить адрес P:

p = (b + \text{hash}(b \cdot A)) \bmod n

Как видите, чтобы вычислить этот закрытый ключ p, необходимо иметь закрытый ключ b. Этот закрытый ключ b есть только у Боба. Поэтому только он сможет потратить биткоины, отправленные на его адрес Silent Payments.

BTC204

Легенда:

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

Как создать несколько выходов?

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

Для этого мы немного изменим вычисления, которые Алиса выполняет для получения P, чтобы она могла сгенерировать два разных адреса для Боба, а именно P_0 и P_1.

Чтобы изменить вычисления и получить два разных адреса, просто добавьте целое число, которое изменит результат. Так, Алиса добавит к вычислениям 0, чтобы получить адрес P_0, и 1, чтобы получить адрес P_1. Назовем это целое число i :

P_i = B + \text{hash}(a \cdot B \text{ ‖ } i) \cdot G

Процесс вычисления остается неизменным по сравнению с предыдущим методом, за исключением того, что на этот раз Алиса конкатенирует a \cdot B с i, прежде чем приступить к хэшированию. Затем вы просто изменяете i, чтобы получить новый адрес, принадлежащий Бобу. Например:

P_0 = B + \text{hash}(a \cdot B \text{ ‖ } 0) \cdot G

P_1 = B + \text{hash}(a \cdot B \text{ ‖ } 1) \cdot G

Когда Боб сканирует блокчейн в поисках предназначенных ему Безмолвных платежей, он начинает с использования i = 0 для адреса P_0. Если он не находит никаких платежей по адресу P_0, он делает вывод, что эта транзакция не содержит предназначенных для него молчаливых платежей, и прекращает сканирование. Однако если P_0 действительна и содержит платеж для него, он продолжает работу с P_1 в той же транзакции, чтобы проверить, совершила ли Алиса второй платеж. Если P_1 окажется недействительным, он прекращает поиск этой транзакции; в противном случае он продолжает проверку последовательных значений i:

P_0 = B + \text{hash}(b \cdot A \text{ ‖ } 0) \cdot G

P_1 = B + \text{hash}(b \cdot A \text{ ‖ } 1) \cdot G

Поскольку Боб немедленно останавливается на i = 0, если P_0 не работает, использование этого целого числа практически не добавляет Бобу дополнительной операционной нагрузки на этапе сканирования транзакций.

Боб может вычислить закрытые ключи тем же способом:

p_0 = (b + \text{hash}(b \cdot A \text{ ‖ } 0)) \bmod n
p_1 = (b + \text{hash}(b \cdot A \text{ ‖ } 1)) \bmod n
BTC204

Легенда:

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

Как избежать повторного использования адресов?

Как мы видели в предыдущих разделах, Алиса использует пару ключей, защищающих ее UTXO, которые она потратит на вычисление общего секрета ECDH с Бобом. Этот секрет позволяет ей получить уникальный адрес P_0. Однако ключевая пара (a, A), используемая Алисой, может защитить несколько UTXO, если она использовала этот адрес несколько раз. Если Алиса совершит два платежа на статический адрес Боба B, используя два UTXO, защищенных одним и тем же ключом A, это приведет к повторному использованию адреса Бобом.

Повторное использование адресов - очень плохая практика с точки зрения конфиденциальности пользователей. Чтобы узнать, почему, я советую вам ознакомиться с первыми частями этого учебного курса. Действительно, поскольку уникальный адрес P_0 получен из A и B, то если Алиса выведет второй адрес для второго платежа на B с тем же ключом A, она окажется на точно таком же адресе P_0. Чтобы избежать этого риска и предотвратить повторное использование адресов в рамках Silent Payments, нам нужно немного изменить наши вычисления.

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

\text{inputHash} = \text{hash}(\text{outpoint} \text{ ‖ } A)

И Алиса добавит эту ссылку в исходные данные для вычисления уникального адреса P_0:

P_0 = B + \text{hash}(\text{inputHash} \cdot a \cdot B \text{ ‖ } 0) \cdot G

При сканировании Боб также может добавить \text{inputHash}, поскольку для вывода \text{outpoint} ему достаточно наблюдать за транзакцией:

P_0 = B + \text{hash}(\text{inputHash} \cdot b \cdot A \text{ ‖ } 0) \cdot G

Когда он находит действительный P_0, он может вычислить соответствующий закрытый ключ p_0:

p_0 = (b + \text{hash}(\text{inputHash} \cdot b \cdot A \text{ ‖ } 0)) \bmod n
BTC204

Легенда:

Пока что в наших расчетах предполагается, что Алиса использует один вход для своей транзакции. Однако она должна иметь возможность использовать несколько входов. Следовательно, на стороне Боба для каждой транзакции, включающей несколько входов, он должен теоретически вычислить ECDH для каждого входа, чтобы определить, предназначен ли ему платеж. Этот метод не является удовлетворительным, поэтому нам нужно найти решение, чтобы уменьшить рабочую нагрузку!

Подстройка открытых ключей под входные данные

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

Например, представим, что транзакция Алисы имеет 3 входа, каждый из которых защищен отдельной парой ключей:

BTC204

Следуя описанному ранее методу, Алиса должна выбрать одну пару ключей из a_0, a_1 и a_2, чтобы вычислить секрет ECDH и сгенерировать единственный платежный адрес P из статического адреса Боба B. Однако такой подход требует от Боба последовательной проверки каждой возможности, начиная с a_0, затем a_1 и так далее, пока не будет найдена пара, генерирующая правильный адрес P. Этот процесс требует от Боба запускать вычисление ECDH на всех входах всех транзакций, что значительно увеличивает операционную нагрузку сканирования.

Чтобы избежать этого, мы попросим Алису вычислить P, используя сумму всех входных ключей. Используя наш пример, подстроенный закрытый ключ a будет вычислен следующим образом:

a = a_0 + a_1 + a_2

Таким же образом Алиса и Боб могут вычислить подправленный открытый ключ:

A = A_0 + A_1 + A_2

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

Однако вспомните предыдущий раздел. Мы добавили в вычисления хэш \text{inputHash}, который используется в качестве nonce, чтобы избежать повторного использования адресов:

\text{inputHash} = \text{hash}(\text{outpoint} \text{ ‖ } A)

Но если в транзакции несколько входов, необходимо уметь определять, какая \text{outpoint} будет выбрана в этом расчете. Согласно BIP352, критерием выбора \text{outpoint} является выбор наименьшего лексикографического значения, что означает выбор UTXO, который появляется первым в алфавитном порядке. Этот метод стандартизирует выбор UTXO в каждой транзакции. Например, если лексикографически наименьшим \text{outpoint} является \text{outpoint}_L, то вычисление \text{inputHash} будет :

\text{inputHash} = \text{hash}(\text{outpoint}_L \text{ ‖ } A)

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

Отдельные ключи для расходов и сканирования

Пока что мы называем статический адрес молчаливого платежа B уникальным открытым ключом. Помните, что именно этот открытый ключ B Алиса использует для создания общего секрета ECDH, который, в свою очередь, вычисляет уникальный платежный адрес P. Боб использует этот открытый ключ B и соответствующий закрытый ключ b для этапа сканирования. Но он также будет использовать закрытый ключ b для вычисления закрытого ключа p, который позволяет осуществлять расходы с адреса P.

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

Для этого BIP352 требует, чтобы приемник использовал 2 разные пары ключей:

Таким образом, Боб может хранить закрытый ключ b_{\text{spend}} на аппаратном кошельке и использовать закрытый ключ b_{\text{scan}} в онлайн-программе для поиска своих "тихих платежей", не раскрывая b_{\text{spend}}. С другой стороны, открытые ключи B_{\text{scan}} и B_{\text{spend}} оба открыты, поскольку находятся в статическом адресе Боба B :

B = B_{\text{scan}} \text{ ‖ } B_{\text{spend}}

Чтобы вычислить уникальный платежный адрес P_0, принадлежащий Бобу, Алиса выполнит следующее вычисление:

P_0 = B_{\text{spend}} + \text{hash}(\text{inputHash} \cdot a \cdot B_{\text{scan}} \text{ ‖ } 0) \cdot G

Чтобы найти платежи, адресованные ему, Боб выполнит следующий расчет:

P_0 = B_{\text{spend}} + \text{hash}(\text{inputHash} \cdot b_{\text{scan}} \cdot A \text{ ‖ } 0) \cdot G

Как видите, до сих пор Бобу не приходилось использовать b_{\text{spend}}, который находится на его аппаратном кошельке. Когда он захочет потратить P_0, он может выполнить следующее вычисление, чтобы найти закрытый ключ p_0 :

p_0 = (b_{\text{spend}} + \text{hash}(\text{inputHash} \cdot b_{\text{scan}} \cdot A \text{ ‖ } 0)) \bmod n

BTC204

Легенда:

Использование SP-адресов с этикеткой

Поэтому у Боба есть статический адрес B для молчаливых платежей, таких как :

B = B_{\text{scan}} \text{ ‖ } B_{\text{spend}}

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

Для решения этой проблемы в BIP352 используется система меток, которая позволяет использовать различные статические адреса, не увеличивая необоснованно объем работы по поиску Silent Payments в блокчейне. Для этого мы добавляем целое число m в открытый ключ расходов B_{\text{spend}}. Это целое число может принимать значение 1 для первого статического адреса, затем 2 для второго и так далее. Ключи расходов B_{\text{spend}} теперь будут называться B_m и будут строиться таким образом:

B_m = B_{\text{spend}} + \text{hash}(b_{\text{scan}} \text{ ‖ } m)\cdot G

Например, для первого ключа расходов с меткой 1 :

B_1 = B_{\text{spend}} + \text{hash}(b_{\text{scan}} \text{ ‖ } 1)\cdot G

Теперь статический адрес, опубликованный Бобом, будет состоять из B_{\text{scan}} и B_m. Например, первым статическим адресом с меткой 1 будет :

B = B_{\text{scan}} \text{ ‖ } B_1

Мы начинаем только с метки 1, потому что метка 0 зарезервирована для изменения. Алиса, со своей стороны, выведет единый платежный адрес P тем же способом, что и раньше, но используя новый B_1 вместо B_{\text{spend}}:

P_0 = B_1 + \text{hash}(\text{inputHash} \cdot a \cdot B_{\text{scan}} \text{ ‖ } 0) \cdot G

В действительности Алиса даже не обязательно знает, что у Боба есть адрес с меткой, поскольку она просто использует вторую часть статического адреса, который он предоставил, и в данном случае это значение B_1, а не B_{text{spend}}.

Для сканирования платежей Боб всегда будет использовать значение своего начального статического адреса с B_{\text{spend}} таким образом:

P_0 = B_{\text{spend}} + \text{hash}(\text{inputHash} \cdot b_{\text{scan}} \cdot A \text{ ‖ } 0) \cdot G

Затем он просто вычитает найденное им значение P_0 из каждого вывода по очереди. Затем он проверяет, совпадает ли один из результатов этих вычитаний со значением одной из меток, которые он использует в своем портфеле. Если, например, выход № 4 соответствует метке 1, это означает, что данный выход является Silent Payment, связанным с его статически помеченным адресом B_1:

Out_4 - P_0 = \text{hash}(b_{\text{scan}} \text{ ‖ } 1) \cdot G

Это работает, потому что :

B_1 = B_{\text{spend}} + \text{hash}(b_{\text{scan}} \text{ ‖ } 1)\cdot G

Благодаря этому методу Боб может использовать множество статических адресов (B_1, B_2, B_3...), каждый из которых является производным от его основного статического адреса (B = B_{\text{scan}} \text{ ‖ } B_{\text{spend}}), чтобы сохранить раздельное использование.

Однако обратите внимание, что такое разделение статических адресов справедливо только с точки зрения управления личным портфолио, но не разделяет личности. Поскольку все они имеют один и тот же B_{\text{scan}}, очень легко связать все статические адреса вместе и сделать вывод, что они принадлежат одному субъекту.

BTC204

Легенда:

Как создать адрес Silent Payments?

Чтобы создать адрес, предназначенный для Silent Payments, вам сначала нужно получить 2 пары ключей из вашего кошелька Bitcoin HD:

Эти пары выводятся с помощью следующих путей (Bitcoin Mainnet):

scan : m / 352' / 0' / 0' / 1' / 0
spend : m / 352' / 0' / 0' / 0' / 0

Когда у нас есть эти 2 пары ключей, мы просто соединяем их (из конца в конец), чтобы создать полезную нагрузку статического адреса:

B = B_{\text{scan}} \text{ ‖ } B_{\text{spend}}

Если мы хотим использовать метки, то заменим B_{\text{spend}} на B_m:

B = B_{\text{scan}} \text{ ‖ } B_m

С меткой m :

B_m = B_{\text{spend}} + \text{hash}(b_{\text{scan}} \text{ ‖ } m)\cdot G

Как только мы получили эту полезную нагрузку, мы добавляем HRP (Human-Readable Part) sp и версию q (= версия 0). Мы также добавляем контрольную сумму и форматируем адрес как bech32m.

Например, вот мой статический адрес Silent Payments:

sp1qqvhjvsq2vz8zwrw372vuzle7472zup2ql3pz64yn5cpkw5ngv2n6jq4nl8cgm6zmu48yk3eq33ryc7aam6jrvrg0d0uuyzecfhx2wgsumcurv77e

Важный момент, касающийся статических адресов, который вы, возможно, поняли из предыдущих разделов, заключается в том, что эти адреса не видны в транзакциях Биткойна. Только платежные адреса P, используемые при выводах, появляются в блокчейне в стандартном формате Taproot. Таким образом, со стороны невозможно отличить транзакцию с использованием Silent Payment от обычной транзакции с использованием P2TR-выводов.

Как и в случае с BIP47, невозможно установить связь между статическим адресом B и платежным адресом P, полученным из B. Действительно, даже если Ева, потенциальный злоумышленник, попытается просканировать блокчейн со статическим адресом Боба B, она не сможет выполнить вычисления, необходимые для определения P. Для этого ей понадобится либо закрытый ключ Боба b_{\text{scan}}, либо закрытые ключи отправителя a, но оба они, разумеется, являются закрытыми. Таким образом, можно явно связать статический адрес с формой личной идентификации.

Как использовать Silent Payments?

Предложение Silent Payments появилось относительно недавно и на данный момент реализовано лишь очень ограниченным числом кошельков. Насколько мне известно, их поддерживают только 3 программных продукта:

Скоро мы расскажем вам подробное руководство по настройке собственного статического адреса Silent Payments.

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

Для создания этой главы о "тихих платежах" я использовал [сайт с пояснениями по "тихим платежам"] (https://silentpayments.xyz/) и [документ с пояснениями по BIP352] (https://github.com/bitcoin/bips/blob/master/bip-0352.mediawiki)

Заключительный раздел

Отзывы и рейтинги

true

Итоговый экзамен

true

Заключение

true