Tiesitkö, että suojatut verkkopalvelut, joihin kirjaudut sisään salasanalla, eivät itse asiassa tiedä salasanaa, jolla kirjaudut sisään? Miksi näin tehdään? Ja miten se on edes mahdollista? Hash-funktioita ja tietoturvaa käsittelevässä artikkelissamme saadun tiedon avulla voimme antaa vastauksia näihin kysymyksiin.
Epäselvä kirjautumismenettely
Katsotaan ensin, miltä yksinkertainen kirjautumismenettely näyttää. Kirjaudumme verkkopalveluun tavalliseen tapaan käyttäjätunnuksella ja salasanalla:
Yksinkertaisella verkkopalvelullamme on tietokannassaan taulukko, jossa on kaikki tilien nimet ja niihin liittyvät salasanat:
Verkkopalvelu etsii ensin tilin nimen tietokannastaan täytetystä kirjautumislomakkeesta. Jos nimi on olemassa tietokannassa, palvelu vertaa myös kirjautumislomakkeen salasanaa tietokannassa olevaan salasanaan. Jos salasanat täsmäävät, rekisteröinti suoritetaan. Muussa tapauksessa rekisteröinti hylätään. Ensisilmäyksellä tämä on turvallinen kirjautumismenettely. Ainoastaan ne, joilla on voimassa oleva tilinimi ja jotka tietävät siihen liittyvän salasanan, voivat päästä vastaavalle tilille. Kaikkien muiden pääsy evätään. Niin pitkälle, niin hyvä! Mutta mikä tarkalleen ottaen on tässä menettelyssä epäselvää?
Ongelma on se, että salasanat tallennetaan tietokantaan. Tämä tarkoittaa, että ne ovat mahdollisesti kaikkien niiden tiedossa, joilla on pääsy tietokantaan, mukaan lukien verkkopalvelun ylläpitäjät ja heidän työntekijänsä. Lisäksi nykyään on yleinen käytäntö, että monet yritykset ulkoistavat tarjoamiensa verkkopalvelujen varsinaisen käytön yhdysvaltalaisille pilvipalveluntarjoajille, kuten Amazon Web Services tai Google Cloud. Näin ollen voimme olettaa, että periaatteessa myös näiden pilvipalveluntarjoajien operaattoreilla ja työntekijöillä on pääsy tietokantaan ja siten salasanaan. Lisäksi rikolliset voivat tietysti päästä luvattomasti käsiksi tietokannassa oleviin tietoihin.
Ei ole myöskään mikään salaisuus, että useimmat verkkopalvelujen käyttäjät käyttävät samaa salasanaa useisiin palveluihin. Näin ollen se, joka on onnistunut hankkimaan salasanan kohteen Facebook/Twitter-tilille tai verkkomatkatoimistoon, saa pienellä tuurilla salasanan myös sähköpostiin, verkkopankkiin, henkilökohtaiseen organisaattoriin, deittipalveluun ja sen yrityksen intranetiin, jossa kohde työskentelee. Taloudellinen kannustin varastaa salasanoja minkä tahansa verkkopalvelun tietokannasta on vastaavasti suuri, vaikka kyseinen verkkopalvelu itsessään ei olisikaan kannattava kohde! Kysymys kuuluu: Miten tämä ongelma ratkaistaan?
Kehittyneempi kirjautumismenettely
Muistutetaanpa: Edellä kuvatulla verkkopalvelulla on tietokannassaan taulukko, jossa on kaikki tilien nimet ja niihin liittyvät salasanat:
Mukautamme tätä taulukkoa seuraavasti. Salasanojen tallentamisen sijasta käytämme salasanoihin valitsemaamme kryptografista hash-funktiota:
Mitä kryptografinen hash-funktio on, on kuvattu artikkelissa Hash-funktiot ja tietoturva. Tämän jälkeen salasanojen sijasta tallennamme tuloksena saadut hash-arvot tietokantaan:
Tämä muuttaa kirjautumismenettelyä vain vähän. Kirjaudumme edelleen tavalliseen tapaan käyttäjätunnuksella ja salasanalla:
Verkkopalvelu hakee ensin täytetyn kirjautumislomakkeen tilinimen uudelleen tietokannastaan. Seuraavassa vaiheessa uusi menettelytapa on kuitenkin erilainen. Jos nimi on olemassa tietokannassa, hash-funktiota sovelletaan kirjautumisnäytön salasanaan. Vasta sitten tuloksena saatua hash-arvoa verrataan tietokannassa olevaan vastaavaan hash-arvoon. Jälleen kerran salasanoja ei enää verrata toisiinsa, vaan ainoastaan niiden hash-arvoja. Jos hash-arvot täsmäävät, kirjautuminen suoritetaan. Muussa tapauksessa kirjautuminen evätään.
Kirjautumismenettelyssä ei ole muuttunut mitään muuta kuin hash-funktion käyttö. Kryptografisten hash-funktioiden ominaisuuksista seuraa, että hash-arvojen vertailu on yhtä hyvä kuin salasanojen suora vertailu. Mutta nyt itse salasanoja ei enää tallenneta verkkopalvelun tietokantaan. Kuka tahansa, joka pääsee tietokantaan käsiksi - valtuutettu tai ei - ei enää pääse käsiksi salasanoihin vaan ainoastaan niiden hash-arvoihin. Edellä kuvattu taloudellinen kannustin varastaa salasanoja verkkopalvelun tietokannasta poistuu, koska salasanat eivät enää ole tietokannassa.
Miten tämä toimii käytännössä?
Toivomme, että olemme pystyneet selittämään paremmin, miten se on mahdollista ja miksi on yleinen käytäntö, että suojatut verkkopalvelut eivät edes tiedä salasanoja, joita käytämme kirjautuessamme sisään. Käytännössä tämän menettelyn turvallisuutta parannetaan entisestään luomalla hash-arvot erityisellä kryptografisella hash-funktiolla (bcrypt) ja yhdistämällä ne lisäksi koko tietokannan laajuiseen salaiseen merkkijonoon (salt) ennen hash-funktion soveltamista. Emme kuitenkaan halua käsitellä tätä tässä vaiheessa.
Oletko unohtanut salasanasi?
Jos olet unohtanut verkkopalvelun salasanasi, voit pyytää salasanan palautusta useimmilta verkkopalveluilta. Saat tällöin sähköpostiviestin, jossa on linkki, joka vie sinut lomakkeelle, jolla voit asettaa uuden salasanan. Nyt tiedämme, miksi tämä on niin hankalaa: verkkopalvelu ei tiedä vanhaa salasanaasi. Valitettavasti kaikki yritykset eivät vielä noudata tätä vakiintunutta turvallisuuskäytäntöä. Jos ilmoitat sähköpostitse tai puhelimitse tukitiimille, että olet unohtanut salasanasi, ja sinulle sitten todella kerrotaan salasanasi, voit päätellä, että kyseinen yritys ei noudata nykyaikaisia tietoturvastandardeja. Viimeistään silloin sinun on ehdottomasti varmistettava, ettet käytä tätä salasanaa missään muussa yhteydessä. Jos haluat käyttää johdonmukaisesti erillistä salasanaa jokaista verkkopalvelua varten, sinun pitäisi käyttää salasanahallintaohjelmaa. Silloin sinun ei enää tarvitse muistaa monia yksittäisiä salasanoja, ja lisäbonuksena voit luoda niiden sijaan laadukkaita satunnaisia salasanoja. Suosittuihin salasanahallintaohjelmiin on olemassa selainliitännäisiä, jotka jopa täyttävät verkkopalveluiden kirjautumisnäytöt puolestasi. Harvoin mukavuus ja turvallisuus kohtaavat näin kauniisti.