Salasanojen varastointi ja todennus: Katsaus salasanatiivisteisiin
Korkeamäki, Joona (2024)
Korkeamäki, Joona
2024
Tietojenkäsittelytieteiden kandidaattiohjelma - Bachelor's Programme in Computer Sciences
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2024-06-02
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202405135791
https://urn.fi/URN:NBN:fi:tuni-202405135791
Tiivistelmä
Salasanoja ei kannata tallentaa suoraan mihinkään, sillä tietovuodon tapahtuessa kaikki käyttäjätilit voitaisiin suoraan kaapata. Salasanat pitää kuitenkin tallentaa jossain muodossa todentamista varten, minkä takia salasanat syötetään yksisuuntaisille funktioille, joiden tarkoituksena on tuottaa pseudosatunnainen tuloste, jonka perusteella syötettä ei voi saada selville. Tulostetut tiivisteet voidaan tallentaa, sillä niiden murtaminen vaatii käytännössä kaikkien mahdollisten syötteiden kokeilemista. Työ on kirjallisuuskatsaus, jonka tavoite on saada katsaus sala-sanatiivisteisiin, niihin liittyviin perusmekanismeihin sekä niiden yhteydessä käytettäviin algoritmeihin ja standardeihin.
Tärkein työssä käsiteltävä perusmekanismi on suolaaminen. Suolaaminen on toiminto, jossa salasanaan yhdistetään ei-salainen satunnainen merkkijono joko ennen kuin se syötetään millekään funktiolle, tai vaihtoehtoisesti funktio yhdistää salasanan ja suolan suorituksen aikana. Suolan tarkoitus on yksilöidä salasanatiivisteitä ja tehdä valmiiksi laskettujen tiivistetaulujen tekemisestä mahdollisimman raskasta.
Perusmekanismien esittelyn jälkeen työssä siirrytään algoritmeihin, joilla salasanatiivisteitä lasketaan. Nykyään ainoa turvallinen ratkaisu salasanatiivisteiden laskemiseen on salasanan derivointifunktiot, jotka käyttävät kryptografisia tiivistefunktioita sisäisesti, mutta niillä on säädettävä kustannustekijä, joka määrää yhden tiivisteen laskemiseen tarvittavan työmäärään. Vanhemmissa salasanan derivointifunktioissa kustannustekijänä on yksinkertainen iteraatiomäärä, mutta rinnakkaisuutta hyödyntäen hyökkääjät voivat laskea tiivisteitä niin nopeasti, että iteraatiomäärän kasvattaminen on raskaampaa oikealle käyttäjälle kuin hyökkääjälle. Rinnakkaisuudella on kuitenkin heikkous, joka on jaettu muisti. Tätä heikkoutta hyödyntäen on kehitetty muistiraskaita salasanan derivointifunktioita, joissa voi säätää iteraatiomäärän lisäksi myös suoritukseen vaadittua muistia.
Työn havainnot osoittavat, että kryptografian kannalta salasanatiivisteiden turvallisuuteen on olemassa erittäin vahvoja ratkaisuja, joiden työmäärää voi säätää sitä mukaa kun laskentateho kehittyy. Tutkimukset kuitenkin osoittavat, että turvallinen tiivisteiden salaus ei enää ole tärkein tekijä salasanatiivisteiden turvallisuudessa, sillä funktioiden skaalautuvuus mahdollistaa teoriassa niiden turvaamisen nyt ja tulevaisuudessa. Ongelmaksi jää ihmisten yleinen salasanakäyttäytyminen, kuten salasanojen uudelleenkäyttö, joka mahdollistaa sen, että hyökkääjien ei tarvitse yrittää murtaa salasanatiivisteitä ollenkaan. Tämän lisäksi organisaatioiden haluttomuus ottaa turvallisia primitiivejä käyttöön aiheuttaa yhteisvaikutuksen, jossa käyttäjien tilit ovat vaarassa myös palveluissa, jotka käyttävät turvallisimpia ratkaisuja salasanatiivisteiden laskemiseen.
Tärkein työssä käsiteltävä perusmekanismi on suolaaminen. Suolaaminen on toiminto, jossa salasanaan yhdistetään ei-salainen satunnainen merkkijono joko ennen kuin se syötetään millekään funktiolle, tai vaihtoehtoisesti funktio yhdistää salasanan ja suolan suorituksen aikana. Suolan tarkoitus on yksilöidä salasanatiivisteitä ja tehdä valmiiksi laskettujen tiivistetaulujen tekemisestä mahdollisimman raskasta.
Perusmekanismien esittelyn jälkeen työssä siirrytään algoritmeihin, joilla salasanatiivisteitä lasketaan. Nykyään ainoa turvallinen ratkaisu salasanatiivisteiden laskemiseen on salasanan derivointifunktiot, jotka käyttävät kryptografisia tiivistefunktioita sisäisesti, mutta niillä on säädettävä kustannustekijä, joka määrää yhden tiivisteen laskemiseen tarvittavan työmäärään. Vanhemmissa salasanan derivointifunktioissa kustannustekijänä on yksinkertainen iteraatiomäärä, mutta rinnakkaisuutta hyödyntäen hyökkääjät voivat laskea tiivisteitä niin nopeasti, että iteraatiomäärän kasvattaminen on raskaampaa oikealle käyttäjälle kuin hyökkääjälle. Rinnakkaisuudella on kuitenkin heikkous, joka on jaettu muisti. Tätä heikkoutta hyödyntäen on kehitetty muistiraskaita salasanan derivointifunktioita, joissa voi säätää iteraatiomäärän lisäksi myös suoritukseen vaadittua muistia.
Työn havainnot osoittavat, että kryptografian kannalta salasanatiivisteiden turvallisuuteen on olemassa erittäin vahvoja ratkaisuja, joiden työmäärää voi säätää sitä mukaa kun laskentateho kehittyy. Tutkimukset kuitenkin osoittavat, että turvallinen tiivisteiden salaus ei enää ole tärkein tekijä salasanatiivisteiden turvallisuudessa, sillä funktioiden skaalautuvuus mahdollistaa teoriassa niiden turvaamisen nyt ja tulevaisuudessa. Ongelmaksi jää ihmisten yleinen salasanakäyttäytyminen, kuten salasanojen uudelleenkäyttö, joka mahdollistaa sen, että hyökkääjien ei tarvitse yrittää murtaa salasanatiivisteitä ollenkaan. Tämän lisäksi organisaatioiden haluttomuus ottaa turvallisia primitiivejä käyttöön aiheuttaa yhteisvaikutuksen, jossa käyttäjien tilit ovat vaarassa myös palveluissa, jotka käyttävät turvallisimpia ratkaisuja salasanatiivisteiden laskemiseen.
Kokoelmat
- Kandidaatintutkielmat [8430]