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.

Tekijä: Leandro Alegsa

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ä
AlegsaOnline.com - 2020 / 2025 - License CC3