Oppikerta 8, 30.2.1999

Yleistä protokollien suunnittelun systematisoinnista

Kun protokollaa laaditaan, keskeinen tavoite on että siitä tulee luotettava. Tämä tarkoittaa että protokolla todella ratkaisee käsillä olevan ongelman, eli yhtäpitävästi: sillä on kaikki toivotut ominaisuudet - siten kuin ne ilmenevät inhimilliselle tarkkailijalle tai protokollan käyttäjälle. Validointi määritellään prosessiksi jolla vakuututaan siitä että protokolla vastaa inhimillisiä odotuksia sen suhteen mikä oikeastaan on ongelman ratkaisu tai mikä on toivottu ominaisuus.

Niin pian kuin nämä odotukset ja ominaisuudet on tyhjentävästi lueteltu vaatimusdokumentissa, voidaan validointiin käyttää tekniikkaa jota kutsutaan verifioinniksi. Sen tehtävänä on näyttää, että protokolla toteuttaa vaatimukset.

Verifiointimenetelmää kutsutaan formaaliksi (eli muodolliseksi), jos protokollan vaatimukset ja spesifikaatiot on kirjoitettu kielellä, jolla on formaali syntaksi ja (mielellään) sellainen formaali semantiikka, joka mahdollistaa spesifikaation kääntämisen algoritmiksi. Vaikka protokollien formalisointi tarjoaa käsitteellisen työkalun tai viitekehyksen joka auttaa suunnittelun henkistä prosessia, suurin hyöty systematisoinnista ja notaatiosta saavutetaan kuitenkin siitä, että ongelmia voidaan tämän jälkeen ratkoa automatisoidulla symbolisella laskennalla.

On olemassa monenlaisia formalismeja, menetelmiä edetä niistä verifiointiin sekä työkaluja, joilla menetelmiä voidaan automatisoida. Alaa pohtinut ACM:n työryhmä (1996) raportoi kuitenkin optimistisesti: "Overall, the myriad of formalisms had led to a healthy diversity rather than fragmentation of the discipline." Seuraavassa on tiivistelmä mainitussa raportissa esitetyistä ulottuvuuksista, joiden suhteen arvioidaan formalismeja, menetelmiä ja työkaluja. (Tähdellä on merkitty ne suunnat, joita jäljempänä käsiteltävä CSP edustaa.)

Mainitun raportin mukaan yksi tietojenkäsittelytieteen haasteista on etsiä keinoja, joilla voitaisiin yhdistää rinnakkaisten systeemien suunnittelun ja verifioinnin metodologioita.

Kryptograafisten protokollien formaali verifiointi

Päähuomio formaalien menetelmien soveltamisessa tietoturvaprotokolliin on ollut autentisoinnissa ja avaimenvaihdossa. Schneier mainitsee neljä lähestysmistapaa.
  1. Mallinnetaan ja verifioidaan protokolla käyttäen spesifikaatiokieliä ja verifiointityökaluja, joita ei ole nimenomaan suunniteltu kryptograafisia protokollia varten. Tässä voidaan hyödyntää kohdejärjestelmän erityisrakennetta vaimentamaan tila-avaruuden räjähtämistä, mikä on tyypillistä automaattisessa verifioinnissa. Tietoturvaprotokollat voivat usein olla siedettäviä tässä suhteessa sillä niissä on yleensä vain harvoja toimijoita ja viestejä. Toisaalta tarkastelu pitää ulottaa viestien sisältöön, vaikka kryptosysteemien yksityiskohtia ei otettaisikaan huomioon. Tätä lähestymistapaa edustaa CSP.
  2. Laaditaan asiantuntijajärjestelmä, jota protokollan suunnittelija voi käyttää luomaan erilaisia tilanteita ja tutkimaan niitä.
  3. Mallinnetaan protokollaperheen vaatimukset käyttäen logiikkaa, joka soveltuu tiedon ja uskomuksen analysointiin (episteeminen logiikka). Varhaisin ja monista ehdotetuista laajennuksista huolimatta suosituin tällainen on BAN-logiikka (viime kerran aihe). Se käsittelee uskomusta, eikä tästä syystä sovellu yksityisyyttä koskevaan päättelyyn. Tämä lähestymistapa edellyttää idealisaatiovaihetta, jossa kukin protokollan viesti muunnetaan kaavoiksi, jotka koskevat tätä viestiä.
  4. Kehitetään formaali menetelmä joka perustuu algebrallisille kryptograafisten systeemien terminkorvausominaisuuksille (term-rewriting properties). Vaikka tähän lähestymistapaan käytännössä liittyy tilakone, korostus on sanoissa, joita toimijat voivat luoda, ja tavoitteena on selvittää, onko näiden joukossa myös sellaisia, joita niiden ei pitäisi pystyä generoimaan.
Kaikissa näissä menetelmissä mallin pitää jollain tavalla sisältää hyökkääjä, jolle on mallinnettava kyky

CSP kryptograafisten protokollien mallinnuksessa

Tämän jakson taustalla on useita artikkeleita:
Harjoitus: Aluksi johdantona CSP-koodia, jolla mallinnetaan Needham-Schroederin julkisen avaimen protokolla alkaen siitä kohdasta jossa A ja B ovat hankkineet toistensa julkiset avaimet (pA ja pB). Tässä piste "." toimii erottimen tietokenttien välillä ja toisen viestin lopussa oleva B on korjaus alkuperäiseen versioon. Protokolla on:
A --> B : pB(nA.A)
B --> A : pA(nA.nB.B)
A --> B : pB(nB)

Vertaa tätä seuraavaan CSP-esitykseen:

UserA = []i: USER
trans.A!i!pi(nA.A) -->
rec.A.i?pA(nA.x.i) -->
trans.A!i!pi(x) --> Stop.

UserB =
rec.B?j!pB(y.j) -->
trans.B!j!pj(y.nB.B) -->
rec.B.j.pB(nB) --> Stop.

ENEMY(S) =
trans?i?j?m --> ENEMY( S U {m} )
  []
[]i,j:USER , S |- m rec.i!j!m --> ENEMY(S)

NET = (UserA ||| UserB) |[ trans, rec ]| ENEMY

Oletetaan nyt yleisesti, että olet laatinut jonkin tietoturvatavoitteen toteuttamiseksi kryptograafisen protokollan ja haluat varmistua, että voimakaskaan hyökkääjä ei pysty estämään tavoitteesi toteutumista eli murtamaan protokollaasi.

Oletetaan lisäksi, että käytössäsi on ultrasupertietokone, jolla voit kohtuuajassa käydä läpi mittaamattoman (joskin äärellisen) määrän erilaisia tapauksia - eli kaikenlaisia tilanteita, joita protokollan ympärillä voi syntyä. Nämä tilanteet pitäisi luoda sillä tavalla, että jos hyökkäys voi onnistua, sitä vastaava tilanne tulee mukaan ja pystytään tunnistamaan. Käyttäen mallina edellä olevaa CSP-esimerkkiä pohdi,

Yleisesti CSP:stä
CSP (communicating sequential processes) on abstrakti kieli, jolla kuvataan rinnakkain toimivia ja viestien vaihdon avulla kommunikoivia järjestelmiä. Ne koostuvat prosesseista, jotka "elävät" tapahtumien (events) kautta. Prosessit ilmaisevat, millaisia tapahtumia voi sattua ja miten ne asettuvat toistensa perään tai rinnalle. Osa tapahtumista on sellaisia, jotka synkronoivat eri prosesseja. Tällaiset on luontevaa tulkita viestien lähettämiseksi ja vastaanottamiseksi, mutta se ei ole ainoa mahdollisuus.

FDR (failures divergences refinement) on mallintarkistaja (model checker), joka toimii siten, että se käy läpi tila-avaruuden kaikki tilat (soveltaen kaikkia allamainittuja CSP-semantiikan näkökulmia). Näin ollen se voi käsitellä vain äärellistilaisia systeemejä (muutamaan miljoonaan tilaan asti). Siispä menetelmää voidaan käyttää vain sellaisen systeemin tutkimiseen, jossa on rajattu määrä osapuolia, käytännössä vain muutama. Protokollan sinänsä pitää toimia käytännössä rajattoman toimijajoukon puitteissa.

CSP-kuvauksen laatimista varten on olemassa myös kääntäjä, Casper. Sen syötteenä on tekstitiedosto, jossa kuvataan protokolla melko tavalliseen tyyliin ja myös tutkittava systeemi osapuolineen, avaimineen yms. Tuloksena on vastaava CSP-kuvaus.

CSP on prosessialgebra ja sitä voisi karkeasti verrata Boolen algebraan seuraavasti:
Ilmiö Boole CSP
aakkosto muuttujat
vakiot
tapahtumat
operaatiot disjunktio,
konjunktio
negaatio,...
peräkkäisyys: -->
vaihtoehtoisuus: [] (neliö, ulkoisesti valittu) ja [¯] (hakanen, epädeterm.);
rinnakkaisuus: |[ tapahtumia ]| , ||| (jos synkronoitavia tapahtumia ei ole), ...
laskusäännöt kommutatiivisuus
distributiivisuus
de Morgan, ...
kommutatiivisuus, distributiivisuus, ...,
rekursiivisten määrittelyjen käsittelyssä kiintopisteen periaate
semantiikka,
merkitys
muuttujien ja vakioiden
kuvaus totuusarvoiksi;
totuusarvoja yleensä ajatellaan myös silloin, kun näennäisesti vain pyöritellään kaavoja. Totuusarvojen joukko voidaan esittää graafisesti Boolen hilana.
operationaalinen (lähellä implementaatiota): esitettävissä siirtymäkaavioina (LTS, labelled transition system)
denotationaalinen: vastaa lähinnä kuvausta totuusarvoiksi, joita tässä tapauksessa edustavat jäljet (traces) eli mahdolliset tapahtumien ketjut. Näille tarvitaan usein pareiksi 'failures' eli ne tapahtumat, jotka kulloinkin ovat mahdottomia. Kolmantena komponenttina voivat olla 'divergences' (~ ikisilmukat).
algebrallinen: tietyt laskusäännöt otetaan aksioomiksi. Kielen merkitys muodostuu sitten samaan tapaan kuin esim. kokonaislukujen abstrakti merkitys rakentuu niiden aksioomista.
Viime kerralla esitetyssä BAN-logiikassa analyysin vaiheet olivat: protokollan idealisaatio uskomuksia käsitteleviksi (ajattomiksi) kaavoiksi, alkuoletusten kirjaaminen, tavoitelauseiden johtaminen päättelysäännöillä. Nyt protokolla mallinnetaan määrittämällä osapuolet, hyökkääjä ja verkko (media) prosesseiksi, joissa tapahtumina ovat tietynmuotoiset viestit, jotka "lähetetään" kanavia pitkin. Mitään lähetyksiä ei tietenkään tapahdu ja puhe kanavista on vain havainnollistus. Kyse on tapahtumien tietotyypeistä eli äärellisistä joukoista, joiden alkioita tapahtumat ovat. Joukot voivat kasvaa tapahtumien edetessä. Tällä voidaan mallintaa esim. sitä, että hyökkääjä pystyy johtamaan (ja sitten myös lähettämään) uusia viestejä aiemmin kuulemistaan. Tietojen koostumista mallinnetaan kieliopin tapaan ja informaatiosysteemin avulla voidaan ratkaista, onko jokin tieto johdettavissa aiemmista.

Verkon sijasta voidaan toimijat kytkeä suoraan toisiinsa esim. siten, että hyökkääjä = media (kuten edellä). Tai sitten otetaan toimijoiden (noodien) taakse vielä käyttäjä (kuten tämän päivän artikkelissa tehdään: kanavat in.i ja out.i)

Uskomuksia ei tarvitse mallintaa, vaan tietoturvatavoitteet ilmaistaan vaatimuksina sille, mitä ominaisuuksia jäljillä pitää olla. Siis kaikkien mahdollisten tapahtumaketjujen pitää toteuttaa joitakin ominaisuuksia.

  1. Luottamuksellisuuden tapauksessa tällainen ominaisuus on se, että salaiseksi tarkoitettu viesti (eli tapahtuman tietyn kentän arvot tietystä joukosta) ei koskaan esiinny hyökkääjään vastaanottamia viestejä kuvaavissa tapahtumissa. Tämän kerran artikkeli kehittelee tälle vaatimukselle useita vaihtoehtoisia formalisointeja.
  2. Autenttisuus edellyttää sitä, että jälki ei sisällä tiettyä tapahtumaa T ellei jotain muuta tapahtuma R esiinny ennen sitä. Tämän merkitys on: T autentikoi R:n. Prosessialgebrallinen formalisointi: P [| R,T |] Stop = P [| R |] Stop.
Harjoitus: Mitä tapahtumia autentikoi tapahtuma rec.B.A.pB(nB) ja mitä ne merkitsevät?

Vastauksen etsiminen tähän on samaa toimintaa mitä pitää tehdä kun protokollaa verifioidaan. Erityisesti voidaan todistaa, että autentikoiduksi tulee tapahtuma trans.A.B.pB(nB), mikä merkitsee, että A on vastannut B:n nonce-haasteeseen. Toisin (ja tarkemmin) sanoen, protokollan lopussa B tietää että myös A on päässyt loppuun ja että A uskoi kommunikoineensa B:n kanssa. Ellei toisen viestin lopussa olisi mainittu B:n nimeä, tätä tavoitetta ei saavutettaisi.

Autentikoinnin (tiukimman tason, ajastamaton) vaatimus mallinnettuna Lowen mukaan:

Agreement(B-role, A-role, {d1,d2}) (B) =
signal.Running.B-role.B?A?e1?e2 -->
signal.Commit.A-role.A.B.e1.e2 --> Stop.

Tässä erotellaan, missä rooleissa osapuolet osallistuvat protokollaan. Kanavan signal viestit ovat protokollan mallinnuksessa esiintyviä aputapahtumia, joilla osapuolet ikäänkuin välittävät uskomuksiaan (!) tarkkailijalle. Merkitys on seuraava: Jos A ilmaisee, että hän on suorittanut loppuun protokollan ("Commit") kommunikoiden A-roolissa B:n kanssa käyttäen tietoalkioita e1 ja e2, niin B on tätä ennen ajanut protokollaa kommunikoiden B-roolissa A:n kanssa samoja tietoalkoita käyttäen.

Olkoon mallinnettu jokin protokolla prosessina SYSTEM (kuten "NET" alun esimerkissä) siten, että signal-kanavaa käytetään asianmukaisissa paikoissa. Toteuttaako protokolla tällaisen autenttisuuden, testataan kysymällä FDR:ltä, onko prosessi SYSTEM - (S - X) hienonnus (eli refinement) prosessille Agreement(B-role, A-role, {d1,d2}) (B). Tässä X tarkoittaa niitä tapahtumia, joita jälkimmäisen prosessin aakkostoon kuuluu ja S on kaikkien tapahtumien joukko, SYSTEM -(S-X) tarkoittaa siis sellaista prosessia josta on piilotettu kaikki muut tapahtumat (sisäisiksi, näkymättömiksi) paitsi ne jotka kuuluvat X:ään

Harjoitus Seuraavassa on äskeiseen liittyvä esimerkki Lowen notaatiolla, jossa viestien rakenne on kryptauksen osalta hieman aiemmasta poikkeava. Isolla kirjoitetut tietoalkiot edustavat vakioarvoja ja pienellä kirjoitetut muuttujia. Vertaa tätä protokollan aloittajaprosessia aiempaan esimerkkiin (prosessiin UserA). Kiinnitä huomiosi siihen, miten signaalit Running ja Commit sijoittuvat.

INITIATOR(A,na,pka) =
[]B:Agent env.A.(Env0.B) -->
comm.A.B.(Msg1.Encrypt.(PK(B), <na,nb>)) -->
[]nb:Nonce comm.B.A.(Msg2,Encrypt.(pka.<na,nb,B>)) -->
signal.Running.INIT-role.A.B.na.nb -->
comm.A.B.(Msg3,Encrypt.(PK(B),<nb>)) -->
signal.Commit.INIT-role.A.B.na.nb -->
SKIP

Toisenlainen esimerkki signal-kanavien tapaisista protokollan ulkopuolisista tapahtumista on evidence-kanava, jollaista voidaan käyttää kiistämättömyysvaatimuksen mallintamisessa. Tällaisessa tapauksessa ei riitä, että tarkoitetut toimijat noudattavat protokollaa. Semantiikkaan puolestaan pitää ottaa mukaan failures ja divergences (eli "estymät" ja "pillastumat").


Luettavaksi: N.Asokan, P.A.Janson, M.Steiner, M.Waidner: The State of the Art in Electronic Payment Systems, IEEE Computer, Sep 1997, 28-35.