Приватность в сети Биткоин

Перевод статьи, опубликованной на сайте Bitcoin Wiki, подготовлен биткоинером Tony ₿.


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

По состоянию на 2019 год большинство биткоин-энтузиастов считали, что он с легкостью отслеживается; это заявление некорректно. Где-то в 2011 году большинство энтузиастов считали, что Биткоин абсолютно приватен, что также не соответствует реальности. Есть определенные нюансы — в определенных ситуациях Биткоин все же может быть приватным. Но это непросто понять, и от вас потребуется как время, так и целеустремленность.

Эта статья была написана в феврале 2019 года.

Хороший способ прочитать статью — это обратиться к примерам, а затем вернуться к основным понятиям.

1 Краткая информация

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

  • Подумайте о том, от чего вы скрываетесь, какова ваша модель угрозы и кем является ваш недоброжелатель. Обратите внимание, что существуют компании, отслеживающие транзакции, которые осуществляют крупномасштабное наблюдение за экосистемой Биткоина.
  • Не используйте адреса повторно. Адреса должны быть показаны одному из субъектов с целью получения средств. После того, как средства оказались на адресе, использовать в его качестве адреса получателя не стоит больше никогда.
  • Старайтесь раскрывать как можно меньше информации о себе при совершении сделок, например, избегайте проверок AML/KYC и будьте осторожны при предоставлении реального почтового адреса.
  • Используйте кошелек, подкрепленный вашей собственной полной нодой или фильтром со стороны клиента и определенно не веб-кошелек.
  • Передавайте ончейн транзакции через Tor. Если ваш кошелек его не поддерживает, то скопируйте и вставьте транзакцию в гекс коде  в форму веб-трансляции через браузер Tor.
  • Как можно чаще используйте сеть лайтнинг.
  • Если сеть лайтнинг недоступна, используйте кошелек, который должным образом реализует CoinJoin.
  • Старайтесь избегать создания адресов для получения сдачи, например, при финансировании канала лайтнинг, стремитесь отправлять на канал весть UTXO целиком, не требуя сдачи (предполагая, что сумма не слишком велика).
  • Если, так называемая, цифровая криминалистика вызывает беспокойство, используйте такое решение, как операционная система Tails Operating System.

2 Введение

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

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

Транзакции в сети Биткоин являются крайне публичными

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

2.1 Пример - Злоумышленник контролирует источник и пункт назначения монет

Выяснив принадлежность одного адреса, можно произвести атаку на транзакции

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

  • Сделка с монетами с адреса А на адрес Б. Авторизована <подпись адреса А>.
  • Транзакция монет с адресу Б на адрес С. Авторизована <подпись адреса Б>.

Скажем, что злоумышленнику известно, что на банковский счет мистера Доу была выслана государственная валюта, которая была использована для покупки монет, которые затем были переведены на адрес Б. Противник также знает, что на сайт ловушки поступили монеты, отправленные с адреса Б на адрес С. В совокупности это в большинстве случаев свидетельствует о том, что адрес Б принадлежит господину Доу, и что он отправил деньги на сайт ловушки. Это предположение не всегда верно, потому что адрес Б мог быть адресом, принадлежащим третьему лицу от имени г-на Доу, и сделка с C могла быть несвязанной, или в эти сделки может быть вовлечен смарт-контракт (см. "Офчейн-транзакции"), который фактически “телепортирует” монеты вне цепочки по совершенно другому адресу где-то на блокчейне.

2.2 Пример — покупка китайских газет (потеря анонимности)

В этом примере злоумышленник контролирует пункт назначения и находит источник путем анализа метаданных.

  1. Вы живете в Китае и хотите купить онлайн-газету за биткоины.
  2. Вы регистрируетесь на Биткоин-форуме и используете свой биткоин-адрес в качестве подписи. Так как вы оказались полезным сообществу, через несколько месяцев вы получаете скромную сумму в качестве доната.
  3. К сожалению, ваш выбор продавца при покупке газеты оказывается неудачным и вы покупаете ее у правительственного агента!
  4. Правительственный агент анализирует сделку по покупке газеты в блокчейне и шерстит интернет на предмет каждого соответствующего сделке адреса. Он находит ваш адрес в вашей подписи на Биткоин-форуме. Вы оставили достаточно личной информации в своих сообщениях, чтобы быть идентифицированным, поэтому теперь правительство запланировало ваше "переобучение".
  5. Основная причина, приведшая к данному исходу — это повторное использование адреса. У вашей подписи на форуме был один биткоин-адрес, который никогда не менялся, и поэтому её легко было найти с помощью поиска в интернете.

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

2.3 Пример — абсолютно приватное пожертвование

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

  1. Цель заключается в том, чтобы сделать пожертвование организации, которая принимает биткоины.
  2. Вы используете кошелек Bitcoin Core полностью через Tor.
  3. Загрузите несколько дополнительных сотен гигабайт данных через Tor, чтобы общий объем загруженных файлов не соответствовал размеру блокчейна.
  4. Самостоятельно добудьте Биткоин-блок и отправьте только что добытые монеты на свой кошелек.
  5. Отправьте весь остаток на адрес для пожертвований этой организации.
  6. В итоге уничтожьте использованное компьютерное оборудование.
    Так как ваш кошелек подключен к полной ноде и функционирует исключительно через Tor, ваш IP-адрес очень хорошо скрыт. Tor также скрывает тот факт, что вы вообще пользуетесь биткоином. Так как монеты были получены посредством майнинга, они никак не связаны ни с какой другой информацией о вас. Так как сделка является пожертвованием, нет никаких товаров или услуг, отправляемых вам, так что вам не придется раскрывать собственный почтовый адрес. Так как весь остаток отправлен, нет обратного адреса, который мог бы впоследствии послужить источником какой-либо информации. Так как аппаратное обеспечение уничтожено, на жестких дисках не осталось ни одной записи, которая могла бы быть найдена позже. Единственный способ атаки на эту схему — быть наблюдателем глобального уровня, который может воспользоваться известной уязвимостью сети Tor.

2.4 Многочисленные интерпретации блокчейн-транзакции

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

Рассмотрим следующий пример транзакции:

1 btc ----> 1 btc

3 btc ----> 3 btc

Эта операция имеет два входа, стоимостью в 1 btc и 3 btc, и создает два выхода также стоимостью в 1 btc и 3 btc.

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

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

  1. Элис предоставляет оба входа и платит Бобу 3 btc. Элис принадлежит вывод 1 btc (т.е. это вывод со сдачей).
  2. Элис предоставляет оба входа и платит Бобу 1 btc, при этом 3 btc возвращаются Элис в качестве сдачи.
  3. Элис предоставляет вход, равный 1 btc, а Боб — 3 btc, Элис получает выход в 1 btc и Боб получает 3 btc. Это своего рода операция CoinJoin.
  4. Элис платит Бобу 2 btc. Элис вводит 3 btc, получает 1 btc в качестве сдачи, Боб вводит 1 btc и получает 3 btc. Это разновидность транзакции PayJoin.
  5. Элис платит Бобу 4 btc (но по какой-то причине использует два выхода).
  6. Фальшивая сделка - Элис владеет всеми входами и выходами и просто перемещает монеты между своими адресами.
  7. Элис платит Бобу 3 btc и Кэрол 1 btc. Это сгруппированная транзакция, избегающая сдачу (остаток).
  8. Элис платит 3 btc, Боб платит 1 btc; Кэрол получает 3 btc и Дэвид получает 1 btc. Это разновидность транзакции, комбинирующая процесс CoinJoin со сгруппированной транзакцией, избегающей сдачу (остаток).
  9. Элис и Боб платят Кэрол 4 btc (но с помощью двух выходов).

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

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

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

2.5 Модель угрозы

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

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

Подробней об этом в докладе "Opsec for Hackers for grugq". Эссе в основном ориентировано на политических активистов, для которых приватность является необходимостью, но большинство советов применимы к каждому из нас.

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

2.6 Метод слияния данных

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

в совокупности могут нанести гораздо больший ущерб приватности

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

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

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

2.7 Почему приватность

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

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

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

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

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

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

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

3 Блокчейн атаки на приватность

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


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

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

Адреса представляют собой криптографическую информацию, в основном случайные числа. Сами по себе они мало что говорят о реальном владельце биткоинов. Обычно злоумышленник пытается связать несколько адресов, которые, по его мнению, принадлежат одному кошельку. Такие коллекции адресов называются “кластерами”, а деятельность по их созданию называется “кластеризацией кошельков”. Как только злоумышленник получил доступ к кластерам, он может попытаться связать реальные личности с субъектами, за которыми он хочет следить. Например, он может найти кластер кошелька A, принадлежащий Элис, и кластер кошелька Б, принадлежащий Бобу. Если видно, что транзакция в биткоинах отправлена с кластера A на кластер Б, то злоумышленник будет знать, что Элис отправила монеты Бобу.

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

3.1 Эвристика мульти-ввода

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


Например, рассмотрим следующую транзакцию с входами A, B и C; и выводами X и Y.


A (1 btc) --> X (4 btc)

B (2 btc)       Y (2 btc)

C (3 btc)


Эта транзакция указывает на то, что адреса B и C принадлежат тому же лицу, которому принадлежит адрес A.


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

3.2 Обнаружение адреса-получателя сдачи

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

Адреса, хранящие сдачу привели к появлению распространенной модели, называемой пилингом цепочки. Пилинг цепочки заметен в случае с крупными транзакциями с бирж, торговых площадок, майнинговых пулов и выплат заработных плат. В пилинг-цепочке один адрес изначально обладает относительно большим количеством биткоинов. Затем небольшая сумма “отслаивается” от этой большей суммы, создавая транзакцию, в которой небольшая сумма переносится на один адрес, а оставшаяся часть переносится на одноразовый адрес сдачи. Этот процесс повторяется — потенциально в течение сотен или тысяч прыжков — до тех пор, пока большая сумма не будет достаточно мала, и в этот момент (за одно использование) этот адрес объединяется с другими подобными адресами и они снова образуют большое количество биткоинов; процесс пилинга начинается снова.

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

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

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

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

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

Кроме того, большинство повторно используемых адресов выложены на форумах, в социальных сетях, таких как Facebook, Reddit, Stackoverflow ... и т. д. Данные адреса вы можете найти на сайте https://checkbitcoinaddress.com/. Это чем-то похоже на деанонимизацию псевдонимного блокчейна.

3.2.2 Анализ отпечатков кошелька

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

В качестве примера рассмотрим пять типичных транзакций, каждая из которых потребляет по одному входу и производит два выхода. A, B, C, D, E относятся к соответствующим адресам выходов A1, A2 ... этих транзакций.


-> C1

A1 -> B2 -> C2

-> B2 -> D1

-> D2 -> E1

-> E2

Если при снятии отпечатков кошелька обнаруживается, что транзакции A, B, D и E созданы одним и тем же ПО кошелька, а другие транзакции созданы другим, то адреса сдачи становятся очевидными. Для наглядности те же транзакции с несовпадающими адресами, заменены на X и показаны ниже. В данном случае виден пилинг цепи и становится очевидно, что B2, D2, E1 — это адреса сдачи, относящиеся к тому же кошельку, что и адрес A1.

-> Х

A1 -> X   -> X

-> B2 -> X

-> D2 -> E1

-> Х

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

  • Форматы адресов. Кошельки обычно используют только один тип адреса. Если у транзакции все входы и один выход одного и того же типа адреса (например, p2pkh), а остальные выходные данные другого типа (p2sh), то разумным предположением является то, что выходные данные в том же формате адреса (p2pkh) являются сдачей, а выход в другом формате адреса (p2sh) — это платеж, принадлежащий кому-то другому.
  • Типы скриптов. Каждый кошелек обычно использует только один скрипт. Например, отправляющим кошельком может быть кошелек P2SH с мультиподписью (мультисиг) 2-из-3; допустим, этот кошелек инициирует транзакцию с двумя выходами: один — на мультисиг адрес 2-из-3 и другой — на мультисиг адрес 2-из-2. Другой вид скрипта является убедительным признаком того, что одни выходные данные являются платежом, а другие выходные данные — сдачей.
  • BIP69. Лексикографическое индексирование входов и выходов транзакций. Этот BIP (предложение по улучшению Биткоина) описывает стандартный способ для кошельков упорядочить свои входы и выходы с целью повышения конфиденциальности. В настоящее время в экосистеме кошельков есть те, которые соответствуют стандарту и те, которые не реализуют его, что облегчает снятие отпечатков кошелька. Обратите внимание, что обычная транзакция “один вход-два выхода” будет случайным образом следовать стандарту BIP69 в 50% случаев.
  • Количество входов и выходов. Разные пользователи часто выстраивают свои транзакции по-разному. Например, люди часто совершают транзакции только с двумя выходами; оплата и сдача, в то время как крупные организации, такие как казино или биржи, используют практики под названием консолидация и пакетирование. Адреса сдачи, как правило, не используются для создания пакетной транзакции. Эту эвристику также называют “эвристикой потребителя”.
  • Поля в транзакциях. Значения в формате транзакции, которые могут различаться в зависимости от программного обеспечения кошелька: nLockTime — это поле в транзакции, устанавливаемое некоторыми кошельками, чтобы сделать “охоту на высокие комиссии” (fee-sniping) менее прибыльной. Некоторые кошельки в экосистеме реализуют эту функцию, а некоторые нет. nLockTime также может использоваться в некоторых протоколах конфиденциальности, таких как CoinSwap. nSequence также является одним из примеров.
  • Low-R signatures (подписи с низким значением R). Формат DER, используемый для кодирования Биткоин-подписей, требует добавления дополнительного байта к подписи, чтобы указать, когда R значение подписи находится в верхней половине эллиптической кривой, используемой для Биткоина. Значение R определяется случайным образом, поэтому половина всех подписей имеет этот дополнительный байт. По состоянию на июль 2018 года Bitcoin Core генерирует только подписи с низким значением R, которые не требуют этого дополнительного байта. Таким образом, транзакции Bitcoin Core экономят (в среднем) один байт на каждые две подписи. По состоянию на 2019 год ни один другой кошелек не делает этого, поэтому подпись с высоким значением R является свидетельством того, что Bitcoin Core не используется.
  • Несжатые и сжатые публичные ключи. ПО ранних кошельков использует несжатые приватные ключи. Смесь сжатых и несжатых ключей может быть использована для снятия отпечатков кошелька.
  • Комиссия майнеров. ПО различных кошельков может по-разному реагировать на нехватку пространства в блоке, что может привести к разнице в выплатах комиссии майнерам. Это также может использоваться для снятия отпечатков кошелька.
  • Выбор монет. Некоторые ПО кошельков при помощи различных алгоритмов могут выбирать, какие UTXO тратить, это также может быть использовано для снятия отпечатков кошелька.

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

3.2.3 Круглые числа

Многие суммы платежей являются круглыми числами, например, 1 BTC или 0,1 BTC. В этом случае сдача не будет круглым числом (например, 1.78213974 BTC). Это потенциально способствует поиску адреса сдачи. Сумма также может быть круглым числом в другой валюте. Сумма 0.0146173 BTC не является круглой в биткоинах, но при конвертации в доллары США она приблизительно равна 100 долларам.

3.2.4 Изменение комиссии

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

Иногда это можно завуалироать за счет сокращения обоих выходных данных или уменьшения суммы платежа вместо сдачи, при использовании модели “отправитель платит за комиссию” (sender-pays-for-fee).

3.2.5 Эвристика лишних входных данных

Данная разновидность эвристики также называется “эвристика оптимальной сдачи”. Рассмотрим следующую биткоин-транзакцию:

У нее два входа — 2 BTC и 3 BTC и два выхода — 4 BTC и 1 BTC.

2 BTC -> 4 BTC

3 BTC     1 BTC

Учитывая, что один из выходов является сдачей, а другой — платежом, можно предположить две интерпретации: платежом является либо выход 4 BTC, либо выход в 1 BTC. Но если выход 1 BTC является суммой платежа, то вход 3 BTC не требуется, поскольку кошельку достаточно было бы потратить только вход 2 BTC и заплатить за это майнеру более низкую комиссию. Это указывает на то, что реальный выходной платеж равен 4 BTC, а 1 BTC — выход сдачи.

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

2 BTC -> 4 BTC

3 BTC     6 BTC

5 BTC

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

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

3.2.6 Отправка на другой тип скрипта

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

Например, для транзакции с 1 входом, тратящей монету p2pkh и создающей 2 выхода, один из которых — p2pkh, а второй — p2sh, вероятно, что выход p2pkh — это сдача, а p2sh — это платеж.

Это также возможно, если входные данные имеют смешанные типы (созданные кошельками, поддерживающими несколько типов скриптов с целью обратной совместимости). Если известно, что один из типов выходных скриптов используется кошельком (поскольку один и тот же тип скрипта расходуется хотя бы одним из входных данных), а другой — нет, соответственно, второй из них, вероятно, будет платежом.
Это оказывает наибольшее влияние на первых пользователей новых технологий кошелька, таких как p2sh или segwit. Чем реже вы платите людям, использующим тот же тип скрипта, что и вы, тем больше данных о собственных выходах сдачи вы обнароудуете. Но со временем данная ситуация улучшается, поскольку новая технология получает более широкое распространение.

3.2.7 Баги кошелька

Некоторые ПО обращаются со сдачей крайне безответственно (ставя под угрзу приватность). Например, некоторые старые кошельки всегда помещают выход сдачи в конец транзакции. Старая версия Bitcoin Core добавляла входные UTXO к транзакции до тех пор, пока сумма сдачи не составляла около 0,1 BTC, поэтому сдача всегда составляла чуть более 0,1 BTC. Обратите внимание на используемое ПО.

3.2.8 CoinJoin транзакции с идентичными выходами (Equal-output-CoinJoin)

Транзакции Equal-output-CoinJoin раскрывают адрес сдачи, потому что выходы сдачи не равны между собой. Например, рассмотрим этот Equal-output-coinjoin:

A (1 BTC)

X (5 BTC) --->   B (1 BTC)

Y (3 BTC)         C (4 BTC)

D (2 BTC)

Можно с уверенностью заявить, что выход D является сдачей и принадлежит владельцу входа Y, тогда как выход C является сдачей и принадлежит входу X. Но, при этом, CoinJoin нарушает эвристику мульти-ввода и эффективно скрывает владение выходами оплаты (A и B), поэтому компромиссы все еще в значительной степени в пользу использования CoinJoin.

3.2.9 Рост размера кластера

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

3.3 Эвристика графа транзакций

Как описано во введении, адреса связаны между собой транзакциями, отражаемыми на блокчейне. Математическая концепция графа может быть использована для описания структуры, в которой адреса связаны с транзакциями. В этом графе транзакций адреса являются вершинами, а транзакции — ребрами.
Это называется эвристикой, поскольку транзакции в цепочке блоков не обязательно соответствуют реальным экономическим транзакциям. Например, транзакция может представлять кого-то, кто отправляет биткоины самому себе. Кроме того, реальные экономические транзакции могут не появляться в цепочке блоков, а быть вне цепочки: через кастодиальное учреждение, такое как биржа, или через некастодиальный перевод вне цепочки, например, с использованием Lightning Network.

3.3.1 Taint-анализ (анализ запятнанных монет)

Taint-анализ — это метод, который иногда используется для изучения потока биткоинов и получения приватной информации. Если с адресом A связана какая-либо приватная информация (такая как ваше имя), и с него совершается транзакция, отправляющая монеты на адрес B, то говорят, что адрес B “запятнан” монетами с адреса A. Таким образом, taint распространяется посредством транзакций. Неясно насколько taint-анализ полезен для шпионажа, ведь он не учитывает передачу права собственности. Например, владелец запятнанных монет может пожертвовать их часть на какую-либо благотворительность, пожертвованные монеты могут считаться запятнанными, но благотворительной организации это неважно и она не может предоставить никакой информации об источнике этих монет. Taint-анализ может быть полезен только для распутывания схем, при которых кто-то пытается скрыть происхождение монет, многократно отправляя десятки поддельных транзакций самому себе.

3.4 Сумма

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

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

3.4.1 Значения входных данных, раскрывающие средства на балансе отправителя

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

По аналогии с бумажными деньгами, если вы платите за напиток стоимостью 5 долларов купюрой в 100 долларов, бармен знает, что ваш баланс составляет не менее 95 долларов США. Баланс, конечно может превышать сумму сдачи, но никак не может быть ниже.

3.4.2 Отправка всех средств с адреса (без сдачи)

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

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

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

3.5 Пакетирование

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

Компромиссом в данной ситуации является то, что получатели могут видеть сумму и адрес друг друга.

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

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

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

3.6 Необычные скрипты

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

С 2019 года мультиподпись 2-из-3 на является наиболее распространенным скриптом, не использующим единственную подпись.

3.7 Оплата тайного покупателя

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

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

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

Эту атаку иногда ошибочно называют атакой dust (пыль).

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

3.9 Соотношение сумм

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

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

V --> [метод черного ящика] --> V — комиссия


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

Способ противостоять корреляции сумм состоит в разделении отправленных пользователю биткоинов посредством множества транзакций с несколькими выходными суммами (w0, w1, w2), составляющими в совокупности исходное количество монет минус сборы.

V -> [технология приватности] --> w0

--> w1

--> w2

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

3.10 Временнáя корреляция

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

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