Traçage et graphes de transactions · Leçon 2 sur 6
Réaliser un traçage à des fins probatoires
15 min de lecture
Tout analyste peut suivre une transaction sur un explorateur. Un traçage forensique est différent : un procureur peut le lire avant de décider d'engager des poursuites, un tribunal peut s'y appuyer pour geler les biens d'une personne, et un expert de la partie adverse peut le refaire ligne par ligne. Cette leçon présente ce qu'affirme un traçage, comment le noter et en délimiter la portée, comment consigner chaque saut pour permettre sa vérification, et comment une réexécution indépendante transforme un traçage en élément de preuve.
Traçage vers l'aval et vers l'amont
Le traçage vers l'aval part d'une source connue, telle qu'une adresse liée à un vol, un paiement de rançon ou un portefeuille visé par des sanctions, et suit les arêtes sortantes pour déterminer quels services ont reçu les fonds, quelles adresses les détiennent encore et si certains peuvent être gelés. Le traçage vers l'amont part d'une destination, généralement un dépôt sur une plateforme d'échange, et suit les arêtes entrantes pour répondre à la question « d'où vient cet argent ? ». Les équipes chargées des risques des plateformes d'échange procèdent ainsi pour les contrôles de provenance des fonds : un dépôt situé à un saut d'une place de marché du darknet ne présente pas le même risque qu'un dépôt situé à dix sauts, après passage par une grande plateforme d'échange.
Dans les deux directions, la distance se mesure en sauts, c'est-à-dire le nombre de transferts entre deux points. Une exposition directe signifie que la contrepartie se trouve à un saut ; une exposition indirecte signifie que le lien passe par des adresses intermédiaires. Le nombre de sauts n'a de sens que dans un graphe soigneusement défini (leçon 3.1) : un saut dans un graphe d'entités peut en représenter dix dans un graphe d'adresses.
Ce qu'affirme un traçage
Un traçage est une affirmation concernant le flux de valeur : la valeur sortie de l'adresse A a atteint l'adresse B par un chemin indiqué, selon une méthode d'allocation déclarée, d'après les observations effectuées jusqu'à un bloc précisé. Ce n'est pas une affirmation concernant l'identité. « Le produit de la rançon a atteint une adresse de dépôt de la plateforme d'échange K » est une constatation de traçage. « Le suspect a reçu la rançon » combine une constatation de traçage, une attribution et, généralement, des données obtenues dans un cadre légal (leçon 4.5).
Ces affirmations ne présentent pas les mêmes faiblesses. Quiconque dispose d'une copie de la chaîne peut vérifier un flux ; une attribution repose sur des étiquettes, des données ou des heuristiques qui peuvent être erronées ou obsolètes. Si vous les réunissez dans une même phrase, il suffit à un expert de la défense de réfuter l'affirmation la plus faible pour discréditer les deux. Décomposez chaque constatation en trois questions :
| Question | Éléments de preuve habituels | Faiblesse habituelle |
|---|---|---|
| Flux : de la valeur est-elle passée de A à B ? | Données de transaction vérifiées sur un nœud | Pratiquement aucune une fois le bloc définitif |
| Allocation : quelle part de cette valeur correspond à la valeur d'intérêt ? | Une méthode de traçage déclarée | Le résultat dépend de la méthode choisie |
| Contrôle : qui contrôle A ou B ? | Heuristiques, étiquettes, données du prestataire | Taux d'erreur, étiquettes obsolètes, adresses partagées |
Trois types de liens
Chaque saut repose sur l'un des trois types de liens suivants.
Un lien déterministe est inscrit dans les données mêmes de la chaîne. Sur une chaîne UTXO, une entrée qui dépense une sortie antérieure relie les deux transactions. Sur une chaîne à comptes, une transaction réussie transférant de la valeur à une adresse, ou un événement Transfer émis par le contrat du jeton dans une transaction réussie, est déterministe. Toute personne qui exploite un nœud obtient la même réponse.
Un lien heuristique applique une règle généralement valable, mais qui comporte des exceptions connues : l'heuristique de propriété commune des entrées, la détection de la monnaie rendue ou le transfert d'une adresse de dépôt vers un portefeuille à chaud (leçons 4.1 et 4.2). Chacune présente des cas d'échec documentés, tels que les transactions CoinJoin ou les portefeuilles qui rendent aléatoire la monnaie rendue.
Une inférence est une conclusion tirée de configurations circonstancielles : un retrait d'un montant similaire 20 minutes après un dépôt, une concordance des horaires d'activité, une source commune de financement du gas. Les inférences sont des pistes. Elles justifient une demande de données ; elles constituent rarement à elles seules des constatations.
Un lien déterministe prouve que de la valeur est passée d'une adresse à une autre. Il ne prouve pas qu'une même personne contrôle les deux extrémités et, lorsque plusieurs entrées sont fusionnées dans une transaction, il n'indique pas quelle partie d'une sortie correspond à « l'argent volé ». Ce sont des questions de contrôle et d'allocation.
Contamination et règles d'arrêt
La contamination est la part d'un solde ou d'un transfert que l'analyste attribue à la source d'intérêt. Ce n'est pas une propriété des unités de monnaie ; c'est le résultat d'une règle appliquée par l'analyste. Lorsque de la valeur contaminée et de la valeur non contaminée se rejoignent dans une adresse ou une transaction, une règle d'allocation détermine quelle valeur sortante porte la contamination :
| Règle | Hypothèse | Conserve la valeur ? |
|---|---|---|
| FIFO (premier entré, premier sorti) | Les fonds se comportent comme une file | Oui |
| LIFO (dernier entré, premier sorti) | Les fonds se comportent comme une pile | Oui |
| Haircut (au prorata) | Les fonds se mélangent parfaitement | Oui |
| Poison | Tout contact contamine l'ensemble des flux sortants ultérieurs | Non |
Les méthodes poison et haircut ont été nommées dans une étude précoce sur la notation des risques pour Bitcoin (Möser, Böhme et Breuker, 2014) ; FIFO reprend la convention comptable applicable aux comptes bancaires où des fonds sont mélangés. Aucune n'est « correcte » ; chacune est un modèle, et elles peuvent désigner des destinataires différents pour les mêmes fonds volés. La leçon 3.3 les applique à un registre et explique comment choisir et défendre une méthode. À grande échelle, les différences deviennent considérables : dans « Bitcoin Redux » (2018), Anderson, Shumailov, Ahmed et Rietmann ont retracé les 46 653 BTC dérobés lors du vol de Linode en 2012 et ont constaté que la méthode haircut contaminait environ 93 % des adresses de leur jeu de données, contre environ 1,3 % pour FIFO. La méthode poison se propage encore plus vite ; elle convient donc aux indicateurs de contact, jamais aux montants. Lorsqu'un résultat est important, effectuez le traçage selon deux méthodes : si toutes deux pointent vers le même service, la confiance augmente ; si elles divergent, indiquez la fourchette.
Tout traçage nécessite également des règles d'arrêt, définies à l'avance et consignées dans les notes du dossier :
- Service atteint : les fonds entrent dans une plateforme d'échange, un prestataire de traitement des paiements ou un autre service de conservation, où le traçage sur la chaîne s'arrête et où les données du prestataire prennent le relais (leçon 3.4).
- Seuil de dilution : la part contaminée descend sous un niveau fixé, par exemple 1 %.
- Limite de sauts : une distance maximale, par exemple de 3 à 6 sauts, au-delà de laquelle les liens sont trop faibles pour être rapportés.
- Montant plancher : des montants trop faibles pour être pertinents, tels que des poussières inférieures à une fraction fixe de la somme initiale.
- Fenêtre temporelle : les transferts effectués avant l'arrivée des fonds ne peuvent pas les transporter.
Cette dernière règle est facile à oublier dans une requête. Une adresse qui a reçu des fonds volés le 10 mars et payé quelqu'un le 2 mars ne l'a pas payé avec ces fonds volés.
Notation des liens
Un traçage nécessite une échelle de notation déclarée afin que chaque lien porte une note que le lecteur puisse interpréter. Les unités conçoivent leur propre échelle ; celle présentée ci-dessous est illustrative, ce n'est pas une norme publiée, et ce cours l'utilise tout au long de son déroulement (les leçons 4.5 et 5.3 l'étendent à l'attribution et aux liens entre chaînes).
| Note | Fondement | Exemple |
|---|---|---|
| A, inscrit sur la chaîne | Lien déterministe vérifié auprès d'un nœud | Une entrée dépense la sortie 0 de la transaction précédente |
| B, corroboré | Une heuristique confirmée par des éléments de preuve indépendants, tels que les données d'un prestataire ou une seconde heuristique sans rapport avec la première | Une adresse de dépôt présumée que les données de la plateforme d'échange confirment |
| C, heuristique unique | Une heuristique présentant des cas d'échec connus | Une sortie de monnaie rendue choisie par correspondance du type de script |
| D, inférence | Corrélation ou configuration uniquement | Montant similaire retiré peu après un dépôt |
Deux règles rendent cette échelle utile. Premièrement, un chemin n'est pas plus solide que son maillon le plus faible : un traçage de cinq sauts comprenant un saut noté C constitue un chemin noté C pour toute affirmation qui dépend de ce saut. Deuxièmement, notez chaque affirmation, et non chaque transaction : un même saut peut porter un flux noté A et une affirmation de contrôle notée C. La formulation de la vraisemblance et du niveau de confiance dans le rapport est abordée dans la leçon 9.2.
Exemple de parcours de traçage
Une victime a payé une rançon de 2,50000000 BTC. L'examinateur la retrace vers l'aval :
| Saut | Transaction | Observation | Flux | Affirmation de contrôle |
|---|---|---|---|---|
| H1 | a71f…09d2 | Le portefeuille de la victime verse 2,50000000 BTC à bc1q…ra5m | A | Le justificatif de paiement de la victime confirme l'expéditeur (B) |
| H2 | 5d07…e310 | Dépense la sortie de 2,5 BTC ainsi que 0,80000000 BTC provenant de bc1q…x8w2 ; une sortie de 3,29990000 BTC vers bc1q…c0n1 ; frais de 0,00010000 | A | bc1q…x8w2 est contrôlée par le même acteur : heuristique de propriété commune des entrées (C) |
| H3 | 9c1e…44ab | bc1q…c0n1 verse 1,20000000 BTC à bc1q…dx7e et 2,09980000 BTC à bc1q…p3e9 ; frais de 0,00010000 | A | bc1q…dx7e est une adresse de dépôt de la plateforme d'échange K : fonds regroupés avec ceux de dépôts connus (C) |
Les montants concordent : 2,5 + 0,8 = 3,3 BTC en entrée, 3,2999 en sortie plus 0,0001 de frais ; puis 1,2 + 2,0998 + 0,0001 = 3,2999. Le flux de l'adresse de rançon vers bc1q…dx7e est noté A à chaque saut, et il ne dépend pas de l'heuristique de propriété commune des entrées à H2 : la valeur a été transférée, quelle que soit la personne qui détenait bc1q…x8w2. Ce qui change l'analyse, c'est l'allocation. Les 2,5 BTC ont été fusionnés avec 0,8 BTC d'origine inconnue ; la part du dépôt de 1,2 BTC considérée comme le produit de la rançon dépend donc de la méthode. Avec la méthode haircut, elle est de 1,2 × 2,5 ÷ 3,3 = 0,90909091 BTC ; avec toute méthode conservant la valeur, elle ne peut pas dépasser 1,2 BTC. L'étiquette d'adresse de dépôt reste notée C jusqu'à ce que les données de la plateforme d'échange K la confirment, auquel cas elle passe à B.
Les affaires publiques présentent la même structure. En juin 2021, les enquêteurs ont annoncé la saisie de 63,7 BTC sur les quelque 75 BTC de rançon versés après l'attaque contre Colonial Pipeline. Selon le communiqué officiel, ils ont suivi plusieurs transferts sur le registre public jusqu'à une adresse dont ils détenaient la clé privée. Le traçage a établi où la valeur était allée ; la saisie dépendait d'éléments de preuve distincts concernant le contrôle de la clé.
Documentation de chaque saut
Chaque saut est consigné dans un enregistrement structuré, rédigé au moment de son examen, et non reconstitué lors de la rédaction du rapport. Un enregistrement minimal pour 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": "sortie 0 ; fonds du destinataire regroupés avec ceux de dépôts connus de K (voir ATTR-11)",
"source": "nœud propre, Bitcoin Core 29.0, vérifié le 2026-03-05T09:12Z",
"examiner": "EX-07"
}
L'enregistrement désigne la sortie exacte, car une transaction peut payer plusieurs parties ; il stocke le montant en satoshis entiers pour éviter les dérives d'arrondi ; et il conserve le hachage du bloc ainsi que sa hauteur afin qu'une réorganisation ou une erreur de saisie puisse être détectée. Il sépare l'allocation et les notes des faits observés, cite le fondement de chaque affirmation non déterministe et consigne la source des données ainsi que la date et l'heure de leur vérification, en UTC. Sur les chaînes à comptes, un index de journal ou une position dans la trace remplace la référence de sortie. Le hachage et la conservation de ces enregistrements sont abordés dans les leçons 8.2 et 8.3.
Développement des sauts en SQL
Un traçage vers l'aval délimité peut commencer par une requête récursive sur une liste d'arêtes (leçon 3.1). La plupart des moteurs prennent en charge les CTE récursives, mais pas tous ; dans certains entrepôts de données, vous procédez plutôt par itérations, saut par saut, depuis un notebook.
WITH RECURSIVE hops AS (
SELECT dst AS address, 1 AS hop, block_number
FROM edges
WHERE src = '0xa1b2…9f' -- point de départ : l'adresse du vol, en minuscules
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 -- le temps avance
WHERE h.hop < 4 -- limite de sauts
AND NOT EXISTS (SELECT 1 FROM labels AS l -- arrêt aux services
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 partie récursive suit les arêtes sortantes uniquement à partir du bloc où les fonds sont arrivés, s'arrête à quatre sauts et ne poursuit pas le parcours au-delà des adresses étiquetées comme services de conservation dans la table labels de la leçon 2.7 : trois règles d'arrêt inscrites dans la requête. Elle trouve les adresses accessibles, mais n'alloue pas les montants, ce qui nécessite les flux entrants et sortants de chaque adresse, classés dans l'ordre. Le nombre de chemins explose autour des adresses très actives, ce qui constitue une raison supplémentaire de s'arrêter aux services.
Réexécution indépendante
Les éléments de preuve issus de la blockchain présentent un avantage inhabituel : les données sous-jacentes sont publiques et identiques pour tous ceux qui valident la chaîne. Un traçage peut donc être réexécuté par quelqu'un d'autre à partir des données brutes, et doit l'être.
ISO/IEC 27037 distingue la répétabilité, qui consiste à obtenir les mêmes résultats avec la même procédure dans le même environnement, de la reproductibilité, qui consiste à obtenir les mêmes résultats avec la même méthode dans un environnement différent, par exemple avec un autre examinateur utilisant un autre nœud ou outil. La réexécution teste la reproductibilité, selon deux niveaux d'exigence :
- Vérification : un second examinateur contrôle chaque enregistrement de saut auprès de son propre nœud : le txid existe, la sortie et le montant correspondent, le hachage du bloc correspond, le bloc est définitif.
- Réexécution indépendante : le second examinateur part uniquement des points de départ, du périmètre, de la méthode et des règles d'arrêt, sans voir le chemin suivi par le premier examinateur, et effectue à nouveau le traçage. La concordance signifie alors davantage qu'une vérification arithmétique, et le travail à l'aveugle réduit le biais de confirmation.
Lorsque les résultats diffèrent, trouvez le premier saut où ils divergent et consignez la cause : une identification différente de la monnaie rendue, une méthode d'allocation différente, un bloc limite plus tardif, un transfert interne omis. Résolvez la divergence à partir des données brutes et conservez le désaccord ainsi que sa résolution dans le dossier. Un traçage qu'un second examinateur compétent ne peut pas reproduire n'est pas prêt à servir de fondement. La validation des outils et la réexécution des traçages en dehors de l'outil sont abordées dans la leçon 3.6.
Points clés pour l'examen : traçage vers l'aval et vers l'amont, sauts et exposition directe ou indirecte ; le fait qu'un traçage affirme un flux de valeur, et non une identité, et la séparation entre flux, allocation et contrôle ; les liens déterministes, les liens heuristiques et les inférences, et ce qu'un lien déterministe ne prouve pas ; la contamination comme résultat d'une règle déclarée, les règles qui conservent la valeur et l'écart de propagation entre haircut et FIFO à grande échelle ; les règles d'arrêt, en particulier le fait que les flux sortants antérieurs à un flux entrant ne peuvent pas le transporter ; une échelle de notation déclarée et la règle du maillon le plus faible ; la concordance des montants et des frais saut par saut ; les champs d'un enregistrement de saut ; la répétabilité et la reproductibilité (ISO/IEC 27037), ainsi que la vérification et la réexécution indépendante.
Questions d’entraînement
Vérifiez votre compréhension. Ces questions ne comptent pas pour l’examen.
Connectez-vous pour enregistrer votre progression et reprendre là où vous vous êtes arrêté. C’est gratuit. Se connecter