Zephyrnet-logotyp

Matematiken i Bitcoin - SHA256

Datum:

Fram till nu har allt arbete varit en del av förbehandlingsfasen. Från och med nu kommer vi att titta på hashberäkningsfas. In this phase, we will be using data from the preprocessing phase to beräkna ytterligare 48 ord, totalling the number of words to 64. This then gives us 4 klossar totalt. Eftersom att beräkna ytterligare 48 ord skulle vara för långt, kommer jag att demonstrera beräkningen genom att beräkna 17:e ordet (𝑊(16) ). Detta beräknas med hjälp av följande ekvation:

Nästa ordekvation

Var för det 17:e ordet (bara t-värdet ändras för varje ord):

We start by finding the word 15 places back (𝑊 (1)). We then make två kopior av detta. Först tar vi den första kopian och right rotate by 7 places (𝑅𝑂𝑇𝑅⁷(𝑥)). Detta innebär att varje siffra flyttas till höger en plats 7 gånger och när siffrorna faller från slutet, flyttas de till fronten:

𝑾(𝟏) = 01110011011011010110111101110101

Right rotation 7 places using first copy

Med det andra exemplaret, vi högerrotera med 18 ( 𝑅𝑂𝑇𝑅¹⁸(𝑥)):

Högerrotation 18 platser med den andra kopian

Till sist tar vi originalet och högerväxling med 3 (𝑆𝐻𝑅³(𝑥)). This means when a number falls off the end it is replaced by zeros vid börjar av ordet:

Högerförskjutning 3 ställen med originalet

Vi tar sedan dessa 3 ord och tillämpar:

Rotation och Shift XOR för sigma 0

Var:

Smakämnen bitvis exklusiv-ELLER-operation (XOR ⨁) takes två binära siffror och returnerar 0 om båda siffrorna är 0 eller 1 och returnerar 1 annars. Eftersom vi har 3 ord använder vi först XOR-operationen på 𝑅𝑂𝑇𝑅⁷(𝑥) och 𝑅𝑂𝑇𝑅¹⁸(𝑥) och tar sedan detta resultat och använder XOR-operationen med 𝑆𝐻𝑥³).

Bitvis XOR utförs på roterade & skiftade ord

Därför drar jag slutsatsen att:

Konvertera detta resultat till hexadecimal form har vi:

Binär till hexadecimal konvertering

Vi tar nu tillbaka ordet 2 platser (𝑊(14) ) och gör 2 kopior. Vi tar sedan den första kopian och högerroterar 17 platser (𝑅𝑂𝑇𝑅¹⁷(𝑥)):

𝑾(𝟏𝟒) = 00000000000000000000000000000000

Högerrotation 17 platser med den första kopian

Nu tar vi den andra kopian och roterar höger 2 platser ( 𝑅𝑂𝑇𝑅¹⁹(𝑥)):

Högerrotation 19 platser med den andra kopian

Slutligen tar vi det ursprungliga och högra skiftet med 10 (𝑆𝐻𝑅¹⁰(𝑥)):

Right shift 10 places using original

Vi tar sedan dessa 3 ord och tillämpar:

Rotation och Shift XOR för sigma 1

Var:

Bitvis XOR utförs på roterade & skiftade ord

Därför drar jag slutsatsen att:

Eftersom hela ordet endast består av nollor är det hexadecimala värdet 0. Vi hänvisar då till vår nästa ords formel, finding the word 16 places back (𝑊 (0)) and the word 7 places back (𝑊 (9)).

𝑊(0) = 01110000011011110111001001110100 0

𝑊(9) = 00000000000000000000000000000000

Vi kan nu beräkna 𝑊 (16). För detta använder vi binär addition (+) som följer reglerna som visas nedan:

Binary Addition Rules
Pre-binära additionsvariabler
Binär tillägg för att hitta det 17:e ordet (W(16))

Den första kolumnen ignoreras för att behålla 32-bitarsformatet. Nu har vi vårt 17:e ord (𝑊(16)):

𝑾𝟏𝟔 = 𝟎𝟎𝟏𝟎𝟏𝟏𝟏𝟏𝟏𝟏𝟎𝟎𝟎𝟏𝟎𝟏𝟏𝟎𝟎𝟏𝟏𝟏𝟏𝟎𝟎𝟏𝟎𝟏𝟏𝟏𝟏𝟏

Slutligen konverterar vi detta från binär till hexadecimal form:

Binary to hexadecimal conversion of 17th word

Denna process upprepas sedan tills vi är kvar 64 ord. När vi beräknar de återstående orden har vi orden som visas nedan:

Alla 64 beräknade ord i hexadecimal

To compute the final hash, we must run 64 iterations of the equation below:

Final Hash Iterations 0 till 63

Använd våra 64 ord (𝑊 ) från tabellen ovan och de initiala hashvärdena (𝒂 𝒕𝒐 𝒉), där:

(¬) är INTE drift det returnerar 0 om siffran är 1 och 1 om siffran är 0. Vi använder också (∧) som är AND operation, detta returnerar 1 om båda siffrorna är 1 och 0 annars.

För att beräkna 𝑡(0) måste vi beräkna våra nya 𝒂 𝒕𝒐 𝒉 hashvärden. Börjar med a, där:

Finna 𝑻𝟏:
𝑒 = 510𝑒527 = 01010001000011100101001001111111
𝑓 = 9𝑏05688𝑐 = 10011011000001010110100010001100
𝑔 = 1𝑓83𝑑9𝑎𝑏 = 00011111100000111101100110101011
h = 5𝑏𝑒0𝑐𝑑19 = 01011011111000001100110100011001

Beräkning av Ch(e, f, g)

Med hänvisning till den slutliga iterationsformeln kan vi nu beräkna T(1):

Computation of T(1) using binary addition

Ger:

𝑻𝟏 = 01100011111001110101111111011100

Finna 𝑻𝟐:
𝑎 = 6𝑎09𝑒667 = 01101010000010011110011001100111
𝑏 = 𝑏𝑏67𝑎𝑒85 = 10111011011001111010111010000101
𝑐 = 3𝑐6𝑒𝑓372 = 00111100011011101111001101110010

Binär XOR på rotationer
Computation of Maj(a, b, c)

We can now calculate 𝑇(2) :

Computation of T(2) using binary addition

Ger:

𝑻𝟐 = 00001000100100001001101011100101

Nu kan vi beräkna 𝒂 från 𝑇(1) och 𝑇(2):

Beräkning av a med binär addition

Ger:

𝒂 = 01101100011101111111101011000001

Converting to hexadecimal, we have:

𝑎 = 6c77fac1

Med hänvisning tillbaka till iterationsalgoritmen kan vi nu också beräkna 𝑒:

𝑑 = 𝑎54𝑓𝑓53𝑎 = 10100101010011111111010100111010
𝑇(1) = 01100011111001110101111111011100

Beräkning av e med binär addition

Ger:

𝑒 = 00001001001101110101010100010110

Omvandling till hexadecimal har vi:

𝑒 = 09375516

Med hänvisning till iterationsalgoritmen finner vi också:

𝑏 = 𝑎 = 6𝑎09𝑒667
𝑐 = 𝑏 = 𝑏𝑏67𝑎𝑒85
𝑑 = 𝑐 = 3𝑐6𝑒𝑓372
𝑓 = 𝑒 = 510𝑒527𝑓
𝑔 = 𝑓 = 9𝑏05688𝑐
h = 𝑔 = 1𝑓83𝑑9𝑎𝑏

Leaving us with the final values for the first iteration 𝑡(0):

ah-värden efter den första iterationen

Vi utför sedan ytterligare 63 iterationer av algoritmen, med våra 𝒂-𝒉-värden från föregående iteration, uppdaterar varje omgång. Detta lämnar oss med den 64:e iterationen 𝑡(63):

ah-värden efter 64 iterationer

Using these values, we compute the ith intermediate hash value 𝐻(i) given by the following:

Var a-h are the values from our final iteration (𝑡(63)) and 𝐻(0)(0) to 𝐻(7)(0) are the initial hash values.

Giving us:

Beräkning av H(0)(i) med binär addition

......

Beräkning av H(6)(i) med binär addition

Slutligen kan vi konvertera de mellanliggande hash-värdena till hexadecimal form, vilket ger oss våra delar för det slutliga meddelandesammandraget:

Mellanhashvärden i hexadecimal form

Om vi ​​sätter ihop dessa värden i följande layout har vi nu vårt sista meddelandesammandrag (𝑀):

𝑴=3ccf243960d58d970b38dfbfa68be5c554c7462c960ab480933eb16b0d789597

Som noterades i början av kapitlet kan vi se att från vårt första meddelande "portsmouth" finns det ingen likhet till meddelandesammandraget. Den långa processen med SHA-256 är nödvändig för att bibehålla säkerheten för Bitcoin, vilket säkerställer att det inte finns något möjligt sätt att vända processen. Om en metod för vändning var möjlig skulle angripare ha möjlighet att ändra transaktioner på blockkedjan efter eget val.

Och det avslutar hashprocessen. Om du undrade hur jag kunde få alla dessa resultat (jag är rädd att jag inte beräknade varje iteration själv) eller ville prova själv, skulle jag rekommendera att kolla in detta Google Sheets-dokument av hashprocessen av David Rabahy.

Om du gillade den här serien eller hade några brännande frågor, tveka inte släpp en kommentar nedan.

Del ett och två
Del tre

Källa: https://medium.com/swlh/the-mathematics-of-bitcoin-74ebf6cefbb0?source=rss——-8—————–cryptocurrency

plats_img

Senaste intelligens

plats_img