Śledzenie transakcji w sieci Bitcoin

Cryptocurrency Forensics. Część 3 – Śledzenie transakcji w sieci Bitcoin.

autor: TMG


Celem trzeciej części serii Cryptocurrency Forensics jest analiza przepływu środków pomiędzy portfelami/ adresami w sieci Bitcoin (polecamy część 1 oraz część 2 serii dla lepszego zrozumienia poruszanych tu zagadnień).


Nie będziemy skupiać się na mechanizmie zakładania czy operowania portfela, jeżeli jednak ktoś chce zgłębić tematykę od strony użytkownika – zapraszamy pod ten adres.


1. Klucze kryptograficzne i adresy.

W czasie czynności śledczych, możemy natrafić na ślady takie jak portfele (na maszynie) czy zapiski (papier, maszyna) – dlatego musimy rozpoznać pewne ich formaty, które mogą nam umożliwić odzyskanie środków.


Klucze kryptograficzne

Przy zakładaniu portfela wykorzystane zostaną klucze (lub pośrednie rozwiązanie: fraza seed – omówiona w następnym punkcie):

  • Prywatny – na bazie którego stworzony zostanie z kolei klucz publiczny.
  • Publiczny – finalnie, w procesie haszowania (czyli przekształcania danych w krótki i unikalny ciąg znaków o stałej długości), zostanie utworzony adres Bitcoina (przez portfel).

Obydwa klucze generowane są na maszynie użytkownika (z ang. non custodial wallets) w momencie konfiguracji portfela. Dodajmy, że portfele giełdy kryptowalut (z ang. custodial wallets), nie generują kluczy po stronie użytkownika.


Klucz prywatny i publiczny działają jako para i są matematycznie połączone (będą używane do odbierania transakcji, autoryzacji i podpisywania).


Obecnie najczęściej spotykane są portfele, zgodne ze standardem BIP-32.


Tab. 1 Spotykane reprezentacje kluczy w portfelu Bitcoina (za: https://en.bitcoin.it/wiki/List_of_address_prefixes).

FormatDługośćZaczyna się odPrzykład reprezentacji kluczaDo czego używany
Raw (czyli tzw. surowy)256 bitów/ 64 znakiLosowoab1edf9e…Narzędzia/ developerzy
WIF (Wallet import Format) uncompressed51 znaków5 lub 6
5Hwgr3u…Legacy wallets lub tylko 1 adres w portfelu
WIF compressed52 znakiL lub KL1aW4au…Legacy wallets lub tylko 1 adres w portfelu
Mini Private Key (BIP-63)22 znakiSs6c56bn…Już praktycznie nie używany, eksperymentalny
Master Key (BIP-32)111 znakówxprvxprv9s21…Nowoczesne portfele (np. Electrum), wieloadresowe

Fraza seed

W czasie konfiguracji portfel poda losowo generowane słowa (od 12 do 24), jest to tzw. fraza seed (z ang. ziarno). Fraza ta podawana jest użytkownikowi jednorazowo, a on powinien zachować ją/ zapisać w bezpiecznym miejscu.


Posiadając ją można przejąć portfel użytkownika (będzie ona używana do odzyskiwania portfela, w przypadku utraty klucza).


W uproszczeniu możemy przyjąć, że z tej frazy wyprowadzane będą klucze w portfelu Bitcoina.


Adresy

Z klucza publicznego portfel Bitcoin stworzy pulę adresów i to te adresy użyte będą do otrzymywania UTXO (od innych użytkowników sieci) oraz reszty z nie wydanych transakcji UTXO (czyli de facto nowe UTXO trafiające na adres „reszty”).


Należy nadmienić, że adresy Legacy (P2PKH) charakteryzuje kompatybilność z wieloma portfelami ale zazwyczaj ich używanie wiąże się z wyższymi opłatami transakcyjnymi (są „cięższe” w kontekście danych, bardziej obciążają sieć), nowsze generacje podpisów z kolei generują niższe opłaty (są „lżejsze”), poprawiają prywatność struktury transakcji oraz zwiększają skalowalność sieci.


Podobnie jak przy kluczach, format adresów będzie wynikał między innymi z ewolucji sieci.


Tab. 2 Różne formaty adresów w sieci Bitcoin (za: https://learnmeabitcoin.com/technical/keys/address/).

Typ skryptuNazwa potocznaIstnieje odPrzykładPrefixIlość znaków
P2PKHLegacy20091A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa126-35
P2SHNested SegWit20123J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy326-35
P2WPKHNative SegWit2017bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4bc1q42
P2WSHWitness Script2017bc1qrp33g0q5c5txsp9arysrx4k6zdkq4cyc7eef2rustlsyctftavvqqmuw36bc1q62+
P2TRTaproot2021bc1p5d7rjq7g6r4jdyhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297bc1p62-63

2. Identyfikacja adresu reszty z transakcji.

Szczegółowo mechanizm reszty opisaliśmy w części 2 serii .

Przed rozwinięciem punktu należy wspomnieć o transakcjach typu Coinbase – są to transakcje związane z nagrodą za rozwiązanie bloku (dla górnika) – nie będzie tu adresu reszty, a także transakcji poprzedzających w historii rejestru (blockchaina).


Analiza transakcji pod kątem adresu reszty umożliwi:

  • identyfikację kolejnego adresu w portfelu nadawcy i dodanie go do puli adresów do śledzenia (tworzenie klastra),
  • identyfikację nowego portfela nadawcy jeżeli adres reszty znajduje się poza portfelem z którego została nadana transakcja (np. inny format adresu reszty),
  • identyfikację adresu odbiorcy celem dalszej analizy,
  • zmapowanie zależności pomiędzy adresami.

Jednocześnie należy zaznaczyć, że nowoczesne portfele często generują nowy adres dla każdej nowej transakcji (większość z nich może zarządzać setkami takich adresów równocześnie) oraz najczęściej przeprowadzają one operacje związane z resztą automatycznie, bez angażowania użytkownika (może to utrudniać analizę).


Formuła na określenie kwoty reszt w transakcji Bitcoin to:

Wysłana suma (nadawca) - otrzymana suma (odbiorca) - opłata (nadawca) = kwota reszty
Jeżeli:
Wysłana suma (nadawca) = UTXO wydane całkowicie, wówczas brak reszty (brak nadwyżki).

Poniżej podane są najczęściej używane sposoby identyfikacji adresu reszty (należy zaznaczyć, że opisane metody mają charakter probabilistyczny/ heurystyczny – w związku z czym, wyniki muszą zostać potwierdzone z kilku źródeł):


a) Powtórzenie tego samego adresu (z ang. Address reuse)

Dany adres w portfelu nadawcy pojawia się jako input dla UTXO a reszta wraca na ten sam adres z którego została wysłana (jako nowe UTXO).


Jest to jednak sytuacja bardzo rzadka (nie jest to zalecane ze względu na zmniejszenie prywatności), może jednak wystąpić.


Przykład takiej transakcji (input 8 i output 1):

https://blockchair.com/bitcoin/transaction/e67a0550848b7932d7796aeea16ab0e48a5cfe81c4e8cca2c5b03e0416850114


b) Użycie tego samego formatu adresu dla inputu i reszty (z ang. Common prefix).

Kiedy adres nadania UTXO ma taki sam format jak adres do odbioru UTXO reszty (prefixy z tabeli 2).


Skuteczność tej metody maleje jednak w nowoczesnych portfelach (software celowo używa rozwiązań zwiększających anonimizację transakcji).


Przykład takiej transakcji (input 0 i output 1):

https://blockchair.com/bitcoin/transaction/0b86ab8d3acda4fb50d0cf411daa27f3acc7bedb6de51a1f61ec78046249d8f1


c) Pełna kwota nadania vs kwota reszty (z ang. Round amount).

Kiedy nadawca wysyła pełną liczbę bitcoinów, odbiorca otrzymuję równą jego ilość ale reszta jest już częścią nieregularną.


Przykład takiej transakcji (input 0 i output 1):

https://blockchair.com/bitcoin/transaction/ba894837239bd5b9913ea4a9c2da47a43cffbcdda6a7a4e101c098b9a7ab2096


d) Strumień inputów i „mała” reszta (z ang. Multiple inputs).

Portfel nadawcy agreguje fundusze z różnych adresów którymi zarządza (na każdym z nich jest mniejsza kwota niż wymagana), żeby osiągnąć łączną kwotę zaplanowanego UTXO, a produkuje takie outputy jak: „duży/ -e” (dla odbiorcy) i „mały” (jako reszta).


Przykład takiej transakcji:

https://blockchair.com/bitcoin/transaction/a9439a1742e702c995d1d2a1c1d0c1674135c7ea8fca89b73ee65bfb6da8063a


e) Aktywność w przyszłych transakcjach (z ang. Future spend).

Kiedy adres reszty nie jest ewidentny w danym momencie ale może pojawić się w przyszłej transakcji, jako adres z którego zostanie wysłana nowa transakcja (UTXO), co potwierdzi przynależność adresu do portfela nadawcy.


Przykład takiej transakcji:

f) analiza kombinowana – łącząca część lub wszystkie powyższe.


3. Klastry adresów Bitcoin.

Przy okazji mechanizmu reszty płynnie przejdziemy do pojęcia klastra (z ang. cluster) adresów/ portfeli – czyli technik analitycznych służących grupowaniu adresów, które mogą być kontrolowane przez jedną osobę/ organizację.


Szczegółowo analitykę tego typu przedstawia ten wpis (link: https://bitcoinmagazine.com/technical/the-scroll-a-brief-history-of-wallet-clustering).


Wróćmy na chwilę do transakcji typu Coinbase, jeżeli posiada ona kilka adresów na które jest wysyłana to istnieje duże prawdopodobieństwo, że adresy te należą do jednej osoby/ organizacji.


W technikach tych zawierają się:

  • Badanie strumienia inputów (z ang. Multi Input Heuristic) – które może kontrolować nadawca. Adresy te mogą tworzyć osobne klastry (portfele) i nie muszą należeć do tylko jednego klastra.
  • Badanie adresów reszty (z ang. Change Address Heuristic) – wskazanie nowych adresów kontrolowanych przez jedną osobę/ organizację i rozszerzenie puli tych śledzonych.
  • Badanie cech identyfikujących portfel (z ang. Wallet Fingerprinting) – identyfikacja software’u który był użyty (portfela) w transakcji by później można było identyfikować adresy należące do do jednego portfela w transakcjach wieloadresowych.

Tab. 3 Przykłady narzędzi do śledzenia transakcji/ adresów w sieci Bitcoin (za: https://github.com/codeluu/blockchain-osint)

KategoriaNazwa narzędzia / platformyKrótki opis i zastosowanieLink / Źródło
Open sourceGraphSenseFramework do ekstrakcji i analizy danych blockchain; budowanie grafów transakcji.https://github.com/graphsense/graphsense

BlockSciNarzędzie do analizy blockchainów i szybkie klastrowanie adresów (Python).https://github.com/citp/BlockSci
WalletExplorerŚledzenie historii transakcji i proste klastrowanie adresów.https://www.walletexplorer.com/
BlockchairEksploracja transakcji, wizualizacja grafów, podstawowe klastrowanie.https://blockchair.com/
MempoolEksploracja transakcji, wizualizacja grafów, podstawowe klastrowanie.https://mempool.space/bitcoin
Komercyjne / PremiumChainalysisAnaliza grafów transakcji, klastrowanie adresów, identyfikacja podmiotów.https://www.chainalysis.com/
TRM LabsPlatforma blockchain intelligence – klastrowanie, monitorowanie.https://www.trmlabs.com/

Wynikowo tworzony jest graf który umożliwia reprezentację wizualną takiej analizy w sposób przyjazny dla odbiorcy.


Rys. 1 Przykład grafu (za: https://github.com/mattconsto/blockchain-tracer?tab=readme-ov-file ) – kolorami oznaczone są klastry adresów (osobne portfele).

Przykład grafu Bitcoin

4. Mechanizmy używane przez przestępców do „zacierania śladów” (specyficzne dla sieci Bitcoin).

W toku czynności śledczych trafimy na próby ukrycia tego jak przebiegła transakcja lub gdzie finalnie trafiły środki.

Najczęściej obserwowane w praktyce śledczej mechanizmy zestawiono w poniższej tabeli.


Tab. 4 Mechanizmy ukrywania transakcji w sieci Bitcoin (za – plik do pobrania: https://go.chainalysis.com/2025-Crypto-Crime-Report.html )

MechanizmSzacunkowa skala wykorzystaniaPrzykłady/Narzędzia
CoinJoin
Bardzo wysoka (dominuje).
Mixing usług w darknet markets, ransomware (wyplaty), kradzieże giełd, money laundering.
Wasabi, Whirlpool, JoinMarket
PayJoin
Niska/ umiarkowana.
Unikanie AML w małych transakcjach, fraudy
BTCPay Server, JoinMarket P2EP


Lightning Network
Rosnąca (jednak niski udział w globalnym wolumenie).
Mikropłatności w darknet, szybkie transfery w scamach, unikanie chain analysis.
LND, c-lightning, submarine swaps
Time-delayed spending
Rosnąca (często w kampaniach ransomware i fraudach długoterminowych).
Ransomware (raty), fraudy inwestycyjne (lockupy), money laundering.
nLockTime, CLTV, cykliczne wypłaty




Omówmy zatem po krótce poszczególne typy mechanizmów ukrywania przebiegu transakcji:


a) CoinJoin

Technika łączenia wielu inputów i outputów od różnych użytkowników w jednej transakcji aby utrudnić dojście do powiązania pomiędzy adresami nadawców i odbiorców.


Jak rozpoznać: Wiele inputów (> 5-10) i równa ilość outputów o identycznych kwotach, brak oczywistego powiązania input-output.


Przykład transakcji (Wasabi Wallet CoinJoin): https://blockchair.com/bitcoin/transaction/074b02b446a3d55b26c33582f7a1b44691cd94ae87f50f430288b3213fea596a


b) PayJoin

To technika w której odbiorca płatności współtworzy transakcję z nadawcą, gdzie odbiorca dokłada swoje UTXO do tej samej transakcji, aby „zaciemnić” jej właściwy przebieg.


Utrudnia to śledzenie kto komu wysłał BTC oraz ukrywa powiązania pomiędzy adresami.


Rozpoznanie PayJoin wyłącznie na łańcuchu jest trudne (nie różnią się od zwykłych transakcji w sposób ewidentny), jednak często transakcje te mają nietypowy podział input/output i brak oczywistego change outputu.


Jak rozpoznać: transakcja ma więcej niż jednego nadawcę (input), adresy nie mają oczywistego związku (np. pochodzą z różnych portfeli), większa liczba inputów niż typowa transakcja płatnicza.


Przykład transakcji (za: https://en.bitcoin.it/wiki/JoinMarket#Probable_examples_of_JoinMarket_CoinJoins ):

https://blockchair.com/bitcoin/transaction/7104bae698587b3e75563b7ea7a9aada41d9c787788bc2bf26dd201fd7eca8a2


c) Lightning Network (tzw. Layer 2)

Opis tego mechanizmu znajduje się w części 2 serii.

Dodatkowo ten wpis rozszerza temat dość znacznie: https://calebandbrown.com/blog/bitcoin-lightning-network-explained/ .

Główne narzędzia do analizy kanałów w sieci Lightning to:

  • 1ML (https://1ml.com) – statystyki sieci, lista kanałów wraz z historią (kanały prywatne są niewidoczne).
  • OKLink (https://www.oklink.com/bitcoin/node-list) – lista aktywnych node’ów (eksplorer węzłów). Serwis prowadzi własną indeksację, dlatego wyniki mogą różnić się od tych z 1ML​.
  • Mempool (https://mempool.space/lightning) – omówiony w tabeli 3, pokazuje „P2WSH multisig” lub etykietę „Lightning” (tylko dla transakcji on chain).

Cechy transakcji Lightning na blockchainie:

  • Transakcja typu funding (otwarcie kanału):
    • Wyjściem jest UTXO typu P2WSH 2-of-2 (adres bc1q…) o określonej pojemności (wartości) kanału (np. 0.01 BTC).​
    • Wygląda jak zwykła wpłata na specjalny adres z dwoma kluczami.

Przykład transakcji typu funding: https://mempool.space/tx/1d0fc139b999e6b116d4239c11fb9dc74ee53842a30fbb15ce929585e15f18a6

  • Transakcja typu closing (zamknięcie kanału):
    • Wejście: to samo UTXO (P2WSH 2-of-2 bc1q…) z kanału otwarcia.
    • Wyjścia: 2 zwykłe adresy (P2WPKH bc1q… lub P2TR bc1p…) z podziałem środków + czasem timelock (dotyczy to głównie tzw. force close).​

Przykład transakcji typu closing: https://mempool.space/tx/a3b23982331300ef8d23bd90b64e939758835515642a65ba64234bf2cae2ac7a


d) Time delayed spending

Mechanizm Bitcoin umożliwiający odroczenie „wydania” środków dopiero po określonym czasie/ bloku, czyli są one „zamrożone” do jakiegoś konkretnego momentu w czasie.


Bardziej szczegółowo mechanizm został opisany tu: https://learnmeabitcoin.com/technical/transaction/locktime


Jak rozpoznać: Transakcja w eksploratorze (mempool, blockstream itp.) ma parametry na które możemy zwrócić uwagę jako potencjalny time lock, np. nLockTime > niż obecny blok / czas; locktime > 0; sequence < `0xffffffff`; pojawiają się parametry `OP_CHECKLOCKTIMEVERIFY` lub `OP_CHECKSEQUENCEVERIFY`.


Wykorzystanie Mempool.space umożliwi dostrzeżenie takiego mechanizmu. Narzędzie to pokazuje parametr np. `nSequence` w sekcji „Szczegóły”.


Narzędzie to w tej konkretnej transakcji

https://mempool.space/pl/tx/13e100dd08b6da0a7426ea520b0bb3ae54cef79dd045e2e4f7116023df3a5c95

wskazuje pole `Czas blokady` ustawiony na wartość bloku ‎198 370 a tymczasem sama transakcja znajduje się w bloku 198 359 – mamy opóźnienie wykonania.


Można skorzystać również z blockstream – narzędzie to w transakcji

https://blockstream.info/tx/13e100dd08b6da0a7426ea520b0bb3ae54cef79dd045e2e4f7116023df3a5c95

Wskazuje parametr `Lock time` – jego wartość może być porównana z parametrem `Block Height` do którego się odnosi i widać, że `Locktime` > `Block Height` oraz jest > 0, w związku z czym wiemy, że transakcja ma ustawiony timelock ją opóźniający.


Analiza blockchain to tylko jeden z elementów nowoczesnego śledztwa. W cyfrowym świecie każda aktywność pozostawia ślad. Jeśli potrzebujesz sprawdzić wiarygodność kontrahenta, zweryfikować majątek dłużnika lub znaleźć informacje ukryte w ogólnodostępnych źródłach, sprawdź, jak wykorzystujemy profesjonalny wywiad OSINT do zabezpieczania interesów naszych klientów.