Kryptoprotokollat, luento 5 (A), 2.3.2009

Tällä luennolla on kaksi aihetta.

Salasanan vahvistaminen

TTJ:ssä luonnosteltiin (id=60) protokollia, joilla heikkoja salasanoja käyttäen saadaan aikaan vahva autentikointi. Käytössä on haaste-vaste -menetelmä ja erityisesti hyökkääjää ehkäistään todentamasta salasana-arvauksiaan aiemmin kaapatun tiedon perusteella. Protokollia ovat
EKE, Encrypted Key Exhange (Bellovin ja Merritt 1992)
SPEKE, Simple Password-authenticated Exponential Key Exchange (Jablon 1996)
SRP, Secure Remote Password (Wu 1998)
PDM, Password Derived Moduli (Perlman ja Kaufman 2001)
Näissä protokollissa salasanan tiiviste toimii A:n ja B:n yhteisenä tietona y. Sitä käytetään vahvan avaimen k muodostamiseen Diffie-Hellmanin menettelyllä ja lopuksi tapahtuu autentikointi k:n molemminpuolisen tietämisen osoittavalla haaste-vaste -menetelmällä tähän tapaan:
A --> B : E k ( RA)
B --> A : E k ( RA, RB )
A --> B : E k ( RB )
Tässä RX tarkoittaa osapuolen X generoimaa satunnaislukua. Protokollat eroavat eniten Diffie-Hellman -vaihdossa:
EKE: salataan y:llä tavallinen vaihto, jossa moduulina on p ja kantalukuna g.
Toisen DH-puolikkaan kanssa salattuna lähtee B:ltä A:lle jo RB, joten viestejä on 4.
SPEKE: tavallinen vaihto, mutta kantalukuna on tiivisteen y toinen potenssi mod p. (Toki y kävisi sellaisenaankin, mutta tällä saadaan aikaan se, ettei myöhempien korotusten tuloksena ole neliöitä ja epäneliöitä vaan kaikki ovat neliöitä eli toisia potensseja.)
ks. kaavio 'A Peek at SPEKE', jos sitä enää löytyy täältäkään.
PDM: kantalukuna on 2 ja moduulina (nimen PDM mukaisesti) tiivisteen y johdannainen.
SRP: tavallisen vaihdon toiseen viestiin on summattu lisätermi. Neljä viestiä ovat:
g a mod p
g b + g y mod p ,   u ,   RB.           k = g b(a+uy) mod p       Harj: Miten A ja B laskevat k:n?
E k ( RB), RA
E k ( RA)
Näissä protokollissa ei missään vaiheessa tarjoudu hyökkääjälle sellaista tietoa, jonka perusteella hän voisi tarkistaa, onko hänen arvaamansa salasana s' oikea. Seuraavassa selitetään mitä tämä tarkoittaa, mutta asian toteamiseksi pitää tutkia protokollia.

Tietenkin hyökkääjä voi laskea salasana-arvauksesta s' arvauksen yhteiseksi tiedoksi y'. Jos tämä sattuisi olemaan sama kuin y, hyökkääjä voisi luonnollisesti käydä koko protokollan jomman kumman osapuolen roolissa ja tulla autentikoiduksi. Tällainen lotto-osuma on aina mahdollista, mutta sen kokeileminen on-line on äärimmäisen kallista. Arvauksen y' todentaminen off-line vaatisi sen, että y':n (tai alunperin s':n) avulla voisi laskea ja saada tulokseksi jotain samaa kuin protokollasta kaapatussa viestissä on -- ja samuus toteutuisi vain siinä tapauksessa, että y' = y. Laskun lähtöarvoina saa tietysti olla niinikään protokollasta kaapattua tietoa, myös sellaista jota hyökkääjä on itse siihen aiemmin syöttänyt.

Protokollalla SRP on lisäominaisuutena se, että palvelimelle (B:lle) tallennetut salasanatiedot eivät paljastuessaan päästä ketään esiintymään A:na. Palvelimella on A:sta tietona vain gy mod p. Tunnetusti tämä ei tarjoa mahdollisuutta käyttää pelkkää y:tä mihinkään. Palvelin ei tarvitse protokollassa pelkkää y:tä, mutta A tarvitsee sitä avaimen k laskemiseen (kertolaskussa uy), ja samoin tarvitsisi tietokannan murtanut hyökkääjä voidakseen esiintyä A:na. Vastaava "augmentoitu" muoto on olemassa myös muista kolmesta protokollasta.

Edellisiä uudempi ehdotus vastaavaan tarkoitukseen -- joskin ilman viimeksi mainittua lisäominaisuutta -- on esitetty artikkelissa Secure remote user access over insecure networks (Mohammad Peyravian, Clark Jeffries, 2005 sama HTML:nä). Siinä käytetään DH-vaihdon lisäksi vain hash-funktiota ja XOR-operaatiota (luvussa 3). Artikkeli on kirjoitettu lähes liioittelevan helppotajuiseen ja itseään kertaavaan muotoon. Silti lukijaa on "hämätty" kirjoittamalla XOR-merkinnän sijaan sulkumerkki '('. Eli joka kerta kun sulut eivät täsmää, pitää yksi osata lukea XOR:ksi!

Protokolla etenee tähän tapaan eo. merkinnöin:

1.   A --> B :   RA   ,   g a mod p
2.   B --> A :   g b mod p ,   RB   XOR   H( g ab mod p , y , RA )       Harj: Kävisikö tässäkin y:n tilalle gy?
3.   A --> B :   RB
4.   B --> A :   H( g ab mod p , y , RA , RB )
Edellisistä protokollista poiketen ensin tulee autentikoiduksi A kolmannessa viestissä ja vasta lopuksi B. Laskemalla 4. viestin kaltainen hash-arvo siten, että syötteessä on mukana jokin vakio kumpikin osapuoli saa ilman lisäviestejä myös istuntoavaimen jatkoa varten. Jos tällainen salaus on jatkossa käytössä, A voi sen suojaamana turvallisesti välittää uuden salasanatiivisteen B:lle, aina kun salasanan vaihto on tarpeellinen.

Artikkeli käyttää yhden 8 sivustaan sen esittämiseen, miten A voi autentikoinnin jatkeena em. istuntoavaimen tapaisella hash-arvolla h = H( g ab mod p, RA, RB ) "maskeerata" uuden salasanan tiivisteen y' -- siis XOR-summalla h+y'. Näyttäisi, ettei tällaista tarvittaisi, mikäli viestintä on jo istuntoavaimella salattua. Erillinen salasananvaihtoprotokolla (=em. autentikointi ja sen jälkeen A:lta h+y' ja B:ltä konfirmointi) voi kuitenkin olla hyödyllinen. Salasana(tiivistee)n vaihto-operaatio ja sitä kautta uusi salasana ei silloin ole haavoittuvainen niille uhkille, joita istuntoavaimen hallinta voi tuottaa tai joita salatun viestinnän kautta voi ilmetä. Viestintähän voi tuottaa paljon kryptotekstiä ja osasta sitä voi ennemmin tai myöhemmin tarjoutua myös selkotekstiä. Vaikka istuntoavain joskus murtuisi, salasanatiiviste ei silti paljastuisi.

Harjoitus. Tutkitaan, mitä eo. autentikaatioprotollassa tapahtuu, jos toinen viesti tuleekin C:ltä, joka on kaapannut ensimmäisen viestin. Olkoon toisen viestin jälkiosa R, joka näyttää A:n silmissä yhtä satunnaiselta kuin muutenkin. Olkoon C:n yksityisenä DH-lukuna c.

A --> B C :   RA   ,   g a mod p
C --> A :   g c mod p ,   R
Mitään epäilemättömän A:n vastaus on tietenkin R XOR  H( g ac mod p , y , RA ). Tämä tarjoaa C:lle mahdollisuuden testata salasana-arvauksiaan. Hyökkäyksen esitti Kyung-Ah Shim vuonna 2006 ( Security flaws of remote user access over insecure networks, Comp.Comm., Vol30, 117-121. PPT-esitys) Hän esitti myös DoS-hyökkäyksen protokollaa vastaan.

Voisiko protokollan korjata jotenkin? Sitä varten pitäisi saada A huomaamaan, ettei vastaaja olekaan B. Nimeämisperiaatteen käytöstä ei ole ainakaan suoraan apua, sillä toisessa viestissä ei ole mitään, minkä A tarkastaa. Tässä protokollassa rikottiin oikeastaan Toimintaehdot-periaatetta: A purkaa 2. viestissä olevan RB-luvun XOR-maskeerauksen ja paljastaa maskin, vaikka sillä ei ole perusteita tälle toimelle. Paljastushan kuuluu asiaan, jos viesti tuli B:ltä. Voisiko viestin rakennetta monipuolistaa jotenkin, jotta paljastamiselle löytyisi peruste? (Vastauksen pitäisi ilmetä siitä mitä sanottiin autentikointijärjestyksestä.)

Julkisen avaimen protokollien erityispiirteitä

Toisin kuin yleensä symmetrisessä kryptografiassa epäsymmetrisen kryptografian matemaattinen rakenteisuus saattaa aiheuttaa vuorovaikutusta julkisen avaimen kryptoprimitiivien ja niitä käyttävien protokollien välille. Tämä voi heikentää turvallisuutta, jos sitä ei ole osattu ottaa huomioon. Tämä on yksi syy uusiin suosituksiin, joita Andersonin ja Needhamin artikkelissa esiintyy kahdeksan:
  1. Allekirjoita ennen salausta. Tämä on viime kertainen Abadi-Needhamin 5. periaate, jolle nyt näytetään lisäperusteena, miten RSA:lla salattu ja sen jälkeen allekirjoitettu viesti on mahdollista vaihtaa toiseksi. Tämän voi tehdä se, jonka julkisella avaimella salaus on tehty. Hän nimittäin voi laskea diskreettejä logaritmeja moduulinsa suhteen, koska tuntee sen tekijät, eivätkä nämä ole kovin suuria. Artikkelissa näytetään vastaava hyökkäys ElGamalia vastaan. Kumpikin tapaus toteutuu avainhuijauksella eli siten, että salauksen purkava osapuoli julkaisee sopivanlaisen uuden avaimen.

    Mainittua hyökkäystä selitetään ja täydennetään hieman Davisin artikkelin (2001) luvussa 1.2. Erityinen huomio on huijatun julkisen RSA-eksponentin erikoislaatuisuus, kun se ei olekaan 3 tai muuta tavallista muotoa. Davisin artikkelin varsinainen idea paljastuu nimestä: "Defective Sign & Encrypt in S/MIME, PKCS#7, MOSS, PEM, PGP, and XML", eikä kyseiseen ensin allekirjoitetun ja sitten salatun viestin tulkintaongelmaan pitäisi kenenkään langeta ainakaan tämän kurssin jälkeen.

    Päivän artikkelin mukaan vastaavanlainen huijaus voi "syntymäpäivähyökkäyksen" ansiosta tulla mahdolliseksi symmetristä kryptosysteemiä vastaan, jos siinä kryptataan kahdella avaimella peräkkäin ja tulosta käytetään allekirjoituksen tapaan. Hyökkääjän tavoitteena on siis keksiä uusi avain, jolla saisi haluamastaan viestistä saman kryptaustuloksen kuin aiemminkin. Haku ei ole yhtä hankalaa kuin kahden avaimen yhteenlaskettu pituus näyttäisi vaativan, vaan "meet-in-the-middle"-tekniikalla vain yhden avaimen verran bittejä täytyy käydä läpi. Samasta syystä esim. DESiä ei kannata (salaustarkoituksiinkaan) vahvistaa kahdella kryptauksella, vaan pitää käyttää kolmea, vaikka avaimia olisikin kaksi.

  2. Ole perillä siitä, mikä (avaintieto) erottaa oliot toisistaan. Saman avaimen käyttöä eri tarkoituksiin kannattaa välttää. Saman protokollan eri ajot pitää voida erottaa.

    Tässä kohden artikkeli korostaa käsitteellistä eroa dekryptauksen ja allekirjoituksen välillä, vaikka RSA:ssa nämä ovat näennäisesti aivan sama toimenpide. Esimerkkinä olevassa Woo-Lam-protokollassa B uskoo kyllä viestin 7 tulevan A:lta, koska A on sitä varten dekryptannut B:n viestissä 6 olleen nonce-luvun. B ei kuitenkaan voisi vakuuttaa ketään muuta tästä, sillä hän olisi tietenkin itse voinut tuottaa myös viestin 7.

  3. Varmistu siitä, ettei vastustaja voi käyttää allekirjoitustasi tai salauksen purkuasi oraakkelina, ts. hän ei saa sinua suorittamaan näitä operaatioitasi mille tahansa syötteelle siten, että hän saa jonkin haluamansa asian lasketuksi sinun avullasi. Oraakkeli toteutuu esim. em. Woo-Lam -protokollassa, mikäli viestien 4 ja 5 avaimet KS ja KS-1 ovat tosiaan toistensa vastineet. Avain KS-1 on nimittäin palvelimen S allekirjoitusavain, mutta protokollassa S myös palauttaa nonce-luvun, josta se on purkanut salauksen ja salausavaimena on ollut KS. Tämän periaatteen kohdalla on myös hieman erilainen esimerkki kuutiojuurioraakkelista.

  4. Pidä lukua biteistä: minkä tehtävänä on toteuttaa "ekvivokaatiota" (monimerkityksisyyttä), minkä redundanssia ja minkä laskennallista monimutkaisuutta. Redundanssin pitää perustua tukevasti sovellusyhteyteen eikä lisäbittejä saa voida käyttää sinua vastaan.

    Monimerkityksisyys tarkoittaa tässä sitä, että kryptaussysteemi voi joiltakin osiltaan olla "many-to-one" eikä "one-to-one" kuten yleensä. Tällöin hyökkääjä ei voi päättää mikä selväteksti on oikea useiden mahdollisten joukosta. Redundanssilla, jota on jo käsiteltykin, on päinvastaista vaikutusta.

    Huolimattomasti käytetyt ylimääräiset bitit voivat avata subliminaalisen eli piilokanavan (myös: covert channel). Sillä tarkoitetaan yleisesti mitä tahansa keinoa, jonka kautta luottamuksellista tietoa voi päätyä asiattomille tyypillisesti sellaisen toimijan (esim. Troijan hevosen) lähettämänä, jolla on kyllä oikeus tietoon, mutta ei oikeutta sen lähettämiseen mitään normaalia kanavaa pitkin.

  5. Älä oleta kenenkään muiden "salaisuuksien" olevan salaisia -- lukuunottamatta varmenneviranomaista (johon tyypillisesti pitää voida luottaa).

    Tässä on taustalla vaikutus, joka erityisesti symmetrisen avaimen paljastumisella voi olla protokollan muihin suorituskertoihin. Artikkelin hyökkäysesimerkki (Goss-protokollaa vastaan) on varsin monipolvinen. Sen yleisenä rakenteena on seuraava: hyökkääjä C salakuuntelee A:n ja B:n väliset avaintenvaihtoviestit (ja varastoi siinä syntyneellä avaimella salattuja sanomia). Sitten C käyttää kopioimiaan viestejä avaimenvaihtoon sekä A:n että B:n kanssa. Hän ei pysty laskemaan kumpaakaan näistä avaimista, mutta tässä oletetaan, että hän saa ne urkituksi A:lta ja B:ltä jossain vaiheessa. Kun hän on saanut ne, hän pystyy laskemaan A:n ja B:n välisen avaimen ja purkamaan varastoimansa sanomat.

    Tällaiseen "tunnettu-avain"-hyökkäykseen voi huolimattomuuden, varkauden tms. lisäksi tulla mahdollisuus myös, kun jonkin sopimuksen allekirjoituksen jälkeen salaukset voidaan purkaa, tai kun piilokanavien välttämiseksi avaimet paljastetaan heti, kun niitä on käytetty johonkin autentikointiin. Tällaiset seikat tarjoavat toki lisämotivaatiota myös Abadi-Needhamin 9. periaatteelle "Avaintuoreus".

  6. Älä oleta saamasi viestin olevan mitään erityistä muotoa, ellet voi tarkistaa tätä.

    Tässä viitataan esimerkkinä rahanheittoprotokollaan, jossa A saa B:ltä luvun g1r tai g2r (mod p), missä r on B:n valitsema satunnaisluku, jonka B paljastaa myöhemmin. Myöhemmin B myös kertoo, kumman hän oli korottanut g1:n vai g2:n. Lopussa A:n pitäisi voida tarkistaa, että alussa saatu luku on asiaankuuluva r:s potenssi. Mutta B onkin voinut valita r:n yhdessä toisen luvun r' kanssa siten, että g1r = g2r', jolloin hän voi olla aluksi lähettänyt g1r:n mutta myöhemmin kertookin g2:n ja r':n. Kyseisenlaisten r:n ja r':n löytäminen on helpompaa kuin (ylivaikeaksi oletettu) diskreetin logaritmin laskeminen.

  7. Kryptoprimitiivien (parametrien) rajat pitää selvittää: montako avainta tietyllä algoritmilla kannattaa enintään generoida, kuinka suuren salaliiton kynnysprotokolla sallii, montako blokkia tietyllä algoritmilla voi salata.

    Tällaisten asioiden arviointia ei välttämättä tarvitse tehdä omakohtaisesti, kunhan vain asiaa selvittäviä tutkimuksia on saatavissa ja lukijalla on riittävät kryptologian perustiedot niiden ymmärtämiseen. Tällä kurssilla ei käsitellä rajoitteita tarkemmin, mutta kynnysprotokollia kylläkin esitellään.

  8. Vankka turvallisuus perustuu eksplisiittisyyteen: pitää olla selvillä kaikista erityisominaisuuksista, joita voi käyttää julkisen avaimen primitiivin vastaiseen hyökkäykseen: Tällaisia voivat olla erityiset yhtälöt (esim. multiplikatiivinen homeomorfismi) sekä yleiset turvaominaisuudet, kuten nimeäminen, tyypitys, tuoreus sekä alkuoletukset ja tavoiteltavat tulokset.

    Tätä periaatetta tekijät esittävät eräänlaiseksi perusperiaatteeksi, josta muut ovat enemmän tai vähemmän sovelluksia. Vastaavassa asemassa viime kerralla olivat periaatteet 1 ja 2.

Uusia periaatteita

Citeseer-artikkelipalvelun mukaan Prudent-periaatteisiin on vuoden 2009 alkuun mennessä viitattu 313:ssa ja Robustness-periaatteisiin 118 artikkelissa (171 ja 102 vuoteen 2007 mennessä). Luvut ovat suuria ja kertovat, että periaatteilla on ollut vaikutusta. Kumoavia artikkeleita ei ole ilmaantunut, eikä nähtävästi myöskään sellaisia, jotka oleellisesti täydentäisivät. Tässä on muutama poiminta erityyppisistä kehittelyistä: