Saija Saarenpää

Saija Saarenpää

Passionate Code Whisperer

Twitter

Erilaisiin palveluihin kirjautuminen, ja kirjautumisen toteuttaminen on tehty nykypäivänä hyvin helpoksi. Kirjautumispalveluntarjoajat esim. Facebook, Google jne. mahdollistavat tietoturvan ulkoistamisen kyseisille palveluille. Myös salasanaton kirjautuminen on mainio tapa, joka ei pelkästään poista palvelun velvollisuutta tallentaa käyttäjän salasana, vaan myös parantaa käyttökokemusta.

Ikävä kyllä aina palvelua tehdessä ei ole mahdollista valita mitään näistä, vaan on toteutettava perinteinen käyttäjätunnus / salasana -kirjautuminen, joka tuo mukanaan omat huolenaiheensa.

Mitä kaikkea on otettava huomioon

Jos olet joskus toteuttanut tällaisen käyttäjätunnus / salasana -kirjautumismekanismin johonkin palveluun, olet varmasti törmännyt kaikenlaisiin tarkistuslistoihin:

  • Onko salasanan pituusvaatimus kunnossa?
  • Vaaditaanhan riittävästi erilaisia merkkejä?
  • Onhan kirjautumisyritysten määrä rajoitettu?
  • Ovathan salasanat tietokannassa tiivistemuodossa?
  • Muistithan lisätä suolan?

Vaatimukset hyvälle kirjautumistoteutukselle ovat moninaiset, mutta suuri osa turvallisuusparannuksista tuo vain marginaalisen lisähyödyn. Esimerkiksi pienten ja isojen kirjainten sekä numeroiden vaatiminen ei varsinaisesti estä salasanojen uudelleenkäyttöä, tai sisällyttämästä niihin jotain henkilökohtaista tietoa. Jopa niinkin yksinkertainen salasana kuin “Qwerty123” toteuttaa usein vaaditut ehdot. Vaatimalla lisäksi vielä vähintään yhtä erikoismerkkiä voidaan kuitenkin parantaa salasanaa jo huomattavasti.

Salasananhallintasovellusten käyttö yleistyy kovaa vauhtia, mutta ei tarpeeksi nopeasti tekniikkaorientoitumattoman yleisön keskuudessa.

Mistä tunnistaa huonot salasanat

Taistelussa salasanojen uudelleenkäyttöä ja yksinkertaisuutta vastaan NIST (National Institute of Standards and Technology) suositteleekin tarkastamaan rekisteröitymisen yhteydessä uudet salasanat vuotaneiden salasanojen tietokantaa vasten. NIST:n suositus on hyvä, mutta käytännössä NIST ei kuitenkaan itse tarjoa tällaista tietokantaa.

Vuosia sitten apuun tuli Troy Huntin Have I Been Pwned (HIBP), joka kerää tietokantaa tietomurroissa julkisiksi tulleista käyttäjätunnuksista ja salasanoista. Viime vuoden alkupuolella palvelusta julkaistiin jo versio 2 , joka sisältää noin 500 miljoonaa salasanaa. Salasanat säilytetään tietokannassa SHA-1-algoritmilla tiivistettynä, jotta ne eivät olisi ainakaan heti suoraan silmäiltävänä sellaisenaan, vaikka useassa tietokannan lähdemateriaalissa salasanat ovatkin julkaistu selkotekstinä.

Koko tietokannan voi ladata itselleen käytettäväksi omaan järjestelmäänsä, mutta kätevämpää on käyttää palvelua rajapinnan kautta, jotta tietokantaa ei tarvitse itse päivittää aina kun uusi tietomurto tapahtuu.

Miten tarkastat salasanan anonyymisti

Palvelu sai saapuessaan suurta julkisuutta, mutta on pitkän aikaa kärsinyt siitä, että tarkastaakseen salasanan yleisyyden, itse salasana on lähetettävä palveluun selkotekstinä. Viime vuonna tilanteeseen tuli huikea parannus. Datatieteilijä Junade Ali kehitti yhdessä Huntin kanssa rajapinnasta version 2, joka perustuu k-anonymisointiin, eli osittaiseen anonymisointiin. Junade avaa blogissaan enemmän kuinka k-anonymisointi toimii, mutta tässä lyhyesti perusteet:

Sen sijaan että salasana lähetetään kokonaan selkotekstinä palveluun, sitä hieman valmistellaan ennen lähettämistä. Palvelun käyttäjän päässä muodostetaan salasanasta suolaamaton SHA-1-tiiviste, ja vain tiivisteen viisi ensimmäistä merkkiä lähetetään palveluun. Tiivisteen alku täsmää palvelussa keskimäärin vajaaseen viiteensataan tiivisteeseen, ja palvelu palauttaa näiden tiivisteiden loppuosat käyttäjälle. Lisätietona jokaiseen loppuosaan kytkettynä palvelu toimittaa myös tiedon, kuinka monesti kyseinen salasana esiintyy tietokannassa. Tämän jälkeen palvelun käyttäjä voi käydä läpi tulokset ja verrata saamiaan tiivisteiden loppuosia tarkastettavan salasanan tiivisteen loppuosaan. Jos loppuosista löytyy täysin täsmäävä tiiviste, se tarkoittaa että salasana on mukana vuodettujen salasanojen tietokannassa.

Nerokasta tässä on se, että vaikka antamasi tiivisteen alkuosa täsmää joihinkin tiivisteisiin arkistossa, samalla alkuosalla on olemassa myös suuri määrä muita tiivisteitä, joten palvelulla ei ole mitään mahdollisuutta tietää minkä salasanan tiivisteen alku sinne juuri syötettiin. Tämä tyydyttää paatuneemmankin foliohatun tarpeet.

Mistä työkalut salasanan kelpoisuuden tarkastamiseen

Node-kehittäjän ominaisuudessa olen huomannut, että viime vuoden aikana npm:ään on pullahtanut kirjasto jos toinenkin, joka hyödyntää jo uusinta rajapintaa.

Jos kirjaston käyttäjälle riittää pelkkä salasanan tarkastus, pwned-pw-kirjasto tarjoaa yksinkertaisen rajapinnan jolle annetaan salasana selkotekstinä, ja se palauttaa kuinka monta kertaa syöttämäsi salasana esiintyy tietokannassa.

Omassa ympäristössä testailuun suosittelisin komentorivityökalua pwned, joka sisältää salasanan kelvollisuuden tarkistuksen lisäksi myös muita HIBP:n tarjoamia ominaisuuksia. Siltä voi esimerkiksi kysyä onko jokin käyttäjätunnus tullut julkiseksi jossain tietovuodossa. Kyseinen työkalu käyttää sisäisesti hibp-kirjastoa joka tarjoilee kaikki HIBP:n tarjoamat palvelut.

Hibp-kirjasto tarjoaa vähän karkeamman, mutta käyttäjän näkökulmasta tietoturvallisemman rajapinnan, jossa käyttäjä itse muodostaa salasanan tiivisteen ja antaa kirjastolle vain tiivisteen viisi ensimmäistä merkkiä. Kirjasto oikeastaan vain tekee puolestasi pyynnön HIBP-palveluun, ja palauttaa tulokset parsittuna kauniiksi JSON:ksi. HIBP:n alkuperäisen rajapinnan tulokset ovat yksi pitkä merkkijono, josta on parsittava tiivisteet ja niiden esiintymismäärät itse.

Jos ei mieluista työkalua löydy valmiina, tai foliohattuilun määrä ylittää sopivan kynnyksen, aina voi kirjoittaa myös oman kirjaston.

Tykkäsitkö artikkelista?

Anna pienet aplodit!

Kommentit

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *