Tiivisteet (hash) ohjelmoinnissa – kiehtovaa asiaa salasanoista

Yksisuuntaiset tiivisteet. Jopas nyt! Onko tämä jotain moebius-magiaa?

Ei. Tiiviste on algoritmi, aika yksinkertainen, joka laskee datasta sormenjäljen.

Sormenjäljestä ei voida päästä takaisin enää dataan, joten siksi “yksisuuntainen”. Yksisuuntaisuus on tärkeä piirre.

Mihin tiivisteitä käytetään?

Sana ‘tiiviste‘ on aika huono, koska suomenkielessä ainakin mieleen tulee helposti kuminen pyöreä kaistale, joka käytetään kylpyhuoneessa — tai keittiön käsienpesualtaan putkistossa. Toinen termi on ‘hajautusarvo’, joka kertoo menetelmän mekanismista. Englanniksi käytetään lyhyttä termiä “hash”.

Hash tarkoittaa tietotekniikassa tiedon tiivistämistä pienempään tilaan sitä varten, että alkuperäistä tietoa voidaan vertailla vertailemalla niiden tiivisteitä. Tiivisteestä ei voi palauttaa alkuperäistä tietoa kuten
pakkaamisessa. Tiivistämiselle on useita erilaisia käyttötarkoituksia: tiiviste- eli hajautustaulusta tiedot voidaan löytää nopeasti. Digitaalinen allekirjoitus perustuu kryptograafiseen tiivisteeseen. Tiivistettä voidaan käyttää tarkistussummana, jonka avulla voidaan myös todeta onko tiedonsiirtovirhe tai virus muuttanut tiedostoa. Tiivisteen parempi ja tarkempi termi on periaatteessa “yksisuuntainen funktio”.

Yksisuuntaisuus tarkoittaa sitä, että tästä sormenjäljestä ei voida palauttaa täydellistä lähdettä, joten tieto on turvassa tältä osin.

Salasanat ja tiivisteet

Tiivisteiden avulla voidaan vertailla annettua kahta salasanaa, ilman että salasana itse (data) paljastuisi. Miksi kahta salasanaa? Silloin vertaillaan tallennettua, ja käyttäjän kirjautuessaan antamaa. Tallennettu salasana saatiin käyttäjän alunperin rekisteröityessä.

Otetaan esimerkki. Rekisteröidyt uutena käyttäjänä web-saitille. Annat 2 asiaa rekisteröitymisen yhteydessä:

  • käyttäjätunnus
  • salasana

Huono web-master (järjestelmän ohjelmoija) tekisi niin, että tallentaisi salasanasi suoraan sellaisenaan, merkkijonona tietokantaan. Hyvä web-master käyttää tiivistettä!

Miksi?

Ongelmana salasanan raakana tallennuksessa on se, että jos tulevaisuudessa web-saitin salasanatietokanta joutuisi vääriin käsiin (tietomurron myötä), tietokantavuoto samalla paljastaisi mahdollisesti tuhansia, tai jopa miljoonia salasanoja. Miksi tämä sitten on ongelma? Voihan web-master sulkea välittömästi kirjautumisen, ja pyytää ihmisiä vain uusimaan salasanansa. Ongelmaksi vuoto muodostuu siksi, että me ihmiset tuppaamme käyttämään samaa salasanaa monessa eri paikassa, koska salasanojen hallinta on ärsyttävää ja hankalaa! Näin hakkeri saisi käsiinsä varsin mehevän helpotuksen myös muiden web-saittien murtoon! Riittäisi, että hän käyttäisi ekalta saitilta haltuunsa saatua käyttäjätunnusta ja samaa salasanaa.

Miten tiiviste tekee asiasta turvallisemman?

Kun rekisteröidyt web-saitille, hyvä web-master tallentaa ainoastaan salasanan tiivisteen tietokantaan.

Kun käyttäjä sitten kirjautuu (log on) web-saitille, ohjelma vain vertailee kahta annettua tiivistettä keskenään. Jos tiivisteet täsmäävät, käyttäjä on oikea, hän on siis tietänyt salasanan, vaikka ohjelma ei enää näkisi suoraan “raakaa” salasanaa. Tiivisteiden käyttö on riittävää tunnistukseen, mutta tavalla, joka ei turhaan levittele itse salasanamateriaalia.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: