Хабрахабр

[Из песочницы] Деанонимизация транзакций датасета Elliptic

Мы занимаемся анализом блокчейн транзакций на предмет их аффилированности к преступным действиям, таким, как обналичка, кражи, финансирование терроризма и подобное. Всем привет, меня зовут Александр, и я data scientist в компании Clain.

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

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

Это позволяет примерно (так как граф вырезан из целого блокчейна и часть связей потеряны) оценить количество адресов отправителей и получателей для каждой транзакции. По данным файла elliptic_txs_edgelist.csv можно построить направленный граф и посчитать входящую и исходящую степень каждой транзакции txId. Часть атрибутов лучше остальных коррелируют с величиной входящей и исходящей степени графа: cor(out-degree,V16) = 0. В табличке elliptic_txs_features.csv проименуем колонки в виде V1 — V167 и сразу заменим V1 на txId, V2 на elliptic_time. 680, cor(in-degree,V6) = 0. 689, cor(out-degree,V7) = 0. 582. 589, cor(in-degree,V8) = 0. Посмотрим на эти переменные.

image
Scatterplot смещенной переменной V6 и входящей степени графа из elliptic_txs_edgelist

По графику видно, что для каждого значения in-degree существует верхний предел значений V6, кроме того, если отсортировать V6 и найти разницу между близкими значениями, то она будет меняться как целое число умноженное на константу:

image
Уникальные значения изменения отсортированного V6 (diff_V6), встречаемая частота (Freq) значений diff_V6 и отношение diff_V6 к минимальному значению из diff_V6.

075038 встречается намного чаще остальных значений и вероятно связано с изменением величины in-degree на 1. В таблице изменений V6 можно видеть что 0. С учетом того, что минимальное количество входов в транзакцию равно 1 (если это не coinbase транзакция), запишем:

inputs_count_V6 = (V6 — min(V6)) / min(diff_V6) + 1.

После схожего анализа для V7, V8, V16:

  • inputs_count_V6 = 13.3266685112665 * V6 + 2.62544842444139,
  • inputs_unique_count_V8 = 11.9243179897452 * V8 + 2.34747189219164,
  • outputs_count_V7 = 50.3777694891647 * V7 + 4.21030186142152,
  • outputs_unique_count_V16 = 49.3957564403755 * V16 + 4.121809499973.

Здесь inputs_count_V6 – полное количество входов в транзакцию, inputs_unique_count_V8 – количество уникальных входов в транзакцию, outputs_count_V7 – количество выходов из транзакции, outputs_unique_count_V16 – количество уникальных выходов.

Ответ прост, всегда inputs_count >= inputs_unique_count, и подставив значения V6 и V8 из elliptic_txs_features.csv в указанные формулы, можно убедиться, что неравенство (13. Может возникнуть вопрос – почему для inputs_count сопоставлено V6, а не V8? 62544842444139) >= (11. 3266685112665 V6 + 2. 34747189219164) выполняется так же всегда, что позволяет корректно соотнести между собой V6, V8, inputs_count и inputs_unique_count. 9243179897452 V8 + 2. То же самое для outputs_count и outputs_unique_count.

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

image
Дата найденных уникальных транзакций для каждого elliptic_time.

80488 + 1155672. По графику выше видно, что дата линейно зависит от elliptic_time:
approx_time = 1450468509. И так как elliptic_time меняется от 1 до 49, дата approx_time меняется от 2016-01-01 до 2017-10-04, с шагом 1155672. 19512195 * elliptic_time.
Тут approx_time – примерный unixtime для каждого elliptic_time. 37584 дней. 19512195 / 3600 / 24 = 13.

Например транзакция с 1 входом и 13107 выходами существует только одна – dd9f6bbf80ab36b722ca95d93268667a3ea6938288e0d4cf0e7d2e28a7a91ab3. С учетом временных ограничений на возможные транзакции и комбинаций уникального количества входов и выходов можно найти 189 транзакций, которые подходят под данные условия и встречаются во всем блокчейне биткойна только 1 раз.

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

  • fee_V4 = 81341.4537626213 + 386323.710952989 * V4,
  • total_out_value_V3 = 2742460603.92287 + 15853961614.9796 * V3.

Искомую величину total_in_value найдем из равенства:
total_in_value = total_out_value + fee.

9% всех транзакций датасета Elliptic. Суммарная найденная информация позволяет идентифицировать 92. 6%. Другую часть можно раскрыть, если использовать граф транзакций из elliptic_txs_edgelist.csv, сравнив его с графом, построенным на множестве подходящих транзакций с их связями, записанными в блокчейне, это добавляет еще 6.

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»