Kryptoprotokollat, luento 8 (A), 30.3.2009

Allekirjoituksista

TTJ:ssä (id=328) on esitelty yleisesti joitain erikoisia digitaalisia allekirjoituksia, mm. viime luennolla viitattu ryhmäallekirjoitus. Tarkemmin käsiteltiin kieltämätöntä allekirjoitusta. Sokeaa allekirjoitusta ei puolestaan enää sillä kurssilla pidetty erikoisena.

Guilin Wangin Bibliography on Digital Signatures antaa käsityksen, miten monipuolista tutkimusta allekirjoitusaiheesta nykyään tehdään. Paljon on kyse viilauksista tehokkuuden ja todistusten osalta: Esimerkkinä Kiayias ja Yung esittävät vuonna 2004, että heidän ryhmäallekirjoitusalgoritminsa on ensimmäinen, joka on sekä tehokas että todistetusti turvallinen. Toisaalta löytyy uudentyyppisiä variaatioita täyttämään tehtäviä, joilla ei vielä käytännössä ole suurta kysyntää. Ainakin Schneier toteaa kirjassaan vuonna 1996, ettei hän tiedä käyttöä unohtavalle allekirjoitukselle, joka toimii samaan tapaan kuin Oblivious transfer, mutta viestin sijasta siinä muodostuu (tai ei muodostu) allekirjoitus.

Esimerkki: valtuutetun allekirjoitus

Yksi TTJ:ssä (id=328) esitellyistä erikoisista allekirjoituksista oli 'proxy signature' eli valtuusallekirjoitus tai allekirjoitusvaltuutus. Ehkä nimenä voisi olla myös valtuutetun allekirjoitus, sillä siinä 'proxy' on alkuperäisen allekirjoittajan valtuuttama taho, joka voi laatia uusia allekirjoituksia.

Nyt tarkastellaan sellaista valtuutetun B tekemää allekirjoitusta, jonka voi todentaa vain ennalta -- jo alkuperäisen valtuuttajan A toimesta -- määrätty taho C, ’designated verifier’. Tällainen ominaisuus voi liittyä myös muunlaisiin allekirjoituksiin, esim kieltämättömään, kuten em. TTJ-sivulla mainitaan.

Tarkastellaan esimerkkinä protokollaa em. Guiling Wangin artikkelista (2004). Tätä varten luennolla kerrataan lyhyesti ElGamalin allekirjoitus, jotta käyttöön tuleva Schnorrin muunnos siitä tuntuu luontevalta. Juonena siinä on on-line -laskennan suorittaminen modulo q, kun q on vain parisataabittinen tekijä 1000-bittiselle (p-1):lle. Etukäteistä eli off-line -laskentaa tehdään modulo p. Vastaava keino on käytössä myös DSA:ssa (siitä ja ElGamalista ks. id=233). Kaikissa näissä systeemeissä yksityistä avainta x vastaava julkinen avain on y=gx mod p.

Tavanomaisen Schnorr-allekirjoituksen lisäksi käyttöön tulee sen 'two-party' -muunnos: kahden osapuolen allekirjoitus tarkoittaa tässä sitä, että sen muodostamiseen tarvitaan molempien yksityistä avainta. Julkinen avain on tällöin muotoa y=gx1+x2 mod p, eikä osapuolten tarvitse paljastaa x:iänsä, sillä y:n saa myös tulona y=gx1·gx2 mod p.

Nyt osapuolet ovat alkuperäinen allekirjoittaja A ja valtuutettu B, jotka luovat tällä tavalla B:lle avainparin valtuutetun allekirjoituksia varten. Valtuutetun yksityinen avain (xP, summamuotoinen) tulee tällöin kokonaan B:n tietoon, eikä A tiedä sitä. Vastaava julkinen avain (yP) voidaan laskea muista tiedoista. (Kahden osapuolen allekirjoituksia ja erityisesti 2Schnorr löytyy Nicolosin ym:n artikkelista Proactive Two-Party Signatures for User Authentication, jossa erityisenä sovelluskohteena on SFS-tiedostojärjestelmä, ks. id=522, jossa on esillä "SFS-RO".)

Wangin artikkeli on hyvin tiivis (4 sivua) ja sisältää muutaman varsin monipolvisen allekirjoitus- ja todennuslaskelman. Artikkelin johdannossa määritellään valtuuskäsitteitä. Sitten esitellään aiempi DYD-protokolla (Dai, Yang & Dong, 2003) ja osoitetaan siinä olevia heikkouksia. Sitä modifioidaan uudeksi protokollaksi em. kahden osapuolen allekirjoituksen avulla. Siihen otetaan mukaan myös ns. ’warrant’-kenttä eli valtuuskirja, jonka mukaisesti valtuutetun allekirjoitus voi koskea muitakin kuin yhtä määrättyä dokumenttia. Valtuuskirjassa määrätään myös osapuolet, erityisesti todentajat. Lähinnä vain viittamalla aiempiin todistuksiin artikkeli näyttää/väittää uuden protokollan olevan turvallinen. Lopussa on lyhyt maininta verkkokauppaan liittyvästä sovellusmahdollisuudesta.

Wangin artikkeli otetaan mukaan kurssille, mutta sitä ei tarvitse ruotia ytimiä myöten. Sen sijaan pitäisi oppia näkemään kokonaisuutta kaavojen takaa ja kaavoistakin niiden rakennetta. Lisäksi pitäisi pystyä muodostamaan arvioita turvallisuusargumenttien luonteesta, protokollan tehokkuudesta (jota artikkeli ei analysoi) sekä yleisestä soveltuvuudesta. Viimeksi mainittuun vaikuttaa mm. se, että vaikka C olisi jälleenmyyjä B:n asiakas, tuottaja A tarvitsee tiedon C:stä. Aiemmasta DYD-protokollasta poiketen Wangin protokolla ei edellytä, että A soveltaisi C:n julkista avainta. Jää siis arvioitavaksi myös, missä määrin uusi protokolla on A:n kannalta tyyppiä "designated verifier".

Artikkelin kaavoihin tutustuessa täytynee ainakin seuraavat symbolit opetella tilapäisesti ulkoa, koska ne toistuvat pitkin matkaa:

Näistä kaikki muut paitsi avainpari (xP, yP) ovat systeemiparametreja eli ne ovat lähtökohtina jo olemassa. Tavallaan myös valtuuskirja Mw on sellainen protokollan kannalta, sillä sen sisältöön ei oteta kantaa.

Uusi protokolla tuottaa varsinaisen allekirjoituksen samalla tavalla kuin DYD-skeema. Valtuuskirjan ohella uudistusta on siis vain proxy-avainten luonti. Se tapahtuu luomalla 2Schnorr-allekirjoitus valtuuskirjalle. Tällaisen allekirjoituksen todentaminen tapahtuu tavallisella Schnorr-todennuksen yhtälöllä ja artikkelin esittely lähtee liikkeelle juuri siitä (yhtälöstä (5)). Valtuutetun avainpari ei tietenkään ole sama kuin 2Schnorr-allekirjoitus, mutta yksityinen avain xP on allekirjoituksen toinen puolikas.

Uusia erikoisuuksia?

Kun alussa todettiin, että allekirjoituksen sokeutus on jo perinteistä tekniikkaa, niin mitä pitäisi sanoa sen yhdistelemisestä muihin menettelyihin? Yhdistelmä valtuusallekirjoitukseen päästää mm. pankin sivukonttorit (eli valtuutetut) allekirjoittamaan bittikäteistä. Tällaisen mahdollisuuden tarjoaa artikkeli Amit K. Awasthi, Sunder Lal: Proxy Blind Signature Scheme (Transaction on Cryptology, vol.2, no.1, pp.5--11, Jan 2005, alunperin vuodelta 2003). Tämän kurssin opiskelijat voivat tietysti kehitellä sellaisen version, jossa mukana on 'designated verifier'. Sitä varten pitäisi ilmeisesti kehitellä samalla jokin muu sovellus, sillä sokeutuksen ideaan ei oikein sovi, että maksun vastaanottaja pitäisi mainita bittiseteliä ostettaessa.

Sensoriverkon solmuissa on heikko laskentateho ja niiden joukossa voi olla vallattujakin solmuja. Kolmannessa luennossa mainittua autentikointipuuta soveltaen tähän on kehitelty tehokas joidenkin solmujen yhdessä tekemä allekirjoitus: Seys, Preneel: Efficient Cooperative Signatures: A Novel Authentication Scheme for Sensor Networks, 2005.

Erikoisten sovellusten laatijoille on tarjolla runsaasti variaatioita, joista kaikkia ei ole vielä tutkittu. Zhengjun Cao on jaotellut allekirjoituksen peruspiirteitä ja todennut yhdistelmiä olevan 21140 kappaletta (Classification of Signature-only Signature Models 2006). Peruspiirteiksi hän otti nämä viisi:

  1. allekirjoittaja; allaoleviin perusluokkiin syntyy alaluokkia sen mukaan toimiiko allekirjoittaja yksin, yhtenä ryhmässä, yhdessä (eli kaikki ryhmästä) vai kynnysmekanismilla (eli osajoukkona ryhmästä)
  2. todentaja; perusluokkien alaluokkia muodostuu vastaavalla tavalla kuin edellä, joskin "yksin" jakautuu tapauksiin "kuka vain" ja "määrätty" ("designated"). Lisäksi alaluokkia muodostuu siitä, pystyykö todentaja osoittamaan kolmennelle osapuolelle. Perusluokat määräytyvät todentavan tahon itsenäisyydestä:
  3. viestin näkyvyys allekirjoittajalle. Mikäli hän ei näe sitä, on useita mahdollisuuksia täydestä sokeudesta ja linkittämättömyydestä alkaen. Osa viestistä voi olla näkyvissä tai viestin muoto voi olla määrätty. (9 luokkaa)
  4. todennusavain on joko tavalliseen tapaan autentikoitava tai se johdetaan allekirjoittajan identiteetistä.
  5. allekirjoitusavaimen päivitys joko vaatii tavanomaiseen tapaan todennusavaimen päivityksen tai sallii osan säilyttämisen. Jälkimmäinen on uudehko mahdollisuus, jossa ajoittaisilla päivityksillä voidaan välttää paljastuneen avaimen haittoja: Bellare, Miner: A forward-secure digital signature scheme 1999.
Alaluokkia muodostui kaikkiaan 69, pääluokittain 27, 29, 9, 2 ja 2. Kaikki näiden kombinaatiot eivät ole edes periaatteessa mahdollisia, sillä kahdessa viimeisessä pääluokassa molemmat eivät voi olla epätavanomaisia. Siksi periaattellisia yhdistelmiä on vain 21141 (=27·29·9·3, vaikka artikkelissa tosiaan puhutaan 21140:stä). Enemmänkin rajauksia pitäisi varmaan tehdä, sillä esim. sokeutus ja todentajien määrääminen eivät välttämättä sovi yhteen, kuten Wangin protokollan yhteydessä jo mainittiin.

Cao on löytänyt kirjallisuudesta ison joukon sovelluksia ja sijoittaa niitä malliinsa. Vain yksi on sellainen, että useammassa kuin kahdessa pääluokassa valitaan tavanomaisesta allekirjoituksesta poikkeava järjestely.

Nollatiedosta

Nollatieto tarkoittaa protokollien yhteydessä sitä, että toinen osapuoli voi vakuuttavasti osoittaa toiselle tuntevansa ratkaisun johonkin ongelmaan antamatta tälle vähääkään tietoa, jolla tämä itse voisi löytää ratkaisun (sen olemassaoloa lukuunottamatta). Matemaattisen kryptologian kurssilla käsitellään kahta esimerkkiä. Ensimmäisessä ongelmana on neliöjuuri modulo n, missä n on kahden alkuluvun tulo. Joka tuntee tekijät, voi laskea annetun luvun neliöjuuren, jos sillä on sellainen (eli se on neliön jäännös eli toinen potenssi modulo n). Hän voi nollatietoprotokollalla osoittaa tuntevansa neliöjuuren kertomatta sitä todentajalle. Toinen protokolla koskee NP-täydellistä ongelmaa, onko graafissa Hamiltonin sykliä vai ei. Kryptologian kurssilla käsitellään näiden esimerkkien avulla mm. eriasteisia vaatimuksia nollatiedon täydellisyydelle. Muita tunnettuja esimerkkejä ovat graafien isomorfismi ja Ali Baban luolan salasana.

TTJ:ssä (id=65) on esillä Feige-Fiat-Shamirin autentikointiprotokolla, jossa todistaja osoittaa todentajalle tuntevansa yksityisen avaimensa, joka sekin on julkisen avaimen eräänlainen neliöjuuri. Protokollassa noudatetaan nollatietotodistuksille tavallista periaatetta "sitoutuminen-haaste-vaste", joka on sovellus "cut and choose" -periaatteesta. Se on arkinenkin reilun jaon aikaansaamisen menetelmä (toinen leikkaa kakun puoliksi ja toinen valitsee).

Lisätietoa: Helger Lipmaan linkkisivu. Uusia nollatietoprotokollia löytyy kokeilutoteutuksinakin (W.Teepe: New Protocols for Proving Knowledge of Arbitrary Secrets While not Giving Them Away, 2004). Protokollia käsittelevä artikkeli mainitsee sovelluksena Hollannin poliisin hankkeen rikostutkinnan päällekkäisten kohteiden selvittämiseksi. Kyseessä on pohjimmaltaan monen osapuolen laskenta ja operaationa AND.

Monen osapuolen laskenta korttipelinä

Jos käytössä ei ole luotettavaa kolmatta osapuolta eikä edes tietokonetta, salattua laskentaa voidaan toteuttaa pelikorteilla. Niillä voi selvittää esim. sen, antavatko sokkotreffit aihetta enempään (siis kahden bitin and-operaation).

Vaikka kortteihin on merkitty numeroita ja värejä, laskennassa on tyydyttävä binääriseen aritmetiikkaan, eli Boolen funktioihin. Niitä toteutetaan yksi looginen portti kerrallaan siten, että syötteitä on kaksi ja tuloksia yksi. Negaatiossa luonnollisesti on vain yksi syöte. Lisäksi tarvitaan bitin monistusta, jolloin yhdestä syötteestä saadaan kaksi samanlaista tulosta.

Korttilaskentaan on erilaisia mekanismeja. Tässä esitettävä perustuu artikkeliin V.Niemi, A.Renvall: Solitaire Zero Knowledge (1999). Nimensä mukaisesti artikkeli esittelee myös, miten pasianssia pelaamalla voi esittää nollatietotodistuksen, nimittäin sille, että pelaaja tietää jonkin bittikombinaation, jolla tietty Boolen funktio saa arvon 1. Tähän ei mennä syvemmälle, vaan katsotaan laskennan periaatetta.

Yhden bitin koodaamiseen tarvitaan kaksi korttia ja muissa operaatioissa paitsi negaatiossa ja XOR:ssa tarvitaan muutama apukortti. Operaatio suoritetaan bittien ja apukorttien muodostamassa pakassa, jota käsiteltäessä vain korttien selkäpuolet ovat näkyvissä. Pakassa olevien korttien arvot tiedetään, mutta ei järjestystä. Käsittelyn ohjaamiseksi katsotaan ajoittain yhden kortin arvo. Kryptologisena operaationa on pakan nostaminen eli leikkaaminen. Tämä voidaan toteuttaa esim. siten, että kukin pelaaja nostaa pakkaa näyttämättä toisille, montako korttia hän siirtää.

Useassa tapauksessa pakasta halutaan poistaa jokin kortti. Tämä voidaan tehdä toistamalla nosto kunnes päällimmäisenä on haettu kortti. Kunhan nostojen välillä ei katsota enempää kuin yhtä korttia, muiden korttien järjestyksestä ei silloin tiedetä mitään uutta.

Koodaus ja laskenta edellyttävät, että korteille on määritelty suuruusjärjestys. Tässä riittää tarkastella tietyn maan kortteja, jolloin järjestys on luonnollinen 1,2,...,13. Bitti nolla koodataan siten, että pienempi kortti on suuremman päällä (kun siis selkäpuoli on ylöspäin). Ykkösbitissä järjestys on toisinpäin. Tästä nähdään heti, että negaation muodostaminen on erittäin yksinkertaista, vaikka bittiä ei tunnettaisi.

Kahden bitin x ja y välisiä operaatioita varten oletetaan, että syötteinä on kortit a, A, b ja B, missä a<A<b<B. Seuraavissa taulukoissa pakat on lueteltu ylhäältä lukien, siis vasemmanpuoleinen kortti on päällimmäinen kun selkäpuoli on ylöspäin.

AND
Jos x-bitti on koodattu korteiksi x1x2 (= aA tai Aa, eli "alfa"-kortit) ja y-bitti korteiksi y1y2 (= bB tai Bb, eli "beta"-kortit), limitetään nämä pakaksi x1y1x2y2 ja lisätään päällimmäiseksi lisäkortti '-', kuten taulukosta ilmenee.

Poistetaan A ja b eli arvoltaan keskimmäiset bittikortit pakasta ja siirretään lisäkortti '-' päällimmäiseksi. Lopputulos näkyy taulukosta. Kun siitä poistetaan päällimmäinen kortti jäljellä olevat bitit koodaavat AND-operaation oikean tuloksen.

     kort-       pakka  
x y  teina   alussa lopussa tulos
---------------------------------
0 0  aA bB   -abAB   -aB     0
0 1  aA Bb   -aBAb   -aB     0
1 0  Aa bB   -AbaB   -aB     0
1 1  Aa Bb   -ABab   -Ba     1
OR
OR-operaatio on AND:n duaali Boolen algebrassa. Se tarkoittaa mm. sitä, että Boolen algebraa vastaavassa hilassa AND ja OR saadaan toisistaan peilaamalla pystyakselin suhteen. Vastaavasti korttipeli-OR saadaan AND:sta vaihtamalla isommat beta-kortit niitä pienempien alfa-korttien paikalle. Tämä tarkoittaa siis syötebittien järjestyksen vaihtamista. Tämä ei tarkoita, ettei x AND y olisi sama kuin y AND x, vaan sitä, että looginen "korttiportti" ei ole vaihdannainen.
     kort-       pakka  
x y  teina   alussa lopussa tulos
---------------------------------
0 0  aA bB   -baBA   -aB     0
0 1  aA Bb   -BabA   -Ba     1
1 0  Aa bB   -bABa   -Ba     1
1 1  Aa Bb   -BAba   -Ba     1
AND:n ja OR:n muistisääntönä voi ajatella, että lisäkortin jälkeen aloitetaan pienemmällä (AND) tai isommalla (OR) sen mukaan kumpaa tulosta operaatio "suosii", ja lopputulos näkyy "korostetusti" siitä, että korttien numeroero on suurin mitä syötteistä saadaan aikaan.
XOR
XOR on symmetrinen ja sen "korttiportti" onkin yksinkertaisempi kuin AND:n ja OR:n. Lisäkorttia ei tarvita. Alkupakka on muuten samanlainen kuin AND:ssa. Operaationa on poistaa pakasta b (toiseksi suurin kortti) ja siirtää päällimmäiseksi B.
     kort-       pakka  
x y  teina   alussa lopussa tulos
---------------------------------
0 0  aA bB   abAB    BaA     0
0 1  aA Bb   aBAb    BAa     1
1 0  Aa bB   AbaB    BAa     1
1 1  Aa Bb   ABab    BaA     0
Jos merkkikortiksi jätettäisiin B:n sijasta A (eli a poistettaisiin), sen alle jäävät beta-kortit koodaisivat XOR:n negaation eli ekvivalenssin. Pelkkä XOR tai ekvivalenssi eivät ole tietenkään kiinnostavia salatun laskennan kannalta, koska tulos paljastaa vastapuolen syötteen.
Kopiointi
Moniporttisen Boolen funktion laskennassa voidaan tarvita samaa syötebittiä moneen kertaan. Edellä olevissa binäärisissä operaatioissa alkuperäinen bitti kuitenkin katoaa. Tarvitaan siis myös bitin monistamista.

Kopiointioperaation tarkoituksena on muuttaa uudet beta-kortit koodaamaan sama bitti kuin syötteenä olevat alfa-kortit eli aA tai Aa, joiden järjestystä ei tiedetä. Beta-korttien ei nyt tarvitse olla suurempia kuin alfojen, mutta edelleen tietysti b<B. Aluksi beta-kortit sekoitetaan. Pakan päällimmäiseksi tulee lisäkortti '-', sen alle alfat, sitten toinen lisäkortti '+' ja alimmaksi betat. Pakka on tässä vaiheessa siis yksi seuraavista:

-aA+bB 
-aA+Bb 
-Aa+bB 
-Aa+Bb 
Nostetaan pakkaa, kunnes päällimmäisenä on jokin bittikortti. Katsotaan sen lisäksi pinon neljäs kortti. Se on toisen bitin koodauksessa vastaava kortti kuin pinon päällimmäinen. Tästä tiedetään, ovatko bitit jo alunperin samat vai edustavatko beta-kortit alfa-korttien komplementtia. Jotta bitit saadaan talteen, palautetaan pakkaa alkuperäiseen järjestykseen, eli nostetaan, kunnes päällimmäisenä on '-'. Jos sitä ennen päällimmäiseksi osuu '+', niin tietenkin voidaan nostaa deterministisesti vielä kolme korttia. Nyt pakasta voidaan poimia alkuperäiset alfa-kortit sekä beta-kortit, jotka joko sellaisenaan tai vaihdettuina koodaavat saman bitin kuin alfa-kortit.