Attaque de Finney
L'attaque de Finney (Hal Finney, 2011) est une double-dépense où un mineur prépare un bloc privé puis l'utilise après une transaction zeroconf. Mitigée en attendant les confirmations. N'est plus une menace majeure.
Origine du nom
L'attaque de Finney porte le nom de Hal Finney, cypherpunk et premier destinataire d'une transaction Bitcoin (10 BTC envoyés par Satoshi Nakamoto le 12 janvier 2009). C'est lui qui a, dès février 2011, décrit cette technique théorique sur le forum Bitcoin Talk, comme une double-dépense spécifiquement adressée aux marchands acceptant des paiements à zéro confirmation (zeroconf).
Le scénario d'attaque
L'attaquant est un mineur, ou contrôle un certain hashrate. Il procède ainsi :
- Il prépare un bloc privé contenant une transaction
Tx_Aqui lui renvoie ses BTC à lui-même. - Il ne diffuse pas ce bloc et continue le minage.
- Dès qu'il trouve un bloc valide, il garde le secret.
- Il dépense alors les mêmes UTXO dans une transaction
Tx_Bchez un marchand qui accepte les paiements zeroconf (un café, par exemple). - Le marchand voit
Tx_B, livre le produit. - L'attaquant diffuse alors son bloc avec
Tx_A, invalidantTx_Bcar les UTXO sont déjà dépensés.
Conditions nécessaires
| Condition | Pourquoi c'est limitant | |-----------|--------------------------| | Avoir trouvé un bloc | L'attaque dépend de la chance du mineur (un mineur seul attend en moyenne des semaines) | | Marchand zeroconf | Quasi-personne ne pratique plus le zeroconf sur on-chain | | Délai serré | Le bloc doit être diffusé avant qu'un autre mineur n'en publie un valide | | Coût d'opportunité | Garder le bloc = renoncer à la récompense légitime |
C'est ce coût d'opportunité (récompense de bloc) qui rend l'attaque économiquement absurde dans la plupart des cas.
Différence avec la race attack
Une race attack est plus simple : l'attaquant diffuse deux transactions concurrentes (Tx_A et Tx_B) en même temps, espérant que Tx_A gagne. Elle n'exige pas de hashrate, mais le marchand averti peut détecter les doubles propagations.
Mitigations
- Attendre au moins 1, idéalement 6 confirmations pour les montants significatifs.
- Utiliser Lightning pour les petits paiements (instantanés et finaux dans le canal).
- 0-conf safe assumptions : monitorer le mempool pour détecter les RBF/double-spends.
À retenir
L'attaque de Finney est devenue principalement historique. Elle reste un classique pédagogique pour comprendre pourquoi Bitcoin demande des confirmations : chaque confirmation est une multiplication exponentielle du coût d'une réorganisation frauduleuse.
Termes lies
- Double dépenseLa double dépense est la tentative de dépenser deux fois la même UTXO. Bitcoin la rend coûteuse via la preuve de travail et le consensus. Risque réel uniquement avec des transactions zeroconf. La cause principale de la nécessité d'une blockchain.
- Race attackUne race attack envoie deux transactions concurrentes en double-spend, espérant que le destinataire accepte sans confirmation. Mitigée par le full RBF et le fait d'attendre les confirmations.
- Zero-confirmation (zeroconf)Une transaction zeroconf est acceptée sans attendre de confirmation on-chain. Pratique pour les paiements rapides (commerçants, ATM) mais vulnérable à la double dépense. Full RBF a affaibli sa fiabilité. Lightning Network l'a rendue largement obsolète.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.