A valitsee satunnaisluvun r ja lähettää B:lle luvun rem mod n. B allekirjoittaa tämän eli laskee luvun (rem)d mod n, ja palauttaa sen A:lle. Koska tämä luku on sama kuin rmd, A saa haluamansa jakamalla tämän r:llä.
Yhtenä sovelluksena on myös anonyymi elektroninen käteinen, josta hieman lisää myöhemmin.
Miten vaali voitaisiin järjestää tietoverkon avulla? Tutustu yhdysvaltalaiseen äänestysdemonstraatioon, jossa mallina on Coloradon Boulderin piirikunnassa tietyllä äänestysalueella marraskuussa pidettävä vaali. Siinä kysytään kaikenlaista, jollaiseen suomalaisessa yhteiskunnassa ei ole totuttu. Muutama usein esiintyvä termi: Contest = äänestyksen aihe ("kisa"), jossa on valittavana eri vaihtoehtoja. Ballot = vaalilippu, oleellisesti tietorakenne, johon valinnat merkitään. Tallying = äänten (keräys ja) laskenta.
Demon alussa vaaditaan käyttäjätunnus ja salasana, joilla äänestäjä yksilöidään. Niiden jakelua demossa ei selitetä, mutta järjestelmä voisi olla sama kuin Suomessa ilmoitus äänioikeudesta, joka lähetetään postitse. Tässä järjestelmässä äänestämiseen ei kuitenkaan tarvita muuta osoitusta henkilöllisyydestä eli autentikointi kuuluu luokkaan heikko. Demossa tunnuksen ja salasanan voi tietenkin valita satunnaisesti.
Sama ohjelma, palvelin, vastaanottaa tiedot sekä äänestäjästä että hänen antamistaan äänistä. Äänestäjälle vakuutellaan seuraavasti: "Is my vote anonymous? Yes. Once you cast your vote, there is no record kept to tie your vote to your name. Your ballot is submitted anonymously to the tallying machine which records your votes." Mitä perusteita on luottaa tähän?
Äänestyksessä, toisin kuin useissa muissa protokollissa, esim. viime kerralla mainitussa avaintenhallinnassa, joudutaan rajoittamaan luotetun osapuolen roolia. Tätä ei jouduta tekemään suorituskyky- tai saatavuusvaatimusten vaan tietojenkäsittelyn uskottavuuden takia: mikään osapuoli ei saa edes periaatteessa tietää yksilöiden äänestyskäyttäytymistä. On tosin olemassa (pieneen mittakaavaan sopivia) hajautettujakin äänestysprotokollia, mutta etsitään nyt kuitenkin sellaista protokollaa, jossa on jonkinlainen keskus, vaaliviranomainen, joka kerää äänet laskentaa varten. Samalla joudutaan siis olettamaan, että se ansaitsee äänestäjien tietyntasoisen luottamuksen. Se ei esimerkiksi myy käyttämättä jääneitä vaalilipun elektronisia vastineita.
Äänestys selvästikin vaatii äänestäjän yksilöinnin jossain vaiheessa, mutta sen ei välttämättä tarvitse toteutua vielä ääniä kerättäessä. Riittää, jos se toteutuu äänten laskennassa, kunhan huijareiden takia ei tarvitse uusia koko prosessia. Yksilöinnin lähtökohtana täytyy olla jonkinlainen rekisteröinti, eli liittyminen tai pääseminen äänioikeutettujen joukkoon. Tässä vaiheessa kunkin yksilön pitää saada haltuunsa jotain sellaista "omistettua" tai "tiedettyä", jota kukaan muu ei voi kopioida eikä muuttaa (seurauksitta). "Jotain omistettua" vastaa perinteisesti vaalivirkailijan antama vaalilippu, joka on äänestäjän kädessä. Koska nyt puhutaan sähköisesti välitettävästä tiedosta, mitään omistettua ei voida pudottaa mihinkään vaaliuurnaan, vaan joudutaan jossain vaiheessa siirtymään "johonkin tiedettyyn". (Vai voisitko kuvitella, että lyijykynämerkinnät karistetaan uurnaan taitetun vaalilipun välistä?)
Äänestäjälle annetaan jotain sellaista yksilöllistä tietoa, jolla hän pystyy osoittamaan antamansa äänen tavalla tai toisella oikeaksi, mutta se on tehtävä niin, että ääntä ja yksilöä ei voi kytkeä toisiinsa. Allekirjoitus ei siis tule kysymykseen ainakaan normaalissa merkityksessä, joka on juuri kytkentä. Lisäksi äänestäjän haltuun ei saisi mielellään jäädä mitään sellaista, joka kytkee hänet annettuun ääneen siinä määrin, että hän pystyisi osoittamaan mitä/ketä hän äänesti. Tällä estettäisiin se, ettei hän voi (niin helposti) myydä ääntään ja varsinkin se ettei häntä voida valvoa tai pakottaa. Jotkin ns. kuitittomat protokollat kiinnittävät erityishuomion tähän, ja paperinen vaalilippuhan irtoaa aikanaan kädestä ja sekoittuu muihin. Jatkossa tämä asia jää kuitenkin vähemmälle huomiolle.
Pohdittavaksi tässä vaiheessa: Äänestäjä ei siis voi ääntä antaessaan käyttää salaista tietoaan allekirjoitukseen, mutta voisiko edellä luonnosteltua tavoitetta kuitenkin lähestyä allekirjoituksen keinoin jostain aivan muusta näkökulmasta? Auttaisiko sokea allekirjoitus tässä ja kuka muu voisi olla allekirjoittajana kuin äänestäjä?
Keskusjohtoisen äänestysprotokollan perusvaiheet ovat ilmeisesti:
Oletetaan, että voidaan luottaa siihen, että kelpuuttaja (=validoija) ja äänten kerääjä eivät toimi yhdessä. Edellinen voi kyllä samalla olla rekisteröijä ja jälkimmäinen saa hoitaa laskennan. Järjestetään vaali seuraavasti:
Tehdään seuraava muunnos: äänestäjät lähettävätkin äänensä salattuna itse valitsemillaan symmetrisillä avaimilla. Kerääjä julkaisee luettelon näistä salatuista äänistä. Hän ei ole voinut tehdä mitään järkeviä muutoksia niihin. Määräajan mentyä umpeen äänestäjät lähettävät avaimensa, kerääjä purkaa salaukset ja julkaisee äänet. Äänestäjät voivat nyt tarkistaa ääntenlaskun ja sen, että oma ääni on mukana listassa (kelpoisuusmerkistä lasketun hash-arvon rinnalla). Oikaisuvaatimus on mahdollista toteuttaa nimettömänä.
Lähtökohtana ollut oletus kelpuuttajan ja kerääjän riippumattomuudesta ei valitettavasti ole yleensä realistinen. Jätetään se siis tekemättä ja pyydetään kelpuuttajalta sellainen kelpoisuusmerkintä, joka osoittaa äänioikeuden, mutta ei yksilöi äänestäjää. Toisin sanoen kelpuuttajalle lähetetään omalla nimellä varustetussa sinetöidyssä kuoressa tyhjä äänestyslippu, johon kelpuuttaja lyö kuoren läpi kelpoisuusleiman ja palauttaa äänestäjälle, joka avaa kuoren, merkitsee äänensä lippuun ja lähettää sen kerääjälle. Digitaalisessa maailmassa kelpuuttajan operaatio voidaan toteuttaa sokealla allekirjoituksella, mutta teknisten yksityiskohtien vuoksi äänestysmerkinnän pitää siinä vaiheessa jo olla tehtynä - ei mikään ongelma. Tällainen on Fujioka-Okamoto-Ohta-tyyppinen vaaliprotokolla (1993).
On toinenkin mahdollisuus saada kelpuuttajalta henkilökohtainen äänestykseen oikeuttava merkintä, jota ei silti voi kytkeä henkilöön. Ratkaisu on turkulainen (Nurmi, Salomaa, Santean) ja se perustuu edellä esiteltyyn ANDOS-ideaan, jonka toteutus tosin on melko kompleksinen. Tarvitaan nimittäin hyvin suuri salaisuuksien avaruus, josta kukin äänestäjä "ostaa" itselleen yhden kelpoisuusmerkin, joka on eri kuin kenelläkään muulla (hyvin suurella todennäköisyydellä).
Kummassakin näistä protokollista on ongelmana se, että vaaliviranomainen voi äänestää niiden puolesta, jotka jättävät äänestämättä. Yksi mahdollisuus vähentää tätä riskiä on edellyttää ilmoittautuminen rekisteröintivaiheessa ja julkaista ilmoittautuneiden lista. Äänestysprosentti suhteessa tähän listaan on todennäköisesti korkea. Jos äänestämättä jättämisen sijasta jokainen antaisi edes tyhjän äänen, ongelmaa ei olisi.
Digitaalinen maailma tarjoaa paitsi uudenlaisia ongelmia myös ennenarvaamattomia mahdollisuuksia: Olkoon f yksisuuntainen funktio ja s äänestäjän valitsema argumentin arvo. Lähettämällä äänen ja kelpoisuusmerkin mukana arvo f(s) saadaan aikaan mahdollisuus vaihtaa ääni toiseksi yksityisyyden kärsimättä. Äänen vaihtaminen toteutuu yksinkertaisesti lähettämällä vanha ääni, uusi ääni, s ja f(s'), missä s' on uusi satunnainen luku.
Fujioka-Okamoto-Ohtan protokollan läheinen muunnos on toteutettu Sensus-järjestelmässä, joka oli diplomityötä vastaava projekti. Sitä ei enää ylläpidetä, mutta sen voi edelleen ladata vuodelta 1996 peräisin olevilta sivuilta. Tässä järjestelmässä äänestäjän ei tarvitse odottaa kryptattujen äänten julkaisemista, vaan hän saa kuitin, jonka perusteella hän tietää äänensä tulleen "kuuluville" ja voi heti lähettää purkuavaimen. (Kuitti on oleellisesti sama kuin kryptattu ääni, joten ero pieni, mutta tekee järjestelmästä käytännöllisemmän.)
Tarkempaa tietoa, myös muista protokollista, löytyy mm. artikkelista L.F.Cranor, R.K.Cytron: Sensus: A Security-Conscious Electronic Polling System for the Internet (Proc. of the Hawai`i International Conference on System Sciences, Jan 7-10, 1997). Lisätietoja löytyy Cranorin ylläpitämältä elektronisen äänestyksen linkkisivulta.
Avainten jakelu tapahtuu "ruohonjuuritasolla": varmenneviranomaisten sijasta luotetut esittelijät ('introducers') toimivat avainten varmentajina. Jokaisella käyttäjällä on omassa käytössään avainrengas, jossa on
PGP:n algoritmeja ovat:
Kryptologisesti vaativampi mutta käsitteellisesti yksinkertaisempi puoli
PGP:tä on sen varsinainen toiminta, josta seuraavassa esitellään miten
osapuolen A viesti osapuolelle B muodostetaan. Merkintöjä:
Z = ZIP = tiivistys
H = hash = yksisuuntainen tiivistys
EK = kryptaus avaimella K
|| = katenaatio
Ks = istuntoavain, symmetrinen, joka viestille omansa. Avaimen
luonnissa käytetään näppäinpainalluksia ja niiden ajoitusta, eräänlaisena
satunnaistavana siemenlukuna, nimittäin osana syötettä IDEA-algoritmille.
Osapuolella B on avainrenkaassaan muiden tahojen julkisia avaimia ja kullekin niistä yksi tai useampia allekirjoituksia (sertifikaatteja) kolmansilta tahoilta. Katsotaan, mitä tietoja esiintyy osapuolen A kohdalla.
PGP laskee avaimeen KA liittyvään "pätevyys"-tietokenttään ('key legitimacy'): arvion sille, missä määrin B voi luottaa siihen, että kyseessä on A:n julkinen avain. Pätevyyttä on kolmea tasoa: ei luottamusta, marginaalinen ja täysi luottamus; lisäksi määrittelemätön ja tuntematon.
Jos avainrenkaassa on tahon C allekirjoitus avaimelle KA, PGP liittää (kopioi) siihen tiedon ('signature trust'-kentän), missä määrin B luottaa C:n kykyyn/rehellisyyteen (tms.) tuottaa tällaisia allekirjoituksia. Tässä on neljä tasoa: yleensä ei luotettava, yleensä luotettava, aina luotettava, äärimmäisen luotettava (jolloin C=B), lisäksi määrittelemätön ja tuntematon.
Jos taho C ei ole tuntematon, niin C:n julkinen avain kuuluu B:n avainrenkaaseen. Tällöin samainen B:n luottamus C:hen allekirjoittajana esiintyy myös C:hen liitetyssä kentässä 'owner trust' ja siitä PGP on se kopioinutkin (yleensä). Tarkasteltavana olleeseen tahoon A liittyy toki vastaava kenttä, mutta sillä on merkitystä vasta kun B saa A:n allekirjoittamana jonkun muun tahon julkisen avaimen. Erityisesti A:n 'owner trust' ei kerro mitään siitä, miten B luottaa A:n avaimen KA aitouteen.
Tässä mainittujen kolmen tietokentän välillä suoritetaan siis tiettyä automaattista laskentaa:
Avainten peruuttaminen on PGP:n heikoin osa. Avaimelle voidaan määrittää voimassaoloaika ja se ilmenee myös sertifikaatissa. Ennen tämän ajan umpeutumista ainoa peruutuskeino on allekirjoittaa peruutettavalla avaimella peruutusta koskeva ilmoitus ja lähettää se niille osapuolille, joiden arvelee voivan käyttää ko. avainta. Jotta käyttäjä varmasti pystyy laatimaan tämän peruutusvarmenteen ('revocation certificate'), se kannattaa tehdä ja tallettaan aina kun uusi avain on luodaan. Tällöin avain on vielä tallessa ja salauslausekin muistissa.
Tietoturvaohjelmistojen käyttöliittymiä koskien on tehty havaintoja, että kynnys on tavallisille käyttäjille korkea ja että käyttäjän tekemät virheet ovat vähintään osasyy useimpiin tietoturvaongelmiin. PGP:n version 5 käyttöliittymää pidetään yleisesti hyvänä. Silti Whitten ja Tygar tiivistävät käytettävyystutkimuksensa (ks. abstrakti) tulokset seuraavasti: "We conclude that PGP 5.0 is not usable enough to provide effective security for most computer users, despite its attractive graphical user interface, supporting our hypothesis that user interface design for effective security remains an open problem."
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 avainsekvenssi käydään lopusta alkuun.
Valitsemalla erilaisia funktioita f, ja erilaisia 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ä, 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. [AES-tilanteesta raportoiva NIST:n sivu]
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.
Seuraavissa kahdessa moodissa kryptotekstiä tuotetaan r bittiä kerrallaan (esim r=8) ja ne muodostetaan XOR-summana r:stä seuraavasta selvätekstibitistä ja r:stä bitistä, jotka on katkaistu lohkoalgoritmin tuottamasta tuloksesta (vasemmalta). Moodit eroavat siinä, miten lohkoalgoritmia käytetään:
Eri moodeilla on paitsi erilaiset kryptologiset ominaisuudet myös erilainen kyky toipua kryptotekstiin siirron aikana tulleista virheistä.