SHA-1 skraćenica je od engleske složenice Secure Hash Algorithm i ime je za algoritam koji služi za provjeru autentičnosti datoteka ili poruke prilikom prijenosa između pošiljaoca i primatelja. SHA-1 je nasljednik MD-5 i koristi se u raznim sigurnosnim programima ili u protokomima kao što su: TLS, SSL, PGP, SSH, S/MIME, i IPsec. SHA-1 je kompromitiran 2002. [1] nakon čega je razvijena poboljšana inačica SHA-2.

Algoritam SHA-1 uredi

Pseudokod algoritma SHA-1 :

Opaska: Sve varijable su unsigned 32 bita dugačke modulo 232 kod računanja

Inicijaliziraj varijable:
h0 := 0x67452301
h1 := 0xEFCDAB89
h2 := 0x98BADCFE
h3 := 0x10325476
h4 := 0xC3D2E1F0

Pred-obrada:
dodaj bit  '1' na kraj poruke
dodaj k bitova '0', gdje je k broj >= 0 tako da rezutirajuća poruka
    duljina (u bitovima) je congruent  448 (mod 512)
    dodaj duljinu poruke (prije pred-obrade), u bitovima, kao 64-bitni big-endian cijeli broj

Obradi poruku u sekventim nizovima od 512-bita:
razbij poruku u komade od 512-bita
za svaki komad
    razbij komad u šestnaest 32-bitnih big-endian riječi  w[i], 0 ≤ i ≤ 15

    Produži šesnaest 32-bitne u osam 32-bitne riječi:
    za i od 16 do 79
        w[i] := (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) rotirajlijevo 1

    Inicializiraj hash vrijednost za svaki komad:
    a := h0
    b := h1
    c := h2
    d := h3
    e := h4

    Glavna petlja:
    za i od 0 do 79
        ako je 0 ≤ i ≤ 19 tada
            f := (b and c) or ((not b) and d)
            k := 0x5A827999
        inače ako je 20 ≤ i ≤ 39
            f := b xor c xor d
            k := 0x6ED9EBA1
        inače ako je 40 ≤ i ≤ 59
            f := (b i c) or (b i d) or (c i d)
            k := 0x8F1BBCDC
        inače ako je 60 ≤ i ≤ 79
            f := b xor c xor d
            k := 0xCA62C1D6

        temp := (a rotrirajlijevo 5) + f + e + k + w[i]
        e := d
        d := c
        c := b rotirajlijevo 30
        b := a
        a := temp

    Dodaj hash ovog komada na dosadašnji rezultat:
    h0 := h0 + a
    h1 := h1 + b 
    h2 := h2 + c
    h3 := h3 + d
    h4 := h4 + e

Proizvedi završnu hash vrijednost (big-endian):
digest = hash = h0 poveži h1 poveži h2 poveži h3 poveži h4

Umjesto uporabe originalne formulacije u FIPS PUB 180-1 može se upotrijebiti sljedeći izraz f u glavoj petlji prikazanoj iznad:

(0  ≤ i ≤ 19): f := d xor (b i (c xor d))         (alternative)
 
(40 ≤ i ≤ 59): f := (b i c) ili (d i (b ili c))   (alternativa 1)
(40 ≤ i ≤ 59): f := (b i c) ili (d i (b xor c))  (alternativa 2)
(40 ≤ i ≤ 59): f := (b i c) + (d i (b xor c))   (alternativa 3)

Vidi još uredi

Vanjske poveznice uredi

  • Crypto++ besplatna biblioteka kriptografskih rutina u C++