Oppikerta 6, 16.2.1999
(1) Abadi-Needhamin artikkelin käsittely jatkuu. (2) Sen jälkeen
lisää sääntöjä protokollien suunnitteluun Andersson-Needhamin artikkelista.
(3) Lopuksi tiivistä allekirjoitusasiaa (jota tosin jatketaan vielä
myöhemminkin)!
(1) Abadi-Needham (jatko)
Käsitellään esimerkit: 3.1 (Denning-Sacco), 3.4 (varhainen SSL), 5.1
(X.509) & 5.2 sekä 9.1 (Needham-Schroeder). Lopuksi vielä 3.2
(Woo-Lam), jossa kertautuu useampi periaate.
(2) Julkisen avaimen protokollien erityispiirteitä
Suosituksia Anderssonin ja Needhamin artikkelista:
- Allekirjoita ennen salausta (Abadi-Needhamin 5. periaate)
- Ole perillä siitä, mikä (avaintieto) erottaa oliot toisistaan.
Saman avaimen käyttöä eri tarkoituksiin kannattaa välttää. Saman
protokollan eri ajot pitää voida erottaa.
- 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.
- 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.
- Älä oleta kenenkään muiden "salaisuuksien" olevan salaisia -
lukuunottamatta varmenneviranomaista (johon tyypillisesti pitää voida
luottaa).
- Älä oleta saamasi viestin olevan mitään erityistä muotoa,
ellet voi tarkistaa tätä.
- Kryptoprimitiivien (parametrien) rajat pitää selvittää:
montako avainta tietyllä algoritmilla kannattaa enintään generoida,
kuinka suuren salaliiton kynnysprotokolla sallii,
montako blokkia tietyllä algoritmilla voi salata.
- 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.
(3) Lisää allekirjoituksesta
Otetaan esille
- peruskäsitteiden luokittelua.
- joitakin uusia esimerkkejä allekirjoitusalgoritmeista
- erityistilanteita ja niihin soveltuvia allekirjoituksia (ei tällä
kerralla).
Luokitusta
Allekirjoitusten perusluokitukset:
- voidaanko koko viesti purkaa allekirjoituksesta
(viestinpalautus, 'message recovery': RSA, Rabin, Nyberg-Rueppel):
vai onko allekirjoitus viestin liite ja itse viesti tarvitaan
todennuksessa ('appendix': DSA, ElGamal, Schnorr, Feige-Fiat-Shamir,
Guillou-Quisquater)
- onko allekirjoitus deterministinen vai satunnaistettu (=samasta
viestistä voi samoilla avaimilla eri kerroilla tulla eri allekirjoitus)
Deterministisiä systeemejä on kahta lajia: kertakäyttöiset ja
monikertakäyttöiset (jotka ovat tavallisimpia).
Systeemiä, jossa viestin palautus on mahdollinen, voidaan käyttää samaan
tapaan kuin liiteallekirjoitusta (ja usein näin tehdäänkin).
Jos näin ei tehdä, tarvitaan sellaista muunnosta, jolla viestiin
lisätään redundanssia ennen allekirjoitusta (esim. viesti toistetaan eli
M:n sijasta onkin MM). Tällöin verifioija tuleekin
palauttaneeksi ensin redundantin viestin ja hyväksymiskriteerinä toteaa
onko redundanssi sellaista kuin pitääkin ja vasta sitten suorittaa
käänteismuunnoksen alkuperäiseksi viestiksi. Redundanssifunktioita
esitellään hieman myöhemmin.
ElGamal ja Rabin allekirjoittajina; DSA
ElGamalin salausalgoritmi ei ole kommutatiivinen, mutta vastaava
allekirjoitusalgoritmi on hyvin samanlainen kuin salausalgoritmi.
Lähtökohta suuri alkuluku p (diskreetti log modulo p vaikea),
julkinen satunnaisluku g (p ja g voivat olla
yhteisiä usealle käyttäjälle) sekä yksityinen satunnaisluku x.
Lasketaan
y = gx(mod p)
ja julkiseksi avaimeksi otetaan kolmikko (y,g,p), salainen avain on x.
Viestin M allekirjoittaminen:
- valitaan salassa pidettävä satunnaisluku k, syt(k,p-1)=1
- lasketaan a = gk(mod p)
- ratkaistaan sellainen luku b että M = x*a + k*b (mod p-1). Tämä
tapahtuu laskemalla b = k-1(M-x*a) (mod p-1), missä k:n käänteisluku
modulo p-1 on olemassa koska k on suhteellinen alkuluku mod p-1.
- allekirjoitus on (a,b) (joka on kaksi kertaa viestin mittainen)
Allekirjoituksen todentaminen: annettu viesti M ja sen väitetty
allekirjoitus (a,b). Tarkistetaan, toteutuuko
ya*ab(mod p) = gM(mod p).
Vastaavasti Rabinin julkisen avaimen salausalgoritmista saadaan
allekirjoitusalgoritmi: allekirjoitus on oleellisesti viestin neliöjuuri.
Sen pystyy laskemaan vain osapuoli, joka tuntee modulin n tekijät p ja q.
DSA on DSS-standardin käyttämä algoritmi, joka muistuttaa ElGamalin
allekirjoitusta, mutta parametrien valinta tehdään Schnorrin periaatteiden
mukaan (1991, -93, -96)
- valitse 160-bittinen alkuluku q.
- valitse sellainen 521-1024 -bittinen alkuluku p, että (p-1)/q menee
tasan.
- valitse satunnainen h ja laske g = h(p-1)/q mod p
(Jos tulos olisi = 1 valitse uudestaan)
- valitse satunnainen k ja laske y = gk mod p.
- Julkinen avain on nelikko (p,q,g,y).
Viestin M allekirjoittaminen (H on tiivistefunktio):
- valitaan salassa pidettävä satunnaisluku k, 0<k<q.
- lasketaan a = ( gk mod p ) mod q, ts. redusoidaan ensin p:n
suhteen ja sitten vielä q:n suhteen.
- lasketaan b = k-1(H(M)+x*a) mod q.
- allekirjoitus on (a,b)
Allekirjoituksen todentaminen: annettu viesti M ja sen väitetty
allekirjoitus (a,b), jossa 0<a,b<q. Tarkistetaan, toteutuuko
(gu*yv mod p) mod q = a,
missä u = H(M)*b-1 mod q ja v = a*b-1 mod q
Fiat-Shamirin algoritmissa suoritetiin nollatietotunnistus käyttäen
periaatetta "sitoutuminen-haaste-vaste". Korvaamalla todentajan lähettämä
haaste viestistä laskettavalla tiivisteellä saadaan aikaan
allekirjoitusalgoritmi (Feige-Fiat-Shamir). Sama muunnos toimii muissa
vastaavissa nollatietoalgoritmeissa.
Luettavaksi: M. Burrows, M. Abadi, R.M. Needham:
A logic of authentication. ACM Transactions on Computer Systems, 8(1),
Feb 1990, 18-36. Tämä on 19-sivuinen julkaisu. Täysi 50-sivuinen
raportti löytyy verkosta PS:nä.