Il Bug Off-By-One nel Codice di Bitcoin

Quando si tratta dei meccanismi chiave di Bitcoin, tantissimi appassionati sono in grado di spiegare aspetti piu’ o meno tecnici del progetto di Satoshi. Tuttavia, c’è un piccolo dettaglio che molti ancora non conoscono: di fatto, il calcolo della difficoltà del mining non avviene ogni 2016 blocchi, come si potrebbe pensare, ma ogni 2015 blocchi. E seppur possa sembrare un dettaglio insignificante, in realtà ha sollevato alcune domande e preoccupazioni tra gli esperti e il grande pubblico.

Sulla carta, la difficoltà di mining in Bitcoin dovrebbe venir regolata ogni volta che vengono estratti 2016 blocchi. Questo processo, che dovrebbe assicurare che il tempo medio per estrarre un blocco sia di circa 10 minuti, regola la difficoltà in base al tempo effettivo impiegato per estrarre quei 2016 blocchi. Se il tempo è inferiore a 10 minuti, la difficoltà aumenta; se è superiore, la difficoltà diminuisce.

Il problema sorge perché, a causa di un errore nel codice di Bitcoin Core, anziché basarsi sul totale dei tempi dei 2016 blocchi precedenti, il calcolo della difficoltà si basa sui tempi dei 2015 blocchi precedenti. Questo piccolo bug “off-by-one” (o “Time Warp bug”) porta a una leggera distorsione nell’adattamento della difficoltà, con una variazione del 0,5% verso l’alto.

Ma perché questo non è un vero problema? La risposta sta nel fatto che, nonostante la leggera discrepanza nel calcolo, sfruttare questo errore per ottenere un vantaggio è estremamente difficile e poco pratico. Anche se un attaccante riuscisse a manipolare i tempi dei blocchi per abbassare artificialmente la difficoltà, l’effetto sarebbe solo temporaneo. Una volta che il sistema di calcolo della difficoltà si riaggiusta, il vantaggio ottenuto sarebbe annullato.

Inoltre, per sfruttare efficacemente questo errore, un attaccante dovrebbe essere in grado di generare blocchi con timestamp fasulli nel futuro, cosa che è vincolata da regole e restrizioni nel protocollo Bitcoin. Questo rende l’attuazione di un attacco di questo tipo estremamente complessa e poco praticabile nella realtà.

Molti non considerano il fatto che 2016 diventi 6102 se letto al contrario una coincidenza. Infatti, 6102 e’ il numero dell’ordine esecutivo che ha de facto segnato la fine del gold standard. Satoshi pero’ non aveva considerato questo piccolo bug e ora dovremo accontentarci di un numero qualsiasi.