Анализ отпечатков кошелькаАнализ отпечатков кошелька (часть 1)
Тщательный аналитический подход иногда позволяет выявить, какое программное обеспечение сгенерировало определенную транзакцию, потому что способы создания транзакций различными ПО кошельков часто отличаются. Анализ отпечатков кошелька можно использовать для обнаружения выходов сдачи, потому что выход сдачи всегда будет оставлять тот же отпечаток.
В качестве примера рассмотрим пять типичных транзакций, каждая из которых потребляет по одному входу и производит два выхода. 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.BIP69. Лексикографическое индексирование входов и выходов транзакций. Этот BIP (предложение по улучшению Биткоина) описывает стандартный способ для кошельков упорядочить свои входы и выходы с целью повышения конфиденциальности. В настоящее время в экосистеме кошельков есть те, которые соответствуют стандарту и те, которые не реализуют его, что облегчает снятие отпечатков кошелька. Обратите внимание, что обычная транзакция “один вход-два выхода” будет случайным образом следовать стандарту BIP69 в 50% случаев.
- Количество входов и выходов. Разные пользователи часто выстраивают свои транзакции по-разному. Например, люди часто совершают транзакции только с двумя выходами; оплата и сдача, в то время как крупные организации, такие как казино или биржи, используют практики под названием
консолидация и
пакетирование. Адреса сдачи, как правило, не используются для создания пакетной транзакции. Эту эвристику также называют “эвристикой потребителя”.
- Поля в транзакциях. Значения в формате транзакции, которые могут различаться в зависимости от программного обеспечения кошелька:
nLockTime — это поле в транзакции, устанавливаемое некоторыми кошельками, чтобы сделать “охоту на высокие комиссии” (fee-sniping) менее прибыльной. Некоторые кошельки в экосистеме реализуют эту функцию, а некоторые нет. nLockTime также может использоваться в некоторых протоколах конфиденциальности, таких как
CoinSwap.
nSequence также является одним из примеров.