Lohkoalgoritmien moodit (2-A)

Lohkoalgoritmeja voidaan käyttää yksinkertaisesti salaamalla kukin lohko toisistaan riippumatta. Tätä sanotaan elektroniseksi koodikirjaksi (ECB), eikä sitä ole syytä käyttää kuin hyvin lyhyisiin viesteihin. Koska samanlainen selkotekstilohko tuottaa aina saman kryptolohkon, murtajalle tarjoutuu tilaisuus tilastolliseen analyysiin (siis esim. 64 bitin eli 8 kirjaimen mittaisten tekstinpätkien esiintymisestä). Algoritmi on kuitenkin nopea, koska se on mahdollista rinnakkaistaa.

Yleensä lohkoalgoritmi ketjutetaan tai takaisinkytketään jollain tavoin. Perinteiset menetelmät eli moodit ovat CBC, OFB ja CFB. Kaikissa niistä tarvitaan yhden lohkon mittainen alustusvektori (IV) eli bittijono, joka toimii lohkoalgoritmin ensimmäisenä syötteenä. Sen ei tarvitse olla salainen.

  • CBC, Cipher Block Chaining: edellinen kryptotekstilohko XOR-lisätään seuraavaan selvätekstilohkoon ennen sen kryptaamista. Purku on ilmeinen, sillä "XOR-vähennys" on sama kuin lisäyskin.

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:
  • CFB, Cipher Feedback Mode: lohkoalgoritmin syötteenä on aiempi syöte, josta on katkaistu vasemmalta r bittiä ja liitetty oikealle edelliset r kryptobittiä.
  • OFB, Output Feedback Mode: lohkoalgoritmilla kryptataan alustusvektoria yhä uudestaan.

Lohkoalgoritmi käytettynä OFB-moodissa tuottaa avaimesta ja alustusvektorista oleellisesti avainvirran (key stream), joka XOR-summataan selvätekstin kanssa. Avainvirta on riippumaton selvätekstistä ja voidaan vaikkapa laskea etukäteen. Vaikka IV:n ei tarvitse olla salainen, niin se pitää vaihtaa joka kerta, kun alustusta käytetään eli aina kun uuden viestin kryptaus alkaa (eikä avainta ei ole vaihdettu). OFB-moodissa asia on kriittinen, sillä muuten saadaan sama avainvirta. Yleisempi syy, joka pätee muissakin moodeissa, on se, että eri IV:n ansiosta sama selkoteksti tuottaa erilaisen kryptotekstin.

Eri moodeilla on paitsi erilaiset kryptologiset ominaisuudet myös erilainen kyky toipua kryptotekstiin siirron aikana tulleista virheistä.

Oletetaan, että kryptotekstissä tapahtuu bittivirhe. Mikä vaikutus sillä on purettavaan selvätekstiin eri moodeissa? Kryptotekstissä voi esiintyä kolmenlaisia virheitä: bittejä on muuttunut, hävinnyt tai tullut lisää. Sillä protokollatasolla, jolla kryptausta käytetään, bittimäärän muuttuminen on paljon harvinaisempaa kuin bitin muuttuminen. Virheitä saattaa tosin aiheuttaa myös hyökkääjä, joka yrittää murtaa kryptosysteemiä.

CBC: bitin muuttuminen sotkee kyseisen selvätekstilohkon ja kyseisen bitin seuraavassa lohkossa. Häviäminen tai lisääntyminen sotkee loput selvätekstistä.

CFB: bitin muuttuminen vaikuttaa samaan bittiin selvätekstissä ja sotkee seuraavan lohkon mutta ei enempää. Jos häviö tai lisäys on r:n bitin monikerran mittainen, dekryptaus toipuu heti kun siirtorekisteri on taas täyttynyt oikeilla kryptobiteillä. Jos poikkeaman pituus ei ole r:n monikerta, toipumista ei tapahdu.

OFB: bitin muuttuminen vaikuttaa vain samaan kohtaan selvätekstissä. Häviäminen tai lisääntyminen sotkee loput selvätekstistä.

Lohkoalgoritmista saadaan OFB-moodin avainvirran mukana oikeastaan vuokryptausalgoritmi? . Tällaista vuokryptausta sanotaan synkroniseksi, koska vastaanottajan avainvirran täytyy olla samassa vaiheessa lähettäjän virran kanssa. Voidaan myös muodostaa ns. itsesynkronoivia (eli asynkronisia) systeemejä, jotka siis toipuvat automaattisesti. Tavallisin tällainen systeemi on lohkoalgoritmin CFB-moodi, jossa r=1. Yleinen idea on, että avainvirta riippuu vain tietystä määrästä aiempia kryptotekstibittejä. Näinhän CFB-moodissa juuri on vaikka selvätekstibiteistä kaikki aiemmat vaikuttavat kryptotekstiin.

Bruce Schneier pohdiskelee lohko- ja vuoalgoritmien eroja ja yhtäläisyyksiä kiinnostavasti CryptoGram?-lehdessään tammikuussa 2000. Yhtäläisyyksiä on runsaasti. Hänen mukaansa CFB ja OFB ovat muuten alunperin kuvanneet erityyppisiä vuoalgoritmeja.

Muitakin moodeja? on kuin edellämainitut, sellaisia kuin Offset CodeBook? (OCB) ja Counter (CTR). Jälkimmäinen on CBC-moodin ohella paras useimpiin tarpeisiin.

Jos julkisen avaimen salausalgoritmia jostain syystä käytettäisiin useampaan kuin yhteen salattavaan lohkoon, voidaan siinäkin soveltaa jotain muuta kuin ECB-moodia. Tällöin tässä mainituista vain CBC kelpaa, sillä muiden purkamisessa tarvitaan vain salausavainta!

Harjoitus: Päteekö kaikkiin em. moodeihin seuraava? Jos salausalgoritmia sovellettaessa käytetään joka kerta eri avainta (tai jopa eri algoritmia, jossa on kuitenkin sama lohkokoko), niin salauksen purku onnistuu entiseen malliin, kunhan eri avaimia (algoritmeja) käytetään samassa järjestyksessä.

Harjoitus: CBC-MAC eli CBC-salauksen viimeinen lohko ei sellaisenaan riitä eheyden takeeksi, sillä kahdesta (viesti, cbc-mac)-parista voi yhdistää kolmannen – tuntematta avainta. Olkoon samalla avaimella laskettu (m1, mac1) ja (m2, mac2). Muunnetaan viestiä m2 XOR-aamalla sen ensimmäiseen lohkoon mac1. Mikä on nyt viestistä m1 || m2 laskettu CBC-MAC?

CBC-MAC-ongelman korjaamiseksi on kehitelty muunnelmia. Yksi niistä on CMAC, jonka toinen nimi on OMAC1. Siinä lasketaan CBC-MAC nolla-alustusvektorilla muuten normaalisti mutta viimeiseen viestilohkoon XOR-ataan edellisen kryptolohkon lisäksi avaimesta laskettu arvo. AES-128:aan sovellettuna CMAC löytyy RFC 4493:sta? .

-- JukkaKoskinen?

SivuTiedotLaajennettu edit

Vaativuus Perus
Valmius Valmisteilla
Tyyppi Ydin
Luokitus Uhkat
Mitä Luottamuksellisuus
Miltä Ihmisetön uhka
Missä Organisaatio
Kuka Tite-ammattilainen
Milloin Ennakolta
Miksi Hyvä tapa
Print version |  PDF  | History: r2 < r1 | 
Topic revision: r2 - 26 Sep 2010 - 11:10:28 - MarkoHelenius
 

TUTWiki

Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TUTWiki? Send feedback