Zoran Stipaničev
Sveučilište u Zagrebu,
Fakultet Elektrotehnike i Računarstva,
Zagreb, 17.12.2003

SHA-256. 1

1. Pregled. 1

2. Opis SHA-256. 1

2.1 Priprema poruke. 2

2.2 Glavna petlja. 2

2.3 Definicije. 3

2.4 Dijagrami 4

2.5 Hash vrijednosti nekih poruka. 5

 

SHA-256

 

 

1. Pregled

 

Poruku čiju hash vrijednost želimo izračunat prvo

(1)   proširimo tako da je konačna dužina u bitovima djeljiva sa 512, a zatim

(2)   podijelimo u blokove duzine 512 bitova M(1),M(2),..., M(N).

Blokovi poruke se obrađuju jedan po jedan: Počevši sa predodređenom početnom hash vrijednošću H(0), slijedno se računa

H(i) = H(i) + CM(i)(H(i – 1)),

gdje je C SHA-256 kompresijska funkcija, a '+' je word-wise mod 232 zbrajanje. H(N) je hash vrijednost poruke M.

 

2. Opis SHA-256

 

SHA-256 kompresijska funkcija radi sa 512-bitnim blokovima poruke i 256-bitnim međurezultatima hash vrijednosti. SHA-256 je u biti 256-bitni kriptografski algoritam koji kriptira međurezultate hash vrijednosti koristeći blok poruke kao ključ. U daljem opisu koristiti će se sljedeće oznake:

xor                  - bitwise XOR

and                  - bitwise AND

or                  - bitwise OR

not                   - bitwise complement

+                      - zbrajanje mod 232

SHRn(x)          - posmak u desno za n bitova

ROTRn(x)       - rotacija u desno za n bitova

  

Svi operatori djeluju nad 32-bitnim riječima.

Početna hash vrijednost H(0) je slijedeći niz 32-bitnih riječi:

 

 

To su ostaci korijena prvih osam prim brojeva.

 

2.1 Priprema poruke

 

Izračunavanje hash vrijednosti počinje pripremanjem poruke:

 

1.      Proširivanje poruke: Pretpostavimo da je duljina poruke M, u bitovima l. Dodajemo bit '1' na kraj poruke, i zatim k nula bitova, gdje je k najmanje ne negativno rješenje jednadžbe l + 1 + k = 448 mod 512. Na to se dodaje 64-bitni blok koji je jednak broju l zapisanom binarno. Na primjer, poruka "abc" (u 8-bitnom ASCII kodu) ima dužinu 8 * 32 = 24 pa se proširuje prvo sa '1' i zatim sa 448 – (24 + 1) = 443 nula bitova, nakon čega dobijemo prošireno poruku od 512-bitova

 

2.      Podijelimo poruku na N 512-bitnih blokova M(1),M(2),..., M(N). Prvih 32 bita  i-tog bloka su označena sa M0(i), sljedećih 32 bita su M1(i), i tako do M15(i). Koristi se isključivo big-endian zapis.

 

 

 

2.2 Glavna petlja

 

Nastavak računanja hash-a može se prikazat sljedećim pseudokodom:

 

Za i = 1 do N  ( N je broj blokova proširene poruke )

{

·        Inicijalizacija registara a,b,c,d,e,f,g,h sa (i -1)-im međurezultatom hash vrijednosti.

 

·        Primjenom SHA-256 kompresijske funkcije postavljaju se nove vrijednosti registara a,b,...,h

For j = 0 do 63

{

Izračunaj Ch(e,f,g), Maj(a,b,c), å 0(a), å 1(e), i Wj (definicije su niže u tekstu)

}

·        Računanje i-tog međurezultata hash vrijednosti

}

je hash vrijednost poruke M.

 

2.3 Definicije

U SHA-256 koristi se 6 logičkih funkcija. Sve funkcije rade sa 32-bitnim riječima i vračaju 32-bitni rezultat.

 


Prošireni blokovi W0, W1, ... , W63 se računaju prema sljedećem rasporedu:

Za izračunavanje hash vrijednosti koriste se i 64 konstantne 32-bitne riječi, K0 , ... ,K63. U hex zapisu riječi si definirane sa slijedećim nizom

 

 

 

 

 

 

2.4 Dijagrami

 

SHA-256 kompresijska funkcija može se prikazati sljedećom slikom:

 

 

gdje  označava mod 2 32 zbrajanje.

 

 

Generiranje proširenih blokova prikazano je na sljedećoj slici:

 

 

Inicijalne vrijednosti registara su W0, W1, ... , W15.

 

 

2.5 Hash vrijednosti nekih poruka

 

Hash vrijednost 24-bitne poruke "abc" u heksadecimalnom zapisu je:

 

 

Hash vrijednost 448-bitne poruke

 

je

 

 


   SHA-256_opis u word formatu.
SHA-256_kod - cpp kod i ulazne i izlazne testne datoteke
SHA-256.exe
Secure Hash Standard