TTKK / J.Koskinen / Tietoturvallisuuden perusteet, 2002

Kryptologiaa

Sisältö
[1] Symmetrisen salauksen idea;
[2] Kryptoanalyysi
[1] Yksisuuntainen tiivistys
[2] Yksisuuntainen funktio
[1] Lohkosalaus
[2] Lohkoalgoritmien moodit
Vuosalaus
[1] Julkisen avaimen algoritmit
[2] Allekirjoitus; Avaimen aitous
Kooste (kertaus tai esikatsaus)

(Symmetrinen) salakirjoitus

Motivointia

Tietotekniikka-alallakin voi epäilemättä pärjätä tietoturvallisesti ilman että tietää kryptologiasta muuta kuin sen olemassaolon. Tällä kurssilla tulee esille paljon muutakin, joskin silti melko minimaalisesti tekniikan yliopistotasoa ajatellen. Tämä sivu tarjoaa sille johdantoa joka hieman ylittää tuon olemassaolon tuntemisen.

Sisältöä ja tavoitetta

Tässä jaksossa on aluksi johdattelua salauksen ideaan, lähtien liikkeelle kerta-avainmenetelmästä. Sen jälkeen käsitellään hieman salauksen murtajan näkökulmaa. Tavoitekysymyksiä:
  • Mihin perustuu kerta-avainkryptauksen turvallisuus ja mitä ongelmia järjestelmässä on?
  • Mitä tarkoittaa salauksen murtaminen? Miksi se on vaikeaa? Millaiset lisätiedot voivat helpottaa sitä?

Yhteyksiä

Myös lohkosalausta koskevan jakson alussa on yleistä johdantoa salauksen ideaan.

(Symmetrinen) salakirjoitus

Salakirjoituksen idea on yksinkertainen: lähettäjä panee viestin "lukkoon" avaimella ja vastaanottaja avaa sen samanlaisella avaimella. Muut eivät saa viestiä selville, koska heillä ei ole avainta ja lukitusalgoritmi on niin monimutkainen, ettei avainta voi keksiä eikä lukkoa muutenkaan saa murretuksi missään järkevässä ajassa.

Lähettäjä ja vastaanottaja voidaan tulkita myös samaksi henkilöksi, joka vain tallettaa viestinsä eli jonkin tiedon myöhempää käyttöä varten niin että muut eivät saa siitä selvää. Henkilöiden tai heidän suoraan käyttämiensä koneiden sijasta osapuolet voivat olla vaikkapa tietoverkossa sijaitsevia reitittimiä.

Yleinen mekaanisiin lukkoihinkin pätevä periaate on, että algoritmia ei voi olettaa salaiseksi, ainoastaan avain on salainen. Koska avain on lukittaessa ja avattaessa sama, järjestelmää sanotaan symmetriseksi.

Esimerkki 1. Viesti eli selväteksti (tai ilmiteksti, 'plaintext') p = jono bittejä (keksitään luennolla), avain k = 0110101.... (kuulijoiden valitsema jatko), kryptoteksti c lasketaan biteittäin XOR-summana: c = p XOR k = .... . Operaatiota XOR (eli eXclusive OR, 'poissulkeva tai') merkitään yleensä rengastetulla plussalla, mutta kirjoitetaan tässä pelkkä +. Tällöin 0+0 = 1+1 = 0 ja 0+1 = 1+0 = 1. Soveltamalla tätä bittijonojen c, k ja p vastinbitteihin saadaan kryptotekstistä c helposti takaisin selväteksti p:

c+k = (p+k)+ k = p + (k + k) = p + 0-jono = p.
Tämä (ja muunnelmat) on ainoa täysin turvallinen salausalgoritmi, "one-time pad" eli kerta-avainjärjestelmä. Siinä avain on siis satunnainen, sen pituus on sama kuin viestin ja kryptoteksti = viesti XOR avain. Oleellista on että kukin avainbitti tulee käyttöön vain kerran.

Esimerkki 2. Pitkää avainta on hankala käsitellä. Samaa lyhyttä avainta, esim. k1 = 0110101 voisi tietysti toistaa, jolloin k olisi 0110101 0110101 0110101 0110101 ... . Jos viestin ajatellaan koostuvan samanmittaisista lohkoista p = p1p2p3..., muodostuu kryptotekstistä c=c1c2c3... sellainen, että c1 XOR c2 = p1 XOR p2 jne. Avaimen vaikutus eliminoituu siis täysin pareittain XOR-summatuista kryptolohkoista. Kryptoanalyytikolta ei kulu kauaakaan selvittää selvätekstiä p tilastollisilla analyyseilla, sillä varsinkin luonnollisen kielisissä viesteissä on runsaasti redundanssia - eli sitä samaa "ylimäärätietoa", jonka ansiosta luennoitsijan taululle kirjoittamasta tekstistä saa yleensä selvää, vaikka mistään yksittäin nähdystä kirjaimesta ei ehkä saisikaan, jos muut on pyyhitty pois sen ympäriltä.

Esimerkki 3. Jotain muuntelua voisi järjestää avaimelle k1 = 0110101, jotta äskeiseltä ongelmalta vältyttäisiin. Muodostetaanpa "pseudoavain" k = k1k2k3... seuraavasti: ki+1 = luvun a * ki seitsemän alinta bittiä, missä a on jokin k1:stä riippuva luku, vaikkapa a = k1. Saadaan k = 53, (2809 ==>) 121, (6413 ==>) 13, (699 ==>) 49, ... eli binäärijonona k = 0110101 1111001 0001101 0110001 ... . Seitsemän alimman bitin ottamisen voisi ilmaista hienommin jakojäännöksenä modulo 128 (=27). Vastaava menettelyä käytetään näennäissatunnaislukujen muodostamisessa, joskaan jakajana ei silloin ole kakkosen potenssi. Modulaarinen aritmetiikka tavataan kurssin aikana vielä useaan kertaan.

Äskeinen avainta "venyttävä" salausperiaate on esimerkki vuokryptauksesta (stream cipher). Käytännössä venytysperiaatteen pitää olla mutkikkaampi (avainvuo, "key stream" vaikeammin arvattavissa) ja lähtökohtana olevan avaimen tietenkin paljon pitempi (esim 128 bittiä). Aiheeseen palataan toisaalla.

Symmetrinen salaus hyvällä algoritmilla antaa yksinkertaisella tavalla tehokkaan suojan sekä tiedon luottamuksellisuudelle että eheydelle. Paljon konstikkaampaa onkin sitten se, mitä pitää tehdä ennen kuin symmetristä salausta voidaan käyttää. On nimittäin sovittava yhteisestä avaimesta ja sitähän ei voida tehdä ainakaan symmetrisen salauksen avulla. (No, hyvä on, jos käytössä on entinen symmetrinen avain, niin mistä se sitten saatiin, tai sen edeltäjä jne ... ja jos tällaisessa tapauksessa jokin aiempi paljastuu niin, miten on turvallisuuden laita?). Yksi perusmenetelmä, jolla salausavaimesta voidaan sopia turvattoman kanavan ylitse, luonnostellaan toisaalla ja yksi käyttökohde tulee esille IPSec:n yhteydessä.

Murtaminen ja algoritmien turvallisuus

Hyökkäystä kryptoalgoritmia vastaan sanotaan kryptoanalyysiksi tai murtamiseksi. Algoritmien turvallisuus eli "murtolujuus" on asia, johon ei maallikon eikä edes tietoturvainsinöörin tarvitse puuttua kovin syvälle. Syynä on yksinkertaisesti se, että asiaan perehtynyt tutkijakaan ei voi yksinään saada yleensä muuta konkreettista tulosta kuin jonkin systeemin murtamisen. Kryptosysteemin osoittautuminen murtovarmaksi edellyttää pitkäjänteistä tieteellistä tutkimusta, jossa useat tutkijat eri tahoilla koettelevat algoritmia, ja mahdollisesti kehittelevät sitä parametrien valinnan suhteen. Silloinkin algoritmi tosiaan vain osoittautuu kestäväksi eli tyypillisesti siinä on sellaisia rakenteita ja ominaisuuksia, jotka oleellisesti vaikeuttavat kaikkia tunnettuja analyysimenetelmiä. Varsinaista todistusta turvallisuudesta ei voi antaa, ellei kaikkia mahdollisia hyökkäyksiä pystytä mallintamaan.

Esimerkiksi DES-algoritmia voidaan jo pitää heikkona, koska sen avain on vain 56-bittinen, ja kaikki vaihtoehdot läpikäyvä ns. raa'an voiman hyökkäys (brute force attack) on nykymahdollisuuksien rajoissa. Algoritmia sinänsä voi pitää onnistuneena, koska sitä on tutkittu "menestyksettä" erittäin laajasti alusta, eli 70-luvun puolivälistä asti.

Edellä sanotusta huolimatta ja toisaalta juuri sen vuoksi kryptoalgoritmin käyttäjän on syytä tuntea hyvin käsitteistö sekä algoritmien ja hyökkäysten perusluonne, jotta hän voi suhteuttaa käytäntöön algoritmien turvallisuutta koskevat tutkimustulokset - samoinkuin markkinahenkilöiden vakuuttelut tarjolla olevien menetelmien koetellusta turvallisuudesta.

Joka tapauksessa käytännön algoritmeissa, kerta-avaimen käyttöä lukuunottamatta, turvaudutaan laskennalliseen turvallisuuteen, mikä tarkoittaa sitä, että järjestelmän murtaminen tehdään hyvin työlääksi, mutta ei kuitenkaan mahdottomaksi.

Yksi tärkeä luokitus on sen mukaan, millaisin oletuksin algoritmit tarjoavat laskennallista turvallisuutta, eli kuinka voimakkaan vastustajan ne kestävät. Lähtökohtana on, että vastustaja tuntee algoritmin ja hänellä on salatekstiä, jonka hän haluaisi purkaa. Vastustajan voimakkuutta kuvaa se, mitä muuta hän tietää:

  1. vain salateksti
  2. tunnettu selväteksi: edellisen lisäksi vastustajalla on selväteksti-salateksti pareja (samalla avaimella salattuja kuin purettavakin teksti).
  3. valittu selväteksti: vastustaja saa haltuunsa em. pareja joissa hän on voinut valita selvätekstin: hän on siis jotenkin pystynyt syöttämään salausalgoritmin läpi haluamiaan selvätekstejä vaikka ei tunnekaan avainta. Voimakkaammassa (ns. adaptiivisessa) versiossa hän pystyy aiempien tulosten perusteella valitsemaan uusia selvätekstejä.
  4. valittu salateksti: kuten kohdassa 2, mutta vastustaja voikin valita salatekstin. Tehtäväksi tyypillisesti muodostuukin avaimen ratkaiseminen. Tilanne liittyy lähinnä julkisen avaimen systeemeihin.
  5. valittu teksti: edelliset kohdat yhdessä.
Julkisen avaimen systeemin murtamista voi tietenkin yrittää paljon ennen kuin yhtään salatekstiä on purettavana, mutta kohdan 4 tilanteesta on tässä apua.

Yksisuuntaista kryptografiaa

Motivointia

Jos ajatellaan salakirjoitusta, tuntuu välttämättömältä että tehdyn operaation pystyy purkamaan eli laskemaan käänteisfunktion. Yksisuuntainen tiivistäminen sotii tätä ajatusta vastaan ja on kuitenkin keskeinen apuväline kryptografiassa. Tavoitteiltaan helpommin ymmärrettävissä, mutta matemaattisesti haastavaa on sitten sellainen yksisuuntaisuus, joka joissain tapauksissa voidaan varustaa käänteistoimituksella. Tässä vaiheessa vain mainitaan näitä jälkimmäisen kaltaisia funktioita.

Sisältöä ja tavoitetta

Pääpaino on yksisuuntaisen tiivistämisen periaatteiden esitelyssä. Toisena asiana otetaan esille sellaiset yksisuuntaiset funktiot, joita voidaan julkisen avaimen kryptosysteemeissä salaluukun kautta kääntää. Tavoitekysymys on vain ensimmäisestä aihepiiristä:
  • Miksei tarkistussumman laskeminen riitä kryptografisen tiivistämisen tarpeisiin? Mitä hash-funktioissa tehdään asian "korjaamiseksi"?

Havainnollistusta

Erillisellä sivulla voit laskea syöttämäsi tekstin MD5-tiivisteen. Kokeile, miten paljon tuo 32 heksadesimaalinumerona annettava tiiviste muuttuu kun muutat ascii-tekstissä yhden bitin jossain kohdassa. Yhden bitin ero on esim. kirjainpareilla B-C, D-E, ..., X-Y (ja samoin pienillä), joista ensimmäisen koodi on parillinen ja seuraavan pariton eli koodissa muuttuu viimeinen bitti.

Tarkistussumma ja yksisuuntainen tiivistefunktio

Tarkistussumma (checksum) on erikoistapaus tiivistefunktiosta (hash function), joka puolestaan on aivan eri asia kuin "kompressio"-tiivistäminen, jossa alkuperäinen tieto voidaan palauttaa joko täysin (ZIP, GIF ym.) tai likimääräisesti (JPEG ym.)

Tutuin esimerkki tarkistussummasta on henkilötunnuksen viimeinen merkki, joka on laskettu muista merkeistä. Vastaava merkitys on pankkisiirron viitenumeron viimeisellä numeromerkillä. Tällaisten tarkistussummien tarkoituksena on näppäily- ym. virheiden havaitseminen (vrt. myös eheys tietokannoissa)

Yksinumeroinen tarkistussumma voitaisiin periaatteessa laskea vaikkapa summaamalla kaikki numeromerkit ja ottamalla tulokseksi summan viimeinen numero. Näin lasketaan esim. pariteettibitti. Yleensä tarkistussumman algoritmi on monimutkaisempi, eikä kyse enää ole pelkästä summaamisesta. Esimerkiksi CRC:n (eli Cyclic Redundancy Check-menetelmän) ideana on lisätä bittilohkon perään tietty määrä (16 tai 32) bittejä siten, että tulos on jaollinen annetulla kiinteällä luvulla. Jos vastaanottaja ei saa jakoa tasan, lohkossa tai tarkistussummassa (eli FCS:ssä, Frame Check -Sekvenssissä) on tapahtunut muutos. Tätä menetelmää ei mutta lukuisia muita löytyy T. Vuoren laatimasta dokumentista Tarkistusmerkkien laskentamekanismeja, josta ilmenee myös miten moninaisissa yhteyksissä tarkistuksia käytetään.

Seuraavaksi esiteltävä yksisuuntainen tiivistäminen lisää tarkistusominaisuuteen kryptografista kätkemistä, joka on tarpeen, jottei esim. virus voisi viilata saastuttamaansa tiedostoa sellaiseksi, että se tuottaisi saman tarkistussumman kuin alkuperäinenkin.

Yksisuuntaisen tiivistefunktion eli hash-funktion (oikeastaan one-way hash function) tarkoitus on tuottaa viestistä (yleisemmin bittijonosta) kiinteän mittainen, lyhyt "tiivistelmä", joka edustaa koko viestiä sikäli, että on vaikea löytää mitään muuta viestiä, jolla olisi samanlainen tiiviste. Koska tiivisteen pituus on tyypillisesti 128 tai 160 bittiä ja viesti voi olla miten pitkä hyvänsä, on tietenkin olemassa runsaasti viestejä, joista tulee sama tiiviste, mutta oleellista on, ettei yhtään niistä pysty löytämään. Tiivisteestä (hash) käytetään myös nimityksiä 'digital fingerprint' tai 'message digest' (MD).

Tiivistefunktiolta H edellytetty yksisuuntaisuus merkitsee siis sitä, että kun on annettu h, ei voida millään kohtuullisella vaivalla löytää x:ää, jolle olisi H(x)=h. Usein vaaditaan enemmän: ei saisi löytyä yhtään paria viestejä jotka "törmäävät" eli tiivistyvät samaksi h:ksi - joko niin, että vaatimus koskee mitä tahansa h:ta tai niin, että mitään annettua x:ää kohti ei saa löytyä (eri) y:tä, joka toteuttaisi ehdon H(x)=H(y).

Yleinen yksisuuntaisen tiivistämisen periaate: käytetään "kutistusfunktiota" (compression function (!)), jolle syötetään iteratiivisesti aiempi kutistustulos ja seuraava viestilohko (kumpikin esim. 128 bittiä). Alussa tarvitaan alustusvektori (siis "nollas" kutistustulos) ja viestin täydennys lohkon monikerran mittaiseksi (täydennystä voidaan tehdä myös lohkokohtaisesti). Useimmiten viestin loppuun liitetään sen pituus. Kutistusvaiheen jälkeen voidaan tehdä vielä jokin toisenlainen muunnos.

Tunnetuimmat (yksisuuntaiset) tiivistealgoritmit kuuluvat MD4-perheeseen, jonka kehitystä (joka tapahtui 1990-luvun alkupuoliskolla) kuvaa seuraava kaavio:

MD4 --> MD5 ----->  SHA --> SHA-1
 | \___________
 |             \
ext-MD4 ---->  RIPEMD   ------->    RIPEMD-160
(Erikoinen kryptosysteemi, joka nopeuttaa tarkistussumman laskentaa: Incremental cryptography with application to virus protection.)

Yksisuuntainen funktio

Salakirjoituksen pitäisi avainta tuntemattomalle merkitä muunnosta, jota ei voi kääntää ilman suunnatonta vaivaa. Kryptologiassa käytetään myös sellaisia muunnoksia eli funktioita, joita on lähes mahdoton kääntää, vaikka funktiossa ei olisi mitään salaista. Tämä vastaa siis sitä (onnetonta tilannetta), että kryptotekstiä ei voi purkaa, vaikka avain tunnettaisiin ja tiedettäisiin, että on vain yksi selväteksti josta kryptoteksti voi olla peräisin. Tilanne on hieman erilainen kuin edellä käsitellyssä tiivistefunktiossa, joka on epäinjektiivinen eli kuvaa useita lähtöarvoja samaksi arvoksi.

Yksisuuntaisella funktiolla tarkoitetaan yleensä sellaista injektiivistä funktiota f, jolle arvon x laskeminen arvosta f(x) on käytännössä mahdotonta. Arvon f(x) laskeminen x:stä sen sijaan ei saa olla vaikeaa. Seuraavassa on esimerkkejä yksisuuntaisista funktioista. Kaikille niistä on ominaista, että parametreina olevat luvut ovat suuria, useamman sadan desimaalinumeron pituisia.

Harjoitus: Kryptografialle ominaiseen tapaan kaikki tässä mainitut funktiot ovat diskreettejä ja niillä on lisäksi äärellinen määrittelyjoukko. Sen koko on moduuli miinus 1 kolmessa ensimmäisessä ja 2 potenssiin vektorin A pituus viimeisessä. Modulaarisuudesta puhutaan lisää erikseen, mutta äärellisyydestä löytyy jo nyt vastaus seuraavaan: Miksi yksisuuntaisen funktion kääntäminen ei ole mahdotonta vaan ainoastaan vaikeaa käytännössä?

Lohkosalaus eli blokkikryptaus moodeineen

Motivointia

Symmetriset salausalgoritmit ovat käytännössä välttämättömiä, jos tietoa halutaan välittää luottamuksellisesti. Muina keinoina voisi tietysti ajatella steganografiaa, julkisen avaimen kryptosysteemejä tai kuriireja, mutta ne eivät riitä nykyajan tietoliikenteen vaatimuksiin. Salauksen käyttäjän ei ole välttämätöntä tietää, miten algoritmi tarkkaan ottaen toimii, mutta jonkinlainen käsitys pitää olla perusteeksi algoritmeja kohtaan tunnetulle luottamukselle, ja myös sen vuoksi että pystyy ymmärtämään niiden turvallisuudesta raportoivia tutkimustuloksia.

Sisältöä ja tavoitetta

Esitellään lohkosalauksen yleistä ideaa, Feistel-periaatetta, mainitaan DES- ja AES-algoritmit. Lisäksi esitellään lohkosalauksen käytön moodit ECB, CBC, CFB ja OFB.
  • Mitä samanlaista ja mitä eroa on (symmetrisessä) lohkosalauksessa ja yksisuuntaisessa tiivistämisessä (eli kryptografisessa hash-funktiossa)?
  • Miksi lohkosalausalgoritmeja ei välttämättä kannata käyttää elektronisen koodisanakirjan tavoin (eli ECB-moodissa)? Millä tavoin turvallisuutta voidaan parantaa?

Lohkosalaus eli blokkikryptaus

Yleinen informaatioteoreettinen tavoite salausalgoritmeissa on "diffusion and confusion". Näillä tarkoitetaan keinoja, joilla selvätekstin redundanssia kätketään, kun se algoritmissa muunnetaan salatekstiksi eli kryptotekstiksi. Konfuusio hämärtää selvä- ja salatekstin välistä yhteyttä suorittamalla korvauksia (yksinkertaisimmillaan). Diffuusiossa puolestaan hajotetaan selvätekstin jakaumia koko kryptotekstiin permutaatioiden avulla (taaskin yksinkertaisimmillaan).

Edellä mainitut kaksi periaatetta tulevat selvimmin esille lohkosalauksessa, jossa algoritmia sovelletaan yhteen viestilohkoon eli kiinteään määrään viestibittejä kerrallaan. Kyseessä on siis funktio, jolla on parametrina avain ja joka muuntaa jokaisen n-bittisen vektorin joksikin toiseksi samanmittaiseksi. Pidentäminen olisi tilan haaskausta ja lyhentävää funktiota taas ei voisi kääntää. Kompressio ennen kryptausta on sitten eri juttu (ja varsin suositeltava, koska se vähentää selvätekstin redundanssia). Tyypillinen n eli lohkon koko on 64 tai 128.

Oheisessa kuvassa sovelletaan yksinkertaista lohkoalgoritmia viiden tavun mittaiseen selkotekstiin. Avaimena tässä on (tai sellaiseksi voidaan tulkita) lukunelikko (25413, 1, 3, 2). Ensimmäinen ilmaisee permutaation (yhden 125 mahdollisesta), kaksi seuraavaa siirtojen pituudet ja neljäs kierrosten lukumäärän.

Kuva hyvin yksinkertaisesta 
salausalgoritmista

Lohkoalgoritmilla salattaessa ajetaan siis aina yksi tekstilohko kerrallaan koko algoritmin läpi. Algoritmin käyttötavasta (moodista) riippuen tekstinä voi tosin olla muutakin kuin pelkkää selvätekstiä tai ei lainkaan sitä ja kryptotekstiä voi kerralla muodostua vähemmän kuin lohkon verran (moodeista on kerrottu erikseen).

Useimmat algoritmit pohjautuvat Feistel-periaatteeseen: On jokin kiinteä funktio f, jota sovelletaan avaimeen (tai siitä laskettuun lukuun) ja viestin loppupuolikkaaseen. Tulos XOR-summataan viestin alkupuolikkaan kanssa. Seuraavaa kierrosta varten puolikkaat vaihdetaan, eli loppuun tulee äskeinen summa ja alkuun äskeinen loppupuolikas sellaisenaan. Kierroksia tehdään tietty määrä. Joka kierroksella käytetään avaimesta eri tavalla muodostettua osa-avainta. Salauksen purku ei edellytä funktion f kääntämistä vaan XOR-operaation ominaisuuden ansiosta riittää toistaa samat kierrokset, kunhan osa-avainten muodostama jono käydään lopusta alkuun.

Valitsemalla erilaisia funktioita f, ja erilaisia osa-avainjonoja (eli avainsekvenssejä), saadaan erilaisia algoritmeja. On myös useita läheisiä muunnoksia Feistel-periaatteesta.

DES on vuonna 1977 standardoitu algoritmi, joka muodostuu 16 Feistel-kierroksesta. Avain on 56-bittinen. Joka 8:nneksi lisätään pariteettibitti, joten avain näyttää 64-bittiseltä. Lohkon koko on 64. Yksi tapa parantaa DES:n turvallisuutta on käyttää sitä kolminkerroin kahdella avaimella k1 ja k2. Merkitään: Ei = kryptaus ja Di = dekryptaus avaimella ki. Viestin M triple-DES-kryptaus on E1( D2 ( E1( M))). (Kolmeakin eri avainta voi tietysti käyttää, kuten PGP:ssä tehdäänkin, mutta em. tekniikka on standardoitu.)

DES oli alunperin IBM:n ehdotus standardiksi vuodelta 1974. DES:n seuraajaksi tarkoitetun AES:n (Advanced Encryption Standard) luominen alkoi vuoden 1997 alussa. Virallinen kutsu ehdotuksille oli syyskuussa 1997. Elokuussa 1998 ensimmäisen AES-konferenssin yhteydessä NIST (National Institute of Standards and Technology) julisti 15 virallista ehdokasta julkisesti tutkittaviksi. Toinen konferenssi pidettiin maaliskuussa 1999. Ensimmäisen kierroksen julkinen kommentointiaika päättyi huhtikuussa 1999. Elokuussa 1999 julkistettiin loppukilpailuun hyväksytyt algoritmit, jotka ovat nimeltään MARS, RC6, Rijndael, Serpent ja Twofish. Lokakuussa 2000 standardoitavaksi valittiin Rijndael ja joulukuussa 2001 standardi oli valmis. [NIST:n AES-sivusto]

Lohkoalgoritmien (käytön) moodit

Jos lohkosalausalgoritmia käytetään kryptaamaan jokainen lohko erikseen, sanotaan, että kyseessä on elektroninen koodisanakirja, ECB (electronic code book mode). Siinä samanlainen lohko tuottaa aina saman kryptotekstin, mikä ei ole hyvä ominaisuus, jos teksti on pitkä. Tällöinhän murtajalle tarjoutuu tilaisuus tilastolliseen analyysiin (siis esim. 64 bitin eli 8 kirjaimen mittaisten tekstinpätkien esiintymisestä). Algoritmi on kuitenkin nopea, koska se on mahdollista rinnakkaistaa.

Useimmiten on syytä käyttää jotain seuraavista ketjuttavista moodeista, joissa seuraavan lohkon kryptaus riippuu aiemmista. Kaikissa niistä tarvitaan yhden lohkon mittainen alustusvektori (IV) eli bittijono, joka toimii lohkoalgoritmin ensimmäisenä syötteenä. Sen ei tarvitse olla salainen, mutta sen on syytä olla joka kerta uusi - ainakin OFB-moodissa.

Lohkoalgoritmi käytettynä OFB-moodissa tuottaa avaimesta ja alustusvektorista oleellisesti avainvirran (key stream), joka XOR-summataan selvätekstin kanssa. Virta on riippumaton selvätekstistä ja voidaan vaikkapa laskea etukäteen. Tässä on oikeastaan kyse vuokryptauksesta, jonka perusidea on esillä myös toisaalla. Vuoalgoritmeista puhutaan enempi erikseen.

Eri moodeilla on paitsi erilaiset kryptologiset ominaisuudet myös erilainen kyky toipua kryptotekstiin siirron aikana tulleista virheistä.

Harjoitus: Päteekö kaikkiin em. moodeihin seuraava? Jos salausalgoritmia sovellettaessa käytetään joka kerta eri avainta (tai jopa eri algoritmia, jossa on kuitenkin sama lohkokoko), niin salauksen purku onnistuu entiseen malliin, kunhan eri avaimia (algoritmeja) käytetään samassa järjestyksessä.

Vuokryptaus

Motivointia

Kryptologian yleisen motivaation lisäksi vuosalaukseen tutustumisen perusteena voi pitää sitä, että lähes jokainen käyttää sitä päivittäin GSM-puheluissaan.

Sisältöä ja tavoitetta

Esitellään vuosalauksen toteutusta lohkosalaajalla ja lineaarisella siirtorekisterillä. Tavoitekysymys:
  • Jos käytössäsi on lohkosalausalgoritmi, jossa lohkokoko on 8 tavua, miten saat siitä vuosalausalgoritmin, jolla voit salata esim. 9 tavun mittaisen tekstin niin että tuloskin on vain 9 tavua?
  • Vaikka käytössäsi olisi loistava lohkosalausalgoritmi, miksi saattaisit silti päätyä vuosalauksen käyttöön etkä rakentaisi sitäkään ko. lohkosalaajasta? Millaista tekniikkaa voisit käyttää?

Yhteyksiä

Vuokryptauksen perusideaan johdatellaan symmetrisen salauksen esittelyn yhteydessä.

Tässä jaksossa on hyödyksi, jos on tutustunut lohkoalgoritmien käytön moodeihin.

Vuokryptaus

Vuokryptauksessa kryptoteksti saadaan laskemalla XOR-summa selvätekstistä ja samanmittaisesta näennäissatunnaisjonosta, joka lasketaan avaintenvaihdossa sovitusta kiinteän mittaisesta avaimesta.

Selvätekstiin summattavaa bittijonoa sanotaan myös avainvirraksi tai -vuoksi (key stream) ja sen mukaisesti kryptausmenetelmää sanotaan vuosalaukseksi tai jonosalaukseksi (stream cipher). Hyvässä algoritmissa avainvirta muodostetaan kryptografisesti vahvalla satunnaislukugeneraattorilla, mikä tarkoittaa, että seuraavaa bittiä ei pysty ennustamaan, vaikka edelliset olisikin saanut selville. Tämähän ei päde tavallisissa satunnaislukugeneraattoreissa, vaikka ne olisivat tilastollisilta ominaisuuksiltaan kuinka hyviä.

Jos avainvirta on riippumaton selvätekstistä (kuten esim. lohkoalgoritmin OFB-moodissa), se voidaan vaikkapa laskea etukäteen, mutta vastaanottajan avainvirran täytyy olla samassa vaiheessa lähettäjän virran kanssa. Tällaista vuokryptausta sanotaan synkroniseksi. Voidaan myös muodostaa ns. itsesynkronoivia systeemejä, jotka toipuvat automaattisesti häiriöistä. Perusidea on se, että avainvirta riippuu vain avaimesta ja tietystä rajoitetusta määrästä aiempia kryptotekstibittejä (näin on vaikka selvätekstibiteistä kaikki aiemmat vaikuttavat kryptotekstiin). Tavallisin tällainen systeemi on lohkoalgoritmin CFB-moodi, jossa r=1 (eli kunkin lohkosalauksen tuloksesta käytetään vain yksi bitti).

Vaikka vuosalaus voidaan toteuttaa lohkoalgoritmin avulla, näin ei tehdä silloin kun tavoitellaan suurta salausnopeutta. Yleensä vuokryptaus toteutetaan lineearisilla takaisinkytketyillä siirtorekistereillä (linear feedback shift registers, LFSR). Kovototeutuksina näin päästään tyypillisesti suurempiin nopeuksiin kuin lohkoalgoritmeilla. Pienten puskureiden tai tiukkojen reaaliaikavaatimusten yhteydessä, esim. telekommunikaatiossa vuosalaus on usein välttämätöntä (vrt. kaapeli-TV:n tai puhelun "scrambler" tai GSM-puhelun kryptaus radiotiellä).

LFSR koostuu n:stä yhden bitin rekisteristä R0, R1, ..., Rn-1, joihin on aluksi syötetty jotkin alkuarvot (avaimen bitit kryptauskäytössä). Kellon antaessa sykäyksen bitit siirtyvät ("shift") yhtä pienempään rekisteriin siten, että R0:sta muodostuu rekisterin ulostulo. Tämä bitti syötetään samalla toiseen päähän ("feedback") eli rekisteriin Rn-1, kuitenkin siten, että siihen on XOR-summattu ("linear") joidenkin muiden rekisterien sisältö.

Kun siirtorekisterillä on jokin alkutila, se tulostaa bittijonon, joka toteuttaa tietyn lineaarisen rekursioyhtälön ja on jaksollinen. Jakson pituus on korkeintaan 2n-1. Tämä maksimaalinen jakso saavutetaan (kaikilla ei-nollilla alkutiloilla), mikäli takaisinkytkettävät rekisterit valitaan jonkin n:ttä astetta olevan ns. primitiivisen polynomin kertoimien mukaisesti.

Esimerkiksi polynomi on 1+x+x4 on primitiivinen ja vastaava rekursioyhtälö on si = si-1 + si-4 modulo 2 (i >=4). Tässä si vastaa polynomin 1:ä, si-1 vastaa x:ää ja si-4 x4:ää. Modulo 2 -laskun, eli XOR:n, mukaanhan + on sama kuin - ja yhtälö on yhtäpitävästi 0 = si + si-1 + si-4 modulo 2.)

Alkuarvoina ovat si, i=0,1,2,3. Ne ovat myös Ri:den alkutilat ja neljä ensimmäistä ulostuloa. Viidennestä eli s4:stä eteenpäin ulostulo saadaan yhtälön mukaisesti.

Harjoitus. Jos ulostulossa jossain vaiheessa esiintyy ....1110 (eli viimeisenä tuli 0), laske seuraavat kaksi bittiä. Ohje: Käytä yhtälöä tai: Piirrä 1,1,1 ja 0 vierekkäisiin ruutuihin, merkitse takaisinsyöttö vasemmalta oikealle ja kytke siihen 0:n kohdalta XOR ja ala siirrellä. Tulosta vasemmalta. Miksei tarvinnut tietää varsinaista alkutilaa?

LFSR:n lineaarisuutta häivytetään vuokryptausalgoritmeissa kytkemällä useita sellaisia erityisin tavoin toisiinsa. Esimerkiksi GSM:n A5-algoritmissa on kellon kontrolloimina kolme LFSR:ää, pituuksiltaan 19, 22 ja 23. (Lisää A5:stä toisaalla.)

Julkisen avaimen kryptosysteemit, RSA, allekirjoitus

Motivointia

Harva nykyaikainen turvaratkaisu tietoverkossa olisi olemassa ilman julkisen avaimen kryptologiaa. Se pohjautuu matematiikkaan, lähinnä lukuteoriaan, pitkälti toisin kuin symmetrinen, salaisen avaimen kryptologia. Yhtä lailla kuin on hyvä ymmärtää miten viimeksi mainitussa saadaan aikaan riittävästi diffuusiota ja konfuusiota bitteihin, on motivoitua tuntea julkisen avaimen menetelmien perusteita matematiikasta alkaen.

Sisältöä ja tavoitetta

Viimeiseen tavoitekysymykseen pystyy vastaamaan tämänkin sivun perusteella, mutta PKI:n tuntemisesta on varmasti apua.
  • RSA-kryptosysteemissä on julkiset avaimet n (moduuli) ja e (salauseksponentti) sekä niitä vastaava yksityinen avain d (purkueksponentti).
    a) RSA:n turvallisuus perustuu siihen, että luvuista n ja e ei saa selville lukua d missään järkevässä ajassa. Pelkästään luvuista n ja d ei myöskään saisi selville lukua e. Miten avaimen laatija sitten on hoitanut asian?
    b) Lukua d voi käyttää myös allekirjoituseksponenttina, jolloin e on allekirjoituksen todennuseksponentti. Miksei samoja avaimia n, e ja d pitäisi kuitenkaan käyttää molempiin tarkoituksiin, eli salaukseen ja allekirjoitukseen?
  • Rabinin kryptosysteemissä on julkinen avain n ja yksityiset avaimet p ja q. (p ja q ovat suuria alkulukuja, joiden jakojäännös modulo 4 on 3; n=pq.)
    a) Miten salataan viesti m, joka halutaan lähettää n:n omistajalle ja miten tämä saa sen auki? (Jälkimmäisessä ei vaadita tarkkoja kaavoja mutta sellainen tarkkuus kylläkin että syy redundanssin käyttötarpeelle selviää.).
    b) Jos avain n eli moduuli on 500-bittinen ja viesti m on 100-bittinen, mitä m:lle pitää tehdä ennen salauksen soveltamista?
    c) Jos viesti onkin sitten 100 000-bittinen, se pitäisi käsitellä 200 lohkona. Miksei näin kuitenkaan yleensä tehdä ja mikä on tavallisempi menettely (kuten RSA:ssakin)?
  • Esittele kolme erilaista tapaa, joilla henkilö A voi vakuuttaa etäällä olevan henkilön B siitä, että K on A:n julkinen avain. Ainakin yhden tavan pitää toimia ilman kolmatta osapuolta ja ainakin yhdessä sellainen pitää olla.

Yhteyksiä

Tämän sivun asioita käytetään monessa yhteydessä. Erityinen liittymäkohta on kuitenkin PKI, joka jatkaa julkisen avaimen aitousongelman selvittelyä.

Julkisen avaimen kryptosysteemit, RSA, allekirjoitus

Tärkeimmät julkisen avaimen kryptosysteemit perustuvat modulaariseen aritmetiikkaan. Tämä on sellaista kokonaislukulaskentaa, jossa laskutoimitukset (+, -, *, /) suoritetaan jakojäännöksillä eli aina kun luku kasvaa yli tietyn kiinnitetyn jakajan eli moduulin m, otetaan jakojäännös eli redusoidaan modulo m. Myös negatiiviselta puolelta palataan aina välille 0 .. m-1.

Harjoitus: modulaarista aritmetiikkaa

(1) Lasketaan modulo 7: laaditaan kertotaulu, löydetään käänteisluvut ja neliöjuuret, etsitään primitiiviset alkiot, eli generaattorit, eli sellaiset joiden potensseina saadaan kaikki muut nollasta eriävät luvut (eli 1, 2, 3, 4, 5 ja 6).

(2) Katsotaan, mitä tapahtuu, kun moduulina on 21 eli kahden alkuluvun tulo: Huomataan ensin, että 3:lla tai 7:llä jaolliset luvut ovat sikäli kehnoja, että ne "jakavat nollan" eli ne voivat olla toisena tekijänä kertolaskussa, jonka tulos on 0 eli jaollinen 21:llä. Tutkitaan siis vain lukuja, joissa ei ole tekijänä 3:a eikä 7:ä, eli sellaisia joiden syt 21:n kanssa on 1. Näitä osoittautuu olevan 12, joka on = (7-1)(3-1) eli Eulerin phi-funktio arvolla 21. (Kyseiset luvut muodostavat multiplikatiivisen ryhmän modulo 21. Edellä laskettiin sellaisessa modulo 7. Phi arvolla alkuluku p on p-1.)

Lasketaan toiset potenssit, toteamalla etukäteen että x:llä ja sen vastaluvulla eli (21-x):llä on sama neliö. Katsotaan, minkä verran luvuilla on neliöjuuria. Yritetään generointia potenssiin korottamalla. Osoittautuu että viimeistään 6. potenssi on aina 1 (ja usein jo 2. tai 3.; erityisesti generaattoria ei siis ole eli ryhmä ei ole syklinen. Silti aina myös Phi's eli 12. potenssi on 1.)

Julkisen avaimen idea, Rabinin systeemi

Yksisuuntaisen funktion ideaan on johdattelua toisaalla: Tiivistefunktiot ovat oma tärkeä lajinsa, mutta jotta voitaisiin edes ajatella yksikäsitteistä purkamista, tarvitaan enempi injektiivisiä funktioita. Muutamassa niistä on sellaisia parametreja, jotka on pidettävä salaisina, jotta yksisuuntaisuus eli kääntämisen vaikeus toteutuisi. Tällainen on esimerkiksi neliöön korottaminen: f(x) = x2 modulo n, missä n = p*q ja suuret alkuluvut p ja q ovat salaisia. Jos siis korotat x:n toiseen ja otat jakojäännöksen modulo n, niin tuloksesta y (ja n:stä) ei saa x:ää selville millään kohtuullisella vaivalla (kun n on suuri luku ja tietysti x:kin niin suuri, että x2 ei jää alle n:n).

Mitäpä sitten, jos joku tunteekin p:n ja q:n? Tällöin hän voi laskea erikseen x:n neliöjuuret modulo p ja modulo q, sillä kun moduulina on alkuluku (joka on =3 mod 4), on olemassa tehokkaita algoritmeja neliöjuuren laskemiseen. Yhdistelemällä kaksi juurta modulo p ja kaksi juurta modulo q hän saa selville neljä ehdokasta x:ksi. Jos x:ään on koodattu jokin viesti, jossa on mukana hieman redundanssia (esim. luonnollista kieltä tai tarkistussumma), niin viesti erottuu ratkaisujen joukosta. Lievä epäinjektiivisyys ("4-to-1") ei siis haittaa.

Jos p ja q ovat riittävän suuria alkulukuja, niiden tuloa n on erittäin vaikea jakaa tekijöihin, joten valittuaan p:n ja q:n satunnaisesti, käyttäjä voi huoletta paljastaa n:n ja antaa toisten lähettää "neliö"viestejä hänelle. Kukaan muu ei niitä saa auki. Tämä on julkisen avaimen kryptografiaa ja luonnosteltu systeemi kantaa Rabinin nimeä (vuodelta 1979). Tämän systeemin murtaminen on yhtäpitävää luvun n tekijöihinjakamisen kanssa, seikka jota ei ole voitu todistaa seuraavaksi esiteltävästä RSA:sta.

Yleisesti salausavain (edellä "n") voi siis olla kaikkien saatavilla eli se on julkinen avain. Purkamiseen tarvitaan tietenkin jokin salausavaimesta riippuva tieto, ns. yksityinen, tai salainen, avain (tässä "p ja q"). Se, että nämä ovat erilaiset, antaa aiheen kutsua julkisen avaimen systeemejä myös epäsymmetrisiksi kryptosysteemeiksi. Joissain tapauksissa, kuten edellä, algoritmikin on hyvin erilainen eri suuntiin. Sitä, että julkisen avaimen laatija tietää, mitä sen takana on (tässä siis tekijöihinjako), sanotaan salaluukuksi (trapdoor). Kaikissa julkisen avaimen systeemeissä on jokin vastaava rakenne. Julkisella avaimella salatun viestin murtajalla on edessään jokin vaikealta näyttävä ongelma, joka ei ole lainkaan hankala, jos vain tuntee salaluukun.

RSA

Tunnetuimmassa julkisen avaimen systeemissä RSA:ssa algoritmi on symmetrinen ja "1-to-1". Vain avain on erilainen eri suuntiin. Jos lukupari (k,n) on jompikumpi avain, niin x:n salaus/purku tapahtuu RSA:ssa laskemalla potenssi fk(x) = xk mod n. Vaikka moduuli n on siis osa sekä julkista että salaista avainta, usein pelkkää eksponenttia k sanotaan avaimeksi. Systeemin laatija on laskenut n:n kahden valitsemansa ja salassa pitämänsä suuren alkuluvun p ja q tulona: n=p*q. Salainen eksponentti d ja julkinen eksponentti e (kuten niitä yleensä merkitään) suhtautuvat toisiinsa kaavan d*e=1 modulo (p-1)*(q-1) mukaisesti, josta laatija on alunperin laskenut d:n valittuaan ensin e:n.

Hieman teoriaa taustaksi. Tässä (p-1)(q-1) = Phi(n) = Eulerin phi-funktio arvolla n (myös "Euler's totient function"). Yleisesti, siis muunkinlaisilla n:n arvoilla, pätee xPhi(n) = 1 mod n, jos syt(x,n)=1. Seuraava lasku osoittaa, miksi RSA toimii. Merkitään siinä F = Phi(n). Tällöin ed=1+vF, missä v on jokin vakio. Tätähän tarkoittaa se, että ed = 1 mod F. Nyt

(xe mod n)d mod n = (xe)d mod n = xed mod n = x1+vF mod n = x1(xF)v mod n = x*1v mod n = x mod n.
Esimerkki. Valitaan alkuluvut p=5 ja q=11, jolloin n=55 ja Phi=4·10=40. Olkoon e=3. Seuraavaksi pitäisi ratkaista yhtälö ed=1 mod Phi eli 3d=1 mod 40. Tämä onnistuu päässälaskullakin: 3d=41 ei tosin käy, mutta 3d=81 (=9·9) toteutuu kun d=27.

Olkoon viesti m=13. Tällöin kryptoteksti on c=me mod n = 133 mod 55 =2197 mod 55 = 52. Laskimella, jossa tarkkuus riittää, voi heti todeta että cd mod n = 5227 mod 55 = 13. Suoraan korotettuna potenssi on noin 2·1046. On selvää, ettei tällaista operaatiota ehdi eikä mahdu tekemään millään kohtuullisilla resursseilla, kun luvut ovat monisatanumeroisia. Sen vuoksi potenssilasku tehdään seuraavaan tapaan, joka tekee tämän esimerkinkin mahdolliseksi vaikka laskimessa ei olisi kuin vaikkapa kahdeksan numeron tarkkuus.

Esitetään eksponentti kakkosen potenssien summana: 27 = 16+8+2+1, eli binäärilukuna 11011. Tämä tarkoittaa, että

c27=c1· c2· c8· c16 =
c· c2· (x2)2· y2,
missä on merkitty x= c2 ja y = (x2)2.
Laskemalla vaiheittain neliöitä ja kertomalla niitä keskenään, päästään 26 kertolaskun sijasta 7:llä. Kun lisäksi joka välissä redusoidaan modulo 55, muistissa oleva luku ei koskaan ylitä arvoa 2916 (=54·54).

Oleellista RSA:n turvallisuuden kannalta on, että luvuista e ja n ei voi käytännössä laskea salaista eksponenttia d. Periaatteessa tämä kävisi jakamalla n ensin tekijöihin p ja q ja ratkaisemalla sitten d kuten laatijakin on tehnyt. Riittäisi tietenkin tuntea tulo (p-1)*(q-1). Ovathan e ja d toistensa käänteislukuja modulo juuri tämä luku.

Eksponenttilasku on hidas operaatio, vaikka julkiselle eksponentille e olisikin valittu usein käytetty arvo 3. Tämän vuoksi RSA:ta ei kannata käyttää pitkien viestien salaamiseen. Sama koskee tosin muitakin julkisen avaimen systeemejä - kaikki ovat hitaampia kuin symmetrinen salaus.

Kannattaakin muodostaa ns. digitaalinen kirjekuori. Valitaan satunnainen symmetrisen salausalgoritmin avain k ja salataan viesti sen avulla. Salataan sitten k käyttäen vastaanottajan julkista RSA-avainta. Lähetetään nämä salatekstit vastaanottajalle yhdessä asianmukaisten otsikkotietojen kanssa, joilla tyypillisesti yksilöidään käytetyt algoritmit ja se mitä julkista avainta on käytetty. Näin vastaanottaja tietää, mitä viestin osille pitää tehdä. Tällaista menettelyä käytetään usein osana jotain laajempaa protokollaa, joista tällä kurssilla esiintyy PGP.

RSA:n kehittivät ja sittemmin patentoivat Rivest, Shamir ja Adleman. Alkuperäinen artikkeli vuodelta 1978 on "A method for obtaining digital signatures and public key cryptosystems".

Allekirjoitus

Allekirjoituksen perusominaisuus (ja -vaatimus) on aitous: allekirjoittaja, eikä kukaan muu, on tarkoituksellisesti laatinut kyseisen allekirjoituksen juuri kyseiseen dokumenttiin tai viestiin. Jos tämä toteutuu, saavutetaan samalla myös kiistämättömyys. Digitaalisessa maailmassa pitää kiinnittää erityishuomio eheyteen: allekirjoitettua tietoa ei saa voida muuttaa ilman, että allekirjoitus mitätöityy. Tästä voidaan johtaa seuraavia vaatimuksia digitaaliselle allekirjoitukselle: Symmetristä kryptoalgoritmia voisi käyttää allekirjoitukseen, jos tavoitteena olisi pelkästään kahdenvälinen viestin aitouden osoittaminen: Jos näet salainen avain on vain kahden osapuolen A ja B tiedossa, niin viesti, jonka B saa auki tällä avaimella on välttämättä joko A:n tai B:n salaama - jos se on merkityksellinen, redundanssia sisältävä. Jos B ei ole itse laatinut ja salannut viestiä, sen täytyy siis olla A:n laatima ja salaama. Tämä riittää kuitenkin vakuuttamaan vain B:n, ei ketään muuta, sillä B voisi tietenkin keksiä vaikkapa avaimesta alkaen koko jutun. Tällaisen "allekirjoituksen" A voi siis aina kiistää.

Epäsymmetrisillä kryptosysteemeillä voidaan saada aikaan todellisia digitaalisia allekirjoituksia. Perusidea on, että allekirjoittaja A luo epäsymmetrisen avainparin (V,S) ja sitoo julkisesti avaimen julkisen osan V (=verifiointiavain) omaan identiteettiinsä ja käyttää salaista osaa S (=signeerausavain) dokumenttien allekirjoittamiseen. Kuka tahansa B voi vakuuttua allekirjoituksen aitoudesta, koska vain A on voinut laatia ne: vain A tuntee S:n ja vain S:llä allekirjoitetun dokumentin voi verifioida V:llä. Lisäksi A:n julkinen sitoutuminen V:hen saa aikaan sen, ettei hän voi kiistää S:llä allekirjoitettuja dokumentteja - paitsi yrittämällä väittää, että hänen avaimensa on paljastunut. Periaatteessahan mistä tahansa julkisesta avaimesta voi laskea vastaavan salaisen avaimen. Yksilöitä ja avaimia toisiinsa sitovien järjestelmien täytyy tämän vuoksi olla varuillaan, ettei kukaan yritä ottaa käyttöön helposti murrettavaa julkista avainta, jolloin myöhemmin esitettävälle murtumisväitteelle olisi ikäänkuin jälkikäteen löydettävissä selityskin.

RSA soveltuu epäsymmetrisistä systeemeistä sikäli luontevimmin allekirjoitukseen, että julkisen ja salaisen eksponentin roolit ovat matemaattisessa mielessä symmetriset (vrt. eo. laskelma, kyse on kommutatiivuudesta). Allekirjoitusta varten avaimia vain käytetään toisessa järjestyksesä kuin salauksessa. Dokumentin m allekirjoitus s muodostetaan salaisella eksponentilla d laskemalla s=md mod n. Kun m ja s lähetetään yhdessä, kuka tahansa, joka tuntee vastaavan julkisen avaimen e, voi verifioida eli todentaa, että m = se mod n.

Symmetrisellä algoritmilla salattavan viestin redundanssilla on merkitystä puretun viestin aitouden todentamiselle. Vastaava pätee epäsymmetristen systeemien allekirjoitukseen. Koska RSA:n tapauksessa pelkästä potenssista s=md mod n saa selville koko m:n, ei m:ää tarvitsisi välttämättä liittää mukaan, jos siinä on redundanssia. Toisaalta, kuten on jo todettu, RSA:n eksponenttilasku on hidas operaatio, minkä vuoksi yleensä vain viestin tiivistelmä allekirjoitetaan. Lähetys on siis:   m, (H(m))d mod n,   missä H on hash-funktio.

Julkisen avaimen aitousongelma

Olemme jo nähneet, miten tärkeää on julkisen avaimen saatavilla olo luotettavalla tavalla. Julkisten avainten jakeluun on periaatteessa seuraavanlaiset keinot, jotka tunnettiin jo 70-luvun lopulla, jolloin julkisen avaimen idea oli tuore: Julkisen hakemiston ongelmana on sen turvaaminen hyökkäyksiltä, sillä sen takana on kaikki. Lisäksi hakemisto on pullonkaula, vaikka asiakkaat säilyttäisivätkin toistensa julkisia avaimia jonkin aikaa. Varmenteet ratkaisevat jälkimmäisen ongelman, mutta T:n allekirjoitusavain on nytkin pidettävä täydellisessä turvassa. Ratkaistessaan yhden ongelman varmenteet tuovat toisen tilalle: vanhentuneet, ehkä jo paljastuneet avaimet pitää jollain tavoin peruuttaa. Voidaan esim. ylläpitää listoja käytöstä poistetuista avaimista, mutta näistä voi tulla uusia pullonkauloja, jos sertifikaatin voimassaolo halutaan aina tarkistaa!

Harjoitus: Miksi luotettu osapuoli on sitä luotettavampi mitä vähemmän se luottaa sinuun? Keksi esimerkkejä.

Harjoitus: Jos sinun pitää osoittaa henkilöllisyytesi, niin miksei se ei onnistu paperille kirjoittamasi allekirjoituksen avulla? Miten digitaalinen allekirjoitus muuttaa tilannetta?

Kryptologia, kooste/kertaus

Motivointia

Heti kun tietoa aletaan tallettaa ja siirtää digitaalisessa muodossa, tietoturvan toteutuksessa aletaan tarvita kryptologisia menetelmiä. Koska niitä on erilaisia eri tarkoituksiin, on syytä myös jäsentää hieman kokonaisuutta.

Sisältöä ja tavoitetta

Tämän sivun sisällön tiivistää ensimmäinen tavoitekysymys. Toinen kysymys on hieman soveltavampi. Kumpikin on ollut tentissä.
  • Mitä erityyppisiä kryptografisia primitiivejä tietoturvan toteuttamiseen voidaan käyttää: Luettele erityyppiset menetelmät jaotellen sen mukaan, millaista avainta niissä käytetään.
  • Kaikki kryptografia ei ole tiedon salaamista - eikä vesileimausta (josta oli samassa tentissä eri kysymys). Esittele kolme kryptografista algoritmi- tai protokollatyyppiä, joiden tavoite on jokin muu. Mainitse ainakin kahteen niistä jokin toteutus nimeltä, siis itse algoritmi tai protokolla eikä kokonaisuus, jonka osana se on.

Yhteyksiä

Tässä ei ole kerrattu kryptoprotokollien olemusta, vaikka ne ovatkin olennainen osa kryptologiaa. Niistä on melko tiivis yleisesitys toisaalla.

Kryptologia, kooste/kertaus

Ensimmäinen mielleyhtymä jonkin kohteen turvaamiseksi asiattomilta lienee useimmilla lukitseminen. Sitä vastaa tietoturvan tapauksessa salakirjoitus. Siinäkin käytetään salassa pidettävää avainta, jolla tieto lukitaan vaikeasti avattavaan muotoon.

Suuri osa varsinkin perinteisestä tietoturvasta on silti toteutettavissa ilman salakirjoitusta, mutta mitä enemmän tieto on pelkästään digitaalisessa muodossa ja mitä enemmän sitä siirretään tietokoneiden välillä, sitä enemmän tarvitaan salausta ja muita kryptografisia toimintoja. Kaikissa niissä ei käytetä lainkaan avainta ja toisaalta on järjestelmiä, joissa yhteen suuntaan toimiva avain on hyödyllinen vasta julkaistuna ja vieläpä varmennettuna. Tällöinkin toiseen suuntaan toimivan avaimen on pysyttävä salassa.

Sopivilla ja riittävän turvallisilla kryptografisilla algoritmeilla ja niitä käyttäen rakennetuilla protokollilla voidaan luoda pohja useimpien tietoturvatavoitteiden toteuttamiselle, kunhan rakennetaan turvallinen implementaatio ja sille puolestaan turvallinen installaatio.

Kryptografisten primitiivien luokittelu

Symmetrisen salauksen edellä on hyvä suorittaa kompressio, joka vähentää selvätekstin redundanssia eli toisteisuutta. Ssh:n sivulla on lyhyt luonnehdinta useimmista edellä mainituista algoritmeista.