Zoran Stipaničev
Sveučilište u Zagrebu,
Fakultet Elektrotehnike i Računarstva,
Zagreb, 17.12.2003
2.5
Hash vrijednosti nekih poruka.
5
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.
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:
- bitwise
XOR
- bitwise
AND
- bitwise
OR
- 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.
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.
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.
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
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.
Hash vrijednost 24-bitne poruke "abc" u heksadecimalnom zapisu je:
Hash vrijednost 448-bitne poruke
je