В одной из предыдущих статей мы делали обзор технологий анонимных криптовалют. Сегодня мы посмотрим на проблему анонимизации с другой стороны и приведем обзор самых известных на сегодняшний день способов анализа анонимных блокчейнов. В этой статье мы сфокусируемся на анализе самих транзакций блокчейнов, обходя стороной возможности связи адресов кошельков с их ip-адресами на уровне p2p-протокола, так как в этом случае техники довольно однообразные. Для понимания этой статьи достаточно поверхностного знания устройства популярных криптовалют на уровне понимания, что такое входы и выходы транзакции.
В 2009 году, когда биткоин только появился, он считался средством анонимных переводов, т. к. не было возможности сопоставить публичный ключ кошелька с его владельцем. Но эти времена прошли, и сегодня уже известны техники для анализа графа платежей и идентификации пулов адресов практически всех площадок в сети: бирж, майнинг-пулов, обменников и даркнет-маркетов.
Почти все эти техники используют одни и те же подходы — сначала с помощью простых эвристик адреса объединяются в кластеры, затем эмпирически определяется принадлежность каждого кластера к той или иной площадке. Более подробно об этом можно почитать в работе «A Fistful of Bitcoins: Characterizing Payments Among Men with No Names».
Так как приватность переводов до сих пор не является основной целью биткоина, начал появляться спрос на способы сохранить граф своих платежей в тайне. Первыми попытками были «тумблеры» — сервисы, отправляющие транзакции от имени нескольких пользователей, которые требовали доверия к самому миксеру. Для снижения рисков, связанных с доверием к централизованным сервисам, появился всем известный протокол CoinJoin, не позволявший третьей стороне (а именно самому миксеру) завладеть деньгами пользователей. Как развитие этой идеи начали появляться криптовалюты, для которых главное — приватность переводов. В топе Coinmarketcap сейчас можно найти три из них — Monero, Dash и ZCash, чья совокупная капитализация на момент написания статьи составляет порядка 1,8 млрд долларов. Далее мы подробнее рассмотрим способы анализа этих блокчейнов.
CoinJoin
Протокол CoinJoin был предложен Грегом Максвелом в 2013 году как замена существующим миксерам, не требующая передачи своих биткоинов в распоряжение третьей стороне. Суть работы протокола заключается в том, что несколько пользователей скидываются, чтобы осуществить свои платежи одной транзакцией.
В этом примере Эрни и Барак решают скинуться и совместной транзакцией выполнить переводы Чарли и Дональду. Как мы видим на рисунке, становится сложно понять, кто решил заплатить за предвыборную кампанию Дональда — Эрни или Барак.
Но в этом случае «сложно» не значит «невозможно». Одной из первых техник (и вполне успешной) деанонимизации CoinJoin-транзакций была CoinJoin sudoku. Автор предлагает анализировать различные комбинации входов и выходов, которые в сумме дают одно и то же значение, предполагая, что они могут соответствовать одному платежу. На практике это может выглядеть примерно так (Источник — https://www.coinjoinsudoku.com/advisory/):
В работе «Privacy-Enhancing Overlays in Bitcoin» авторы пошли дальше и рассматривали атакующего — злоумышленника, который активно участвовал в транзакциях. Если атакующий участвовал в ряде совместных транзакций, то он может исключить свои входы и выходы, облегчив себе анализ.
Но главная точка «недоверия» в этой схеме — ее централизованная природа. Пользователи должны выбирать «доверенный» сервис для этих целей, который может просто сохранять логи замешиваний, проходящих через него (хотя украсть деньги он не может).
Помимо всего прочего, самому пользователю также необходимо принимать меры для уменьшения риска деанонимизации своего платежа. Крайне важно не использовать один и тот же адрес для платежей больше одного раза, т. к. это в значительной мере облегчит злоумышленнику анализ цепочки транзакций.
Однако, хотя это одна из первых попыток и имеет довольно слабую модель анонимности, за последний год количество таких транзакций выросло втрое и достигло 4,09% от общего числа платежей (по данным сайта longhash.com), что говорит о растущем спросе на приватность в сети Bitcoin.
Dash
Dash (бывший DarkCoin) → форк биткоина. Транзакции в Dash не являются приватными по умолчанию, для проведения приватных платежей в Dash есть функция Private Send. Она унаследовала принцип работы CoinJoin вместе с большинством его недостатков.
Dash делит выходы пользователя на два типа: обычные и приватные. Первыми можно пользоваться для осуществления прозрачной транзакции, а последние нужны для участия в замешивании. При конвертации обычных выходов транзакция, которая их тратит, разбивает их по номиналам вида 1.00001 DASH, 0.100001 DASH и т. д. и переводит на подконтрольные пользователю одноразовые адреса. После этого отправитель выбирает мастерноду, с помощью которой будет производиться компоновка транзакции. Когда набирается достаточное количество участников, формируется транзакция и отправляется на подпись каждому из отправителей. После этого она готова к отправке в сеть.
Пример PrivateSend-транзакции в Dash, которая использует по три разных адреса отправителей и получателей. Источник — Dash detailed:
В отличие от CoinJoin, пользователь избавляется от необходимости следить самому за тем, чтобы его публичный ключ не появился дважды в одном из таких замешиваний. Однако это слабо защищает от отслеживаний источника — можно банально отследить цепочку «конвертаций» до реального выхода, откуда применить одну из стандартных для биткоина техник анализа источников транзакций. Эмпирически было выявлено, что если у выходов имеется один общий предок, то, скорее всего, это и есть сам отправитель.
Деноминация выходов приватной транзакции усложняет атаки типа CoinJoin sudoku, но не защищают от них полностью. Вкупе с некоторыми эвристиками это преимущество может быть сведено на нет.
Тот факт, что протокол замешивания является частью Dash и избавляет от необходимости пользоваться сторонними сервисами, не отменяет необходимость доверия к выбранным мастернодам. Никто не может гарантировать, что владелец какой-нибудь из мастернод не собирает логи о запросах на проведение транзакции на своей стороне.
Как и в случае с CoinJoin, пользователь может столкнуться с нехваткой ликвидности для замешивания своего перевода. В таком случае пользователям рекомендовали выбирать несколько мастернод для формирования транзакции, однако это только увеличивает риск наткнуться на недобросовестного владельца.
Сейчас в Сети активно критикуют модель приватности Dash. На Reddit можно найти посты о том, как кому-то удалось деанонимизировать часть private send-транзакций. Например, в этом посте автор утверждает, что за последние 15 дней ему удалось отследить около 13% транзакций до их источника.
ZCash
ZCash появился в 2016 году как реализация протокола ZeroCash и стал всем известен благодаря использованию доказательств с нулевым разглашением zkSNARKs. ZCash не обязывает использовать только конфиденциальные транзакции — большинство транзакций в его сети прозрачные и унаследовали свое устройство от биткоина.
Для использования функции конфиденциальных платежей пользователь должен перевести необходимую часть средств в так называемый shielded pool. Таким образом защищенные транзакции можно разделить на три типа в зависимости от стадии прохождения shielded pool-а:
- Shielding transaction. Транзакция из публичного пространства в shielded pool. Здесь отправитель, в отличие от получателя, не скрывается, но видно, сколько средств переходит «в тень».
- Private transaction. Транзакция внутри shielded pool-а. Здесь неизвестны ни отправитель, ни получатель, ни сумма перевода. Фактически известно только то, что в этой транзакции тратятся средства, «которые когда-либо попадали в пул».
- Deshielding transaction. Транзакция, выводящая средства из pool-а. Неизвестно, кто их выводит, но известно, кому и сколько.
Иллюстрация разных типов транзакции. Слева направо: обычная прозрачная транзакция, shielding transaction, private transaction, deshielding transaction. Источник — «An Empirical Analysis of Anonymity in Zcash»:
Важно отметить, что сеть требует, чтобы все сгенерированные монеты (block reward-ы) попадали в shielded pool, тем самым эффективно увеличивая anonymity set для замешивания транзакций.
Эмпирический анализ публичных транзакций в ZCash (на начало 2018 года они составляли 73% от общего числа транзакций) не представляет особых сложностей и подвержен тем же техникам, что и сам биткоин. Однако получить статистику по тому, кто и сколько средств выводил из shielded pool-а, намного сложнее. Одной из первых попыток проанализировать защищенные транзакции в 2018 году была работа «An empirical analysis of anonymity in Zcash». Ее авторы исследовали платежи на основании нескольких эвристик — наблюдений, сделанных на основании поведения пользователей:
- Если в транзакции тратится два и более прозрачных выхода (вне зависимости от того, прозрачная это транзакция, shielded или смешанного типа), то, скорее всего, эти выходы принадлежат одному и тому же участнику сети.
- Если в прозрачном переводе указан только один получатель (т. е. без сдачи), то, скорее всего, все источники средств этой транзакции принадлежат получателю.
- Любой вывод из shielded pool-а на сумму 250.0001 ZEC (таких переводов было достаточно много) принадлежит основателям сети. Это приблизительно равнялось награде за 100 блоков.
- Если в deshielding-транзакции более 100 выходов, один из которых принадлежит известному майнинговому пулу, то можно заключить, что это вывод средств майнеров. Все остальные выходы можно обозначить как принадлежащие майнерам.
- Если есть пара shielding- и deshielding-транзакций с уникальной суммой и разницей в несколько блоков, причем shielding-транзакция случилась раньше, то эти транзакции связаны между собой. Это описывается в работе «On the linkability of Zcash transactions».
На иллюстрациях ниже приведена некоторая аналитика, которую удалось построить авторам работы на базе этих эвристик:
Авторы смогли идентифицировать 65,6% транзакций, выводящих средства из пула. Значительных успехов в идентификации платежей внутри пула достичь не удалось.
В недавней работе «Privacy and Linkability of Mining in Zcash» исследователи из Университета Люксембурга (University of Luxembourg) проанализировали работу майнинговых пулов и выявили два паттерна при выплате вознаграждений:
- Майнинговый пул выводит награду за блок на свой публичный адрес и оттуда раздает вознаграждение майнерам. Они назвали это Pattern T.
- Майнинговый пул хранит добытые монеты в shielded pool-е и в какой-то момент выдает вознаграждения майнерам оттуда на их публичные адреса. Этот паттерн назвали Pattern Z.
Установить принадлежность транзакций конкретным пулам не было сложно — исследователи просто сопоставили публичные адреса для выплат вознаграждений с адресами топовых майнеров, опубликованных на сайтах самих пулов.
Следуя такому подходу, исследователям удалось увеличить долю идентифицированных выплат пулов с 65,6% в предыдущей работе до 84,1% на одних и тех же данных.
Однако у этого подхода есть свои минусы:
- Его можно применять к достаточно узкому временному интервалу примерно в 2000 блоков (около четырех дней), так как майнеры склонны менять майнинговые пулы;
- Очень сложно выявить транзакции, принадлежащие маленьким пулам, которые нашли лишь несколько блоков, так как их транзакции с выплатами не вписываются в общий паттерн с крупными пулами из-за малого числа выходов в них.
Результаты анализа представлены на иллюстрации:
На основании этих данных авторы делают вывод, что 95,6% всех транзакций ZCash является потенциально «раскрываемыми», что приближает приватность ZCash к уровню биткоина.
Как мы видим, несмотря на сильную криптографическую защиту очень много данных для анализа и построения выводов дает открытая информация в блокчейне.
Monero
Monero была запущена в апреле 2014 года и является самой популярной реализацией протокола CryptoNote. Вместо публичных адресов получателей средств Monero использует одноразовые адреса в каждом платеже, таким образом для стороннего наблюдателя нет возможности криптографически сопоставить одноразовый адрес получателя с его публичным адресом. Для сокрытия отправителя эта технология использует идею замешивания, однако делает это способом, отличным от CoinJoin. В Monero отправителю не нужно искать другого кандидата, чтобы совершить совместную транзакцию. Вместо этого кошелек сам набирает произвольные выходы из блокчейна, прячет среди них тот выход, который желает потратить, и скрепляет это все кольцевой подписью. Кольцевая подпись здесь служит для того, чтобы убедить валидатора транзакции в том, что отправитель действительно владеет одним из замешиваемых выходов, и он не является потраченным. Так достигается высокая степень неопределенности при попытке отследить платеж до его получателя. Пример мы можем видеть на иллюстрации:
Получается, что «степень приватности» транзакции зависит от размера ее кольцевой подписи — чем больше случайных выходов используется для замешивания, тем сложнее ее отследить.
До 2016 года замешивания в сети Monero были необязательными, а потом минимальный размер кольцевой подписи подняли до 3. Так он рос каждый год и сейчас составляет 11.
В 2017 году в работе под названием «An Empirical Analysis of Traceability in the Monero Blockchain» группа исследователей указала на две слабости протокола криптовалюты (стоит отметить, что они были не первыми, кто говорил об этом, но они смогли на практике предоставить результаты анализа транзакций).
Первая уязвимость относится к негативному эффекту от использования ранее допустимых транзакций с нулевым замешиванием. Ее также называют анализом при помощи «цепной реакции». Авторы на практике показали, что полагаться только на анонимизацию при помощи одноразовых адресов не только бесполезно, но это также ведет к деанонимизации других платежей, использующих эти выходы в качестве замешиваемых — уже известно, где они были потрачены. При малом числе фальшивых выходов в транзакции реальные можно вычислить с большой долей вероятности методом исключения. Таким образом исследователям удалось отследить около 62% транзакций, сделанных до февраля 2017 года.
Вторая уязвимость связана со способом, которым кошелек выбирал выходы для замешивания. Все дело в том, что фальшивые выходы выбирались из блокчейна равномерно, что на тот момент не отражало поведенческих паттернов пользователей криптовалюты. Авторы заметили, что пришедшие средства пользователь чаще всего тратит в течение двух-трех месяцев. Таким образом, в большинстве случаев реально потраченными оказывались самые свежие выходы. Ниже показаны примеры распределений возраста выходов в транзакциях:
При помощи этой эвристики на тот момент авторам удалось раскрыть примерно 80% источников транзакций.
Однако сейчас эти техники представляют больше академический интерес, так как данные слабости разработчики уже исправили — минимальный mixin подняли до 11, закон распределения, по которому набираются выходы для замешивания, заменили на более приближенный к реальности и реализовали протокол конфиденциальных транзакций.
В другой работе под названием «New Empirical Traceability Analysis of CryptoNote-Style Blockchains» исследователи пытаются проанализировать транзакции Monero при помощи «закрытых множеств» (англ. closed sets).
Объясним на примере. Допустим, у нас есть четыре выхода pk1, pk2, pk3 и pk4. Теперь нам надо найти четыре такие транзакции, где будут использованы исключительно они:
В нашем случае мы можем заключить, что эти четыре выхода все тратятся в этих четырех транзакциях, и в следующий раз, когда мы встретим транзакцию, замешивающую хотя бы один из этих выходов, мы можем исключить их из anonymity set-а как заведомо ложные.
Авторы проводили эксперименты на блокчейне Monero с уже включенными конфиденциальными транзакциями и минимальным размером кольцевой подписи 5. Однако, поскольку такие множества — довольно редкое явление, им удалось отследить только 0,084% выходов, и эту технику можно рассматривать как дополнение к другим способам анализа. Такой результат позволяет заключить, что современная Monero предоставляет довольно сильные гарантии конфиденциальности.
Что в итоге
Мы провели довольно широкое исследование способов анализа анонимных блокчейнов. Хотя криптографию взломать никто даже не пытается, слабое место некоторых из них — централизованная природа сервисов анонимизации, других — возможность проводить прозрачные транзакции. По нашему мнению, наилучшие гарантии конфиденциальности на сегодня (с исправленными ранее найденными уязвимостями) дает Monero, т. к. последние исследования не дают сколько-нибудь значимые результаты отслеживаемости транзакций.
Автор: Exantech