Si vous vous intéressez à l'informatique, vous avez peut-être déjà entendu parler du fameux bug de l'an 2038, qui touchera tous les systèmes informatiques utilisant l'horodatage Unix stocké en tant qu'entier signé de 32 bits. Sur Bitcoin, ce bug ne nous concernera pas. Toutefois, les horodatages de Bitcoin ont également une valeur maximale que l'on ne peut surpasser. Ce seuil sera atteint le 7 février 2106.
Alors, l'année 2106 sonnera-t-elle le glas de Bitcoin ? Dans cet article, nous faisons le point avec vous sur cet événement relativement méconnu.
Qu’est-ce que l’horodatage sur Bitcoin ?
Sur le protocole Bitcoin, on utilise une blockchain pour éviter la double dépense. Chaque transaction est placée dans un bloc avec un repère temporel. Autrement dit, on appose une heure et un jour sur chaque bloc afin de pouvoir les ranger dans un ordre chronologique. Ce repère temporel, c’est ce que l’on appelle un « horodatage ».
Grâce à ce mécanisme, lorsqu’un nœud reçoit une nouvelle transaction Bitcoin en attente de confirmation, il peut vérifier que, dans le passé, ces mêmes Bitcoin n’ont pas été déjà dépensés. De cette manière, on évite la double dépense sur le système, sans pour autant le faire reposer sur une autorité centrale.
L’horodatage se trouve dans l’entête de chaque bloc. C’est un nombre entier de 32 bits qui est établi sur l’heure UNIX. Pour déterminer ce repère temporel, on compte le nombre de secondes écoulées depuis le 1ᵉʳ janvier 1970, et cela nous donne un nombre entier. Par exemple, lorsque j’écris cet article, 1 693 498 694 secondes se sont écoulées depuis 1970. Il suffit que je convertisse ce nombre entier en binaire pour obtenir mon horodatage. En l’occurrence, cela nous donnerait : 01100101110001100100101011111110. Voilà comment on horodate les blocs sur Bitcoin.
Quel est le problème avec l'année 2106 sur Bitcoin ?
L’horodatage sur Bitcoin se fait sur des entiers non signés de 32 bits. Cela veut dire que l’on peut mettre 32 zéros ou un à la suite pour représenter le temps, mais pas un de plus. Il y a donc une limite sur l’interprétation du temps au sein de Bitcoin. La valeur maximale pouvant être utilisée est ainsi : 11111111111111111111111111111111. En valeur décimale, cela nous donne 4 294 967 295 secondes, et ce temps correspond à la date du 7 février 2106.
Après le dépassement de cette date, l'horodatage va déborder et il se réinitialisera à zéro. Les systèmes informatiques utilisant ce format vont interpréter la date courante comme étant le 1ᵉʳ janvier 1970, alors que nous serons en réalité en 2106.
Pour mieux comprendre ce phénomène, faisons une analogie. Certains vieux compteurs kilométriques de voitures sont limités à 6 chiffres. En conséquence, la valeur maximale pouvant être affichée est de 999 999 km. Une fois cette limite atteinte, le compteur revient à zéro et recommence à compter depuis le début. Pourtant, les kilomètres déjà parcourus par la voiture ont bien eu lieu. Il existe donc une différence entre la valeur interprétée et la valeur réelle, à cause du nombre de chiffres pouvant être affichés. Pour l’horodatage sur Bitcoin, c’est exactement le même principe.
Si l’on ne change rien au protocole Bitcoin, cet écart entre l’interprétation de l’horodatage et la réalité fera qu’aucun nouveau bloc ne pourra être publié. En effet, il existe deux restrictions sur l’horodatage d’un bloc pour qu’il soit accepté par les nœuds :
Il doit être supérieur au temps médian des 11 blocs précédents ;
et il doit être inférieur à la médiane des horodatages des nœuds, plus 2 heures.
Une fois l’horodatage de 32 bits arrivé à sa valeur maximale le 7 février 2106, on pourra encore publier au maximum 6 blocs (c’est dû au fait que la limite basse est une médiane). Ensuite, la blockchain devrait s’arrêter et plus aucune transaction ne pourrait être confirmée.
Heureusement, il existe de nombreuses solutions pour pouvoir outrepasser cette date et prévenir ainsi d'éventuelles répercussions sur Bitcoin.
📌 La différence entre entiers signés et non signés de 32 bits réside dans le nombre de bits disponibles. Les non signés exploitent pleinement les 32 bits (c’est ce que l’on a sur Bitcoin), tandis que les signés réservent un bit pour le signe, laissant 31 bits pour représenter un nombre positif (c’est ce qui est utilisé sur les systèmes affectés par le bug de 2038).
➤ En savoir plus sur la construction d’un bloc sur Bitcoin.
Comment résoudre le problème de 2106 ?
Pas d’inquiétude, il nous reste plus de 80 années pour résoudre ce petit souci ! Pour ce faire, plusieurs solutions existent. Celle qui vient le plus naturellement serait de modifier la taille de l’entier utilisé pour noter l’horodatage sur Bitcoin. On pourrait ainsi utiliser des entiers de 64 bits, ce qui nous permettrait de repousser la limite de temps à plusieurs centaines de milliards d’années dans le futur.
Une autre solution serait de conserver un horodatage de 32 bits, mais que l’on interpréterait comme un entier de 64 bits. On ne noterait dans l’entête du bloc que les 32 derniers bits de l’entier, mais à chaque débordement, les nœuds ajouteraient 2^32 à la valeur notée pour obtenir la valeur réelle. Les débordements pourraient être détectés par les nœuds dès que l’horodatage de 32 bits chute brutalement par rapport aux blocs précédents.
Toutefois, ces deux solutions sont des hard forks. Il faudra que la communauté Bitcoin se mette d’accord dans les 80 prochaines années pour prévoir ce changement, avant que la date fatidique du 7 février 2106 advienne.
➤ Découvrir la différence entre un hard fork et un soft fork.
Conclusion
Dans les entêtes des blocs Bitcoin, l’horodatage est un entier de 32 bits non signé. Il permet d’associer un marqueur temporel au bloc. De cette manière, on peut déterminer l’ordre chronologique des transactions, et ainsi éviter la double dépense des pièces bitcoin.
Cet horodatage arrivera à sa valeur maximale le 7 février 2106 et engendrera l’arrêt de la blockchain Bitcoin si rien n’est fait. Heureusement, ce bug est non seulement très lointain, mais surtout très simple à corriger. Les opérateurs de nœuds complets devront effectuer une mise à jour du protocole via un hard fork avant cette échéance. L’objectif sera soit de modifier l'interprétation de l'entier de l'horodatage, soit d'étendre sa taille à 64 bits, permettant ainsi à Bitcoin de fonctionner pendant quelques centaines de milliards d'années de plus.
Ressources :