Tietoturvassa, kuten monessa muussakin asiassa, on sellaisia käytäntöjä, jotka ovat muotoutuneet aikojen kuluessa parhaiksi käytännöiksi, joista pidetään kiinni, vaikka niistä ei olekaan tavoiteltua hyötyä. Yksi näistä on salasanojen ns. kompleksisuusvaatimukset.
Kompleksisuusvaatimusten taustalla on salasanojen murtaminen brute force -tekniikalla, jossa kokeillaan kaikkia mahdollisia salasanoja, joko suoraan järjestelmään, tai paljastuneeseen salasanatiedostoon. Jälkimmäisessä tapauksessa on myös mahdollista käyttää etukäteen laskettuja tiivisteitä ns. rainbow-tauluja, joita verrataan järjestelmän tallentamiin salasanojen tiivisteisiin. Teorian mukaan lisäämällä salasanojen kompleksisuutta (edellyttämällä, että salasanaan sisältyy isoja ja pieniä kirjaimia, numeroita ja erikoismerkkejä) vaikeutetaan tällaista murtamista.
Onko hyvässä salasanassa siis sekaisin isoja ja pieniä kirjaimia, numeroita ja erikoismerkkejä? Ei välttämättä, jos uskomme NIST:n luonnosvaiheessa olevaa ohjetta SP 800-63-3, joka koskee sähköistä tunnistamista ja sisältää myös suositukset ’muistinvaraisista salaisista tunnisteista’ siis salasanoista ja PIN-luvuista.
Salasanan vähimmäispituudeksi ohje suosittaa kahdeksan merkkiä, jos se on käyttäjän valitsema, ja kuusi merkkiä, jos se on palveluntarjoajan satunnaisesti generoima. Käyttäjän valitsema salasana tulisi tarkistaa huonojen salasanojen listaa vasten, mutta muita muotovaatimuksia sille ei tulisi esittää. Sen sijaan tulisi olla mahdollista käyttää pitkiä salasanoja ja salalauseita.
Käyttäjiä ei myöskään tule vaatia vaihtamaan salasanaansa ilman syytä, esim. määräajoin. Salasana tulisi siis vaihtaa ainoastaan, jos käyttäjä haluaa vaihtaa sen tai on syytä epäillä että se on paljastunut. Sen lisäksi muutos vakiintuneeseen viisauteen on, että käyttäjälle pitää antaa mahdollisuus nähdä kirjoittamansa salasana, jos hän on paikassa missä sitä ei voi ruudulta urkkia.
Liian monimutkaiset salasanat ja niiden tiheä vaihtaminen vaikeuttavat niiden muistamista. Käyttäjät luovat silloin ratkaisuja, jotka toimivat tavoitteita vastaan. Käyttäjät reagoivat näihin vaatimuksiin ennalta arvattavasti antamalla salasanaksi ”Salasana1!” jos siinä vaaditaan isoja kirjaimia, numeroita ja erikoismerkkejä. Vastaavasti kun salasanaa pitää jatkuvasti vaihtaa, muutetaan vain sen loppuun laitettua numeroa suuremmaksi.
NIST:n ohjeessa palveluntarjoajaa opastetaan monimutkaisten vaatimusten sijaan vertaamaan käyttäjän ehdottamia salasanoja listaan, joka voi sisältää esimerkiksi jo murrettuja salasanoja, sanakirjoista löytyviä sanoja, ja muita helposti murrettaviksi tiedettyjä merkkijonoja (esim. aaaaaaaa, 123456) tai asiayhteydestä arvattavia sanoja. Kun käyttäjän ehdottama salasana hylätään, käyttäjälle pitää myös kertoa syy ja pyytää valitsemaan toinen salasana.
Brute force hyökkäysten torjunnan kannalta tehokkaampia torjuntakeinoja ovat NIST:n ohjeen perusteluiden mukaan salasanayritysten rajoittaminen, vahvalla tiivisteellä suojatut salasanatiedostot sekä edellä mainitut huonojen salasanojen mustat listat. Salasanojen murtamiseen käytettyihin sanakirjoihin on kerätty murrettuja, vuotaneita ja yleisesti käytettyjä salasanoja joita voidaan käyttää salasanatiivisteiden murtamiseen.
Jos koko salasanatiedosto joutuu vääriin käsiin, on mahdollista yrittää murtaa suuri määrä salasanoja yhdellä kertaa. Sen vuoksi salasanat tulisi säilyttää niin että ne on suojattu, vaikka salasanat sisältävä tietovarasto joutuisikin vääriin käsiin. Salasanoja ei suositellakaan säilyttämään edes salattuina, vaan ainoastaan siitä laskettua tiivistettä. Sen muodostamiseen tulisi aina käyttää riittävän pitkää suolaa, eli yksilöllistä avainta, ja vahvaa tiivistealgoritmia, joka on tarkoitettu salasanojen suojaamiseen. NIST suosittelee PBKDF2 algoritmia, vähintään 32 bittistä satunnaisgeneraattorilla tuotettua suolaa sekä vähintään 10.000 hashfunktion iteraatiota.
Vaikka salasanojen ongelmista on puhuttu jo pitkään, en usko että ne tulevat ihan lähiaikoina katoamaan. Salasana on jatkossakin kustannustehokas tunnistusväline. Monissa palveluissa vahvempien tunnisteiden käyttö ei ole tarpeen. Sen vuoksi on tärkeää, että salasanojen turvallisuudesta pidetään huolta.