Toggle menu
310,1 tis.
44
18
525,6 tis.
Hrvatska internetska enciklopedija
Toggle preferences menu
Toggle personal menu
Niste prijavljeni
Your IP address will be publicly visible if you make any edits.

SHA-1

Izvor: Hrvatska internetska enciklopedija

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

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š

Vanjske poveznice

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