Preuve-de-travail (Proof-of-Work)
Pour mettre en place un serveur d’horodatage distribué en mode pair-à-pair, nous devons utiliser un mécanisme de preuve-de-travail similaire au « Hashcash » d’Adam Back[6], plutôt que de simplement publier un hachage dans un journal ou sur Usenet. Le principe consiste à rechercher une valeur qui, une fois hachée (par exemple avec SHA-256), produit un résultat commençant par un nombre déterminé de bits nuls. Le temps de calcul moyen requis croît de façon exponentielle avec la quantité de bits nuls imposés, tandis que la validité de la solution peut se vérifier par un simple hachage.
Dans notre réseau d’horodatage, la preuve de travail s’implémente en incrémentant un nonce dans le bloc, jusqu’à trouver une valeur qui génère le nombre de bits nuls requis en tête du hachage du bloc. Une fois l’effort de calcul fourni pour satisfaire cette preuve-de-travail, il est impossible de modifier le bloc sans tout refaire. De plus, à mesure que d’autres blocs se chaînent sur celui-ci, toute modification impliquerait de recalculer l’ensemble des blocs suivants.

Block: Bloc
Prev Hash: Hachage du bloc précédent
Nonce: Nonce
Tx(Transaction): Transaction
La preuve-de-travail aborde également la question de la représentation dans les prises de décision majoritaires. Si la majorité reposait sur un principe « une adresse IP = un vote », elle pourrait être détournée par quiconque disposant d’un grand nombre d’adresses IP. La preuve-de-travail revient à « un CPU = un vote ». La décision majoritaire est illustrée par la chaîne la plus longue, laquelle a nécessité l’effort de calcul le plus important. Si une majorité de la puissance de calcul est détenue par des nœuds honnêtes, la chaîne émanant de ces nœuds progressera plus rapidement et dépassera toute chaîne concurrente. Pour modifier un ancien bloc, un attaquant devrait refaire la preuve-de-travail de ce bloc ainsi que de tous ceux qui le suivent, tout en rattrapant et dépassant la chaîne des nœuds honnêtes. Nous verrons plus loin que la probabilité qu’un attaquant plus lent réussisse à combler son retard diminue de façon exponentielle à mesure que de nouveaux blocs sont ajoutés.
Pour s’adapter à la hausse des performances matérielles et aux fluctuations de l’implication des nœuds au fil du temps, la difficulté de la preuve-de-travail est ajustée selon une moyenne mobile visant un nombre moyen de blocs par heure. Si les blocs sont produits trop rapidement, la difficulté augmente.