Qu'est-ce qu'une "attaque des 51%" ?

Sommaire

Principe

Si une entité (pool ou mineur) contrôle plus de 50% de la puissance totale du réseau, elle peut alors être en mesure d’exclure des transactions et/ou d’en modifier l’ordre1 pendant toute la durée de l’attaque. En effet, tant qu’il possède plus de 50% de la puissance de calcul du réseau, l’attaquant peut construire secrètement une chaîne plus longue que celle produite par le reste du réseau. Une fois rendue publique, et conformément au protocole qui impose de choisir la chaîne la plus longue2 (pour être plus précis, la difficulté est prise en compte dans le calcul de la “longueur” de la chaîne3), la chaîne de l’attaquant prend alors la place de celle constituée par les mineurs honnêtes.

L’attaque permet :

  • à l’attaquant de dépenser deux fois ses propres bitcoins : une première fois sur la chaîne minée par le reste du réseau et une deuxième fois sur la chaîne minée secrètement par lui-même4,
  • d’empêcher que certaines transactions soient confirmées (les blocs minés étant produits par l’attaquant, celui-ci a le contrôle total de ce qu’ils contiennent),
  • de substituer ses propres blocs aux blocs minés par le reste du réseau et priver ainsi les autres mineurs de leurs gains et potentiellement les acculer à la faillite.

L’attaque ne permet pas :

  • d’annuler les transactions déjà transmises aux nœuds du réseau (elles retourneront à l’état “non confirmé” si l’attaquant ne les a pas intégrées dans ses propres blocs)
  • d’empêcher que des transactions soient relayées sur le réseau (elles resteront ou retourneront à l’état “non confirmé” si l’attaquant ne les a pas intégrées dans ses propres blocs)
  • de changer le nombre de bitcoins créés pour chaque nouveau bloc miné
  • de créer des bitcoins à partir de rien
  • à l’attaquant de dépenser des bitcoins qui ne lui appartiennent pas

Le remplacement de blocs antérieurs à l’attaque s’avère beaucoup plus difficile et sa difficulté croît de manière exponentielle en fonction de l’ancienneté des blocs. De plus, il n’est pas possible de remplacer les blocs qui sont antérieurs au dernier “checkpoint5” défini dans le logiciel Bitcoin.

Comme cette attaque n’apporte finalement que très peu de pouvoir sur le réseau, il est communément admis que personne ne se donnera la peine de la mettre en oeuvre. Il sera à priori toujours plus rentable de respecter les règles. Si l’unique but est d’endommager ou détruire le réseau, d’autres types d’attaques plus performantes seront probablement utilisées. Cependant, si l’attaque réussit, il sera difficile, voire impossible, de corriger ses effets ; tous les changements effectués sur la chaîne seront permanents.

FAQ

A quoi correspondent ces 51% ?

Il s’agit du pourcentage de la puissance de calcul (du hash rate6) détenue par l’entité de minage (pool ou mineur) à l’origine de l’attaque. Il s’agit d’un abus de langage, en effet ce type d’attaque est réalisable dès que l’entité attaquante détient plus de 50% du hashrate (et dans la réalité environ 30% du hashrate suffisent7).

Comment cette attaque peut-elle bloquer totalement les transactions des utilisateurs ?

Le blocage total des transactions n’est possible que sur la période de temps où l’attaquant contrôle un pourcentage suffisant du hashrate lui permettant de produire secrètement une chaîne de blocs plus longue que celle minée par le reste du réseau. Cette chaîne de blocs étant sous le contrôle total de l’entité attaquante, celle-ci a toute liberté de choisir les transactions qu’elle souhaite ou non intégrer dans les blocs qui la composent. Une fois rendue publique, cette chaîne de blocs, plus longue, se substituera à celle minée par le reste du réseau.

Comment fait l’attaquant pour dépenser ses bitcoins plus d'une fois (double spending) ?

Il dépense une première fois ses bitcoins via des transactions qui seront intégrées dans les blocs minés par le reste du réseau. En parallèle, l’attaquant dépense ces mêmes bitcoins via d’autres transactions qu’il intègre dans les blocs de sa chaîne secrète. Une fois sa chaîne publiée, les premières transactions qui avaient pourtant été validées par le reste du réseau seront annulées et remplacées par les secondes.

Cf. article dédié pour plus de détail.

Quels pourraient être les impacts d’une modification de l’ordre des transactions provoqués par une attaque des 51% ?

Cette partie reste à compléter. N’hésitez pas à nous rejoindre sur le slack cryptofr pour contribuer à ce dossier.

“l'impact de modification de l'ordre a un impact qui pourrait être important sur les applications de "proof of existence" qui utilise la feature timestamp de Bitcoin” - Karine

“Ou un crowdfunding avec des contreparties plus importantes pour les premiers investisseurs par exemple.” - Frédéric

Le timestamp est primordial aussi dans les systèmes de workflow basés sur la blockchain - Karine

Comment un nœud du réseau Bitcoin sélectionne-t-il la chaîne valide “la plus longue” ?

Tous les 2016 blocs, la difficulté8 du minage Bitcoin est réajustée afin que l’espacement entre deux blocs minés reste de 10 minutes en moyenne. L’ajustement9 de la difficulté est directement liée au temps mis par le réseau pour miner les 2016 derniers blocs. Si le temps est inférieur à 14 jours, la difficulté augmente, dans le cas inverse elle diminue. Bien sûr, plus le hash rate augmente, plus le temps requis pour miner 2016 blocs diminue, et inversement.

A difficulté constante, la quantité de travail associée à la création d’une série de blocs correspond tout simplement à sa longueur, en nombre de blocs. Dans le cas d’une attaque se déroulant sur une période sans ajustement de la difficulté, les noeuds du réseau choisiront tout simplement la chaîne de blocs la plus longue en nombre de blocs. Très probablement celle de l’attaquant, celui-ci bénéficiant d’un hash rate plus important.

Dans le cas d’une attaque des 51% qui s’étalerait sur plusieurs périodes d’ajustement de la difficulté, cette dernière doit être prise en compte dans le calcul de la quantité de travail sous-jacente aux deux chaînes : la chaîne de l’attaquant et celle minée par le reste du réseau.

En effet, suite à une première phase où le hash rate plus important de l’attaquant provoque, sur sa chaîne secrète, une hausse substantielle de la difficulté dès le premier ajustement, on peut imaginer qu’avant l’ajustement suivant, la longueur de sa chaîne soit inférieure à celle du reste du réseau en nombre de blocs mais soit supérieure en quantité de travail sous-jacent, la difficulté de sa chaîne étant supérieure. En effet, la quantité de travail sous-jacente est directement liée à la somme des difficultés de chacun des blocs10. C’est donc la chaîne de l’attaquant qui serait alors choisie par les noeuds du réseau comme chaîne principale une fois celle-ci rendue publique.

Dans quel contexte une telle attaque pourrait-elle être mise en oeuvre et quelles en seraient les issues possibles ?

Scénario 1 : attaque longue durée avec réécriture de la blockchain sur plusieurs jours ou mois
Conditions préalables
  • Rassembler de quoi produire plus de puissance de calcul de minage (2 ExaH/s environ en octobre 2016) que le reste du réseau :**
    • Acheter environ 150 000 AntMiner S911 (13TH/s, 1275W) à 1999$ pièce, soit un investissement d’environ 300 millions de dollars
    • Trouver des locaux ventilés/refroidis nécessaires à leur hébergement, quelques milliers de mètres carrés seront probablement nécessaires
    • Trouver un fournisseur d’électricité capable de supporter une demande de plus de 190MW. A titre de comparaison, cela correspond à peu près à 1:5ème de la puissance d’un réacteur nucléaire français12. Au prix de 0.15$ le kwh, cela nous donnerait pour 2 mois, une facture d’environ 40 millions de dollars.
    • On se rend bien compte qu’une telle attaque n’est pas à la portée du premier mineur venu. Un attaquant de type étatique semble être la seule hypothèse crédible à ce jour.
Conséquences probables
  • De nombreuses transactions sont remisent à l’état non confirmées (voire perdues ?)
  • De nombreuses double-dépenses sont effectuées par l’attaquant qui récupère ainsi tous les bitcoins qu’il a dépensés pendant l’attaque
  • Les services de proof-of-existence peuvent potentiellement être mis en difficulté si leurs transactions n’ont pas été intégrés dans la chaîne de blocs
  • Si l’attaque a durée plusieurs mois, il est fort probable que les mineurs qui n’auraient pas immédiatement revendus leurs bitcoins se retrouvent dans une situation financière délicate
  • Et pour les bitcoins vendus par les mineurs, ce sont les nouveaux acquéreurs qui verraient leurs bitcoins chèrement acquis soudainement se volatiliser
  • Dans le cas d’une attaque qui aurait duré 2 mois on parle tout de même d’un volume de plus de 65 millions de dollars au cours de 600$ par bitcoin
  • ...
Réactions possibles
  • Mineurs

    • Si c’est une pool de minage qui a réalisé l’attaque (peu probable en selfish mining), les mineurs honnêtes peuvent décider de quitter la pool attaquante
    • Préparer le remplacement de leur matériel en prévision du changement éventuel de l’algorithme de minage par les développeurs
  • Développeurs

    • Proposer un hard fork pour annuler la chaîne de blocs de l’attaquant
    • Proposer un hard fork pour changer l'algorithme de minage
  • Majorité économique

    • Activer le hard-fork qui annule la chaîne de bloc de l’attaquant
    • Activer le hard-fork qui change l’algorithme de minage
  • Eco-système Bitcoin

    • Essayer d’identifier l’attaquant pour entamer une procédure judiciaire à son encontre.
    • Mais est-ce seulement possible ?
Cas d’une attaque 51% sur 2 mois avec du matériel type AntMiner S9
Investissement en matériel
300 000 000 $
Coût en électricité
40 000 000 $
Gain estimé pour un Bitcoin à 600$
60 000 000 $
Résultat
280 000 000 $

Conclusion

L’attaque 51%, bien qu’étant une réalité assez fortement médiatisée, apporte peu de capacité de nuisance sur le réseau comparativement au coût de mise en oeuvre. De ce fait il est admis qu’aucun acteur rationnel ne prenne la peine de l’activer. On peut craindre néanmoins qu’un acteur à l'échelle d’un gouvernement ou d’une grande organisation soit en mesure de rassembler les ressources nécessaires pour mener une telle attaque dans le seul but de nuire. Le réseau pourra-t-il seulement se prémunir contre ce type d'offensive ?

Citations

Extrait du Wiki Bitcoin

An attacker that controls more than 50% of the network's computing power can, for the time that he is in control, exclude and modify the ordering of transactions. This allows him to:

  • Reverse transactions that he sends while he's in control. This has the potential to double-spend transactions that previously had already been seen in the block chain.
  • Prevent some or all transactions from gaining any confirmations
  • Prevent some or all other miners from mining any valid blocks

The attacker can't:

  • Reverse other people's transactions
  • Prevent transactions from being sent at all (they'll show as 0/unconfirmed)
  • Change the number of coins generated per block
  • Create coins out of thin air
  • Send coins that never belonged to him

With less than 50%, the same kind of attacks are possible, but with less than 100% rate of success. For example, someone with only 40% of the network computing power can overcome a 6-deep confirmed transaction with a 50% success rate.

It's much more difficult to change historical blocks, and it becomes exponentially more difficult the further back you go. As above, changing historical blocks only allows you to exclude and change the ordering of transactions. It's impossible to change blocks created before the last checkpoint.

Since this attack doesn't permit all that much power over the network, it is expected that no one will attempt it. A profit-seeking person will always gain more by just following the rules, and even someone trying to destroy the system will probably find other attacks more attractive. However, if this attack is successfully executed, it will be difficult or impossible to "untangle" the mess created -- any changes the attacker makes might become permanent.

Extrait de Wikipédia

Une Attaque 51 % est une attaque sur la blockchain du Bitcoin. Elle est également connue sous le nom de l'Attaque Goldfinger. Le but de cette attaque est de bloquer les validations des transactions d'utilisateurs Bitcoin, mais pas seulement ; quiconque ayant assez de puissance de calcul peut également dépenser ses bitcoins plus d'une fois (c'est ce qu'on appelle le double spending) sans pour autant avoir assez de Bitcoins. C'est possible en modifiant l’historique de la blockchain.

Extrait de "Block Publication Incentives For Miners" par Peter Todd

For a short-term rational miner with a majority of hashing power there isn’t a clear incentive: they have the majority, so if they choose not to publish the chain they’re working to other miners it always will eventually have more work than the chain their competition is working on. When they publish their chain as part of selling their coins their competitions’ chain is simply wiped out, eventually pushing them out of business and allowing the majority miner to save money by turning off some of their hashing power; if users complain about reorgs the majority miner can simply publish more frequently, every time they are in the lead.

Of course, such blatantly unfair behavior has a second order effect: the fact that no-one else can mine is strong evidence that Bitcoin is now highly centralized, and a rather dubious investment. This should significantly reduce the exchange rate, but as we’ll see later such attacks aren’t necessarily easily detected, or even clearly attacks.

Traductions

Extrait de "Block Publication Incentives For Miners" par Peter Todd

Pour un mineur rationnel et intéressé par les profits à court terme, cette attaque n’a pas vraiment d’intérêt : s’ils choisissent de ne pas publier aux autres mineurs la chaîne sur laquelle ils travaillent ils finiront par avoir plus de blocs que les autres. Lorsqu’ils publient leur version de la chaîne, celle qui est minées par les compétiteurs est simplement laissée de côté ce qui peut finalement les placer hors compétition et permettre alors au mineur majoritaire de réduire ses coûts en éteignant quelques machines. Si les utilisateurs se plaignent au sujets des réorganisations des transactions, le mineur majoritaire peut décider de publier plus souvent et cela à chaque fois qu’il a de l’avance.

Bien sûr, ce genre de comportement a aussi un effet secondaire : le fait que personne d’autre ne soit en mesure de miner est la preuve que le réseau est fortement centralisé et devient donc un investissement douteux. Cela peut significativement diminuer le cours de change, mais comme nous le verrons plus tard, ces attaques ne sont pas nécessairement faciles à détecter, ou même clairement identifiées comme telles.

Sources

Crédits

tip : 12dPKuEDZiXtMfSVoMWp7PP5vqimDxQfkK

Sources complémentaires

Participer à la rédaction du document dans Google Docs

Notes
  1. Cf. la question relative à l’ordre des transactions dans la FAQ : "Quels pourraient être les impacts d’une modification de l’ordre des transactions provoqués par une attaque des 51% ?

  2. “Les nœuds considèrent toujours la chaîne la plus longue comme étant la chaîne légitime, et travaillent à étendre celle-ci.” https://bitcoin.fr/bitcoin-explique-par-son-inventeur/

  3. https://github.com/bitcoin/bitcoin/blob/v0.13.0/src/main.cpp#L3674

  4. Cf. article sur la double-dépense (en cours de rédaction)

  5. De temps en temps le hash de l’entête d’un bloc ancien est inscrit en dur dans le code du logiciel qui régit le protocole. https://en.bitcoin.it/wiki/Checkpoint_Lockin

  6. Le hash rate est une unité de mesure de la puissance de calcul du réseau Bitcoin. Quand le hash rate est de 10 Th/s cela signifie que le réseau opère 10 trillion de calculs de hash par seconde. Le hash est le résultat d'un procédé cryptographique qui permet d'obtenir une empreinte numérique de taille fixe pour un ensemble de données de taille variable.

  7. https://arxiv.org/pdf/1311.0243v1.pdf

  8. https://en.bitcoin.it/wiki/Difficulty - la difficulté est calculée comparativement au premier bloc créé

  9. https://github.com/bitcoin/bitcoin/blob/v0.13.0/src/pow.cpp#L52-L75

  10. https://github.com/bitcoin/bitcoin/blob/v0.13.0/src/main.cpp#L3207

  11. http://www.antminerdistribution.com/antminer-s9/

  12. https://fr.wikipedia.org/wiki/Listedesr%C3%A9acteursnucl%C3%A9airesen_France