MD5 vs SHA-1 vs SHA-2 - mikä on turvallisin salaushajaus ja miten ne voidaan tarkistaa

Mikä on hash-toiminto?

Hajautusfunktio ottaa syötetyn arvon (esimerkiksi merkkijonon) ja palauttaa kiinteän pituisen arvon. Ihanteellinen hajautusfunktio on seuraavat ominaisuudet:

  • se on erittäin nopeaa
  • se voi palauttaa valtavan määrän hajautusarvoja
  • se luo ainutlaatuisen hajautusarvon jokaiselle ainutlaatuiselle syötteelle (ei törmäyksiä)
  • se tuottaa erilaisia ​​hash-arvoja samanlaisille tuloarvoille
  • generoiduilla hash-arvoilla ei ole havaittavaa mallia niiden jakaumassa

Ihanteellista hajautusfunktiota ei tietenkään ole, mutta jokaisen tavoitteena on toimia mahdollisimman lähellä ihanteellista. Ottaen huomioon, että (useimmat) tiivistefunktiot palauttavat kiinteän pituiset arvot ja arvojen vaihteluväliä rajoitetaan, tämä rajoitus voidaan käytännössä jättää huomioimatta. Esimerkiksi 256-bittisen hash-toiminnon avulla palautettavien mahdollisten arvojen määrä on suunnilleen sama kuin atomien lukumäärä maailmankaikkeudessa.

Ihannetapauksessa hash-funktio ei palauta käytännössä yhtään törmäystä - toisin sanoen kaksi erillistä tuloa ei tuota samaa hash-arvoa. Tämä on erityisen tärkeää salauksen hajautusfunktioille: hajautus törmäyksiä pidetään haavoittuvuutena.

Lopuksi hajautusfunktion tulisi tuottaa ennalta arvaamattomat erilaiset hajautusarvot mille tahansa syötetylle arvolle. Otetaan esimerkiksi seuraavat kaksi hyvin samanlaista lausetta:

1. "The quick brown fox." 2. "The quick brown fax." 

Voimme verrata molemmista lauseista luotuja MD5-hash-arvoja:

1. 2e87284d245c2aae1c74fa4c50a74c77 2. c17b6e9b160cda0cf583e89ec7b7fc22 

Kahdelle samanlaiselle lauseelle luotiin kaksi hyvin erilaista hajautusta, mikä on ominaisuus, joka on hyödyllinen sekä validoinnissa että salauksessa. Tämä on jakauman seuraus: Kaikkien syötteiden hajautusarvot tulisi levittää tasaisesti ja arvaamattomasti koko mahdollisten hajautusarvojen alueelle.

Yhteiset hash-toiminnot

On olemassa useita hash-toimintoja, joita käytetään laajasti. Kaikki on suunnitellut matemaatikot ja tietojenkäsittelytieteet. Lisätutkimusten aikana joillakin on osoitettu olevan heikkouksia, vaikka kaikkia pidetään riittävän hyvinä ei-salausteknisiin sovelluksiin.

MD5

MD5-hash-toiminto tuottaa 128-bittisen hash-arvon. Se oli suunniteltu käytettäväksi salauksessa, mutta haavoittuvuuksia havaittiin ajan myötä, joten sitä ei enää suositella tähän tarkoitukseen. Sitä käytetään kuitenkin edelleen tietokantojen osiointiin ja tarkistussummien laskemiseen tiedostojen siirron vahvistamiseksi.

SHA-1

SHA on lyhenne sanoista Secure Hash Algorithm. Algoritmin ensimmäinen versio oli SHA-1, ja sitä seurasi myöhemmin SHA-2 (katso alla).

MD5 tuottaa 128-bittisen hajautuksen, kun taas SHA1 luo 160-bittisen hajautuksen (20 tavua). Heksadesimaalimuodossa se on 40 numeroa pitkä kokonaisluku. Kuten MD5, se on suunniteltu salaustekniikkaa varten, mutta pian havaittiin myös haavoittuvuuksia. Tästä päivästä lähtien sen ei enää katsota olevan vähemmän vastustuskykyinen hyökkäyksille kuin MD5.

SHA-2

SHA: n toisella versiolla, nimeltään SHA-2, on monia variantteja. Luultavasti yleisimmin käytetty on SHA-256, jota National Institute of Standards and Technology (NIST) suosittelee käyttämään MD5: n tai SHA-1: n sijaan.

SHA-256-algoritmi palauttaa hash-arvon 256 bittiä tai 64 heksadesimaalilukua. Vaikka tämä ei ole aivan täydellinen, nykyinen tutkimus osoittaa, että se on huomattavasti turvallisempi kuin joko MD5 tai SHA-1.

Suorituskyvyn mukaan SHA-256-hash on laskettava noin 20-30% hitaammin kuin joko MD5- tai SHA-1-hash.

SHA-3

Tämä hajautusmenetelmä kehitettiin vuoden 2015 lopulla, eikä sitä ole vielä käytetty laajasti. Sen algoritmi ei liity edeltäjänsä SHA-2: n käyttämään.

SHA3-256-algoritmi on muunnos, jolla on vastaava sovellettavuus kuin aikaisemmalla SHA-256: lla.

Hash-arvojen käyttäminen validointiin

Tyypillinen hash-toimintojen käyttö on validointitarkistusten suorittaminen. Yksi yleinen käyttö on pakattujen tiedostokokoelmien, kuten .zip- tai .tar-arkistotiedostojen, validointi.

Kun otetaan huomioon arkisto ja sen odotettu hajautusarvo (kutsutaan yleisesti tarkistussummaksi), voit suorittaa oman hajautuslaskennan vahvistaaksesi, että saamasi arkisto on täydellinen ja ehjä.

Esimerkiksi voin luoda MD5-tarkistussumman tar-tiedostolle Unixissa seuraavien komentojen avulla:

tar cf - files | tee tarfile.tar | md5sum - 

Jos haluat hakea MD5-tiivisteen tiedostolle Windowsissa, käytä Get-FileHash PowerShell -komentoa:

Get-FileHash tarfile.tar -Algorithm MD5 

Luodun tarkistussumman voi lähettää lataussivustolle, arkiston latauslinkin viereen. Kun vastaanottaja on ladannut arkiston, se voi tarkistaa sen törmänneen suorittamalla seuraavan komennon:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -c 

missä 2e87284d245c2aae1c74fa4c50a74c77 on lähetetty luotu tarkistussumma. Yllä olevan komennon onnistunut suorittaminen luo seuraavanlaisen OK-tilan:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -ctarfile.tar: OK