Qu’est-ce qu’une attaque par distorsion temporelle et comment fonctionne-t-elle en général  ?


Le protocole Bitcoin (règles de consensus) comporte deux règles pertinentes pour les horodatages dans les en-têtes de bloc :

  • Un nœud n'acceptera pas un bloc dont l'horodatage est postérieur de plus de deux heures
  • Un nœud n'acceptera pas de bloc à moins qu'il n'ait un horodatage supérieur à la médiane des 11 blocs précédents. Dans Bitcoin, nous appelons cela Median-Time-Past (MTP)
  • Comme vous le mentionnez dans votre question, les changements de difficulté sont calculés en fonction des temps du premier et du dernier bloc dans une période de difficulté de 2 016 blocs.

    Compte tenu des règles ci-dessus, si tous les mineurs étaient d'accord, ils pourraient simplement incrémenter l'horloge d'un minimum d'une seconde MTP pour les 2 015 premiers blocs, puis régler l'heure à deux heures dans le futur. Cela ne leur donnerait en gros qu'une petite diminution de la difficulté, mais pensez à ce qui arrive au MTP lorsqu'ils ajoutent ce dernier point de données légèrement futur : la médiane réelle ne change pas beaucoup du tout. Les horodatages réels sont en secondes, mais voici un ensemble de 11 horodatages en jours de différence par rapport à l'heure actuelle :

    Qu’est-ce qu’une attaque par distorsion temporelle et comment fonctionne-t-elle en général ?

    [-13, -13, -13, -13, -13, -13, -13, -13, -13, -13, 0]

    La médiane de ce qui précède est de -13, ce qui signifie qu'une fois que les mineurs ont créé le bloc légèrement futur à la fin de la période de difficulté, ils n'ont pas besoin d'avancer leurs horodatages de plus d'une seconde minimum — donc le la prochaine période de difficulté commence -13 jours.

    À la fin de la période de difficulté suivante, les mineurs avancent à nouveau l'horodatage autant que possible, de sorte que le protocole pense qu'il a fallu 28 jours pour extraire les blocs — la moitié de la vitesse attendue — et diminue ainsi la difficulté d'environ la moitié. . Maintenant, les valeurs utilisées pour MTP ressemblent à :

    [-27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 0]

    Ainsi, les mineurs peuvent continuer à conserver des horodatages lointains dans le passé et répéter l'attaque, réduisant ainsi la difficulté à chaque période jusqu'au point où il leur faut moins de 2 016 secondes pour produire 2 016 blocs, auquel cas ils ne peuvent plus réduire la difficulté car la fonction MTP nécessite une augmentation du temps d'au moins une seconde par rapport à la médiane à chaque bloc.

    Maintenant, votre principale question était de savoir comment cette attaque peut fonctionner sans la collusion d’une majorité de mineurs. Maintenant que vous avez vu comment l'attaque fonctionne avec tous les mineurs participants, il devrait être clair que la sélection du temps médian peut permettre à un mineur attaquant qui a la chance de trouver des blocs de manière fiable d'empêcher le temps médian d'avancer vers une valeur honnête. Par exemple, imaginez que ce soient les heures des 11 blocs précédents, dans la séquence de la chaîne de blocs :

    [-27, 0, -27, 0, -27, 0, -27, 0, -27, 0, -27]

    Si vous triez ces chiffres pour trouver la médiane, elle est de -27 même si 5/11ème (45%) du hashrate est extrait avec précision. Mais attendez, cela ne signifie-t-il pas que le mineur attaquant possède 55 % du hashrate ? Peut-être pas, car un gros mineur avec environ 30 % ou plus du hashrate pourrait obtenir un avantage sur les autres mineurs en utilisant une attaque minière égoïste, ou le mineur pourrait simplement menacer d'essayer de rendre obsolètes (« orphelins ») d'autres blocs de mineurs qui ont des horodatages précis, ce qui fait que ces mineurs honnêtes gagnent moins de revenus.

    Personnellement, je ne considère pas l'attaque particulièrement probable contre Bitcoin car elle est lente à exécuter et évidente publiquement, mais c'est quelque chose que les concepteurs de protocoles doivent garder à l'esprit lorsqu'ils modifient les paramètres, car ces modifications pourraient rendre l'attaque plus facile à exécuter.