Практическое руководство от OXT об основных концепциях, используемых в блокчейн-анализе, последствиях биткойн-транзакций для конфиденциальности пользователей и о практиках обеспечения конфиденциальности при взаимодействии с Биткойном.
Содержание:
- 1 Содержание
- 2 I. Блокчейн-анализ и конфиденциальность транзакций
- 3 II. Внешние данные транзакций
- 4 III. Методы защиты от блокчейн-анализа
- 4.1 Модель владения UTXO и неопределенность в простых расходных транзакциях
- 4.2 Защита от эвристик идентификации сдачи
- 4.3 Потоки UTXO и детерминированные расходования
- 4.4 Разрыв связей. Недетерминированные транзакции
- 4.5 Энтропия: CoinJoin-транзакции с одинаковыми выходами и когда целесообразно применять эвристику по общему владению входами
- 4.6 CoinJoin: равные выходы (шифрование) в сравнении с PayJoin (стеганография)
- 4.7 Другие способы «сломать» анализ графа транзакций
- 5 IV. Использование концепций блокчейн-анализа для повышения конфиденциальности пользователей
- 5.1 Отправные точки и нарушение псевдонимности
- 5.2 Направления анализа: история UTXO и последующие расходования
- 5.3 Последствия для конфиденциальности при отправке и получении биткойн-транзакций
- 5.4 Практики повышения конфиденциальности транзакций
- 5.4.1 Использование платежных кодов: устранение отправной точки для анализа
- 5.4.2 Контроль монет: сегрегация UTXO
- 5.4.3 Ricochet: увеличение дистанции
- 5.4.4 STONEWALL и STONEWALLx2: безопасные платежи
- 5.4.5 Stowaway: нарушение эвристики по общему владению входами
- 5.4.6 Whirlpool CoinJoin: обеспечение конфиденциальности при дальнейшем расходовании
- 6 Заключение
Содержание
I. Блокчейн-анализ и конфиденциальность транзакций
Осведомленность о ценностном предложении Биткойна как устойчивого к цензуре средства платежей резко возросла в 2011 году после запуска Silk Road и спасения WikiLeaks, лишенного других каналов перечисления пожертвований.
Одновременно с тем распространился и опасный и ошибочный нарратив о конфиденциальности биткойн-транзакций: «анонимные» платежи.
Такое восприятие никогда не было корректным и распространилось в значительной степени из-за непонимания базовой функциональности Биткойна. К тому же в 2011 за его блокчейном практически никто еще всерьез не следил. Однако запись в блокчейне — это запись навсегда.
Сегодня доступ к инструментам для анализа блокчейнов помог правоохранительным органам уже во многих громких расследованиях. Фирмы, специализирующиеся на блокчейн-аналитике, публикуют в своих блогах сообщения о новейших случаях использования биткойна для «криминальных» платежей. На передовицах старых СМИ появляются заголовки об отслеживаемости Биткойна:
Но реальный уровень приватности Биткойна и доступных пользователям способов ее повышения при совершении платежей, лежит где-то посередине между полной анонимностью и абсолютной отслеживаемостью.
Большинство методов отслеживания платежей основаны на эвристических правилах и анализе потока BTC. В отсутствие фундаментальных улучшений конфиденциальности на уровне протокола, эффективность этих методов необходимо подрывать на уровне приложений.
В ранней истории Биткойна для нарушения аналитических эвристик использовали рандомизирование цифровых отпечатков кошельков. Для препятствования анализу финансовых потоков использовались кастодиальные микшеры, с присущим им по определению риском потери средств, передаваемых для микширования третьей стороне. Сегодня CoinJoin и совместные транзакции обеспечивают разумный уровень конфиденциальности исходящих транзакций при более высокой безопасности в сравнении с прежними методами. Однако для автоматизации методов конфиденциальных платежей на уровне приложений еще многое предстоит сделать.
Мы рассматриваем образование как одно из актуальных направлений работы, способных помочь пользователям получить базовый уровень финансовой конфиденциальности перед контрагентами и сторонними наблюдателями, привычный им по традиционной финансовой системе. Такова наша основная мотивация для написания этого руководства, в котором мы рассмотрим следующие темы:
Постановка проблемы: псевдонимный Биткойн
Транзакции в Биткойне псевдонимны, не анонимны. Реальное имя пользователя и его идентификационные данные в протокол не включаются. Это обеспечивает очень базовый уровень конфиденциальности, поскольку транзакции нельзя напрямую соотнести с определенным человеком или организацией.
Однако биткойн-транзакции публично раскрывают сумму, а также адреса отправителя и получателей. Адреса — это псевдонимы, которые представляют активность пользователя сети или, конкретнее, активность закрытого ключа.
Транзакции транслируются в сеть Биткойна и вносятся в единый реестр, блокчейн. Ознакомиться с содержанием блокчейна и любыми записанными в него транзакциями может любой желающий при помощи биткойн-ноды или одного из доступных в интернете блок-эксплореров.
Прозрачность этого публичного реестра обеспечивает беспрецедентную легкость доступа к информации, недостижимую для традиционной финансовой системы.
С помощью доступных в интернете блокчейн-эксплореров, любой человек может просмотреть всю историю транзакций в сети Биткойна, частично или полностью. Можно легко отследить поток биткойнов от транзакции к транзакции. В широком смысле, эти практики и подразумеваются под терминами «отслеживаемость» и «блокчейн-анализ».
Наиболее распространенная форма блокчейн-анализа строится на определении имеющихся в транзакции выходов для сдачи. Процесс строится на ряде эвристических правил, на основе которых можно проследить действия пользователя в ряде транзакций.
Если эта ончейн-активность позволяет установить кластер кошельков, принадлежащих идентифицированному экономическому субъекту, то исследователи получают связку из идентификационных данных пользователя и некоторого фрагмента истории его транзакций.
Отсюда можно выделить две критические проблемы, позволяющие скомпрометировать конфиденциальность пользователей:
- Выходы для «сдачи» можно использовать для отслеживания блокчейн-активности пользователей.
- Пересечение этих действий с идентифицированным субъектом сети связывает наблюдаемую ончейн-активность с реальным субъектом.
Хотя второй пункт является важной составляющей полезности блокчейн-анализа для реального мира, мы в этом руководстве сосредоточимся главным образом на практиках отслеживания ончейн-активности и способах защиты от них.
Эвристики
Эвристиками называют эмпирические правила, используемые для принятия решений в условиях неопределенности. Часто они основаны на практических рациональных подходах. Применение эвристических правил не подразумевает получения 100% надежного результата.
Большая часть традиционного блокчейн-анализа строится на таких правилах. Основные из них связаны с «определением сдачи» в простых расходных транзакциях и кластеризацией отдельных адресов с помощью эвристики по общему владению входами.
По отдельности каждая из этих эвристик может давать неточные результаты и вводить в заблуждение. Но в сочетании с дополнительными закономерностями в транзакциях или с внешними данными, такими как маркированные кластеры кошельков, их эффективность для отслеживания значительно повышается.
Непотраченные выходы транзакций (UTXO)
Биткойн-транзакции — это записи о передаче биткойнов между адресами.
Непотраченные выходы транзакций (UTXO, от Unspent Transaction Output) — это «фрагменты биткойна», используемые для создания новых транзакций.
Структуру транзакций можно разделить на входы и выходы. Создавая транзакцию, пользователь указывает адрес получателя платежа (один или несколько) и сумму платежа (одного или нескольких). Это будут выходы новой транзакции.
Обычно ПО кошелька помогает завершить создание транзакции, алгоритмически добавляя в нее в качестве входов UTXO от предыдущих транзакций.
Нужно ясно понимать разницу между адресом и UTXO. UTXO — это «фрагменты биткойна», выплаченные определенному адресу. Адрес может получать множество UTXO от любого количество других адресов (такая практика называется «повторным использованием адреса» и наносит ущерб конфиденциальности).
Примеры транзакций
Есть несколько распространенных категорий биткойн-транзакций. Эти категории определяются на основе профиля входов и выходов транзакций, а также нашего опыта и маркировки наблюдаемых кластеров. Приведем примеры основных типов транзакций.
Простое расходование
Простое расходование — это один из самых распространенных типов транзакций, составляющий около 50% от общего их числа в последних блоках (источник: transactionfee.info).
Эти типы транзакций говорят о типичном для пользователя поведении при совершении платежей и получении выходов со сдачей.
Признаки:
Полная трата UTXO (sweep)
Sweep-транзакция переводит один UTXO целиком на новый адрес.
Признаки:
Консолидация UTXO
Консолидационные транзакции объединяют несколько UTXO в один. Они редко бывают «настоящими платежами», поскольку обычный платеж, как правило, имеет выход для сдачи.
Признаки:
Пакетное расходование
Пакетные расходные транзакции чаще всего выполняются биржами и включают в себя 1 или несколько входов и множество выходов. Цель при этом — сэкономить на комиссиях майнеров, совершив как можно больше платежей посредством одной транзакции.
Признаки:
Многосторонние транзакции (CoinJoin)
Многосторонние транзакции предполагают сотрудничество между многими пользователями для выполнения одной транзакции с целью повышения конфиденциальности для каждого из ее участников. Такие транзакции легко идентифицировать по равным суммам выходов.
Признаки:
Идентификация сдачи. Интерпретация простых расходных транзакций
В этом разделе мы представим интерпретации простых расходных транзакций (1 вход, 2 выхода). Сконцентрируемся пока на самой распространенной из возможных интерпретаций, когда один выход интерпретируется как платежный, а другой — как сдача, возвращаемая отправителю. Полный список интерпретаций в рамках этой модели представлен в третьей главе. Здесь же наша задача состоит в том, чтобы ознакомить читателя с эвристическими правилами, используемыми для анализа простых расходных транзакций и определения выходов для сдачи.
Анализируя одну транзакцию в изоляции, мы получаем ограниченный объем данных, включенных в эту транзакцию. Мы называем его внутренними данными транзакции.
Внутренние данные ограничены следующей информацией:
Идентификация сдачи
Из-за комиссий майнеров, обычный биткойн-платеж всегда требует расхода несколько большей суммы, чем предполагаемая сумма платежа.
При использовании UTXO на сумму, превышающую предполагаемую сумму платежа, пользователь получит обратно новый UTXO со сдачей на адрес, сгенерированный закрытым ключом его кошелька.
Значительная часть традиционного блокчейн-анализа основывается на определении этого выхода со сдачей. Если выход со сдачей можно успешно определить, это дает возможность отследить активность этого пользователя в серии транзакций.
В этом разделе мы будем определять выходы со сдачей на основе внутренних данных транзакций. Эвристики представлены примерно в порядке убывания точности и эффективности. Примеры снабжены аннотированными скриншотами, визуализирующими описываемые концепции.
Повторное использование адресов
Адреса создаются с помощью одного закрытого ключа. Многократное использование одного и того же адреса говорит об активности одного и того же закрытого ключа.
В простой расходной транзакции, если один выход предназначается новому адресу, а оставшийся — тому же адресу, что и адрес входа, ясно, что на повторно используемый адрес отправляется выход со сдачей.
Сегодня большинство биткойн-кошельков автоматически генерируют для получения сдачи новые адреса. Однако кошелек можно настроить и так, чтобы получать сдачу на тот же адрес, которому принадлежал вход транзакции. Такое поведение обычно указывает на централизованный сервис либо старые версии кошелька Bitcoin Core.
Эвристика по круглой сумме платежа
Когда пользователь инициирует платеж, он вводит в ПО своего кошелька адрес получателя, сумму платежа и размер комиссии за транзакцию. Кошелек выберет UTXO для входов транзакции и сгенерирует выход для сдачи, если необходимо.
Сумма сдачи при простом расходовании рассчитывается следующим образом:
Сумма входа — сумма платежа — размер транзакции (в vБайт) * ставка комиссии сети (в сат./vБайт)
Намеренно сгенерировать выход со сдачей на круглую сумму пользователю затруднительно. Поэтому в простой расходной транзакции выход с круглой суммой, вероятно, является платежом, а значит, оставшийся выход предназначен для получения сдачи.
Эвристика по другому типу скрипта
Существует несколько типов скриптов биткойн-адресов. Читатели, скорее всего, лучше всего знакомы со следующими:
Для любого типа скрипта, если один выход относится к тому же типу, что и вход, а оставшийся выход — к другому типу, то выход с другим типом скрипта, вероятно, является платежным. Значит, выход с тем же типом скрипта, вероятно, является выходом со сдачей.
Эту эвристику можно комбинировать с эвристикой по круглой сумме платежа.
Эвристика по выходу с наибольшей суммой
Еще одна простая эвристика предполагает, что выход с наибольшей суммой, вероятно, является выходом со сдачей. Это одно из слабейших эвристических правил, особенно если рассматривать его в изоляции от остальных, но, как мы увидим позже, оно может быть полезно при анализе графа транзакций.
II. Внешние данные транзакций
Внешние данные транзакций можно использовать для повышения уверенности в точности идентификации сдачи с помощью дополнительной информации и закономерностей.
Под внешними данными подразумевается любая дополнительная информация о транзакции, помимо тех данных, что включены непосредственно в конкретную транзакцию в блокчейне Биткойна. Примеры включают в себя:
Анализ графа транзакций
Граф транзакций — это самый простой способ наглядно показать взаимосвязь входов и выходов в нескольких транзакциях.
Граф транзакций от OXT представляет собой ориентированный ациклический граф. Такие графы используются для отображения взаимосвязи между двумя различными объектами. В случае Биткойна, граф транзакций отображает взаимосвязь между UTXO и транзакциями.
Основы работы с графом транзакций на примере OXT
Научиться работать с графом транзакций проще всего через практическое взаимодействие, но прежде чем начать, расскажем о некоторых функциональных возможностях графа от OXT.
Для доступа к графу транзакций перейдите на вкладку TRANSACTION. Это можно сделать, введя в строке поиска интересующий txid (что это) или просто кликнув на него, если применимо.
Кликните на иконку TX GRAPH у левого края экрана.
В новой вкладке откроется изображение начальной транзакции. Транзакции представлены вершинами графа (кругами). Вершины представляют изменения в наборе UTXO, отражая новую взаимосвязь между UTXO, израсходованными и созданными транзакцией.
Однократным кликом можно выбрать транзакцию: ее цвет при этом изменится с синего на зеленый и на панели у левого края экрана появятся новые доступные инструменты. Подсказки к инструментам появляются при наведении курсора.
Двойной клик по транзакции развернет графическое отображение всех ее UTXO. UTXO представлены в виде ребер графа (линий). Стрелки на ребрах указывают направление: является ли UTXO входом или выходом транзакции. Граф отображает также транзакцию, в которой были созданы используемые в исследуемой транзакции входы и/или расходующую созданные в ней выходы. Если выход не потрачен, то на другом конце ребра графа будет отображаться незаполненный ромб — UTXO.
При полном развертывании граф может выглядеть сильно зашумленным и плохо читаться. Минимизировать визуальный шум можно, разворачивая интересующие UTXO выборочно. Для этого выберите транзакцию и откройте окно Transaction Details, нажав на иконку глаза на панели слева. Отображение на графе входов и выходов транзакций можно развернуть выборочно кликом по иконке графа, появляющейся при наведении курсора на строку с адресом.
На графе, при наведении курсора на вход или выход, отображается дополнительная информация об объекте без необходимости открывать окошко Transaction Details.
В OXT транзакции и UTXO отображаются с учетом своего относительного объема в BTC. Это может быть удобно при определении сдачи и для иллюстрации «цепочек отслаивания», которые мы подробно обсудим ниже.
Пример графа транзакций для «цепочки отслаивания»
Ниже представлен простой пример графа транзакции.
Перейдите по ссылке на страницу транзакции и разверните ее граф. Выберите транзакцию одним кликом. Откройте окно данных о транзакции с помощью иконки в виде глаза на панели слева.
Двойным кликом по начальной транзакции разверните отображение всех ее входов и выходов. Масштаб отображения графа можно менять с помощью прокрутки колесом мыши либо на трекпаде, транзакции на графе можно перетаскивать с зажатой левой кнопкой мыши.
Наличие двух выходов ставит нас перед вопросом, на который нужно ответить, если мы хотим попытаться отследить действия кошелька, создавшего эту транзакцию: за каким выходом следовать?
По эвристическому правилу о другом типе скрипта мы идентифицируем второй выход как сдачу.
Двойным кликом разверните следующую транзакцию, которая расходует второй выход из исходной транзакции. Повторите процесс идентификации сдачи с помощью эвристических правил, представленных в I главе.
После этого граф должен выглядеть примерно как на картинке выше. Чтобы дополнительно выделить на графе UTXO со сдачей, их можно выбрать и окрасить оранжевым с помощью кнопки на панели инструментов. Граф транзакций, показывающий серию простых расходований с одного кошелька, обычно называют peel chain (видимо, «цепочка отслаивания»).
Некоторые фирмы, специализирующиеся в блокчейн-анализе, пытаются представить цепочки отслаивания как форму подозрительной активности, ассоциируемой со «структурированием или отмыванием денег». Хотя, как мы писали в предыдущей части, около 50% биткойн-транзакций представляют собой простые расходования с 1 входом и 2 выходами, то есть это совершенно нормальное пользовательское поведение.
Мы здесь говорим о таких «цепочках отслаивания» просто в контексте отслеживания активности одного кошелька на протяжении нескольких транзакций.
Определение цифрового отпечатка кошелька и интерпретация графа транзакций
По мере разворачивания приведенной в примере цепочки транзакций постепенно становятся очевидными дополнительные паттерны, указывающие на согласованный и непротиворечивый цифровой отпечаток кошелька:
- Крупнейший выход (более толстая линия ребра графа) делает предполагаемый выход со сдачей легко заметным.
- Выход со сдачей всегда выплачивается на P2PKH-адреса.
- Выход со сдачей всегда является вторым из двух выходов транзакции.
- Не показано на графе, но также стоит отметить постоянные номер версии транзакции (2) и время блокировки (0) на всем графе. Для просмотра этой информации кликните по ID транзакции в окне Transaction Detail для перехода на страницу TRANSACTION. Затем выберите вкладку TECHNICAL; здесь отображаются номер версии транзакции, ее размер (байт и vБайт) и время блокировки.
- Поискав по истории предыдущих и последующих платежей на этом графе, вы найдете больше транзакций с тем же паттерном.
Каждый из этих паттернов можно использовать для описания поведения наблюдаемого кошелька. Обобщение такого наблюдаемого поведения называется снятием цифрового отпечатка, в котором используются следующие паттерны:
- скрипты адресов входа и выхода;
- постоянство позиции UTXO со сдачей;
- номер версии и время блокировки.
Комбинации перечисленных паттернов могут давать аналитику весомое подтверждение точности интерпретации выходов со сдачей. В данном случае мы подтвердили корректность своей интерпретации через взаимодействие с сервисом, ответственным за эти транзакции. Этот пример «цепочки отслаивания» показывает активность известного кастодиального микшера. Возвращаясь от изначально представленной транзакции назад к источнику графа, можно обнаружить монеты, ассоциируемые со взломом биржи.
Далее мы обсудим, как можно дополнить и улучшить анализ графа транзакций с помощью кластеризации кошельков и мониторинга выходов в адрес централизованных сервисов.
Кластеризация кошельков. Эвристика по общему владению входами
Оставшийся важнейший инструмент блокчейн-анализа называется «кластеризацией кошельков». Кластеризация подразумевает объединение адресов исходя из их моделей совместного расходования UTXO и допущений о распространенных закономерностях работы ПО кошелька.
Большинство биткойн-кошельков на сегодня являются иерархическими детерминированными. Они генерируют один главный закрытый ключ (master или extended private key, он же xprv), который используется для получения дочерних закрытых/открытых ключей и связанных с ними адресов.
Кошелек обычно автоматически генерирует новый адрес для каждого получаемого платежа (UTXO). Если для совершаемого платежа недостаточно баланса одного UTXO или адреса, кошелек по мере необходимости будет включать в транзакцию дополнительные UTXO/адреса, контролируемые другими закрытыми ключами/адресами, пока не наберется желаемая сумма. Большинство кошельков делают это автоматически, без участия пользователя.
Исходя из этой обычной функциональности кошелька и самой криптографии Биткойна, аналитик может предположить, что каждый адрес, используемый в качестве входа для транзакции, контролируется тем же закрытым ключом или кошельком.
Допущение о том, что каждый вход контролируется одним кошельком, называется эвристикой по общему владению входами.
Как и со всеми эвристическими правилами, существуют специфические сценарии, в которых эта эвристика будет давать ошибочный результат. Обычно это бывает связано со специально разработанными для повышения конфиденциальности транзакциями. Конкретные сценарии, в которых нарушается эвристика по общему владению входами, и то, какие возможности это оставляет аналитикам для обработки таких исключений, мы рассмотрим в следующих главах.
«Анонимные» кластеры и схема кластеризации OXT
Отдельным адресам, которые предположительно контролируются одним кошельком, аналитическая программа обычно присваивает ID кластера кошельков. Из-за псевдонимной природы Биткойна, кластер кошелька в равной мере может представлять активность индивидуального пользователя или централизованного сервиса.
Но без дополнительной информации кошелек остается «анонимным» — в том смысле, что пока он не был связан с деятельностью какого-либо реального субъекта.
OXT выделяет несколько типов кластеров на основе информации об их активности, включая:
Общая статистика кластера в OXT отображается без авторизации, но более подробная информация — баланс и объемы по дням, списки транзакций, списки адресов и прочее — доступна только авторизованным пользователям.
Привязка кластера к субъекту. От «анонимного» кластера к маркированному сервису
Используя эвристику по общему владению входами, аналитики продолжают отслеживать ончейн-активность кластера кошелька. Для привязки кластера кошелька к определенному сервису, требуется взаимодействие с этим сервисом.
Аналитик может создать учетную запись в сервисе и отправить BTC на предоставленный адрес для депозита. После этого он может отслеживать в блокчейне расходование UTXO своего депозита. После того как его UTXO был потрачен, аналитик может привязать этот адрес и все остальные адреса, поставлявшие входы для расходной транзакции, к соответствующему кластеру.
В качестве альтернативы аналитик может использовать методы анализа с открытым кодом для поиска общедоступной информации, размещенной пользователями сервиса. Адреса для депозита и вывода средств обычно можно найти в сообщениях в социальных сетях. Эти общедоступные данные тоже можно использовать для привязки кластера кошельков к централизованному сервису.
Применение внешних данных транзакции для идентификации сдачи
Дополнительную информацию, включая цифровой отпечаток кошелька, временны́е закономерности и кластеризацию выходов можно использовать для интерпретации результатов определения сдачи.
Наибольший ущерб конфиденциальности транзакции наносится при простом расходовании на маркированный кластер кошельков централизованного сервиса.
В простой расходной транзакции в адрес централизованного сервиса неоднозначность в идентификации сдачи утрачивается полностью. Выход, отправляемый централизованному сервису, явно является основным платежом. Единственный оставшийся выход, со всей очевидностью, содержит сдачу. На картинке ниже приведен пример из той же «цепочки отслаивания», которую мы рассматривали выше.
Наиболее важным аспектом эвристики по общему владению входами является даже не то, как она используется для компрометации конфиденциальности отдельных пользователей, но скорее то, как кластеризация кошельков централизованных сервисов негативно и значительно влияет на общий уровень конфиденциальности графа биткойн-транзакций.
Значительная часть экономической активности в сети Биткойна непосредственно связана с маркированными кластерами централизованных сервисов, и это оказывает существенное централизующее влияние на общий граф транзакций сети.
III. Методы защиты от блокчейн-анализа
С пониманием основополагающих концепций блокчейн-анализа, представленных в I и II главах, далее мы будем обсуждать доступные методы, подрывающие полезность используемых в нем эвристик.
В этой главе мы рассмотрим следующие темы:
Модель владения UTXO и неопределенность в простых расходных транзакциях
Выше мы представили эвристики идентификации сдачи для простых расходных транзакций с 1 входом и 2 выходами. Мы исходили из предположения о том, что такая транзакция содержит выход с платежом и выход со сдачей.
В реальности простые расходные транзакции допускают множество дополнительных интерпретаций, основанных на «модели владения» UTXO. Модель владения пытается определить право собственности для входов и выходов транзакции. Полный список возможных интерпретаций для транзакции с одним входом и двумя выходами показан на картинке ниже.
Каждую из этих интерпретаций необходимо учитывать аналитику, особенно если он опирается только на внутренние данные транзакции. Список возможных интерпретаций может быть сокращен с учетом дополнительного цифрового отпечатка кошелька, нормального поведения ПО кошельков и типичного поведения пользователей.
Типичное пользовательское поведение делает наиболее вероятными интерпретации 1 и 2. Интерпретации 3 и 4 возможны, хотя многие биткойн-кошельки не имеют функции пакетного расходования. Интерпретация 5 встречается редко, поскольку это увеличивает комиссию сети и раздувает пользовательский набор UTXO.
Можно использовать для сокращения списка интерпретаций внешние данные транзакции, такие как выходы, отправленные в централизованные сервисы, или повторно используемые адреса. По причине концентрации графа биткойн-транзакций вокруг централизованных сервисов и из-за паттернов нормального пользовательского поведения, на практике принимать во внимание все эти интерпретации приходится редко.
Защита от эвристик идентификации сдачи
Даже простые расходные транзакции можно сделать более неоднозначными для анализа, используя кошельки, нарушающие эвристики идентификации сдачи, представленные в I главе. На картинке ниже представлен пример транзакции, которая сама по себе, в отрыве от внешних данных, выглядит «максимально» неоднозначно для простого расходования.
Защита от эвристики по круглой сумме платежа
Сумма платежа определяется пользователем. Если пользователь выбирает круглую сумму платежа, то в случае простой траты кошельку трудно подорвать эту эвристику. Но для большинства настоящих платежей, оцениваемых в фиатных валютах, эта эвристика применима с меньшей вероятностью. На примере выше ни один из выходов транзакции не имеет круглой суммы, что делает это эвристическое правило неприменимым.
Идентичный тип скрипта у выхода со сдачей
В приведенной для примера транзакции оба выхода имеют одинаковые типы скриптов, поэтому эвристика по выходу с уникальным скриптом здесь неприменима. Это помогает сохранить неоднозначность трактования при анализе и затрудняет идентификацию сдачи.
Рандомизированная позиция выхода со сдачей
Чтобы еще больше усилить неоднозначность поведения кошелька в серии транзакций, ПО кошелька должно рандомизировать позицию выхода со сдачей. Чередование в произвольном порядке позиции сдачи между выходами 0 и 1 затрудняет отслеживание кошельков.
Оценка транзакции с учетом внешних данных
Толщина линий в графе транзакций варьируется в зависимости от относительной суммы соответствующего UTXO. Таким образом, разворачивание графа транзакций автоматически подразумевает включение некоторых внешних данных.
Исходя из графа транзакции и последующего расходования UTXO, какой выход исследуемой транзакции может быть платежным?
Есть ли у адресов в этой транзакции история предыдущего использования?
Это прекрасный пример того, как можно использовать внешние данные транзакции для определения платежных выходов и выходов со сдачей. Разверните граф транзакций или проследите будущие расходования UTXO, чтобы проверить свои предположения.
Потоки UTXO и детерминированные расходования
Идентичные скрипты и рандомизированная позиция выходов со сдачей могут использоваться кошельками для сохранения неопределенности при простых расходных транзакциях, но это не влияет на наличие фундаментальной связи между используемыми в транзакции входами и выходами.
Между входами и выходами транзакции всегда существует связь. Эти взаимосвязи между UTXO внутри транзакции можно рассматривать как «потоки», в которых BTC из используемых UTXO входов передаются в UTXO выходов.
В случае простой расходной транзакции (1 вход и 2 выхода) для оплаты обоих выходов используется один вход. Внутренние потоки простой расходной транзакции имеют только одну интерпретацию. В результате связь между единственным входом и каждым из выходов является математически детерминированной (абсолютно достоверной).
Связь между входами и выходами отображается на графе транзакций OXT при выборе входа или выхода. Визуализатор транзакций на kycp.org также показывает связи внутри транзакции.
Разрыв связей. Недетерминированные транзакции
Хоть неопределенность в отношении принадлежности UTXO существует всегда, полагаться на модель владения UTXO при обфускации ончейн-потоков BTC нельзя. Без разрыва детерминированных связей и внесения неоднозначности в граф транзакций, биткойны остаются «отслеживаемыми».
Для разрыва детерминированных связей и исключения однозначной трактовки ончейн-следа кошелька требуется определенная структура транзакций. Детерминизм зависит от количества входов и выходов транзакции, а также от суммы BTC в каждом из них.
Сами по себе транзакции со множеством входов и выходов могут создавать зашумленный граф. Такие типы транзакций нелегко интерпретировать без специальных инструментов или критериев.
Несмотря на зашумленный граф, детерминированные связи между UTXO транзакций со множеством входов и выходов все еще возможно отследить. Kristov Atlas был первым, кто представил эту концепцию в своем руководстве и алгоритме CoinJoin Sudoku.
В CoinJoin пользователи объединяют средства в пул и совместно создают транзакцию. Обычно это транзакция со множеством выходов на равные суммы. Алгоритм CoinJoin Sudoku использует раздел математики, называемый анализом суммы подмножеств, для анализа транзакций на предмет «общего владения» входами и выходами.
Обсуждение математического метода выходит за рамки этого руководства, но важный вывод состоит в том, что наивно построенную CoinJoin-транзакцию можно успешно проанализировать на предмет детерминированных связей.
Сегодня концепция CoinJoin Sudoku была расширена в алгоритме Boltzmann, созданным ведущим разработчиком OXT, LaurentMT. Boltzmann использует концепцию CoinJoin Sudoku для оценки транзакций по нескольким показателям, связанным с конфиденциальностью.
Для правильно построенных CoinJoin-транзакций связь между входами и равными выходами все еще существует, однако эти связи являются вероятностными, а не детерминированными. Алгоритм Boltzmann вычисляет вероятностную матрицу связей между входами и выходами транзакций.
Вывод матрицы связей для транзакции можно найти в OXT на странице TRANSACTION. На вкладке INPUTS & OUTPUTS подмножество связей между любым входом и каждым выходом отображается по клику на иконку цепочки, которая появляется при наведении курсора справа от интересующего UTXO.
Визуализацию полной матрицы связей, полученную с помощью алгоритма Boltzmann, можно найти на kycp.org.
Энтропия: CoinJoin-транзакции с одинаковыми выходами и когда целесообразно применять эвристику по общему владению входами
В CoinJoin-транзакциях с равными выходами несколько пользователей совместно создают транзакцию, которая объединяет их средства в пул и разрывает детерминированные связи между входами и множеством выходов на равные суммы.
За счет участия нескольких пользователей такие транзакции подрывают также эвристику по общему владению входами. Применение эвристики по общему владению входами к транзакциям, имеющим признаки CoinJoin, может приводить к формированию ложноположительного кластера кошельков.
Этого можно избежать, применив эвристику по равным выходам для определения вероятных CoinJoin-транзакций. Однако транзакции с одинаковыми выходами не обязательно являются CoinJoin-транзакциями. Наивно построенные транзакции с множеством равных выходов все еще могут иметь детерминированные связи между входами и равными выходами, а значит, такая транзакция не является CoinJoin.
Вместо ошибочной кластеризации или полного исключения из анализа транзакций с равными выходами, аналитики могут точно определять наличие у транзакции всех свойств CoinJoin с помощью алгоритма Boltzmann.
Boltzmann использует анализ суммы подмножеств, чтобы дать ответ на вопрос: существует ли несколько способов (возможных интерпретаций), которыми входы транзакции могли бы окупать ее выходы?
Если транзакция имеет несколько возможных интерпретаций внутреннего потока UTXO, то Boltzmann оценит энтропию транзакции как больше или равную 0. Концепция энтропии берет свое начало в термодинамической ментальной модели. В этой модели количество интерпретаций можно рассматривать как микросостояния общего макросостояния транзакции.
Энтропию можно рассматривать как показатель нехватки у аналитика знания о точной конфигурации исследуемой транзакции.
Транзакции с энтропией обладают свойствами CoinJoin и детерминированные связи в них нарушены. Свойства CoinJoin свидетельствуют о том, что для построения транзакции используется несколько входов от различных пользователей. В консервативном подходе входы транзакций с энтропией не следует кластеризовать посредством эвристики по общему владению входами.
Интерпретация транзакций в KYCP
Сервис KYCP предоставляет значительный объем информации о транзакции, включая наличие повторного использования адресов, детерминированных и вероятностных связей, а также слияния входов и выходов. Приведенный на картинке выше пример — это CoinJoin-транзакция из кошелька DarkWallet. Детерминированные связи для равных выходов нарушены, но между входами и «выходами со сдачей» они все еще существуют. Обратите внимание также, что выходы 1 и 3 затем тратятся в одной последующей транзакции, указывая на то, что те же пользователи/кошельки снова участвуют в пуле.
CoinJoin: равные выходы (шифрование) в сравнении с PayJoin (стеганография)
CoinJoin-транзакции с равными выходами имеют уникальный ончейн-след, который, понятно, можно определить по наличию нескольких равных выходов. Однако потоки внутри транзакции для равных выходов не детерминированы. Если аналитик знает, что имеет дело с CoinJoin-транзакцией, он должен учитывать, что пользователь, которого он пытается отследить, контролирует один из множества равных выходов этой транзакции. В большинстве случаев этого достаточно, чтобы уйти от отслеживания.
Когда аналитик сталкивается с CoinJoin-транзакцией, он видит, что используется техника повышения конфиденциальности, но не может надежно интерпретировать транзакцию. В этом смысле CoinJoin-транзакция с равными выходами подобна шифрованию. Исследователи видят зашифрованное сообщение (идентифицируют CoinJoin), но не могут расшифровать его (т. е. надежно интерпретировать транзакцию).
Другой тип CoinJoin называется PayJoin (или pay-to-end-point, или Stowaway в Samourai Wallet). PayJoin представляет собой коллаборативную транзакцию, создаваемую совместно отправителем и получателем платежа. В блокчейне многие PayJoin-транзакции вовсе не имеют видимых отличительных признаков, и не определяются с помощью эвристических правил.
PayJoin неотличимы от обычной транзакции, в которой пользователь тратит несколько UTXO. В отсутствие какого-либо специфического цифрового следа в блокчейне аналитики могут ошибочно применять к таким транзакциям эвристику по общему владению входами и формировать ложные кластеры кошельков.
В этом смысле PayJoin-транзакции представляют собой стеганографический метод. Стеганография подразумевает сокрытие самого секретного сообщения (того факта, что имела место CoinJoin-транзакция) среди обычно выглядящих данных (обычная транзакция с несколькими входами).
Другие способы «сломать» анализ графа транзакций
Кастодиальные микшеры — один из старейших методов обеспечения конфиденциальности на уровне приложений. Кастодиальные микшеры представляют собой сервисы по обмену цифровыми монетами. Пользователи вносят монеты в микшер и (в благополучном сценарии) получают взамен другие произвольные UTXO на ту же сумму (за вычетом комиссии сервиса) с новой историей транзакций. В идеале процесс такого обмена «ломает» граф транзакций, разрывая связь между депозитом пользователя и монетами, которые он получает на выходе.
Эти техники также популяризовали понятие «порчености» (taint) цифровых монет — когда пользователи микшера могут получить при обмене произвольные UTXO с некоторой «проблемной» историей. Заинтересованный читатель может ознакомиться с нашей оценкой двух крупнейших кастодиальных микшеров (ChipMixer и Blender) в расследовании OXT по следам взлома KuCoin.
Дополнительные методы улучшения конфиденциальности, такие как CoinSwap, направлены на то, чтобы «сломать» граф транзакций без необходимости отправлять средства на счет централизованного сервиса. Эти методы находятся еще на стадии предложения и разработки. Если не будут найдены новые решения, эти теоретические свопы будут подвержены той же проблеме произвольного перераспределения «порченых» монет.
IV. Использование концепций блокчейн-анализа для повышения конфиденциальности пользователей
В предыдущих главах мы представили базовые концепции блокчейн-анализа и те, что используются для подрыва его эффективности.
Маловероятно, чтобы читатели этого материала планировали стать «экспертами» в этой области, но фундаментальное понимание инструментов и концепций, используемых для нарушения конфиденциальности пользователей Биткойна помогает лучше защитить собственные данные.
И в этой заключительной главе мы расскажем о реальных последствиях отправки и получения биткойн-транзакций для конфиденциальности пользователей. Затем приведем конкретные методы повышения собственной конфиденциальности, которые можно использовать при взаимодействии с Биткойном.
Отправные точки и нарушение псевдонимности
Биткойн псевдонимен по умолчанию. Без дополнительной информации, связывающей действия пользователя с его ончейн-следом, анализ не имеет «отправной точки» для нацеленного отслеживания активности конкретного субъекта в сети Биткойна.
Отправные точки обычно включают добровольное раскрытие пользователями контролируемых ими адресов — как правило, для получения платежей. Отправные точки также могут быть получены из информации, предоставленной третьими сторонами: например, по соглашению об обмене данными между аналитическими фирмами и биржами.
Начинающим аналитикам для выполнения анализа обычно необходим некоторый «контекст». Этот ценный контекст часто бывает основан на анализе их собственных транзакций. Пользователям, исследующим собственную историю транзакций с помощью стороннего блок-эксплорера, рекомендуется использовать VPN и/или Tor, чтобы избежать связывания IP-адреса с информацией об исследуемых транзакциях.
Адреса как отправные точки
Большинство пользователей начинают произвольное исследование в блок-эксплорере с запроса по адресу. В OXT при новом запросе по адресу информация о связанных с ним транзакциях автоматически не отобразится. Для перехода к графу транзакций пользователям понадобится выполнить следующие действия:
- Войти в учетную запись на `OXT.
- Ввести интересующий адрес в строке поиска.
- Перейти на вкладку TRANSACTIONS.
- Выбрать интересующую транзакцию. На начальный адрес может быть получено несколько платежей. Если так, то нужно выбрать интересующую транзакцию в зависимости от ее объема и времени выполнения.
- После этого откроется страница транзакции.
- Для анализа потоков откройте граф транзакции.
Направления анализа: история UTXO и последующие расходования
От стартовой транзакции и UTXO у аналитика есть два «направления» для исследования.
Он может попробовать определить «источник» средств исходя из истории целевого UTXO. Для цепочек транзакций с одним входом поиск источника выполняется довольно просто, поскольку не подразумевает «выбора», по пути какого входного UTXO следовать. Однако транзакции с несколькими входами требуют от аналитика исследования нескольких вариантов.
Другое направление для исследования — это поиск «пункта назначения» средств по будущим тратам связанных UTXO с применением эвристических правил для идентификации сдачи, описанных в первой главе и внешних данных транзакции, описанных во второй главе.
Примечание: не имеет смысла отслеживать потоки UTXO в кастодиальных сервисах. Использование депозитного UTXO для выплаты тому же субъекту крайне маловероятно.
Последствия для конфиденциальности при отправке и получении биткойн-транзакций
При отправке и получении платежа пользователь неизбежно раскрывает контрагенту часть своего UTXO-сета. При наивном управлении UTXO это может раскрыть контрагенту весь баланс кошелька отправителя.
Раскрытие баланса при совершении платежей — неприятный побочный эффект прозрачности Биткойна. Негативные последствия такого раскрытия довольно очевидны, особенно для простых расходных транзакций.
Помимо этого, платежи, совершенные отправителем, позволяют получателю оценить предыдущую историю транзакций отправителя. Отправитель тоже может исследовать последующие расходования получателем отправленных им UTXO.
Ниже описаны методы, которыми можно смягчить либо устранить негативные побочные эффекты прозрачности Биткойна.
Практики повышения конфиденциальности транзакций
Большая часть блокчейн-анализа строится на следующих основных концепциях:
В главах I и II мы представили основные концепции блокчейн-анализа. В III главе рассказали о концепциях, используемых для подрыва используемых в блокчейн-анализе методов. Далее мы расскажем о пользовательских практиках, нивелирующих описанные выше недостатки конфиденциальности, на примере опций, доступных в Samourai Wallet.
Использование платежных кодов: устранение отправной точки для анализа
Блокчейн-аналитикам нужна отправная точка, чтобы попытаться отследить ончейн-след субъекта сети. Обычно это подразумевает привязку ончейн-активности целевого субъекта к адресу, который тот опубликовал для получения платежей или пожертвований. По этому адресу аналитик может оценить активность пользователя, включая полученные платежи, общий баланс адреса и закономерности в расходовании BTC.
Пользователи часто обмениваются адресами для получения платежей. Адреса, которыми они обмениваются, это те же самые адреса, которые записываются в блокчейн и доступны для поиска с помощью любого блок-эксплорера.
Вместо обмена прямыми адресами для получения платежей, пользователи могут обмениваться платежными кодами. Технология основана на той же идее, что и обмен ключами в протоколе Диффе – Хеллмана, ключевая криптографическая концепция, лежащая в основе TLS/SSL, одной из важнейших форм криптографии, которая используется для защищенных коммуникаций в интернете.
Реализация технологии в Samourai Wallet основана на предложении BIP 47 от Open Bitcoin Privacy Project. Многоразовые платежные коды из BIP 47 позволяют отправителю: создавать неограниченное количество уникальных биткойн-адресов для платежа в адрес предполагаемого получателя без необходимости нахождения того онлайн.
Многоразовые платежные коды лишают аналитиков легкой отправной точки для блокчейн-анализа. Больше информации о многоразовых платежных кодах Samourai Wallet можно найти в их документации.
Контроль монет: сегрегация UTXO
Объединение в будущих тратах входов, полученных от нескольких источников, может позволить отправителям тех платежей отследить историю и других UTXO, в дополнение к отправленным непосредственно ими.
Чтобы устранить эту брешь для утечки информации, пользователи могут практиковать «контроль монет» (coin control). В широком смысле практика контроля монет состоит из нескольких шагов:
Нужно также завести привычку маркировать свои UTXO со сдачей после отправки платежей.
Ricochet: увеличение дистанции
Ricochet — это простой инструмент, автоматически добавляющий дополнительные «переходы» — фиктивные транзакции — между исходным отправляемым UTXO и получателем платежа. Это не скрывает источник средств и не «ломает» граф транзакций. Однако такие транзакции увеличивают дистанцию между предыдущей историей UTXO и пунктом назначения платежа.
Нахождение источника средств для транзакций с одним входом — сравнительно тривиальная задача, но при наличии дополнительных «переходов» это потребует от принимающей стороны простирать исследование за пределы непосредственно входящего UTXO. Обход графа транзакций прост в выполнении, но увеличение пространства для исследования истории входящего UTXO подразумевает дополнительные сомнения исходя из «модели владения UTXO», что увеличивает вероятность ложноположительного результата.
Текущая версия ricochet включает четыре дополнительных перехода. Более «динамичная» версия с варьируемым количеством переходов планируется в будущих обновлениях. Более подробную информацию об этой функции можно найти в документации.
STONEWALL и STONEWALLx2: безопасные платежи
STONEWALL и STONEWALLx2 используют один и тот же алгоритм выбора монет для создания транзакций со свойствами CoinJoin. STONEWALL — это имитация CoinJoin, использующая входы из одного кошелька. STONEWALLx2 — это «настоящий» CoinJoin, использующий входы из двух сотрудничающих между собой пользователей/кошельков.
Использование одного алгоритма означает, что эти транзакции имеют идентичный ончейн-след и для внешних наблюдателей неразличимы. Как результат, аналитики оказываются вынуждены учитывать вероятность того, что любая STONEWALL-транзакция является «настоящим» CoinJoin.
Алгоритм STONEWALL является расширением свойств транзакции, направленным на нарушение эвристик определения сдачи в простых расходных транзакциях через создание выходов на скрипты аналогичного типа и рандомизацию позиции выхода для сдачи.
Благодаря свойствам CoinJoin, stonewall-транзакции способны также нарушить интерпретацию эвристики по круглой сумме платежа, чего нельзя сделать с простой расходной транзакцией. Stonewall нарушает эти эвристики за счет создания транзакции с «фиктивным» выходом, равным заданной сумме платежа.
STONEWALL и STONEWALLx2 — это настоящие платежи, по-прежнему включающие в себя детерминированные ссылки на UTXO со «сдачей». Поскольку STONEWALL может быть CoinJoin-транзакцией с участием двух кошельков, реальный контрагент не может быть уверен, какие UTXO со сдачей принадлежат отправителю транзакции, ответственному за совершение платежа, а какие — возможному партнеру по CoinJoin.
Stowaway: нарушение эвристики по общему владению входами
Как говорилось в III главе, PayJoin-транзакции подрывают эвристическое правило общего владения входами. Если у одного UTXO недостаточно баланса для совершения платежа на желаемую сумму, ПО кошелька будет добавлять в транзакцию дополнительные входы до тех пор, пока не наберется нужная сумма. Аналитики потенциально могут ошибочно предположить, что входы этих транзакций контролируются одним и тем же кошельком.
PayJoin-транзакции, как правило, не имеют различимого ончейн-следа. При добавлении входов от отправителя и получателя платежа, для построения транзакции используются два кошелька. Это подрывает эвристику по общему владению входами и приводит к созданию «ложного кластера». А добавление входов со стороны получателя скрывает также истинную сумму платежа.
Whirlpool CoinJoin: обеспечение конфиденциальности при дальнейшем расходовании
Отправители платежей могут отслеживать последующее расходование своих платежных UTXO и потенциально получать дополнительную информацию о составе кошелька своего контрагента. С целью сохранения собственной конфиденциальности, получатели платежей могут образовывать CoinJoin, чтобы нарушить связь между входящим платежом и последующим расходованием входящих UTXO. Другими словами, отправка UTXO, полученных во входящем платеже через CoinJoin, обеспечивает конфиденциальность при последующем расходовании.
Whirlpool — единственная реализация CoinJoin с ZeroLink (исключает связывание выходов транзакции) и 100% энтропией. Whirlpool CoinJoin не использует в CoinJoin-транзакции выходы с «немикшированной сдачей», которые можно использовать для дальнейшего отслеживания активности пользователей.
Процесс whirlpool-транзакции начинается с Tx0, в которой платится комиссия координатору, создается премикс UTXO, равных номиналу пула плюс комиссии майнеров, и отдельный UTXO для сдачи.
Входы в Tx0 следует выбирать с осторожностью, чтобы избежать связывания UTXO из разных источников. Комбинирование входов из нескольких источников обнаруживает их общую принадлежность. С UTXO для сдачи также нужно проявить осмотрительность, чтобы не связывать его напрямую с какими-либо будущими расходами.
После построения CoinJoin и нарушения связей между исходными (премикс) и постмикс UTXO получатели платежа могут быть уверены в том, что отправители не смогут надежно отследить последующее расходование своих платежных UTXO.
Заключение
Благодаря псевдонимной природе, Биткойн поддерживает самую базовую конфиденциальность пользователей, не связывая историю действий в блокчейне с реальными личностями.
На уровне протокола же биткойн-транзакции представляют собой перемещение прозрачных сумм биткойнов между прозрачными адресами. Эта прозрачность привела к распространению и развитию блокчейн-анализа. Большая часть всех составляющих блокчейн-анализ практик строится на идентификации сдачи от платежей, анализе графа транзакций и кластеризации кошельков с помощью эвристики по общему владению входами.
Хотя многие из этих методов основаны на эвристических правилах, дополнение их внешними данными транзакции, такими как повторное использование адреса или прямые транзакции с централизованными сервисами, могут значительно подорвать уровень конфиденциальности простых биткойн-транзакций.
ПО кошелька может на своей стороне повышать неопределенность возможной интерпретации простых расходных транзакций за счет рандомизации цифрового отпечатка кошелька и выбора адресов аналогичного типа. Но даже с этими инструментами, ончейн-потоки биткойнов остаются «отслеживаемыми» и детерминированными. Правильно построенные CoinJoin-транзакции с равными выходами пока остаются лучшим способом разрыва детерминированных связей и введения в граф транзакций возможности обоснованного отрицания.
Вероятно, что обычный пользователь, читающий это руководство, не стремится стать экспертом в блокчейн-анализе. Скорее он заинтересован в простых способах повысить уровень собственной конфиденциальности при отправке и получении платежей. При отправке и получении платежей отправитель неизбежно раскрывает получателю информацию о наборе UTXO своего кошелька. В результате и отправитель, и получатель платежа могут отследить предыдущие и последующие расходования этих известных им UTXO, что может стать для каждого из них источником дополнительной информации о контрагенте.
Пользователи, понимающие принципы блокчейн-анализа, лучше подготовлены к оценке вероятных последствий входящих и исходящих транзакций и могут предпринять шаги для повышения собственной конфиденциальности.
Эти шаги включают в себя: несвязывание блокчейн-активности с профилями в интернете, избегание повторного использования адресов, раздельное использование UTXO с различной историей и использование в расходных транзакциях продвинутых инструментов — описанных выше либо аналогичных им, — подрывающих эффективность применяемых в блокчейн-анализе эвристических правил.
Последовательное применение этих методов позволяет обеспечить базовый уровень конфиденциальности перед контрагентом и сторонним наблюдателем.
На основе серии статей: 1, 2, 3, 4
Источник: bitnovosti.com