Mikä on digitaalinen allekirjoitus
Digitaalinen allekirjoitus on kryptografinen menetelmä, jolla voidaan todistaa kaksi asiaa: että viesti on peräisin tietyltä lähettäjältä ja että sen sisältö ei ole muuttunut allekirjoittamisen jälkeen. Se vastaa käsin kirjoitettua allekirjoitusta, mutta on huomattavasti vahvempi, koska se sitoutuu matemaattisesti juuri kyseiseen sisältöön.
Digitaalinen allekirjoitus nojaa kahteen kryptografian peruspilariin: tiivistefunktioon ja epäsymmetriseen avainpariin. Kumpikaan ei yksin riittäisi, mutta yhdessä ne muodostavat järjestelmän, joka on sekä tehokas että turvallinen. Ymmärtääksesi allekirjoitukset on hyvä ymmärtää molempien rooli.
Epäsymmetriset avaimet lyhyesti
Epäsymmetrisessä eli julkisen avaimen kryptografiassa käyttäjällä on kaksi toisiinsa liittyvää avainta. Yksityinen avain pidetään salassa eikä sitä jaeta kenellekään. Julkinen avain voidaan jakaa vapaasti kaikille.
Avaimet liittyvät toisiinsa siten, että yksityisellä avaimella tehty toimenpide voidaan tarkistaa julkisella avaimella, mutta julkisesta avaimesta ei voi päätellä yksityistä avainta. Allekirjoituksen tapauksessa tämä tarkoittaa, että vain yksityisen avaimen haltija voi luoda pätevän allekirjoituksen, mutta kuka tahansa julkisen avaimen omistava voi tarkistaa sen aitouden. Tämä epäsymmetria on koko järjestelmän ydin.
Miksi allekirjoitus lasketaan tiivisteestä
Voisi kuvitella, että allekirjoitus tehdään suoraan koko viestin yli. Käytännössä näin ei toimita. Sen sijaan viestistä lasketaan ensin kryptografinen tiiviste, ja allekirjoitus tehdään tämän tiivisteen yli. Tähän on hyvät syyt.
Ensinnäkin se on tehokasta. Epäsymmetriset operaatiot ovat laskennallisesti raskaita, ja niiden suorittaminen suuren viestin yli olisi hidasta. Koska tiiviste on aina kiinteänmittainen riippumatta viestin koosta, allekirjoittaminen on yhtä nopeaa olipa viesti pieni tai valtava.
Toiseksi tiiviste sitoo allekirjoituksen tiukasti sisältöön. Lumivyöryvaikutuksen ansiosta pienikin muutos viestissä muuttaa tiivisteen täysin, jolloin allekirjoitus ei enää täsmää. Näin tiiviste toimii viestin sormenjälkenä, johon allekirjoitus kiinnittyy.
Allekirjoittaminen yksityisellä avaimella
Allekirjoittamisen prosessi etenee selkeissä vaiheissa. Ensin lähettäjä laskee viestistä kryptografisen tiivisteen, esimerkiksi SHA-256:lla. Tämä tiiviste tiivistää koko viestin sisällön kiinteänmittaiseksi arvoksi.
Seuraavaksi lähettäjä käyttää yksityistä avaintaan ja tuottaa tämän tiivisteen pohjalta allekirjoituksen. Koska vain lähettäjällä on yksityinen avain, vain hän pystyy luomaan tämän allekirjoituksen. Allekirjoitus liitetään viestiin ja lähetetään vastaanottajalle. Itse viesti voidaan lähettää sellaisenaan, sillä allekirjoituksen tehtävä ei ole salata vaan todistaa aitous ja eheys.
Tarkistaminen julkisella avaimella
Vastaanottaja tarkistaa allekirjoituksen kääntäen prosessin. Hän laskee saamastaan viestistä tiivisteen samalla algoritmilla, jota lähettäjä käytti. Sitten hän käyttää lähettäjän julkista avainta ja tarkistaa, vastaako allekirjoitus juuri tätä tiivistettä.
Jos tarkistus onnistuu, vastaanottaja voi olla varma kahdesta asiasta. Allekirjoituksen on täytynyt syntyä lähettäjän yksityisellä avaimella, mikä todistaa alkuperän. Lisäksi viesti on täsmälleen sama kuin allekirjoitettaessa, sillä muuten laskettu tiiviste ei täsmäisi allekirjoitukseen. Jos viestiä on muutettu matkalla edes hieman, tiiviste muuttuu ja tarkistus epäonnistuu.
Miksi törmäys uhkaa allekirjoituksia
Tässä piilee syy, miksi tiivistefunktion turvallisuus on niin kriittinen allekirjoituksille. Koska allekirjoitus tehdään tiivisteen yli eikä koko viestin yli, allekirjoituksen turvallisuus on täsmälleen yhtä vahva kuin käytetyn tiivistefunktion törmäysvastus.
Kuvitellaan, että hyökkääjä pystyy tuottamaan kaksi eri viestiä, joilla on sama tiiviste. Hän voi esimerkiksi laatia viattoman näköisen asiakirjan ja haitallisen asiakirjan, jotka tiivistyvät samaan arvoon. Hän pyytää uhria allekirjoittamaan harmittoman version. Koska molemmilla viesteillä on sama tiiviste, sama allekirjoitus pätee myös haitalliseen versioon. Hyökkääjä voi sitten esittää haitallisen asiakirjan aidosti allekirjoitettuna, eikä tarkistus paljasta vaihdosta.
Juuri tämä uhka konkretisoitui vuoden 2017 SHAttered-tutkimuksessa. Kun CWI Amsterdam ja Google tuottivat kaksi eri PDF-tiedostoa samalla SHA-1-tiivisteellä, he osoittivat että SHA-1-pohjaisiin allekirjoituksiin ei voinut enää luottaa. Hyökkääjä, jolla oli riittävät resurssit, pystyi periaatteessa hyödyntämään törmäystä juuri kuvatulla tavalla. Tämä oli yksi tärkeimmistä syistä luopua SHA-1:stä allekirjoituskäytössä.
Esimerkkejä: varmenteet ja koodin allekirjoitus
Digitaaliset allekirjoitukset ovat käytössä monessa arkipäiväisessä mutta kriittisessä yhteydessä.
Varmenteet. Verkkosivustojen TLS-varmenteet ovat luotetun varmentajan digitaalisesti allekirjoittamia. Kun selain tarkistaa varmenteen, se varmistaa allekirjoituksen avulla, että varmenne on aito eikä sitä ole väärennetty. Jos allekirjoituksen tiivistefunktio olisi heikko, hyökkääjä voisi pyrkiä luomaan väärennetyn varmenteen, joka näyttäisi pätevältä. Tämä on yksi syistä, miksi varmenteet siirtyivät SHA-1:stä SHA-256:een.
Koodin allekirjoitus. Ohjelmistot ja päivitykset allekirjoitetaan usein digitaalisesti, jotta käyttäjä voi varmistaa niiden alkuperän ja eheyden ennen asentamista. Allekirjoitus todistaa, että ohjelmisto tulee aidolta julkaisijalta eikä sitä ole peukaloitu. Tässä yhteydessä törmäys olisi erityisen vaarallinen, sillä se voisi mahdollistaa haitallisen koodin esittämisen luotettuna.
Yhteenveto
Digitaalinen allekirjoitus yhdistää tiivistefunktion ja epäsymmetriset avaimet järjestelmäksi, joka todistaa sekä viestin alkuperän että sen eheyden. Yksityinen avain allekirjoittaa viestin tiivisteen, ja julkinen avain tarkistaa sen. Koko järjestelmän turvallisuus lepää kuitenkin tiivistefunktion varassa, ja siksi sen törmäysvastus on välttämätön. SHAttered osoitti, mitä tapahtuu kun tämä perusta murenee, ja juuri siksi vahvojen, ajantasaisten tiivistefunktioiden käyttö on allekirjoitusten turvallisuuden edellytys.
