16. helmikuuta 2012

RSA-avaimissa hämäriä vikoja ja yhtäläisyyksiä

Infoworld kirjoittaa mielenkiintoisesta löydöksistä liittyen netissä(kin) käytössä oleviin RSA-avaimiin. Tietoturva-asiantuntijat keräsivät netistä miljoonia RSA-avaimia ja huomasivat, että vastoin kaikkia tilastollisia todennäköisyyksiä, kymmenissä tuhansissa niistä olikin identtinen salainen avain jonkun toisen avaimen kanssa. Lisäksi löytyi joitain avaimia, joista oli jopa tuhansia kappaleita identtisiä salaisia avaimia. Lisäksi löytyi yli 10000 RSA-avainta, joiden salaiset avaimet ovat näiden tutkimustietojen lomassa täysin turvattomia.

Tärkeää tietoahan tuollainen löydös on, mutta mikä siinä sitten on niin outoa tai hämärää?

Outoa ja epäilyttävää on se, että satunnaislukugeneraattorit ja/tai noiden avainten luontiin tarkoitetut ohjelmat eivät muka kykene tuottamaan satunnaisia, uniikkeja avaimia. Ikäänkuin niissä olisi jotain vikaa tai piilotettuja rajoitteita, jotka saavat niiden tuottamat avaimet ja luvut vaikuttamaan satunnaisilta, vaikka tosiasiassa ne eivät ole satunnaisia. Nopeasti tarkasteltuna vaikuttaa, että kaikki on hyvin ja luvut ja avaimet ovat satunnaisia, mutta, kun tarkastellaankin miljoonia ja miljoonia avaimia, alkaakin paljastumaan totuus.

On totta, että tietokoneilla on vaikeata luoda oikeasti satunnaista tietoa, jota satunnaisten avainten luomiseksi tarvitaan. Se ei silti riitä selittämään identtisten avainten noin massiivisen suurta määrää. Puhumme kuitenkin avaimista, joiden pituus on luokkaa 2^1024 tai 2^2048. Siis aivan julmetun suurista luvuista. Vaikka niitä olisi miljardeja ja miljardeja, siltikin todennäköisyys, että edes kaksi niistä ovat identtisiä, on mitättömän pieni. Nyt on kyse vain miljoonista avaimista ja kas kummaa, kymmeniä tuhansia niistä onkin identtisiä. Hämärää.

Olen pitkään kuulunut niiden epäilijöiden joukkoon, jotka arvelevat, että tiedusteluorganisaatioilla on ollut sormensa pelissä salausjärjestelmien rukkaamiseksi tietoturvattomiksi tämänkaltaista menetelmää käyttäen. Salausalgoritmien peukaloiminen tai murtaminen on vaikeaa, eivätkä välttämättä tiedustelupalveluiden ujuttamat omat algoritmit tule koskaan laajempaan käyttöön. Sen sijaan, jos ja kun keskitytäänkin vain manipuloimaan tai rajoittamaan satunnaislukugeneraattoreita, seurauksena on, että KAIKKI niillä tehtävät salausmenetelmät ovat erittäin vaikeasti havaittavalla tavalla turmeltuja. Vaikka jokin taho ottaisi käyttöön uuden salausohjelmiston ja uudet salausalgoritmit, niiden murtaminen ei ole sen vaikeampaa kuin minkään aikaisemmankaan, jos ja kun nekin käyttävät peukaloituja tai tietoturvattomia satunnaislukuja salauksissaan. Mikäli tiedusteluorganisaatio tietää, millä tapaa satunnaislukugeneraattoria on peukaloitu tai millä tapaa se on viallinen, tiedusteluorganisaatio voi keskittyä salauksen murtamisessa kaikkien avainvaihtoehtojen kokeilemisen sijaan kokeilemaan vain kaikki mahdolliset avainvaihtoehdot. Ero on eksponentiaalinen. Samalla kuitenkaan kukaan, joka ei tiedä näitä mahdollisia avainvaihtoehtoja, ei voi mitenkään arvella tietyn avaimen olevan turvaton, koska avainvaihtoehtoja on kuitenkin näennäisesti niin valtavasti, ettei toista samanlaista avainta löydy...ellei ryhdytä tutkimaan miljoonia avaimia, kuten tässä tapauksessa on käynyt.

Miten satunnaislukugeneraattoreita tai ohjelmistoja sitten voitaisiin manipuloida tai tuntea ne niin tarkasti, että satunnaisuus häviää ja tilalle tuleekin jonkinlainen "rajoitettu satunnaisuus"?

Esimerkkejä löytyy historiasta valtavasti. Vaikkapa Windows 2000, Windows XP ja Windows Vista ja niiden haavoittuvat ja ilmeisesti takaportitetut satunnaislukugeneraattorit. Niin ja sitten on se Crypto AG:n tapaus. Näissä tapauksissa systeemin on arveltu tuottavan "riittävän" satunnaista dataa salausavaimia varten, mutta, joko virheen tai tietoisen manipuloinnin ansiosta, ne eivät ole tuottaneet kuin "välttävän" satunnaista dataa salausavaimia varten. Riittävästi laskentakapasiteettia omaavat tahot ovat sitten voineet, tietäen mitä hakea, käydä läpi tämän rajoitetun satunnaisuuden ja löytää sieltä sopivat avaimet. Yksinkertaista. Pirullista.

On myös mahdollista, että itse ohjelmia, jotka luovat noita salausavaimia, on peukaloitu. Ohjelmia on toki kasapäin ja erilaisia palvelimia ja käyttöjärjestelmiäkin on lukematon määrä. Mutta, peukaloimalla vain muutamia peruspilareita, kuten OpenSSL toteutusta, voidaan saada huomattavan laaja-alaisia vaikutuksia aikaan. Mikään ei estä tiedustelupalvelun palkkalistoilla olevaa hakkeria lyöttäytymästä "kehittämään" jotain avoimen lähdekoodin projektia, kuten vaikkapa juurikin OpenSSL:ää. Jälleen kerran, pienikin, sopivaan kohtaan ujutettu "virhe" miljoonien koodirivien joukossa voi saada aikaan merkittävän lopputuloksen.

Ratkaisuvaihtoehtoja ongelmaan on - tai sitten ei ole olemassa, riippuu, miten pahana ongelmaa pitää. Tehokkaiden, käyttöjärjestelmän ytimestä poikkeavien satunnaislukugeneraattoreiden käyttäminen avainten tekoon on ilmeisin vaihtoehto. Myöskin RSA-avainten käytöstä pois siirtyminen auttaa tietysti, joskaan ei ole vielä voitu osoittaa, että muissa avainvaihtoehdoissa vastaavia ongelmia ei tulisi vastaan. Parasta lienee nyt seurata, mihin nämä uudet löydökset johtavat ja noudattaa näistä seuraavia ohjeistuksia orjallisen tarkasti.

1 kommentti:

Jarkko kirjoitti...

Opensource projekteissa vain tuollaiset virheet huomattaisiin aika nopeasti.