SHA (lyhenne sanoista Secure Hash Algorithm) kuuluu kryptograafisiin tiivistefunktioihin. Sen eniten käytetty muoto on SHA-1, jota käytetään muun muassa useissa TLS-, SSL-, PGP-, SSH-, S/MIME- ja IPSec-ohjelmistoissa. MD-SHA-tiivistefunktioiden perhe alkoi vuonna 1990 MD4:llä joka nopeasti korvattiin heikkouksien vuoksi MD5:llä vuonna 1992.[1]
Yhdysvaltojen sähköistä salakuuntelua, vieraiden kielten osaamista ja salakirjoituksen purkua harjoittava tiedusteluelin National Security Agency (NSA) suunnitteli SHA:n, ja se julkaistiin Yhdysvaltojen hallituksen standardina.
Ensimmäinen versio SHA, joka yleisemmin tunnetaan nimellä SHA-0, julkaistiin vuonna 1993. Seuraaja SHA-1 (RFC 3174) julkaistiin vuonna 1995, minkä jälkeen on julkaistu SHA-2 ja SHA-3.
Julkaistuista standardeista kaksi ensimmäistä, SHA-0 ja SHA-1, on jo onnistuttu murtamaan.[2][3][4] Hyökkäysmenetelmien johdosta on kehitetty vahvennus törmäysten havaitsemiseen, jota voidaan käyttää SHA-1:n ja MD5:n kanssa.[5]
Tutkijat pitävät mahdollisena, että lähitulevaisuudessa myös SHA-2 murretaan, sillä se on niin samankaltainen edeltäjiinsä verrattuna. SHA-1-hyökkäystä ei ole vielä onnistuneesti käytetty SHA-2:een. SHA-2:n referenssitoteutus on esitelty IETF:n standardissa RFC 6234. SHA-2 algoritmi on sama SHA-224, SHA-256, SHA-384 ja SHA-512 variaatioissa eroten operandien koossa, alustusvektoreissa sekä lopullisen tiivisteen koossa.[6]
SHA-3-funktion standardointiprosessi aloitettiin vuonna 2005 sen jälkeen, kun SHA-1:n murtaminen osoitettiin mahdolliseksi.[7][8] Standardointiprosessi koostui useista osista, joista merkittävin oli vuosina 2007–2012 käyty kilpailu standardin pohjaksi otettavasta algoritmista. Kilpailun voitti belgialaisten ja italialaisten kryptologien kehittämä Keccak.[9]
NSA:n sijaan prosessista vastasi NIST. Standardin piti alun perin valmistua kokonaisuudessaan jo pian kilpailun päätyttyä, vuoden 2012 loppuun mennessä[2], mutta se vahvistettiin FIPS 202 -standardiksi lopulta vasta elokuussa 2015.[10]
SHA:ssa on seuraavat algoritmit:[10][11]
Perhe | Algoritmi | Viestikoko | Lohkokoko | Tiivisteen koko (bittiä) |
---|---|---|---|---|
SHA-1 | SHA-1 | 264 | 512 | 160 |
SHA-2 | SHA-224 | 264 | 512 | 224 |
SHA-2 | SHA-256 | 264 | 512 | 256 |
SHA-2 | SHA-384 | 2128 | 1024 | 384 |
SHA-2 | SHA-512 | 2128 | 1024 | 512 |
SHA-2 | SHA-512/224 | 2128 | 1024 | 224 |
SHA-2 | SHA-512/256 | 2128 | 1024 | 256 |
SHA-3 | SHA3-224 | 224 | ||
SHA-3 | SHA3-256 | 256 | ||
SHA-3 | SHA3-384 | 384 | ||
SHA-3 | SHA3-512 | 512 | ||
SHA-3 | SHAKE128 | |||
SHA-3 | SHAKE256 |