Tämä artikkeli on aikaisemmin julkaistu Pirkanmaan tietojenkäsittely-yhdistyksen lehdessä. Se on suunnattu tietotekniikan ammattilaisille.
Viime aikoina uutisissa ovat olleet tietoturvahyökkäykset ja nettiin vuotaneet salasanat. Salasanoja on viety Älypäältä ja Sonylta huomattavia määriä. Viimeisimmän tietomurron kohdetta vasta arvaillaan.
Kummallisinta näissä tietomurroissa on se, että salasanoja on säilytetty selväkielisinä. Tähän ei ole mitään tarvetta, eikä näin pidä koskaan tehdä. Tässä artikkelissa esitän turvallisen salasanan tallennuksen perusteet.
Kolme perussääntöä
Salasanojen talletukseen on kolme perussääntöä:
-
Salasana salataan yhdensuuntaisella funktiolla
-
Salauksessa käytetään suolausta.
-
Salanaa ei talleteta mihinkään selväkielisenä; ainoastaan salattu versio tallennetaan
Yhdensuuntainen salaus
Yhdensuuntainen salaus tarkoittaa salausta käyttäen matemaattista funktiota, jolle on tyypillistä, että se on helppo laskea toiseen suuntaan, mutta jonka käänteisfuntion laskeminen on vaikeaa. Toisin sanoen salatusta tekstistä ei pystytä selvittämään, mikä alkuperäinen teksti oli.
Ohjelmoijan ei tietenkään kannata itse toteuttaa, saati yrittää suunnitella, yhdensuuntaista funktioa, vaan käyttää kirjastoista valmiina saatavia. Usein suositeltu algoritmi on Blowfish. Kannattaa käyttää vain yhtä kryptografisesti vahvaa funktiota, eikä esim. kahta funktiota sisäkkäin, tyyliin g(f(‘saltpassword’)). Lopputulos on todennäköisesti vain huonompi käytettäessä useampaa funtiota.
Suolaus
Pelkän yhdensuuntaisen salauksen ongelmana on, että yhden salasanan salakielistä versiota voidaan verrata koko salasanatietokokannan kaikkiin salasanoihin. Tämä estetään salaamalla jokainen salassana yksilöllisesti ns. suolan avulla.
Suola tarkoittaa satunnaisia bittejä (usein merkkijono), jotka lisätään salasanaan ennen salausta. Tällä menetelmällä kahden samankin salasanan salakieliset versiot ovat eri. Tyypillisesti suola talletetaan osaksi salakielistä salasanaa.
Salasanan tarkistus ja tallennus
Salasanojen vertailu tapahtuu salaamalla käyttäjän antama salasana oikean suolan kera ja vertaamalla sitä salasanatietokannassa olevaan salattuun salasanaan.
Salasanasta tallennetaan siis ainoastaan kuvatulla tavalla salattu versio. Vaikka salasanat ovatkin salatussa muodossa, kannattaa silti kerrostetun turvallisuuden periaatteiden mukaisesti huolehtia siitä, että edes näihin salakielisiin salasanoihin ei ole asiatonta pääsyä. Tänä pilvipalveluiden aikana ihan tavallisillakin tietomurtojen tekijöillä on käytössään valtava laskentakapasiteetti.
Selväkielisten salasanojen käsittelyssä tulee varoa, ettei niitä päädy esimerkiksi lokitiedostoihin. Tämä tapahtuu helposti, mikäli vaikkapa virhetilanteen yhteydessä päädytään kirjoittamaan lokiin kaikki asiakapaästä tuleva tuleva syöte. Hyvä käytäntö on myös siirtää salanat linjalla salattuina, esimerkiksi www-ympäristössä käyttämällä https-protokollaa.
Ennenkuin lähtee toteuttamaan salasanojen käsittelyä, kannattaa ottaa pieni tuumaustauko. Usein paras vaihtoehto oman toteutuksen sijasta on integroitua organisaatiossa käytössä oleviin autentikointijärjestelmiin. Toiseksi paras vaihtoehto on käyttää jotain hyvää valmista toteutusta. Erikoistilanteissa voi kuitenkin olla tarvetta omalle toteutukselle, silloin kannattaa noudattaa tässä artikkelissa mainittuja periaatteita.
Vastaa