SHA (Secure Hash Algorithm): määritelmä, toimintaperiaate ja versiot
SHA (Secure Hash Algorithm) – selkeä määritelmä, toimintaperiaate ja versiot: miten NISTin hash-algoritmit toimivat, turvallisuus ja käytännön käyttötapaukset.
Kryptografiassa Secure Hashing Algorithms on ryhmä kryptografisia hash-funktioita, jotka National Institute of Standards and Technology (NIST) on julkaissut. Algoritmit ottavat syötteen ja tuottavat hash-arvon (usein heksadesimaalisessa muodossa). Hash-arvon pituus riippuu algoritmin digest-pituudesta.
Yleiskuvaus ja toimintaperiaate
SHA-algoritmit ovat deterministisiä funktioita, jotka muuntavat mielivaltaisen pituisen syötteen kiinteän pituuden bittijonoksi (digest). Tärkeimmät ominaisuudet ovat:
- Deterministisyys: sama syöte tuottaa aina saman hash-arvon.
- Nopeat laskennallisesti: hashin laskeminen on tehokasta myös suurille syötteille.
- Ei-käännettävyyys (one-way): hashista ei käytännössä voi palauttaa alkuperäistä syötettä.
- Preimage- ja collision-resistenssi: vaikeaa löytää syötettä, joka tuottaa tietyn hashin (preimage), tai kahta erilaista syötettä, joilla on sama hash (collision).
- Deterministinen herkkyys: pienikin muutos syötteessä muuttaa hash-arvoa merkittävästi (avalanche-ominaisuus).
SHA-algoritmit toimivat yleensä lohkoittain: syöte pilkotaan lohkoihin, niitä käsitellään peräkkäin sisäisen tilan kanssa ja lopuksi tuotetaan kiinteän pituinen digest. Algoritmit käyttävät bitwise-operaatioita, pyörityksiä ja mod 2^n-yhteenlaskuja rakentaakseen hajautuksen, joka näyttää satunnaiselta mutta on deterministinen.
Tärkeimmät versiot ja digest-pituudet
- SHA-0: alkuperäinen versio (vähäisin muutoksin julkaistu 1993). Vetäytyi käytöstä nopeasti, koska turvallisuusongelmia löydettiin.
- SHA-1: tuottaa 160-bittisen digestin. Aikoinaan laajalti käytetty, mutta collision-aukot ovat johtaneet sen käytön välttämiseen uusissa järjestelmissä. Näytteenomainen konkreettinen hyökkäys ("SHAttered") osoitti collisionin mahdolliseksi käytännössä.
- SHA-2: perhe, joka sisältää mm. SHA-224, SHA-256, SHA-384 ja SHA-512 sekä eräitä muunnoksia kuten SHA-512/224 ja SHA-512/256. Digest-pituudet ovat 224, 256, 384 ja 512 bittiä. SHA-256 ja SHA-512 ovat yleisimmin käytettyjä.
- SHA-3: Keccak-pohjainen standardi (FIPS 202), hyväksytty NIST:in kilpailun tuloksena. SHA-3 tarjoaa samat digest-pituudet kuin SHA-2 (esim. SHA3-256, SHA3-512) mutta erilaisen sisäisen rakenteen ja uusia ominaisuuksia, jotka voivat tarjota vaihtoehtoisen suojan tietynlaisia hyökkäyksiä vastaan.
Käyttötapaukset
- Tiedon eheystarkistukset ja tarkistussummat (esim. tiedostojen muutosten havaitseminen).
- Digitaaliset allekirjoitukset ja varmenteet (hashataan viesti ennen allekirjoitusta).
- Salasanan tallennus yhdistettynä suolaukseen ja hitaampiin avainjohdannaisiin (mutta pelkkä SHA ei riitä — käytä bcrypt/scrypt/Argon2 kunnollisiin salasanoihin).
- HMAC (Hash-based Message Authentication Code) viestin autentikointiin — SHA-perheen algoritmeista suositut valinnat ovat HMAC-SHA256 ja HMAC-SHA512.
- Lohraketit, lohkoketjut ja kryptovaluutat (monissa käytetään SHA-256:ta tai sen variaatioita).
Turvallisuus ja tunnetut hyökkäykset
Hash-funktioiden turvallisuus mitataan niiden vastustuskyvyllä seuraavia hyökkäystyyppejä vastaan:
- Collision-hyökkäys: etsitään kaksi erilaista syötettä, joilla sama hash. SHA-1:lle on osoitettu käytännön collision-hyökkäyksiä, joten sitä ei suositella uusissa järjestelmissä.
- Preimage-hyökkäys: annettua hash-arvoa vastaavan alkuperäissyötteen löytäminen. Tavoitteena on, ettei preimage-hyökkäys ole laskennallisesti mahdollinen realistisilla resursseilla.
- Second preimage: kun tietylle syötteelle etsitään toinen syöte, jolla sama hash.
NIST on julkaissut yksityiskohtaiset suositukset ja standardit (esim. FIPS PUB 180-4 SHA-2:lle ja FIPS 202 SHA-3:lle). Yleinen suositus on välttää SHA-1:n käyttöä ja suosia vähintään SHA-256:ta tai SHA-3:ta sovelluksen turvallisuusvaatimuksista riippuen.
Suositukset valintaan
- Käytä SHA-256 tai vahvempaa (SHA-384/SHA-512 tai SHA-3-vaihtoehtoja) uusissa sovelluksissa, erityisesti kun tarvitaan pitkäaikaista turvallisuutta.
- Salasanoja ei tule tallentaa pelkällä SHA:lla — käytä salasanaspesifisiä KDF:ejä kuten bcrypt, scrypt tai Argon2, ja aina suolaa (salt).
- Tarkista järjestelmän vaatimukset suorituskyvyn ja turvallisuuden suhteen; joissain laitteistoissa on SHA-tyrmäyslaajennuksia, jotka nopeuttavat laskentaa.
- Seuraa standardeja ja suosituksia sekä päivityksiä, koska näkyvät hyökkäystavat voivat muuttaa suosituksia tulevaisuudessa.
Esimerkki
Tunnettu testi-vektori: merkkijono "abc" SHA-256:lla tuottaa heksadesimaalisen digestin
SHA-256("abc") = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
Yhteenveto
SHA-perheen algoritmit ovat keskeisiä työkaluja tietoturvassa ja tiedon eheydessä. Versioiden välillä on eroja rakenteessa ja turvallisuudessa: SHA-1 on vanhentunut ja altis collision-hyökkäyksille, SHA-2 tarjoaa vahvan ja laajasti käytetyn vaihtoehdon, ja SHA-3 tarjoaa vaihtoehtoisen arkkitehtuurin Keccakin pohjalta. Valitse algoritmi sovelluksen turvallisuusvaatimusten mukaan ja käytä salasanakäsittelyssä tarkoitukseen suunniteltuja funktioita.
Perhe
- SHA-0: Se oli vuonna 1993 julkaistun alkuperäisen Secure Hashing Algorithm -salausalgoritmin nimi. Sitä ei enää käytetty, koska sen käyttö ei ollut turvallista, ja se korvattiin nopeasti SHA-1:llä.
- SHA-1: Se on ensimmäinen nimi, jota käytetään virallisesta turvallisesta salausalgoritmista. Se julkaistiin SHA-0:n heikkouden jälkeen. Sen on tehnyt kansallinen turvallisuusvirasto NSA (National Security Agency). Myös se todettiin heikoksi ja turvattomaksi.
- SHA-2: Se on yksi suosituimmista SHA-tyypeistä. Hashin pituus voidaan määrittää (muuttamalla digest-kokoa) 256 tai 512 bittiin. SHA256 ja SHA512 viittaavat näihin algoritmeihin. Sen on tehnyt myös kansallinen turvallisuusvirasto.
- SHA-3 (Keccak): SHA: Uusin SHA-tyyppi. Sen ovat kehittäneet Guido Bertoni, Joan Daemen, Michaël Peeters ja Gilles Van Assche. Se valittiin NIST:n järjestämän kilpailun jälkeen.
Secure Hashing Algorithms -algoritmit ovat FIPS-standardin (Federal Information Processing Standard) mukaisia algoritmeja, joihin sovelletaan Cryptographic Algorithm Validation Program -ohjelmaa.
Etsiä