Pređi na sadržaj

SHA-2

S Vikipedije, slobodne enciklopedije
SHA-2 (Sigurnosni alogoritam heširanja) je set kriptografskih heš funkcija dizajniran od strane Nacionalne Bezbednosne Agencije (NSA).

SHA-2 (Sigurnosni algoritam heširanja) je skup kriptografskih heš funkcija napravljen od strane Nacionalne Bezbednosne Agencije (NSA). SHA je skraćenica za Sigurnosni Algoritam Heširanja. Kriptografske heš funkcije su matematičke operacije koje se vrše nad digitalnim podacima; upoređivanjem obrađenog "heša" (rezultata izvršavanja algoritma) sa poznatom i  očekivanom heš vrednošću, možemo utvrditi celovitost podataka. Na primer, obrađivanjem heša skinutog fajla i upoređivanjem rezultata sa prethodno objavljenom heš vrednošću možemo utvrditi da li je fajl menjan ili kompromitovan. Ključna odlika kriptografske heš funkcije je njegova otpornost na sudaranje, tj. nije moguće naći dva različita unosa koji kao rezultat daju istu heš vrednost.

SHA-2 uključuje značajne promene u odnosu na svog prethodnika SHA-1. SHA-2 porodica se sastoji od 6 heš funkcija sa obradama (heš vrednostima) od 224, 256, 384 ili 512 bita: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256.

SHA-256 i SHA-512 su novije heš funkcije obrađivane 32-bitnim odnosno 64-bitnim rečima. Koriste različite pomeraje i aditivne konstante, ali su im strukture osim toga skoro iste, razlikuju se samo po broju rundi. SHA-224 i SHA-384 su jednostavno okrnjene verzije prva dva, obrađene drugim početnim vrednostima. SHA-512/224 i SHA-512/256 su takođe okrnjene verzije SHA-512, ali su početne vrednosti generisane metodom propisanom Federalnim Standardom za Obradu Podataka (FIPS) PUB 180-4. SHA-2 je objavljen 2001. god. od strane Nacionalnog Instituta za Standarde i Tehnologiju, američkog federalnog standarda (FIPS). SHA-2 porodica algoritama patentirana je pod brojem 6829355. SAD su oslobodile patent plaćanja licence.

2005. god. pojavio se algoritam za pronalaženje sudara SHA-1 algoritma u oko 2000 manje koraka nego do tada. Iako do danas nije objavljen nijedan primer sudara kod SHA-1 algoritma, otportnost na sudare je manja od očekivane tako da se njegovo korišćenje više ne preporučuje za poslove koji se oslanjaju na otpornost kod sudara, kao na primer digitalni potpis. Iako je SHA-2 sličan SHA-1, napadi nikad nisu uspešno izvedeni.

Heš standard

[uredi | uredi izvor]
One iteration in a SHA-2 family compression function. The blue components perform the following operations:
The bitwise rotation uses different constants for SHA-512. The given numbers are for SHA-256. The red is addition modulo 232.

Objavljivanjem FIPS PUB 180-2, NIST dodaje tri dodatne 3 heš funkcije SHA porodici. Ti algoritmi su poznati kao SHA-2, nazvanih po dužini obradnih reči (u bitovima): SHA-256, SHA-384, i SHA-512. Algoritmi su prvo objavljeni 2001. god. u FIPS PUB 180-2 i u to vreme su prihvatane javne kritike i komentari. Avgusta 2002, FIPS PUB 180-2 postaje novi Standard Sigurnog Heširanja i time zamenjuje dotadašnji  FIPS PUB 180-1 objavljen 1995. Unapređeni standard je sadržao prvobitni SHA-1 algoritam, sa unapređenom tehničkom dokumentacijom u kojoj je detaljno opisan način rada algoritama SHA-2 porodice.

Febrara 2004., objavljena je promena FIPS PUB 180-2 opisujući novu varijantu,SHA-224,  koji je definisan da se poklapa sa dužinom ključa dvoključnog  Triple DES-a. Oktobra 2008. standard je ažuriran u objavi FIPS PUB 180-3 dodajući SHA-224 kao standard, bez fundamentalnih promena u standardu. Osnovna motivacija za unapređenjem standarda, bilo je premeštanje bezbednosnih informacija o heš algirmima i preporukama za njihovo korišćenje u  specijalne publikacije 800-107 i 800-57. Detaljan test podataka i primer obrade poruka su uklonjeni iz standarda i sada su dostupni u zasebnim dokumentima.

Januara 2011. NIST objavljuje SP800-131A, u kom opisuje prelazak sa dotadašnje minimalne bezbednosti od 80 bitova (SHA-1) koje su državne institucije koristile do 2013. na 112 bitnu beubednost (SHA-2) što postaje minimalna i preporučena bezbednost nakon toga.[1]

Marta 2012. standard je unapređen u objavi FIPS PUB 180-4, tada su dodate heš funkcije SHA-512/224 i SHA-512/256 i opsian je metod za generisanje početnih vrednosti za okrnjene verzije SHA-512. Pored toga skinuta je zabrana dopunjavanja ulaznih podataka pre heširanja, što je dozvoljavalo da je heš podaci računaju istovremeno kada se generiše sadrža, nalik na prenos zvuka i videa u realnom vremenu. Dodavanje finalnog bloka podataka mora da se završi pre rezultata heširanja.[2] Jula 2012[3]. NIST revidira SP800-57, što pruža uputstvo za rukovanje kriptografskim ključevima. Ova publikacija zabranjuje pravljenje digitalnih potpisa koji imaju heš bezbednost manju od 112 bita nakon 2013. Prethodna revizija 2007.  navodi da prelazak bude najkasnije do kraja 2010. Avgusta 2012. NIST proverava SP800-107 na isti način.

Aplikacije

[uredi | uredi izvor]

Za više detalja na ovu temu pogledajte Cryptographic hash function § Applications.

SHA-2 heš funkcija se koristi u nekim široko korišćenim sigurnosnim aplikacijama i protokolima, kao što su TLSSSLPGPSSHS/MIME i IPsec.

SHA-256 se koristi kao deo procesa overe Debian GNU/Linux softverskih paketa[4],  kao i u DKIM standardu za potpisivanje poruka; SHA-512 je deo sistema za overavanje arhivskog videa iz Medđunarodnog suda pravde za genocid u Ruandi.  SHA-256 i SHA-512 su preporučeni za korišćenje u DNSSEC.[5] Juniks i Linuks distributeri prelaze na korišćenje 256bitnog i 512bitnog SHA-2 za sigurnosno heširanje šifra.[6]


Nekoliko kriptovaluta kao na primer Bitkoin, koriste SHA-256 za overavanje transakcija i računanje  proof-of-work i proof-of-stake. Napredovanjem  ASIC SHA-2 ubrzavajućih čipova, dovelo je do koriščenja proof-of-work šema zasnovanih na šifrovanju.

SHA-1 i SHA-2  su sigurni heš algoritmi neophodni u određenim državnim ustanova SAD, uključujući korišćenje drugih kriptografskih algoritama i protokola, za zaštitu osetljivih informacija. FIPS PUB 180-1 takođe ohrabruje prihvatanje i korišćenje SHA-1 od strane privatnih i trgovinskih organizacija.  SHA-1 se više ne koristi u većini državnih ustanova; Nacionalni institut za Standarde i Tehnologiju u SAD, preporučuje državnim službama da prestanu korišćenje  SHA-1 za poslove koji zahtevaju otpornost na sudar i da koriste neki od SHA-2 porodice heš funkcija nakon 2010. god. [7] NISTova direktiva je trebalo da ubrza prestanak korišćenja SHA-1.

Uprkos boljoj sigurnosti, funkcionalnosti SHA-2 nisu brzo privhaćene. Razlog možda leži u tome što je nedostajala podrška za sisteme na kojima je bio Windows XP SP2 ili neka starija verzija, [8]  kao i u činjenici da idalje nije pronađen sudar kod SHA-1 . Google Chrome tim je najavio da će njihovi pregledači prestati sa korišćenjem SHA-1-zavisnih 

TLS  setifikata u periodu od kraja 2014 do rane 2015.[9][10][11]

Kriptoanaliza i overa

[uredi | uredi izvor]

Za heš funkcije gde L predstavlja broj bita u datoj obrađenoj poruci, naći poruku koja odgovara datoj neobrađenoj,može se odrediti korišćenjem”nasilnog“ algoritma, odnosno “Brute force” algoritma pretragomu  2L izraza. Ovo se naziva “preimage attack” i može, ali i ne mora biti efikasno, u zavisnosti od broja bita – L i od samog računarskog okruženja. Drugi kriterijum jeste naći dve različite neobrađene poruke koje obradom daju isti segment bitova. Ovo se naziva kolizija, i korišćenjem takozvanog “birthday attack” (kriptografskog napada), njihov broj iznosi u proseku samo 2L/2.

Na neke aplikacije koje koriste kriptografski heš, kao što je skladištenje lozinik, kolizija predstavlja minimalan problem. Napraviti lozinku koja odgovara datom nalogu zahteva “preimage attack” , kao i pristup hešu prvobitne šifre, obično u shadow fajlovima, što može, ali opet i ne mora biti jednostavno. Čak ni bezbedne heš vrednosti lozinke ne mogu sprečiti da se, gore pomenutim „nasilnim“ algoritmom „napadnu“ i otkriju neke ne tako sigurne šifre.

U slučajevima potpisivanja dokumenata, napadač ne može prosto lažirati potpis postojećeg dokumenta – napadač bi morao da stvori/napiše dva dokumenta, jedan bezazlen i jedan štetan i da onda natera ili na neki način učini da posrednik privatnog ključa potpiše štetan dokument. Postoje i situacije u kojima je moguće sledeće: sve do kraja 2008. godine, bilo je moguće kreirati krivotvoren SSL sertifikat koristeći MD5 koliziju koja je bila prihvaćena korišćenjem internet pregledača. 

Povećavanjem zanimanja za analizom kriptografskog heša za vreme takmičenja SHA3 dovelo je do novog napada na SHA-2 porodicu. Jedini praktičan problem jeste kolizija, odnosno „kolizioni napadi“: ni jedan napad ne ukazuje na punu heš funkciju.

Na FSE 2012, istraživači u Soniju su održali prezentaciju ukazujući na to da pseudo-kolizioni napadi mogu da se povećaju čak na 52 rundi na SHA-256 i 57 rundi na SHA-512 koristeći "biclique pseudo-preimage" napad.

Objavljeno u Godina Metod napada Napad Vrsta Runda Kompleksnost
Novi napad sudara protiv
SHA-2 do 24 koraka
[12]
2008 Deterministički Sudar SHA-256 24/64 228.5
SHA-512 24/80 232.5
Preimages za umanjeni broj koraka SHA-2[13] 2009 Čovek-u-sredini (MITM) Preimage SHA-256 42/64 2251.7
43/64 2254.9
SHA-512 42/80 2502.3
46/80 2511.5
Napredni čovek-u-sredini (MITM)
preimage napad
[14]
2010 Čovek-u-sredini (MITM) Preimage SHA-256 42/64 2248.4
SHA-512 42/80 2494.6
Diferencijalni napad višeg reda
na redukovani SHA-256
[15]
2011 Diferencijal Pseudo-sudar SHA-256 46/64 2178
46/64 246
Bicliques za Preimages: Napad na
Skein-512 i SHA-2 familiju
[16]
2011 Biclique Preimage SHA-256 45/64 2255.5
SHA-512 50/80 2511.5
Pseudo-preimage SHA-256 52/64 2255
SHA-512 57/80 2511
Poboljšanje lokalnog sudara: Novi
napad na redukovani SHA-256
[17]
2013 Diferencijal Sudar SHA-256 31/64 265.5
Pseudo-sudar SHA-256 38/64 237
Heoristika grananja u diferencijalnom sudaru
Pretraga aplikacijama do SHA-512
[18]
2014 Heoristika diferencijala Pseudo-sudar SHA-512 38/80 240.5
Analiza SHA-512/224 i SHA-512/256[19] 2016 Diferencijal Sudar SHA-256 28/64 praktičan
SHA-512 27/80 practical
Pseudo-sudar SHA-512 39/80 practical

Zvanična overa

[uredi | uredi izvor]

Implementacija svih sigurnosnih funkcija, odobrenih od strane FIPS-a, može biti overena kroz CMVP progragam, koji zajednički vode Nacionalni institut za Standarde i Tehnologiju (NIST) i Ustanova za bezbedne komunikacije (CSE). 

Primeri SHA-2 varijanti

[uredi | uredi izvor]

Heš vrednosti praznih stringova.

SHA224("")                                            0x d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f
SHA256("")
0x e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
SHA384("")
0x 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b
SHA512("")
0x cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
SHA512/224("")
0x 6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4
SHA512/256("")
0x c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a


Čak će i mala promena u poruci najverovatnije dovesti do različite heš vrednosti. Na primer dodavanje tačke na kraj ove rečenice menja vrednost heša sa 111 na 224 bita:

SHA224("The quick brown fox jumps over the lazy dog")
0x 730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525
SHA224("The quick brown fox jumps over the lazy dog.")
0x 619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4c

Pseudokod

[uredi | uredi izvor]

U nastavku sledi pseudokod za SHA-256 algoritam.

Напомена 1: Све променљиве су 32-битни неозначени интиџери и додавање се рачуна по моду 232
Напомена 2: За сваку рунду, постоји једна константа k[i] и један унос у распоред порука, низ
w[i],  0 ≤ i ≤ 63.
Напомена 3: Функција за компресију користи 8 проманљивих, слова од а до х.
Напомена 4: Big-endian нотација је коришћена за константе и када парсирамо блок порука из бајта у речи,
нпр. прва реч уноса поруке "абц" након допуњавања буде 0x61626380.

Иницијализација хеш вредности:
првих 32-бита из факторијелних делова из квадратних корена првих 8 простих бројева 2...19):
h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

Иницијализација низа округлих константи:
(првих 32 бита су разломљени делови кубих корена првих 64 простих бројева 2...311):
k[0..63] :=
   0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
   0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
   0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
   0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
   0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
   0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
   0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
   0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2

Пред-процесирање:
append the bit '1' to the message
append k bits '0', where k is the minimum number >= 0 such that the resulting message
    length (modulo 512 in bits) is 448.
append length of message (without the '1' bit or padding), in bits, as 64-bit big-endian integer
    (this will make the entire post-processed length a multiple of 512 bits)

Обрађивање поруке у 512-битне гомиле:
break message into 512-bit chunks
for each chunk
    create a 64-entry message schedule array w[0..63] of 32-bit words
    (The initial values in w[0..63] don't matter, so many implementations zero them here)
    copy chunk into first 16 words w[0..15] of the message schedule array

    Проширивање првих 16 речи са осталих 48 речи w[16..63] низа порука:
    for i from 16 to 63
        s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3)
        s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10)
        w[i] := w[i-16] + s0 + w[i-7] + s1

    Иницијализација променљивих за тренутне хеш вредности:
    a := h0
    b := h1
    c := h2
    d := h3
    e := h4
    f := h5
    g := h6
    h := h7

    функција компресије, главна петља:
    for i from 0 to 63
        S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
        ch := (e and f) xor ((not e) and g)
        temp1 := h + S1 + ch + k[i] + w[i]
        S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
        maj := (a and b) xor (a and c) xor (b and c)
        temp2 := S0 + maj
 
        h := g
        g := f
        f := e
        e := d + temp1
        d := c
        c := b
        b := a
        a := temp1 + temp2

    Додавање компресоване гомиле на тренутну хеш вредност:
    h0 := h0 + a
    h1 := h1 + b
    h2 := h2 + c
    h3 := h3 + d
    h4 := h4 + e
    h5 := h5 + f
    h6 := h6 + g
    h7 := h7 + h

Прављење коначне хеш вредности (big-endian):
digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7


Obrađivanje ch and maj vrednosti se može optimizovati na isti način kao i kod SHA-1.

SHA-224 je isti kao SHA-256, osim što:

  • Početne vrednosti h0do h7 su različite i
  • Izlaz se konstruiše izbegavanjem h7

SHA-224 početne heš vrednosti (u big endian):

(Других 32-бита су разломљени доелови квадратних корена простих бројева 23..53)
h[0..7] :=
    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4

SHA-512 ima istu strukturu kao SHA-256, ali:

  • poruka se cepa u 1024-bitne gomile,
  • ima 80 rundi umesto 64,
  • raspored poruka, niz w ima 80 64-bitnih reči umesto 64 32-bitne reči,
  • kako bi se proširio niz, petlja ide od 16 do 79 umesto od 16 do 63,
  • rundne konstante su zasnovane na prvih 80 prostih brojeva 2..409,
  • reč koja se koristi za izračunavanja je dugačka 64-bita,
  • dodata reč na poruku u pred-procesiranju je dugačka 128-bita u big-endian označavanju
  • shift i rotate vrednosti su različite
SHA-512 почетне хеш вредности (у big-endian):                                                                               h h[0..7] := 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 
           0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179

SHA-512 рундне константе:

k[0..79] := [ 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 
              0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 
              0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 
              0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 
              0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 
              0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 
              0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 
              0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 
              0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 
              0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 
              0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 
              0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 
              0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 
              0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 
              0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 
              0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817]

SHA-512 Sum & Sigma:

S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)
S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)

s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)
s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)

SHA-384 je isti kao SHA-512, osim što:

  • Početne vrednosti h0do h7 su različite i
  • izlaz se pravi izbegavanjem h6 i h7
SHA-384 почетне хеш вредности (у big-endian):

h[0..7] := 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939, 
           0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4

SHA-512/t je isti kao SHA-512 osim što:

  • Početne vrednosti h0do h7 su date funkcijom SHA-512/t IV generacije,
  • Izlaz se pravi skraćivanjem i povezivanjem t bitova od h0 do h7,
  • t ne može biti 384, umesto toga SHA-384 treba da koristi kako je propisano,
  • t vrednosti 224 i 256 su posebno preporučene

Poređenje SHA funkcija

[uredi | uredi izvor]

U tabeli ispod, unutrašnje stanje je "unutrašnja heš vrednost" posle svake kompresije bloka podataka.

Poređenje SHA funkcija
Algoritam i varijanta Veličina izlaza
(bitovi)
Veličina unutrašnjeg stanja
(bitovi)
Veličina bloka
(bitovi)
Maksimalna dužina poruke
(bitovi)
Runde Operacije Zaštita
(bitovi)
Primer izvršenja[21]
(MiB/s)
MD5 (as reference) 128 128
(4 × 32)
512 Neograničeno[22] 64 And, Xor, Rot, Add (mod 232), Or <64
(pronađen sudar)
335
SHA-0 160 160
(5 × 32)
512 264 − 1 80 And, Xor, Rot, Add (mod 232), Or <80
(pronađen sudar)
-
SHA-1 160 160
(5 × 32)
512 264 − 1 80 <80
(teoretski napad[23])
192
SHA-2 SHA-224
SHA-256
224
256
256
(8 × 32)
512 264 − 1 64 And, Xor, Rot, Add (mod 232), Or, Shr 112
128
139
SHA-384
SHA-512
SHA-512/224
SHA-512/256
384
512
224
256
512
(8 × 64)
1024 2128 − 1 80 And, Xor, Rot, Add (mod 264), Or, Shr 192
256
112
128
154
SHA-3 SHA3-224
SHA3-256
SHA3-384
SHA3-512
224
256
384
512
1600
(5 × 5 × 64)
1152
1088
832
576
Neograničeno[24] 24[25] And, Xor, Rot, Not 112
128
192
256
-
SHAKE128
SHAKE256
d (arbitrary)
d (arbitrary)
1344
1088
min(d/2, 128)
min(d/2, 256)
-



U koloni sa bitovskim operacijama, "rot" zapravo znači rotate no carry, a "shr" right logical shift. Svi ovi algoritmi koriste modularno sabiranje osim SHA-3.

Rezultati performansi iznad odgovaraju jedno-nitnonj impementaciji na AMD Opteron 8354 takta 2.2 GHz pod Linuksom u 64-bitnom modu, i služe samo kao gruba osnova za opšta poređenja. Detaljnija merenja performansi na savremenim arhitekturama procesora se nalaze u tabeli ispod.

CPU arhitektura Frekvencija Algoritam Dužina reči (bitovi) Ciklusi/bajt x86 MiB/s x86 Ciklusi/bajt x86-64 MiB/s x86-64
Intel Ivy Bridge 3.5 GHz SHA-256 32-bit 16.80 199 13.05 256
SHA-512 64-bit 43.66 76 8.48 394
AMD Piledriver 3.8 GHz SHA-256 32-bit 22.87 158 18.47 196
SHA-512 64-bit 88.36 41 12.43 292

Performanse označene sa 'x86' pokretane su korišćenjem 32-bitnog koda na 64-bitnim procesorima, dok su 'x86-64' prirodni 64-bitni kodovi. I ako je SHA-256 dizajniran za 32-bitne proračune, zapravo ima koristi od koda optimizovanog za 64-bitne procesore na x86 arhitekturi. 32-bitna implementacija SHA-512 je dosta sporija od svog 64-bitnog rođaka. Varijante oba algoritma sa različitim veličinama na izlazu, će se ponašati slično, dok su proširenja poruke i funkcije kompresije iste, i samo početne heš vrednosti i veličine na izlazu su različite. Najbolje impementacije MD5 i SHA-1 imaju između 4.5 i 6 ciklusa po bajtu na modernim procesorima.

Ispitivanje je izvršeno od strane Univerzitet Ilinoja u Čikagu na njihovom hydra8 sistemu, koji pokreće Inter Xeon E3-1275 V2 sa brzinom takta od 3,5 GHz, i na njihovom hydra9 sistemu koji pokreće AMD A10-5800K sa brzinom takta od 3.8 GHz.[26] Prethodno pomenuta brzina ciklusa u bitovima je srednja brzna algoritma koji obrađuje 4,096-bitne poruke koristeći SUPERCOP kriptografski softver za rangiranje.[27] MiB/s su izvedeni iz brzine časovnika procesora na jedom jezgru, realne performanse mogu zavisiti od raznih faktora.

Reference

[uredi | uredi izvor]
  1. ^ FIPS SP 800-131A Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths
  2. ^ Federal Register Notice 2012-5400, Announcing Approval of FIPS Publication 180-4
  3. ^ „NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition”. Pristupljeno 24. 2. 2015. 
  4. ^ „Debian codebase in Google Code”. Google. Arhivirano iz originala 07. 11. 2011. g. Pristupljeno 8. 11. 2011. 
  5. ^ John Markoff, A Tool to Verify Digital Records, Even as Technology Shifts, New York Times, January 26, 2009
  6. ^ Ulrich Drepper, Unix crypt with SHA-256/512
  7. ^ „Secure Hashing”. NIST. Arhivirano iz originala 25. 06. 2011. g. Pristupljeno 25. 11. 2010. 
  8. ^ Microsoft Corporation,Overview of Windows XP Service Pack 3 Arhivirano na sajtu Wayback Machine (17. јануар 2009)
  9. ^ Chromium Blog, September 5, 2014, Gradually sunsetting SHA-1
  10. ^ Mill, Eric. „SHAAAAAAAAAAAAA”. SHAAAAAAAAAAAAA.com. 
  11. ^ Filippo Valsorda, The Unofficial Chrome SHA1 Deprecation FAQ
  12. ^ Somitra Kumar Sanadhya & Palash Sarkar (2008). „New Collision Attacks Against Up To 24-step SHA-2” (PDF). IACR Cryptology ePrint Archive. 2008:270. 
  13. ^ Aoki, Kazumaro; Jian Guo; Matusiewicz, Krystian; Yu Sasaki & Lei Wang (2009). „Preimages for step-reduced SHA-2”. Advances in Cryptology - ASIACRYPT 2009. Lecture Notes in Computer Science. Springer Berlin Heidelberg. 5912: 578—597. ISBN 978-3-642-10366-7. ISSN 0302-9743. doi:10.1007/978-3-642-10366-7_34. 
  14. ^ Guo, Jian; San Ling; Rechberger, Christian & Huaxiong Wang (2010). „Advanced meet-in-the-middle preimage attacks: First results on full Tiger, and improved results on MD4 and SHA-2” (PDF). Advances in Cryptology - ASIACRYPT 2010. Lecture Notes in Computer Science. Springer Berlin Heidelberg. 6477: 56—75. ISBN 978-3-642-17373-8. ISSN 0302-9743. doi:10.1007/978-3-642-17373-8_4. 
  15. ^ Mario Lamberger & Florian Mendel (2011). „Higher-Order Differential Attack on Reduced SHA-256” (PDF). IACR Cryptology ePrint Archive. 2011:37. 
  16. ^ Dmitry Khovratovich, Christian Rechberger & Alexandra Savelieva (2011). „Bicliques for Preimages: Attacks on Skein-512 and the SHA-2 family” (PDF). IACR Cryptology ePrint Archive. 2011:286. 
  17. ^ Mendel, Florian; Tomislav Nad; Schläffer, Martin (2013). „Improving Local Collisions: New Attacks on Reduced SHA-256”. Advances in Cryptology – EUROCRYPT 2013. Lecture Notes in Computer Science. Springer Berlin Heidelberg. 7881: 262—278. ISBN 978-3-642-38348-9. ISSN 0302-9743. doi:10.1007/978-3-642-38348-9_16. 
  18. ^ Maria Eichlseder and Florian Mendel and Martin Schläffer (2014). „Branching Heuristics in Differential Collision Search with Applications to SHA-512” (PDF). IACR Cryptology ePrint Archive. 2014:302. 
  19. ^ Dobraunig, Christoph; Maria Eichlseder & Florian Mendel (2016). „Analysis of SHA-512/224 and SHA-512/256” (PDF). 
  20. ^ „Crypto++ 5.6.0 Benchmarks”. Архивирано из оригинала 14. 10. 2016. г. Приступљено 13. 6. 2013. 
  21. ^ Found on an AMD Opteron 8354 2.2 GHz processor running 64-bit Linux[20]
  22. ^ „The MD5 Message-Digest Algorithm”. Приступљено 18. 4. 2016. 
  23. ^ „The SHAppening: freestart collisions for SHA-1”. Приступљено 5. 11. 2015. 
  24. ^ „The Sponge Functions Corner”. Приступљено 27. 1. 2016. 
  25. ^ „The Keccak sponge function family”. Приступљено 27. 1. 2016. 
  26. ^ SUPERCOP Benchmarks Measurements of hash functions, indexed by machine Архивирано на сајту Wayback Machine (4. decembar 2013)
  27. ^ „SUPERCOP”. Arhivirano iz originala 15. 02. 2015. g. Pristupljeno 24. 2. 2015.