Часть 3: Защита от анализа цепочки
Cover

Часть 3: Защита от анализа цепочки

9 августа 2021 г.
Данный материал также доступен в видеоформате в этом плейлисте.

В части 3 рассматриваются основные концепции повышения приватности в сети Биткоин.

Перевод статьи от разработчиков Samourai Wallet

Поддержать проект

Введение #

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

  1. Преодоление эвристики обнаружения сдачи при простых тратах
  2. Создание неоднозначного графа транзакций с помощью CoinJoin-транзакций с равными выходами
  3. Преодоление CIOH с помощью CoinJoin-транзакций

Модель владения UTXO и неоднозначность простых трат #

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

В действительности простая трата имеет множество дополнительных интерпретаций, основанных на “модели владения” UTXO. Модель владения позволяет определить принадлежность входов и выходов транзакции. Полная интерпретация владения UTXO для транзакции с 1 входом и 2 выходами показана на рисунке ниже.

Модель владения UTXO при простой трате

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

Типичное поведение пользователя делает наиболее вероятными интерпретации 1 и 2. Интерпретации 3 и 4 возможны, хотя многие Биткоин-кошельки не имеют функции пакетной траты. Интерпретация 5 встречается редко из-за дополнительных комиссий и увеличения количества UTXO.

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

Преодоление эвристик обнаружения сдачи #

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

Неоднозначная простая трата (TxID)

Защита от эвристики круглого значения суммы платежа #

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

Идентичный тип скрипта в выходе сдачи #

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

Случайное изменение положения выхода сдачи #

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

Оценка транзакции с учетом внешних данных #

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

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

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

Движения UTXO и детерминированные траты #

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

Связь между входами и выходами транзакции существует всегда. Эти внутритранзакционные отношения UTXO можно представить как “движения”. При этом BTC, расходуемые входными UTXO, передаются выходным UTXO.

Визуализация движения UTXO с помощью графа транзакций OXT (TxID)

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

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

Визуализация движения UTXO с помощью KYCP (TxID)

Нарушение связей — Недетерминированные транзакции #

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

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

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

Пример серии транзакций с несколькими входами и выходами

Несмотря на зашумленность графа транзакций, детерминированные связи между UTXO транзакций с несколькими входами и выходами все же могут быть определены. Первым эту концепцию ввел Кристов Атлас в своем инструменте и алгоритме “CoinJoin Sudoku”.

При CoinJoin пользователи объединяют свои средства и совместно создают транзакцию. Как правило, создается транзакция с равными суммами выходов. Алгоритм CoinJoin Sudoku использует ветвь математики, называемую анализом суммы подмножеств, для оценки транзакций на предмет “общего владения” входами и выходами.

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

Сегодня концепция CoinJoin Sudoku была расширена алгоритмом Больцмана, созданным LaurentMT, ведущим разработчиком OXT. Алгоритм Больцмана использует концепцию CoinJoin Sudoku для оценки транзакций по нескольким параметрам, связанным с приватностью.

Для правильно построенных CoinJoin-транзакций связь между входами и равными выходами все еще существует, однако эти связи являются вероятностными, а не детерминированными. Алгоритм Больцмана вычисляет матрицу вероятностей связей (LPM — Link Probability Matrix) для зависимостей между входами и выходами транзакции.

Результат LPM транзакции можно найти на странице TRANSACTION в OXT. На вкладке INPUTS & OUTPUTS подмножество связей между входом и каждым выходом можно увидеть, кликнув по значку “цепочки” справа от нужного UTXO.

Подмножество матриц связей в OXT (TxID)

LPM для выбранных UTXO в рассматриваемых транзакциях также может быть найден путем выбора входов и выходов на графе транзакций (пример). Визуальное представление полного LPM, полученного алгоритмом Больцмана, можно найти на сайте kycp.org.

Движения UTXO и LPM в KYCP (TxID)

Энтропия — CoinJoin с равными выходами, и когда уместно применять CIOH #

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

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

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

Транзакция с равными выходами и детерминированными связями (TxID)

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

Алгоритм Больцмана эффективно использует анализ суммы подмножеств, чтобы задать вопрос: Существует ли множество способов (интерпретаций), которыми входы транзакции могли бы оплатить ее выходы?

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

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

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

Оценка CoinJoin в кошельке DarkWallet с помощью KYCP (TxID)

Интерпретация транзакций в KYCP #

KYCP содержит значительный объем информации о транзакциях, включая повторное использование адресов в рамках транзакции, детерминированные и вероятностные связи, а также слияния входов и выходов. Приведенный пример транзакции - это CoinJoin-транзакция в кошельке DarkWallet. Детерминированные связи для одинаковых выходов нарушены, но детерминированные связи между входами и “выходами сдачи” все еще существуют. Также обратите внимание, что выходы 1 и 3 отправляются (объединяются) в одну и ту же будущую транзакцию. Это указывает на то, что одни и те же пользователи/кошельки снова смешивают монеты.

CoinJoin — равные выходы (шифрование) против PayJoin (стеганография) #

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

Граф CoinJoin-транзакции в Whirlpool (TxID)

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

Другой тип CoinJoin называется PayJoin, или pay-to-end-point, или Stowaway в Samourai Wallet. Транзакции PayJoin представляют собой совместную транзакцию между пользователем, совершающим платеж, и пользователем, получающим платеж. В блокчейне многие PayJoin не имеют ни различимых паттернов, ни применимых эвристик.

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

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

Другие техники — “разрыв” графа транзакций #

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

Эта техника также способствовала популяризации понятия “испорченности”, когда пользователи миксера могут неосознанно получить в рамках обмена UTXO с некоторой “проблемной историей”. Заинтересованные читатели могут ознакомиться с нашими оценками двух крупнейших кастодиальных миксеров (ChipMixer и Blender) из нашего расследования взлома Kucoin.

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

Обзор #

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

Мы выяснили, что эвристика обнаружения сдачи может быть преодолена путем:

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

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

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

В части 4 рассматриваются:

  1. Анализ, требующий “отправной точки”.
  2. Последствия отправки и получения платежей для приватности.
  3. Как существующие методы обеспечения приватности могут смягчить многие из проблем, обсуждаемых в данном руководстве.

Поддержите переводчика #

Поддержать переводчика можно, отправив немного сат в сети Лайтнинг:

lnurl1dp68gurn8ghj7ampd3kx2ar0veekzar0wd5xjtnrdakj7tnhv4kxctttdehhwm30d3h82unvwqhk7mnv093kcmm4v3unxwg6jxyqf


Connect to our relay to leave a comment. Details.
Подключитесь к нашему релею, чтобы оставить комментарий. Подробнее.