Mikä on tiivistefunktio

Tiivistefunktio on algoritmi, joka ottaa minkä tahansa kokoisen syötteen ja tuottaa siitä kiinteänmittaisen tuloksen, jota kutsutaan tiivisteeksi tai hash-arvoksi. Syöte voi olla yksittäinen sana, kokonainen asiakirja tai usean gigatavun tiedosto, mutta tulos on aina saman pituinen. Tiiviste toimii ikään kuin datan tiivistettynä sormenjälkenä.

Kaikki tiivistefunktiot eivät kuitenkaan ole samanlaisia. On tärkeää erottaa toisistaan tavalliset, ei-kryptografiset tiivistefunktiot ja kryptografiset tiivistefunktiot. Ne palvelevat eri tarkoituksia, ja niiltä vaaditaan eri asioita.

Kryptografisen tiivisteen ydinominaisuudet

Jotta tiivistefunktiota voidaan kutsua kryptografiseksi, sen täytyy täyttää joukko tiukkoja vaatimuksia. Nämä ominaisuudet erottavat sen tavallisesta tiivisteestä ja tekevät siitä turvallisen käyttää tietoturvasovelluksissa.

Deterministisyys. Sama syöte tuottaa aina saman tiivisteen. Ilman tätä ominaisuutta tiivistettä ei voisi käyttää vertailuun lainkaan, koska sama tiedosto tuottaisi eri tuloksia eri kerroilla.

Nopea laskenta. Tiivisteen laskemisen täytyy olla tehokasta. Suurenkin tiedoston tiiviste pitää voida laskea nopeasti, jotta funktio on käytännöllinen.

Esikuvan vastustus. Annetusta tiivisteestä ei pidä pystyä laskemaan takaisin alkuperäistä syötettä. Funktio toimii vain yhteen suuntaan. Tämä on syy siihen, miksi salasanojen tiivisteistä ei suoraan saada selville alkuperäisiä salasanoja.

Toisen esikuvan vastustus. Kun tietty syöte on annettu, ei pidä pystyä löytämään toista, erilaista syötettä, joka tuottaa saman tiivisteen. Toisin sanoen hyökkääjä ei voi ottaa olemassa olevaa tiedostoa ja rakentaa sille korvaajaa samalla tiivisteellä.

Törmäysvastus. Ei pidä pystyä löytämään mitään kahta eri syötettä, jotka tuottavat saman tiivisteen. Tämä on vahvin vaatimus, ja juuri sen pettäminen oli SHA-1:n kohtalo vuoden 2017 SHAttered-tutkimuksessa, jossa tuotettiin kaksi eri PDF-tiedostoa samalla SHA-1-tiivisteellä.

Lumivyöryvaikutus. Pienikin muutos syötteessä muuttaa tiivisteen täysin. Yhden bitin vaihtaminen tuottaa tuloksen, jolla ei ole mitään näkyvää yhteyttä edelliseen. Tämä estää hyökkääjää päättelemästä syötteen ja tiivisteen välistä suhdetta.

Ero ei-kryptografisiin tiivisteisiin

Tavalliset tiivistefunktiot ovat yleisiä ohjelmoinnissa. Niitä käytetään esimerkiksi hajautustauluissa, joissa tavoitteena on jakaa data tasaisesti ja löytää alkiot nopeasti. Tällaisilta funktioilta vaaditaan ennen kaikkea nopeutta ja hyvää jakautumista, mutta ei turvallisuutta.

Ei-kryptografisella tiivisteellä ei ole väliä, vaikka joku pystyisi tarkoituksella tuottamaan törmäyksen tai päättelemään syötteen tiivisteestä. Kryptografisessa funktiossa juuri tämä on koko pointti. Kryptografinen tiiviste on suunniteltu kestämään aktiivista hyökkääjää, joka yrittää murtaa sen tahallaan. Tästä syystä ei-kryptografista tiivistefunktiota ei saa koskaan käyttää salasanojen suojaamiseen, allekirjoituksiin tai muuhun turvallisuuskriittiseen tarkoitukseen.

Yleisimmät käyttötarkoitukset

Kryptografiset tiivistefunktiot ovat läsnä lähes kaikkialla, missä verkossa tarvitaan luottamusta ja eheyttä. Tässä keskeisimmät käyttökohteet.

Salasanojen tallennus suolan kanssa. Vastuulliset palvelut eivät koskaan tallenna salasanoja sellaisenaan. Sen sijaan tallennetaan salasanan tiiviste. Jokaiseen salasanaan lisätään lisäksi satunnainen suola-arvo ennen tiivistämistä. Suola varmistaa, että kaksi samaa salasanaa tuottaa eri tiivisteen, mikä estää valmiiksi laskettujen taulukoiden käytön. Tällöin tietokantavuoto ei suoraan paljasta käyttäjien salasanoja. On hyvä huomata, että salasanojen tallennukseen käytetään mielellään tarkoitukseen suunniteltuja, tahallaan hitaita funktioita, jotka tekevät arvauksesta kalliimpaa.

Eheystarkistukset. Kun lataat tiedoston, voit varmistaa sen eheyden laskemalla tiivisteen ja vertaamalla sitä julkaisijan ilmoittamaan arvoon. Jos arvot täsmäävät, tiedosto on muuttumaton. Jos eivät, jotain on mennyt vikaan siirrossa tai tiedostoa on muokattu.

Digitaaliset allekirjoitukset. Allekirjoitusta ei lasketa koko viestin yli vaan sen tiivisteen yli. Tämä tekee allekirjoittamisesta tehokasta riippumatta viestin koosta ja sitoo allekirjoituksen tiukasti sisältöön. Juuri tästä syystä törmäys tiivistefunktiossa on niin vaarallinen allekirjoitusten kannalta.

Lohkoketjut. Lohkoketjuteknologiat, kuten Bitcoin, käyttävät tiivisteitä lohkojen linkittämiseen toisiinsa. Jokainen lohko sisältää edellisen lohkon tiivisteen, mikä muodostaa katkeamattoman ketjun. Yhden lohkon muuttaminen muuttaisi sen tiivisteen ja rikkoisi kaikki sitä seuraavat linkit, mikä tekee historian peukaloinnista käytännössä mahdotonta.

Miksi funktion valinnalla on väliä

Tiivistefunktion turvallisuus ei ole pysyvä ominaisuus. SHA-1 oli aikoinaan laajalti luotettu, mutta tutkimus paljasti sen heikkoudet, ja SHAttered osoitti murron käytännössä. Tämä on muistutus siitä, että kryptografiset valinnat vaativat ylläpitoa. Vanhentuneista algoritmeista on siirryttävä vahvempiin ajoissa.

Nykyään suositeltuja valintoja ovat SHA-2-perheen funktiot, kuten SHA-256, sekä uudempi SHA-3, joka perustuu täysin erilaiseen rakenteeseen. Kun käytät tunnettua ja ajantasaista funktiota oikein, tiivisteet tarjoavat vankan perustan eheydelle ja luottamukselle digitaalisessa maailmassa.