Les mathématiques du Bitcoin – SHA256 – La startup

Table des matières

Les mathématiques du Bitcoin – SHA256 – La startup

4.3 – Phase de calcul du hachage

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)

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:

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