Tracciamento e grafi delle transazioni · Lezione 2 di 6
Tracciamento conforme a uno standard probatorio
14 min di lettura
Qualsiasi analista può seguire una transazione su un explorer. Un tracciamento forense è diverso: un pubblico ministero può leggerlo prima di decidere se formulare un'accusa, un tribunale può basarsi su di esso per congelare i beni di qualcuno e un esperto della controparte può rieseguirlo riga per riga. Questa lezione illustra che cosa afferma un tracciamento, come classificarlo e delimitarlo, come documentare ogni passaggio affinché possa essere verificato e come la riesecuzione indipendente trasformi un tracciamento in una prova.
Tracciamento in avanti e a ritroso
Il tracciamento in avanti parte da una fonte nota, come un indirizzo associato a un furto, un pagamento di riscatto o un wallet soggetto a sanzioni, e segue gli archi in uscita per individuare quali servizi abbiano ricevuto i fondi, quali indirizzi li detengano ancora e se sia possibile congelarne una parte. Il tracciamento a ritroso parte da una destinazione, tipicamente un deposito presso un exchange, e segue gli archi in entrata per rispondere alla domanda «da dove proviene questo denaro?». I team di gestione del rischio degli exchange lo utilizzano per le verifiche sull'origine dei fondi: un deposito a un passaggio da un mercato darknet presenta un rischio diverso rispetto a uno distante dieci passaggi attraverso un grande exchange.
Entrambe le direzioni misurano la distanza in passaggi, ossia il numero di trasferimenti tra due punti. L'esposizione diretta indica che la controparte si trova a un passaggio di distanza; l'esposizione indiretta indica che il collegamento passa attraverso indirizzi intermedi. Il numero di passaggi ha significato solo in un grafo definito con precisione (Lezione 3.1): un passaggio in un grafo di entità può corrispondere a dieci passaggi in un grafo di indirizzi.
Che cosa afferma un tracciamento
Un tracciamento è un'affermazione sul flusso di valore: il valore uscito dall'indirizzo A ha raggiunto l'indirizzo B attraverso un percorso dichiarato, secondo un metodo di allocazione dichiarato, sulla base delle osservazioni effettuate fino a un blocco dichiarato. Non è un'affermazione sull'identità. «I proventi del riscatto hanno raggiunto un indirizzo di deposito dell'Exchange K» è una risultanza del tracciamento. «L'indagato ha ricevuto il riscatto» combina una risultanza del tracciamento, un'attribuzione e, solitamente, documentazione acquisita mediante strumenti giuridici (Lezione 4.5).
Le affermazioni possono risultare errate per ragioni diverse. Chiunque disponga di una copia della blockchain può verificare un flusso; un'attribuzione si basa su etichette, documentazione o euristiche che possono essere errate o non aggiornate. Se vengono fuse in un'unica frase, a un esperto della difesa basta confutare l'affermazione più debole per screditarle entrambe. Occorre scomporre ogni risultanza in tre domande:
| Domanda | Prove tipiche | Debolezza tipica |
|---|---|---|
| Flusso: il valore si è spostato da A a B? | Dati delle transazioni verificati su un nodo | Quasi nessuna, una volta che il blocco è definitivo |
| Allocazione: quanto di quel valore corrisponde al valore di interesse? | Un metodo di tracciamento dichiarato | Il risultato dipende dal metodo scelto |
| Controllo: chi controlla A o B? | Euristiche, etichette, documentazione dei fornitori | Tassi di errore, etichette non aggiornate, indirizzi condivisi |
Tre tipi di collegamento
Ogni passaggio si basa su uno di tre tipi di collegamento.
Un collegamento deterministico è scritto nei dati stessi della blockchain. In una blockchain UTXO, un input che spende un output precedente collega le due transazioni. In una blockchain basata su account, una transazione riuscita che trasferisce valore a un indirizzo, oppure un evento Transfer emesso dal contratto del token in una transazione riuscita, è deterministico. Chiunque esegua un nodo ottiene la stessa risposta.
Un collegamento euristico applica una regola generalmente valida, ma con eccezioni note: l'euristica della proprietà comune degli input, l'individuazione del resto o un indirizzo di deposito che inoltra fondi a un hot wallet (Lezioni 4.1 e 4.2). Ciascuna presenta casi di errore documentati, come le transazioni CoinJoin o i wallet che introducono casualità nella gestione del resto.
Un'inferenza è una conclusione tratta da schemi indiziari: un prelievo di importo simile 20 minuti dopo un deposito, uno schema orario corrispondente, una fonte comune di finanziamento del gas. Le inferenze sono piste investigative. Giustificano una richiesta di documentazione; raramente sono sufficienti, da sole, a sostenere una risultanza.
Un collegamento deterministico dimostra che il valore si è spostato da un indirizzo a un altro. Non dimostra che la stessa persona controlli entrambe le estremità e, quando più input confluiscono in un'unica transazione, non indica quale parte di un output costituisca «il denaro rubato». Queste sono questioni di controllo e di allocazione.
Contaminazione e regole di arresto
La contaminazione è la quota di un saldo o di un trasferimento che l'analista attribuisce alla fonte di interesse. Non è una proprietà delle monete; è il risultato di una regola applicata dall'analista. Quando valore contaminato e valore pulito confluiscono nello stesso indirizzo o nella stessa transazione, una regola di allocazione stabilisce quale valore in uscita porti con sé la contaminazione:
| Regola | Presupposto | Conserva il valore? |
|---|---|---|
| FIFO (primo entrato, primo uscito) | I fondi si comportano come una coda | Sì |
| LIFO (ultimo entrato, primo uscito) | I fondi si comportano come una pila | Sì |
| Haircut (proporzionale) | I fondi si mescolano perfettamente | Sì |
| Poison | Qualsiasi contatto contamina tutti i successivi deflussi | No |
Poison e haircut sono stati denominati in uno dei primi studi sull'attribuzione di punteggi di rischio per Bitcoin (Möser, Böhme e Breuker, 2014); FIFO riprende la convenzione contabile per i conti bancari con fondi commisti. Nessuno è «corretto»; ciascuno è un modello e possono individuare destinatari diversi per gli stessi fondi rubati. La Lezione 3.3 li illustra mediante un registro e affronta la scelta e la difesa di un metodo. Su larga scala le differenze diventano notevoli: in «Bitcoin Redux» (2018), Anderson, Shumailov, Ahmed e Rietmann hanno tracciato i 46.653 BTC sottratti nel furto ai danni di Linode del 2012, riscontrando che haircut contaminava circa il 93% degli indirizzi nel loro insieme di dati, mentre FIFO ne contaminava circa l'1,3%. Poison si propaga ancora più rapidamente, motivo per cui è adatto a segnalare contatti, mai a quantificare importi. Quando un risultato è rilevante, occorre eseguire il tracciamento con due metodi: se entrambi indicano lo stesso servizio, la confidenza aumenta; se divergono, occorre riportare l'intervallo dei risultati.
Ogni tracciamento richiede inoltre regole di arresto, stabilite in anticipo e annotate negli appunti del caso:
- Servizio raggiunto: i fondi entrano in un exchange, in un gestore di pagamenti o in un altro servizio di custodia, dove il tracciamento on-chain termina e subentra la documentazione (Lezione 3.4).
- Soglia di diluizione: la quota contaminata scende al di sotto di un livello prestabilito, ad esempio l'1%.
- Limite di passaggi: una distanza massima, ad esempio da 3 a 6 passaggi, oltre la quale i collegamenti sono troppo deboli per essere riportati.
- Soglia minima di valore: importi troppo piccoli per essere rilevanti, come dust inferiore a una frazione prestabilita della somma originaria.
- Finestra temporale: i trasferimenti avvenuti prima dell'arrivo dei fondi non possono veicolarli.
L'ultima regola è facile da dimenticare in una query. Un indirizzo che ha ricevuto fondi rubati il 10 marzo e ha effettuato un pagamento a qualcuno il 2 marzo non lo ha pagato con quei fondi rubati.
Classificazione dei collegamenti
Un tracciamento richiede una scala di classificazione dichiarata, affinché ogni collegamento abbia un grado interpretabile dal lettore. Le unità definiscono le proprie scale; quella riportata di seguito è esemplificativa, non uno standard pubblicato, ed è utilizzata in tutto questo corso (le Lezioni 4.5 e 5.3 la estendono all'attribuzione e ai collegamenti tra blockchain).
| Grado | Fondamento | Esempio |
|---|---|---|
| A, registrato on-chain | Collegamento deterministico verificato rispetto a un nodo | Un input spende l'output 0 della transazione precedente |
| B, corroborato | Un'euristica confermata da prove indipendenti, come documentazione del fornitore o una seconda euristica non correlata | Un presunto indirizzo di deposito confermato dalla documentazione dell'exchange |
| C, singola euristica | Un'euristica con casi di errore noti | Un output di resto individuato mediante corrispondenza del tipo di script |
| D, inferenza | Sola correlazione o solo schema ricorrente | Prelievo di importo simile poco dopo un deposito |
Due regole rendono utile la scala. In primo luogo, un percorso è solido quanto il suo collegamento più debole: un tracciamento di cinque passaggi con un passaggio di grado C è un percorso di grado C per qualsiasi affermazione che dipenda da quel passaggio. In secondo luogo, occorre classificare ogni affermazione, non ogni transazione: lo stesso passaggio può sostenere un flusso di grado A e un'affermazione sul controllo di grado C. La formulazione della probabilità e della confidenza nella relazione è trattata nella Lezione 9.2.
Un esempio di percorso di tracciamento
Una vittima ha pagato un riscatto di 2,50000000 BTC. L'esaminatore lo traccia in avanti:
| Passaggio | Transazione | Osservazione | Flusso | Affermazione sul controllo |
|---|---|---|---|---|
| H1 | a71f…09d2 | Il wallet della vittima paga 2,50000000 BTC a bc1q…ra5m | A | La documentazione del pagamento della vittima conferma il mittente (B) |
| H2 | 5d07…e310 | Spende l'output di 2,5 BTC più 0,80000000 BTC da bc1q…x8w2; un output di 3,29990000 BTC a bc1q…c0n1; commissione di 0,00010000 | A | bc1q…x8w2 controllato dallo stesso soggetto: euristica degli input comuni (C) |
| H3 | 9c1e…44ab | bc1q…c0n1 paga 1,20000000 BTC a bc1q…dx7e e 2,09980000 BTC a bc1q…p3e9; commissione di 0,00010000 | A | bc1q…dx7e è un indirizzo di deposito dell'Exchange K: fondi raccolti insieme a depositi noti (C) |
Gli importi quadrano: 2,5 + 0,8 = 3,3 BTC in entrata, 3,2999 in uscita più 0,0001 di commissione; quindi 1,2 + 2,0998 + 0,0001 = 3,2999. Il flusso dall'indirizzo del riscatto a bc1q…dx7e è di grado A a ogni passaggio e non dipende dall'euristica degli input comuni in H2: il valore si è spostato indipendentemente da chi possedesse bc1q…x8w2. Ciò che cambia il quadro è l'allocazione. I 2,5 BTC sono stati uniti a 0,8 BTC di origine sconosciuta, quindi la quota del deposito di 1,2 BTC considerata provento del riscatto dipende dal metodo. Con haircut è pari a 1,2 × 2,5 ÷ 3,3 = 0,90909091 BTC; con qualsiasi metodo che conservi il valore non può superare 1,2 BTC. L'etichetta di indirizzo di deposito resta di grado C finché la documentazione dell'Exchange K non la conferma, portandola al grado B.
I casi pubblici mostrano la stessa struttura. Nel giugno 2021 gli investigatori hanno annunciato il sequestro di 63,7 BTC dei circa 75 BTC di riscatto pagati dopo l'attacco a Colonial Pipeline. Secondo il comunicato ufficiale, hanno seguito molteplici trasferimenti sul registro pubblico fino a un indirizzo di cui possedevano la chiave privata. Il tracciamento ha stabilito dove fosse finito il valore; il sequestro è dipeso da prove separate relative al controllo della chiave.
Documentazione di ogni passaggio
Ogni passaggio viene inserito in una registrazione strutturata, redatta al momento dell'esame del passaggio e non ricostruita durante la stesura della relazione. Una registrazione minima per H3:
{
"case_id": "CF-2026-0142",
"hop_id": "H3",
"chain": "bitcoin-mainnet",
"txid": "9c1e…44ab",
"spends": "5d07…e310:0",
"output_ref": "9c1e…44ab:0",
"block_height": 939011,
"block_hash": "0000…3f9a",
"block_time_utc": "2026-03-02T14:07:51Z",
"from": "bc1q…c0n1",
"to": "bc1q…dx7e",
"amount_sat": 120000000,
"allocation": {"method": "haircut", "traced_sat": 90909091},
"grades": {"flow": "A", "control": "C"},
"basis": "output 0; fondi del destinatario raccolti insieme a depositi K noti (vedere ATTR-11)",
"source": "nodo proprio, Bitcoin Core 29.0, verificato 2026-03-05T09:12Z",
"examiner": "EX-07"
}
La registrazione identifica l'output esatto, perché una transazione può pagare più soggetti; memorizza l'importo come numero intero di satoshi per evitare scostamenti dovuti agli arrotondamenti; conserva sia l'hash sia l'altezza del blocco, in modo da rendere rilevabile una riorganizzazione o un errore di digitazione. Separa l'allocazione e i gradi dai fatti osservati, cita il fondamento di ogni affermazione non deterministica e registra la fonte dei dati e il momento della verifica, in UTC. Nelle blockchain basate su account, un indice di log o una posizione nella traccia sostituisce il riferimento all'output. Il calcolo degli hash e la conservazione di queste registrazioni sono trattati nelle Lezioni 8.2 e 8.3.
Espansione dei passaggi in SQL
Un tracciamento in avanti delimitato può iniziare come query ricorsiva su un elenco di archi (Lezione 3.1). La maggior parte dei motori supporta le CTE ricorsive, ma non tutti; in alcuni data warehouse si procede invece per iterazioni, un passaggio alla volta, da un notebook.
WITH RECURSIVE hops AS (
SELECT dst AS address, 1 AS hop, block_number
FROM edges
WHERE src = '0xa1b2…9f' -- punto iniziale: l'indirizzo del furto, in minuscolo
UNION ALL
SELECT e.dst, h.hop + 1, e.block_number
FROM hops h
JOIN edges e ON e.src = h.address
AND e.block_number >= h.block_number -- il tempo procede in avanti
WHERE h.hop < 4 -- limite di passaggi
AND NOT EXISTS (SELECT 1 FROM labels AS l -- arresto presso i servizi
WHERE l.address = h.address
AND l.category IN ('exchange_deposit', 'exchange_hot_wallet',
'payment_processor'))
)
SELECT address, MIN(hop) AS first_hop, COUNT(*) AS paths
FROM hops
GROUP BY address;
La parte ricorsiva segue gli archi in uscita solo a partire dal blocco in cui sono arrivati i fondi, si arresta a quattro passaggi e non prosegue attraverso gli indirizzi etichettati come servizi di custodia nella tabella labels della Lezione 2.7: tre regole di arresto integrate nella query. Individua gli indirizzi raggiungibili, ma non alloca gli importi, operazione che richiede i flussi in entrata e in uscita di ciascun indirizzo in ordine cronologico. Il numero di percorsi cresce in modo esplosivo intorno agli indirizzi molto attivi: un ulteriore motivo per fermarsi presso i servizi.
Riesecuzione indipendente
Le prove basate sulla blockchain presentano un vantaggio insolito: i dati sottostanti sono pubblici e identici per chiunque convalidi la blockchain. Un tracciamento può quindi essere rieseguito da un'altra persona a partire dai dati grezzi, ed è opportuno che lo sia.
ISO/IEC 27037 distingue la ripetibilità, ossia l'ottenimento degli stessi risultati con la stessa procedura nello stesso ambiente, dalla riproducibilità, ossia l'ottenimento degli stessi risultati con lo stesso metodo in un ambiente diverso, ad esempio da parte di un altro esaminatore con un altro nodo o strumento. La riesecuzione mette alla prova la riproducibilità a due livelli di rigore:
- Verifica: un secondo esaminatore controlla ogni registrazione di passaggio rispetto al proprio nodo: il txid esiste, l'output e l'importo corrispondono, l'hash del blocco corrisponde e il blocco è definitivo.
- Riesecuzione indipendente: il secondo esaminatore parte soltanto dai punti iniziali, dall'ambito, dal metodo e dalle regole di arresto, senza vedere il percorso del primo esaminatore, ed esegue nuovamente il tracciamento. La concordanza assume così un significato maggiore rispetto a un semplice controllo aritmetico e lavorare alla cieca riduce il bias di conferma.
Quando i risultati differiscono, occorre individuare il primo passaggio in cui divergono e documentarne la causa: una diversa identificazione del resto, un diverso metodo di allocazione, un blocco limite successivo, un trasferimento interno non rilevato. La divergenza va risolta a partire dai dati grezzi, conservando nel fascicolo del caso sia il disaccordo sia la sua risoluzione. Un tracciamento che un secondo esaminatore competente non riesce a riprodurre non è pronto per essere utilizzato come base affidabile. La validazione degli strumenti e la riesecuzione dei tracciamenti al di fuori dello strumento sono trattate nella Lezione 3.6.
Focus sull'esame: tracciamento in avanti rispetto al tracciamento a ritroso, passaggi ed esposizione diretta rispetto a quella indiretta; il fatto che un tracciamento affermi un flusso di valore, non un'identità, e la separazione tra flusso, allocazione e controllo; collegamenti deterministici, collegamenti euristici e inferenze, e ciò che un collegamento deterministico non dimostra; contaminazione come risultato di una regola dichiarata, quali regole conservano il valore e la differenza di diffusione tra haircut e FIFO su larga scala; regole di arresto, in particolare il fatto che i deflussi precedenti a un afflusso non possano veicolarne il valore; una scala di classificazione dichiarata e la regola del collegamento più debole; quadratura di importi e commissioni passaggio per passaggio; campi di una registrazione di passaggio; ripetibilità rispetto a riproducibilità (ISO/IEC 27037) e verifica rispetto a riesecuzione indipendente.