Les mathématiques du Bitcoin – SHA256 – La startup
4.3 – Phase de calcul du hachage
Jusqu’à présent, tout le travail faisait partie du phase de prétraitement. A partir de maintenant, nous allons examiner la phase de calcul du hachage. Dans cette phase, nous utiliserons les données de la phase de prétraitement pour calculer 48 mots supplémentaires, totalisant le nombre de mots à 64. Cela nous donne alors 4 blocs au total. Comme calculer 48 mots de plus serait trop long, je vais démontrer le calcul en calculant le 17e mot (𝑊 (16)). Ceci est calculé en utilisant l’équation suivante:
Où pour le 17ème mot (juste la valeur t change pour chaque mot):
On commence par retrouver le mot 15 places en arrière (𝑊 (1)). On fait ensuite deux copies de cela. Premièrement, nous prenons le premier exemplaire et rotation à droite de 7 positions (𝑅𝑂𝑇𝑅⁷ (𝑥)). Cela signifie que chaque chiffre se déplace vers la droite un endroit 7 fois et lorsque les chiffres tombent à la fin, ils sont déplacés vers l’avant:
𝑾 (𝟏) = 01110011011011010110111101110101
Avec le deuxième exemplaire, nous rotation à droite de 18 (𝑅𝑂𝑇𝑅¹⁸ (𝑥)):
Enfin, nous reprenons l’original et le déplacer vers la droite de 3 (𝑆𝐻𝑅³ (𝑥)). Cela signifie que lorsqu’un nombre tombe à la fin, il est remplacé par des zéros au début du mot:
Nous prenons ensuite ces 3 mots et appliquons:
Où:
le opération OU exclusif au niveau du bit (XOR ⨁) prend deux chiffres binaires et renvoie 0 si les deux chiffres sont 0 ou 1 et renvoie 1 sinon. Comme nous avons 3 mots, nous utilisons d’abord l’opération XOR sur 𝑅𝑂𝑇𝑅⁷ (𝑥) et 𝑅𝑂𝑇𝑅¹⁸ (𝑥), puis prenons ce résultat et utilisons l’opération XOR avec 𝑆𝐻𝑅³ (𝑥).
Par conséquent, concluant que:
Conversion de ce résultat en forme hexadécimale on a:
Nous reprenons maintenant le mot 2 places (𝑊 (14)) et faisons 2 copies. Nous prenons ensuite la première copie et tournons à droite de 17 positions (𝑅𝑂𝑇𝑅¹⁷ (𝑥)):
𝑾 (𝟏𝟒) = 00000000000000000000000000000000
Maintenant, nous prenons la 2ème copie et tournons à droite de 19 positions (𝑅𝑂𝑇𝑅¹⁹ (𝑥)):
Enfin, nous prenons le décalage d’origine et à droite de 10 (𝑆𝐻𝑅¹⁰ (𝑥)):
Nous prenons ensuite ces 3 mots et appliquons:
Où:
Par conséquent, concluant que:
Comme le mot entier n’est composé que de zéros, la valeur hexadécimale est 0. Nous nous référons ensuite à notre formule du mot suivant, en trouvant le mot 16 places en arrière (𝑊 (0)) et le mot 7 en arrière (𝑊 (9)).
𝑊 (0) = 01110000011011110111001001110100 0
𝑊 (9) = 00000000000000000000000000000000
Nous pouvons maintenant calculer 𝑊 (16). Pour cela, nous utilisons l’addition binaire (+) qui suit les règles indiquées ci-dessous:
La première colonne est ignorée pour conserver le format 32 bits. Maintenant, nous avons notre 17e mot (𝑊 (16)):
𝑾𝟏𝟔 = 𝟎𝟎𝟏𝟎𝟏𝟏𝟏𝟏𝟏𝟏𝟎𝟎𝟎𝟏𝟎𝟏𝟏𝟎𝟎𝟏𝟏𝟏𝟏𝟎𝟎𝟏𝟎𝟏𝟏𝟏𝟏𝟏
Enfin, nous convertissons cela du binaire en forme hexadécimale:
Ce processus est ensuite répété jusqu’à ce que nous nous retrouvions avec 64 mots. En calculant les mots restants, nous nous retrouvons avec les mots ci-dessous:
Pour calculer le hachage final, nous devons exécuter 64 itérations de l’équation ci-dessous:
En utilisant nos 64 mots (𝑊) du tableau ci-dessus et les valeurs de hachage initiales (𝒂 𝒕𝒐 𝒉), où:
(¬) est le NE PAS opération qui renvoie 0 si le chiffre est 1 et 1 si le chiffre est 0. Nous utilisons également (∧) qui est le ET opération, ce renvoie 1 si les deux chiffres sont 1 et 0 sinon.
Exemple: Calcul 𝑡 (0)
Pour calculer 𝑡 (0), nous devons calculer nos nouvelles valeurs de hachage 𝒂 𝒕𝒐 𝒉. Commençant par une, où:
Découverte 𝑻𝟏:
𝑒 = 510𝑒527 = 01010001000011100101001001111111
𝑓 = 9𝑏05688𝑐 = 10011011000001010110100010001100
𝑔 = 1𝑓83𝑑9𝑎𝑏 = 00011111100000111101100110101011
h = 5𝑏𝑒0𝑐𝑑19 = 01011011111000001100110100011001
En revenant à la formule d’itération finale, nous pouvons maintenant calculer T (1):
Donnant:
𝑻𝟏 = 01100011111001110101111111011100
Découverte 𝑻𝟐:
𝑎 = 6𝑎09𝑒667 = 01101010000010011110011001100111
𝑏 = 𝑏𝑏67𝑎𝑒85 = 10111011011001111010111010000101
𝑐 = 3𝑐6𝑒𝑓372 = 00111100011011101111001101110010
On peut maintenant calculer 𝑇 (2):
Donnant:
𝑻𝟐 = 00001000100100001001101011100101
Maintenant, nous pouvons calculer 𝒂 à partir de 𝑇 (1) et 𝑇 (2):
Donnant:
𝒂 = 01101100011101111111101011000001
En convertissant en hexadécimal, nous avons:
𝑎 = 6c77fac1
En revenant à l’algorithme d’itération, nous pouvons également maintenant calculer 𝑒:
𝑑 = 𝑎54𝑓𝑓53𝑎 = 10100101010011111111010100111010
𝑇 (1) = 01100011111001110101111111011100
Donnant:
𝑒 = 00001001001101110101010100010110
En convertissant en hexadécimal, nous avons:
𝑒 = 09375516
En revenant à l’algorithme d’itération, nous trouvons également:
𝑏 = 𝑎 = 6𝑎09𝑒667
𝑐 = 𝑏 = 𝑏𝑏67𝑎𝑒85
𝑑 = 𝑐 = 3𝑐6𝑒𝑓372
𝑓 = 𝑒 = 510𝑒527𝑓
𝑔 = 𝑓 = 9𝑏05688𝑐
h = 𝑔 = 1𝑓83𝑑9𝑎𝑏
Nous laissant les valeurs finales pour la première itération 𝑡 (0):
Nous effectuons ensuite 63 itérations supplémentaires de l’algorithme, en utilisant nos valeurs 𝒂-𝒉 de l’itération précédente, mise à jour à chaque tour. Cela nous laisse avec la 64e itération 𝑡 (63):
En utilisant ces valeurs, nous calculons la ième valeur de hachage intermédiaire 𝐻 (i) donnée par ce qui suit:
Où a-h sont les valeurs de notre itération finale (𝑡 (63)) et 𝐻 (0) (0) à 𝐻 (7) (0) sont les valeurs de hachage initiales.
Nous donnant:
……
Enfin, nous pouvons convertir les valeurs de hachage intermédiaires sous forme hexadécimale, nous donnant nos parties pour le résumé du message final:
En rassemblant ces valeurs dans la disposition suivante, nous avons maintenant notre résumé de message final (𝑀):
𝑴 = 3ccf243960d58d970b38dfbfa68be5c554c7462c960ab480933eb16b0d789597
Comme indiqué au début du chapitre, nous pouvons voir que, d’après notre message initial «portsmouth», pas de ressemblance au résumé du message. Le long processus de SHA-256 est nécessaire pour conserver la sécurité de Bitcoin, garantissant qu’il n’y a aucun moyen possible d’inverser le processus. Si une méthode de retournement était possible, les attaquants auraient la possibilité de modifier les transactions sur la blockchain à leur choix.
Et cela conclut le processus de hachage. Si vous vous demandez comment j’ai pu obtenir tous ces résultats (je crains de ne pas avoir calculé chaque itération moi-même) ou si vous vouliez l’essayer vous-même, je vous recommande de vérifier ce document google sheets du processus de hachage par David Rabahy.
Si vous avez aimé cette série ou avez des questions brûlantes, n’hésitez pas à déposez un commentaire ci-dessous.
Première et deuxième parties
Partie trois