Bitcoin, pièce par pièce · 6 min · démo interactive

Pourquoi on ne peut pas modifier une blockchain

Modifier un bloc est facile. Le faire accepter, c'est une autre affaire : il faut refaire tout le travail suivant, plus vite que le reste du monde.

L’idée en une phrase

Une blockchain n'est pas protégée par un verrou : elle l'est par le fait que toute retouche oblige à refaire le travail de tous les blocs suivants, plus vite que le réseau honnête.

Rien n'interdit d'éditer ta copie. Le fichier est sur ton disque, et tu peux y écrire ce que tu veux. Mais les autres nœuds rejetteront cette version, car elle ne vérifie plus les règles de calcul. « Infalsifiable » désigne un coût, et non une impossibilité.

La démo

1. Falsifie un bloc

Chaque hash doit commencer par quatre zéros. Modifie les données d'un bloc, puis essaie de réparer.

Remplace par exemple « 5 » par « 500 » dans le bloc 1.
0 / 6blocs invalides
0essais moyens à refaire
0essais effectués
Bloc 0 valide
Précédent0000000000000000000000000000000000000000000000000000000000000000Nonce176114Hash0000da2ee2fc58de91bef7a73b9aaa3f950ff17bee6fc5f054d4b50ac9dd116c
Bloc 1 valide
Précédent0000da2ee2fc58de91bef7a73b9aaa3f950ff17bee6fc5f054d4b50ac9dd116cNonce22286Hash00006e8cb755047a2d8bcebe4aceb53a539ab1eb7fbff7d44102635d62acc89c
Bloc 2 valide
Précédent00006e8cb755047a2d8bcebe4aceb53a539ab1eb7fbff7d44102635d62acc89cNonce48544Hash0000e556c48263efa332a704a2560f30f765ec5a02f1268e438458853697e2f8
Bloc 3 valide
Précédent0000e556c48263efa332a704a2560f30f765ec5a02f1268e438458853697e2f8Nonce100682Hash0000d8773cb5773394acf53314290a6d77073f8597737e9155cda2cd66c5a00f
Bloc 4 valide
Précédent0000d8773cb5773394acf53314290a6d77073f8597737e9155cda2cd66c5a00fNonce79082Hash0000fcf863ed74a24f45ccf396055eb4394cd972260f8b8e8286133c6dec8c80
Bloc 5 valide
Précédent0000fcf863ed74a24f45ccf396055eb4394cd972260f8b8e8286133c6dec8c80Nonce24050Hash0000ba697da70e19b97836ebc874b36647207a7b37a7233ea6da2cb433643f3a

2. Fais la course contre le réseau

20,5 %après 1 confirmation
0,0243 %après 6 confirmations
0,000009 %après 12 confirmations

Sans JavaScript, voici les chiffres du livre blanc, recalculés ici à l'identique. Avec 10 % de la puissance, un attaquant a 0,09 % de chances de rattraper 5 blocs de retard. Avec 30 %, il garde 17,7 % de chances pour 5 blocs et 4,2 % pour 10 blocs. Dès 50 %, il finit toujours par rattraper le réseau.

Intégrer cette démo

Copie ce code sur ton site, ton cours ou ton blog. La démo reste gratuite ; garde simplement le lien vers protocole.org.

Pourquoi ça compte

Un commerçant accepte ton paiement de 10 000 € en bitcoins et te livre. Peux-tu ensuite effacer ce paiement de l'historique, et garder la marchandise et l'argent ? C'est la double dépense, et l'attaque que toute la conception de Bitcoin vise à rendre non rentable.

La question concrète n'est donc pas « est-ce possible ? », mais « combien de confirmations faut-il attendre pour que ce soit improbable ? ». Satoshi Nakamoto a donné la réponse chiffrée dans son livre blanc de 2008. La démo reprend cette formule et te fait d'abord éprouver le problème de tes propres mains.

Le code

Voici les deux moitiés de la démo. Change le bloc falsifié, ou la part q de l'attaquant, et relance.

Clique sur Lancer pour exécuter ce code dans ton navigateur.

Ce qui se passe vraiment

Modifie les données du bloc 1. Le hash de ce bloc change aussitôt et perd ses quatre zéros : il viole la règle de preuve de travail. Le bloc 2 cite encore l'ancien hash, donc son lien est rompu. Et comme un nœud refuse tout descendant d'un bloc invalide, les suivants tombent à leur tour.

Clique sur « Réminer ». Le navigateur reprend le bloc 1, pose le nouveau lien, cherche un nonce, puis passe au suivant. Chaque bloc réparé change de hash, ce qui brise le lien du bloc d'après : il faut tout refaire jusqu'au sommet. Avec quatre zéros hexadécimaux, chaque bloc demande en moyenne 65 536 essais. Le coût total croît avec l'ancienneté du bloc falsifié.

À la fin, ta chaîne est de nouveau valide. Tu pourrais croire avoir gagné, mais tu as juste produit ta version en local. Pendant ce temps, le réseau a continué d'empiler des blocs sur la version originale, et la règle retient la chaîne au travail cumulé le plus élevé. Ta copie reste en retard, donc tout le monde l'ignore.

La seconde partie mesure cette course. Le calcul suit le livre blanc : le réseau honnête trouve un bloc avec la probabilité p et l'attaquant avec la probabilité q. Ton retard évolue comme une marche au hasard. Tant que q est inférieur à p, le retard tend à grandir, et la probabilité de combler z blocs baisse de façon exponentielle. Déplace le curseur : à 10 %, 6 confirmations laissent 0,024 % de chances ; à 30 %, il reste 13,2 % ; à 45 %, on dépasse 76 %. Six confirmations n'ont donc rien de magique : le chiffre suppose une part d'attaquant et un montant à protéger.

La démo simplifie : quatre zéros au lieu de la difficulté réelle, et un modèle qui ignore la latence du réseau.

Dans la vraie vie

Sur Bitcoin, réécrire des blocs anciens demanderait une puissance supérieure à celle de tous les autres mineurs réunis, sur toute la durée de l'attaque. Rien ne l'interdit, mais le livre blanc parie qu'un tel acteur gagnerait davantage à miner honnêtement. Six confirmations représentent environ une heure, une habitude courante pour les gros montants, pas une règle du protocole.

Les petites chaînes sont dans une autre situation. Ethereum Classic a subi plusieurs réorganisations profondes en janvier 2019 et en août 2020, avec des doubles dépenses. Bitcoin Gold a été attaquée en 2018 de la même manière. Quand la puissance d'une chaîne est faible, elle peut se louer.

« Infalsifiable » ne veut pas dire « immuable » sur le plan humain. Les nœuds suivent un logiciel, et le logiciel peut changer si la communauté le veut. En août 2010, un bug de Bitcoin a créé plus de 184 milliards de bitcoins par débordement d'entier : un correctif et une nouvelle branche ont effacé ce bloc en quelques heures. En 2016, après le piratage de The DAO, Ethereum a appliqué un fork qui a restitué les fonds. Une minorité a refusé et a gardé la chaîne d'origine, devenue Ethereum Classic.

La garantie porte sur l'historique, pas sur le sens de ce qui y figure. Une transaction piégée par une approbation ou un bridge défaillant est parfaitement valide, et elle restera inscrite. Les signatures disent qui a autorisé une transaction, l'arbre de Merkle la lie à son bloc, et le travail accumulé fige ce bloc. Aucune de ces briques ne juge si l'opération était sage.

Ce qui peut mal tourner

  • L'attaque à 51 %. Avec plus de la moitié de la puissance, un attaquant peut réécrire les blocs récents et bloquer des transactions. Il ne peut pas voler les fonds d'autrui sans signature, ni créer des pièces hors des règles.
  • Confirmer trop vite. Le risque de double dépense dépend du montant et du nombre de confirmations. Une transaction sans confirmation n'offre aucune garantie. Le calculateur de confirmations chiffre ce risque avec la formule du livre blanc.
  • La location de puissance. Une chaîne qui partage son algorithme de hachage avec un réseau plus grand peut être attaquée à bas coût.
  • La réorganisation accidentelle. Des branches concurrentes de quelques blocs arrivent naturellement. Une application ne doit pas considérer le dernier bloc comme définitif.
  • Croire au mythe de l'irréversible. Une erreur de destinataire ne s'annule pas. Il n'existe pas de service client du protocole, et ce qui protège contre le faussaire te bloque aussi après une fausse manipulation.
  • Surestimer la décentralisation. Une chaîne dont quelques acteurs contrôlent la production peut être réécrite par accord entre eux. Regarde qui valide, et pas seulement ce que promet le protocole.

Teste-toi

1. Tu modifies le bloc 1 d'une chaîne de 6 blocs. Combien de blocs dois-tu réminer ?
2. Un attaquant a 51 % de la puissance. Que ne peut-il pas faire ?
3. Pourquoi attendre des confirmations ?