Mitä on hashing ja mihin sitä käytetään?

Kirjoittanut Natalia Moskaleva päivänä 13. marraskuuta 2023

5 min lukuaika

<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >Mitä on hashing ja mihin sitä käytetään?</span>

Hashingilla on tärkeä rooli digitaalisen tiedon käsittelyssä ja suojaamisessa. Mutta mitä hashing oikeastaan tarkoittaa ja miten se toimii?

Tässä artikkelissa käymme läpi hashingin toimintaperiaatteet ja yleisimmät käyttökohteet käytännössä.

Mitä hashing tarkoittaa?

Kirjaimellisesti suomennettuna hashing tarkoittaa muun muassa pilkkomista tai hajauttamista. Tietojenkäsittelyn yhteydessä puhutaan juuri hajautuksesta. Termi hashing liittyy tiedon “hajauttamiseen” siinä mielessä, että alkuperäinen data, kuten teksti, numerot, tiedostot tai käytännössä mikä tahansa digitaalinen tieto, käsitellään matemaattisesti ja muunnetaan tasaisesti jakautuvaksi hash-arvoksi. Hash-funktio pilkkoo ja käsittelee tietoa sisäisesti pienemmissä osissa, minkä jälkeen se tuottaa lopputuloksena kiinteän mittaisen tiivisteen eli hashin riippumatta alkuperäisen datan koosta. Se näyttää yleensä satunnaiselta kirjain- ja numeroyhdistelmältä.

Hash-funktion tärkein ominaisuus on sen yksisuuntaisuus. Kun tieto on hashattu, alkuperäistä sisältöä ei voida käytännössä palauttaa alkuperäiseen muotoonsa. Hashing muuttaa tiedon pysyvästi tarkoituksenaan varmistaa tiedon eheys.

Hashing auttaa myös suojaamaan arkaluonteista tietoa väärinkäytöksiltä. Vaikka hyökkääjä pääsisi käsiksi hashattuun tietoon, alkuperäinen sisältö ei ole luettavissa sellaisenaan.

On kuitenkin tärkeää huomata, ettei hashing yksin tee tiedosta automaattisesti täysin turvallista. Hyökkääjät voivat käyttää esimerkiksi valmiiksi laskettuja tietokantoja tai muita menetelmiä yrittäessään arvata alkuperäistä sisältöä, esimerkiksi yrittäessään murtaa salasanoja. Siksi on tärkeää käyttää moderneja ja turvallisina pidettyjä hash-algoritmeja.

Hashingin lyhyt historia: algoritmi ja tietorakenne

Ensimmäisten hash-funktioiden juuret ulottuvat vuoteen 1958, jolloin Hans Peter Luhn kehitti Key Word in Context (KWIC) -algoritmin.

KWIC mullisti tekstin indeksoinnin mahdollistamalla automaattisten hakemistojen luomisen suurista tekstimassoista. Käytännössä sitä voidaan pitää aikansa hakukoneena, joka auttoi käyttäjiä löytämään tarvitsemansa tiedon nopeasti.

Ajan myötä hashingia alettiin hyödyntää monissa muissakin käyttötarkoituksissa.

Vaikka hashingia käytetään edelleen tehokkaaseen tiedon indeksointiin esimerkiksi hajautustauluissa (hash table), nykyisin sen pääasiallinen ja tärkein käyttökohde on tietoturva.

Perusperiaate pysyy kuitenkin samana: tieto muunnetaan kiinteän mittaiseksi merkkijonoksi. Toteutustavat ja käyttötarkoitukset voivat silti vaihdella merkittävästi.

Tässä artikkelissa keskitymme erityisesti "kryptografiseen hashingiin", eli hash-funktioihin, jotka on suunniteltu tietoturvakäyttöön.

Esimerkki kryptografisesta hash-funktiosta

Hashingin käyttöä on helpompi ymmärtää esimerkin avulla. Otetaan kaksi eri englanninkielistä tekstilausetta, jotka ovat keskenään samankaltaisia sekä kaksi eri hajautusalgoritmia, MD5 ja SHA-256:

Teksti 1:
"The quick brown fox jumps over the lazy dog."

MD5:
9e107d9d372bb6826bd81d3542a419d6

SHA-256:
e4d909c290d0fb1ca068ffaddf22cbd0d0be6a8a3e8365e361d13ec37dd6b674

Teksti 2:
"The lazy dog is jumped over by a quick brown fox."

MD5:
3278a6f1b9bdc8a0ff58f8bfc1158fb1

SHA-256:
5da0032e38cb7b00c9ff1c1b82b5167aee0cf3e031c16f1b65d61b189b1d4cb7

Vaikka alkuperäiset lauseet muistuttavat toisiaan, niiden hash-arvot ovat täysin erilaiset kummallakin eri algoritmilla. Hash-arvoista ei myöskään voi päätellä alkuperäistä sisältöä. Lisäksi hashin pituus pysyy samana riippumatta siitä, onko alkuperäinen tieto lyhyt lause vai kokonainen kirja.

Tämä perustuu siihen, että hash-algoritmit jakavat datan saman kokoisiin osiin ja käsittelevät ne matemaattisesti.

Kuinka hashing- eli hajautusalgoritmi toimii?

Yksinkertaistettuna hashing toimii seuraavasti:

  1. Käyttäjä valitsee tiedon, joka halutaan hashata.
  2. Valitaan käyttötarkoitukseen sopiva hash-algoritmi. Yleisiä vaihtoehtoja ovat esimerkiksi oheisessa esimerkissä käytetyt SHA-256 ja SHA3-256.
  3. Algoritmi käsittelee syötetyn datan ja muuntaa sen kiinteän mittaiseksi hash-arvoksi.

Esimerkiksi SHA-256 käsittelee dataa 512 bitin lohkoissa. Jos syöte on lyhyt, algoritmi täydentää sen oikean mittaiseksi ennen käsittelyä. Suuremmat tiedostot puolestaan pilkotaan useisiin osiin, jotka käsitellään yksi kerrallaan.

Lopuksi syntyy lopullinen hash-arvo eli tiiviste.

Prosessi on erittäin nopea: hash voidaan yleensä laskea mikrosekuntien aikana.

Hashingiin on saatavilla runsaasti verkkotyökaluja ja ohjelmistokirjastoja. Monet ohjelmistokehittäjät käyttävät hashingia jo päivittäin esimerkiksi:

Kryptografisen hash-funktion tärkeimmät ominaisuudet

 Turvallisilla kryptografisilla hash-funktioilla on useita keskeisiä ominaisuuksia. Näihin kuuluvat:

Deterministisyys
Deterministisyydellä tarkoitetaan tässä yhteydessä johdonmukaisuutta ja tasalaatuisuutta. Se tarkoittaa, että sama syöte tuottaa aina täsmälleen saman hash-arvon.
Pienikin muutos alkuperäisessä datassa muuttaa hashin täysin.

Yksisuuntaisuus
Hashia ei voida käytännössä purkaa takaisin alkuperäiseksi tiedoksi. Tätä ominaisuutta kutsutaan preimage resistance -ominaisuudeksi.

Hash-arvojen yksilöllisyys 
Hyvän hash-funktion tavoitteena on estää tilanteet, joissa kaksi eri syötettä tuottaisi saman hash-arvon. Tällaista tilannetta kutsutaan törmäykseksi (collision).

Nämä ominaisuudet tekevät kryptografisista hash-funktioista erityisen hyödyllisiä tietoturvakäytössä. Ei-kryptografiset hash-funktiot puolestaan painottavat usein suorituskykyä ja nopeutta turvallisuuden sijaan.

Käytetyimmät hajautusalgoritmit

Message Digest 5 eli MD5

MD5 oli yksi ensimmäisistä laajasti käytetyistä hash-algoritmeista. Se oli laajasti käytössä esimerkiksi tiedostojen eheystarkistuksissa sekä salasanojen tallenuksessa. Nykyään MD5:tä pidetään kuitenkin vanhentuneena ja tietoturvaltaan heikompana vaihtoehtona eikä sen käyttöä enää suositella.

Secure Hash Algorithms eli SHA-algoritmit

SHA (Secure Hash Algorithm) ei tarkoita yhtä yksittäistä algoritmia, vaan kokonaisuutta, joka sisältää useita eri hajautusalgoritmeja. Näitä käytetään laajasti tietoturvassa esimerkiksi salasanojen, digitaalisten allekirjoitusten ja tiedostojen eheyden varmistamiseen.

SHA1:stä on kuitenkin löydetty turvallisuuspuutteita, eikä sitä enää suositella tietoturvakäyttöön.

Nykyisin yleisimmin käytettyjä ovat SHA2- (esim. SHA-256) sekä SHA3-algoritmit

Niitä pidetään tällä hetkellä turvallisina standardeina arkaluonteisen tiedon hashingiin.

Muita yleisesti käytössä olevia hajautusalgoritmeja

On olemassa myös monia muita hash-algoritmeja, kuten BLAKE (jota käytetään esimerkiksi Ethereumissa), bcrypt, Argon2 ja useita muita.

Täältä löydät kattavan vertailun eri hash-funktioista.

Ajan myötä hash-algoritmit ovat kehittyneet yhä edistyneemmiksi ja turvallisemmiksi. Tämä on tehnyt hash-arvojen takaisinmallintamisesta huomattavasti vaikeampaa haitallisille toimijoille. Vaikka hasheja voidaan edelleen murtaa, niiden monimutkaiset matemaattiset taustamallit tekevät siitä erittäin haastavaa ilman merkittävää laskentatehoa.

Mihin hashingiä käytetään?

Hashingia käytetään monissa tietoturvan ja digitaalisen infrastruktuurin osa-alueissa.

Tiedostojen eheystarkistus: SHA-256-tiivisteillä voidaan tarkistaa, ettei tiedostoja ole muutettu tai vahingoitettu.

Salasanojen suojaaminen: Salasanoja ei yleensä tallenneta järjestelmiin sellaisenaan, vaan hashattuina.
Usein hashingiin yhdistetään myös salting, jossa salasanaan lisätään satunnainen lisäarvo ennen hashingia. Tämä vaikeuttaa salasanojen murtamista huomattavasti.

SSL/TLS-varmenteet: Hashing auttaa varmistamaan verkkosivustojen aitouden ja turvalliset yhteydet internetissä.

Digitaaliset allekirjoitukset: Hashingia käytetään digitaalisten allekirjoitusten aitouden ja eheyden varmistamiseen.

Aikaleimaus: Hashing mahdollistaa tiedon luonti- tai muokkausajankohdan luotettavan todentamisen.

JWT-tokenit: Hashingia käytetään myös identiteetinhallinnassa ja turvallisessa tiedonsiirrossa esimerkiksi JWT-tokenien yhteydessä.

Kaikkia näitä käyttökohteita yhdistää sama perusajatus: tiedon eheyden varmistaminen ja manipuloinnin estäminen.

Hashing vai salaus?

Hashing ja salaus (encryption) sekoitetaan usein toisiinsa, vaikka niitä käytetään eri tarkoituksiin.

Hashing on yksisuuntainen prosessi: hashattua tietoa ei voida palauttaa alkuperäiseen muotoonsa. Salaus puolestaan on kaksisuuntainen prosessi, jossa tieto voidaan purkaa takaisin alkuperäiseksi salausavaimen avulla.

Käytännössä katsoen hashingia käytetään tiedon eheyden varmistamiseen, kun taas salausta käytetään tiedon luottamuksellisuuden suojaamiseen. Eheys tarkoittaa sitä, että tieto säilyy muuttumattomana eikä sitä ole muokattu luvatta tai vahingossa. Luottamuksellisuus puolestaan tarkoittaa sitä, että tieto on vain siihen oikeutettujen henkilöiden nähtävissä eikä ulkopuolinen pääse käsiksi sen sisältöön. 

 

Usein kysyttyä hashingistä

Mitä hashing tarkoittaa?

Hashing tietojenkäsittelyn yhteydessä prosessia, jossa data muunnetaan matemaattisella algoritmilla kiinteän mittaiseksi hash-arvoksi eli tiivisteeksi. Hash-arvo toimii eräänlaisena digitaalisen tiedon “sormenjälkenä”, jolla voidaan varmistaa tiedon eheys.



Voiko hajautetun tiedon palauttaa alkuperäiseen muotoon?

Ei käytännössä. Kryptografiset hash-funktiot on suunniteltu yksisuuntaisiksi, mikä tarkoittaa, ettei hash-arvosta voida normaalisti palauttaa alkuperäistä sisältöä takaisin luettavaan muotoon. 

Mitä eroa on hashingilla ja salauksella?

Hashing ja salaus ovat eri asioita. Salaus voidaan purkaa takaisin alkuperäiseksi tiedoksi salausavaimen avulla, mutta hashingia ei ole tarkoitus purkaa lainkaan. Hashingia käytetään erityisesti tiedon eheyden varmistamiseen, kun taas salauksen tarkoitus on suojata tiedon luottamuksellisuus.



Miksi salasanoja hashataan eli hajautetaan?

Salasanoja hashataan, jotta niitä ei tarvitse tallentaa järjestelmiin selkokielisinä. Kun käyttäjä kirjautuu palveluun, järjestelmä vertaa salasanasta laskettua hash-arvoa tallennettuun hash-arvoon alkuperäisen salasanan sijaan.



Mitä tarkoittaa salting?

Salting tarkoittaa satunnaisen lisäarvon lisäämistä dataan ennen hashingia. Tämä tekee esimerkiksi salasanojen hash-arvoista yksilöllisiä ja vaikeuttaa yleisiä murtohyökkäyksiä, kuten rainbow table -hyökkäyksiä.



Ovatko kaikki hash-algoritmit tietoturvaltaan yhtä turvallisia?

 Eivät. Vanhempia algoritmeja, kuten MD5:tä ja SHA-1:tä, ei enää pidetä turvallisina tietoturvakäyttöön. Nykyisin suositellaan moderneja algoritmeja, kuten SHA-256:ta, SHA-3:a, bcryptiä tai Argon2:ta käyttötarkoituksesta riippuen. 

Mitä törmäys tarkoittaa hashingistä puhuttaessa?

Hash-törmäys tarkoittaa tilannetta, jossa kaksi eri syötettä tuottaa saman hash-arvon. Turvalliset kryptografiset hash-funktiot on suunniteltu niin, että tällaisten törmäysten löytäminen olisi käytännössä erittäin vaikeaa. 



Miksi hashing on tärkeää?

Hashing auttaa varmistamaan, ettei tietoa ole muutettu, vääristetty tai käsitelty luvatta. Se on keskeinen osa modernia tietoturvaa, tunnistautumista, digitaalista allekirjoittamista ja turvallista tiedonsiirtoa internetissä.