In dit hoofdstuk bespreken we de verschillende modi van werking van een blokcijfer. Dit zijn procedurele regels voor een generiek blokcijfer. Interessant is dat de verschillende modi resulteren in verschillende eigenschappen die bijdragen aan de veiligheid van het onderliggende blokcijfer.
Een blokcijfer verwerkt de gegevensblokken van vaste grootte. Gewoonlijk is de grootte van een bericht groter dan de blokgrootte. Daarom wordt het lange bericht verdeeld in een reeks opeenvolgende berichtblokken, en het cijfer bewerkt deze blokken één voor één.
Electronic Code Book (ECB) Mode
Deze modus is een zeer eenvoudige manier om een reeks opeenvolgende berichtblokken te verwerken.
Werking
-
De gebruiker neemt het eerste blok onbewerkte tekst en versleutelt dit met de sleutel om het eerste blok cijfertekst te produceren.
-
Hij neemt vervolgens het tweede blok onbewerkte tekst en volgt hetzelfde proces met dezelfde sleutel, enzovoort.
De ECB-methode is deterministisch, dat wil zeggen dat als een blok platte tekst P1, P2,…, Pm tweemaal met dezelfde sleutel wordt versleuteld, de uiteindelijke cijfertekstblokken dezelfde zullen zijn.
In feite kunnen we voor een gegeven sleutel technisch gezien een codeboek van cijferteksten voor alle mogelijke blokken platte tekst samenstellen. Bij vercijfering zou dan alleen de gewenste klaartekst worden opgezocht en de bijbehorende cijfertekst worden gekozen. De bewerking is dus analoog aan de toewijzing van codewoorden in een codeboek, en krijgt daarom een officiële naam – Elektronische Codeboek-werkwijze (ECB). Het wordt als volgt geïllustreerd –
Analysis of ECB Mode
In werkelijkheid bevatten toepassingsgegevens gewoonlijk gedeeltelijke informatie die kan worden geraden. Bijvoorbeeld het salaris kan worden geraden. Een cijfertekst van de ECB kan een aanvaller in staat stellen de klare tekst te raden door trial-and-error als het klare bericht binnen voorspelbare grenzen ligt.
Als bijvoorbeeld bekend is dat een cijfertekst van de ECB-mode een salariscijfer codeert, dan kan een aanvaller met een klein aantal trials het cijfer achterhalen. In het algemeen willen we geen deterministisch cijfer gebruiken, en daarom moet de ECB-mode in de meeste toepassingen niet worden gebruikt.
Cipher Block Chaining (CBC) Mode
De CBC-mode biedt berichtafhankelijkheid voor het genereren van cijfertekst en maakt het systeem niet-deterministisch.
Werking
De werking van de CBC-mode wordt in de volgende illustratie afgebeeld. De stappen zijn als volgt –
-
Laad de n-bit initialisatievector (IV) in het bovenste register.
-
XOR het n-bit platte tekstblok met de datawaarde in het bovenste register.
-
Encrypteer het resultaat van de XOR-bewerking met het onderliggende blokcijfer met sleutel K.
-
Geef het cijfertekstblok in het bovenste register en ga door met de bewerking totdat alle platte-tekstblokken zijn verwerkt.
-
Voor ontcijfering worden de IV-gegevens ge-XOR-eerd met het eerste ontcijferde cijfertekstblok. Het eerste blok cijfertekst wordt ook ingevoerd in het register dat het IV vervangt om het volgende blok cijfertekst te ontcijferen.
Analyse van de CBC-modus
In de CBC-modus wordt het huidige blok klare tekst opgeteld bij het vorige blok cijfertekst en wordt het resultaat vervolgens gecodeerd met de sleutel. Ontcijfering is dus het omgekeerde proces, waarbij de huidige cijfertekst wordt ontcijferd en vervolgens het vorige cijfertekstblok bij het resultaat wordt opgeteld.
Voordeel van CBC boven ECB is dat verandering van IV resulteert in verschillende cijfertekst voor identiek bericht. Het nadeel is dat de fout in de transmissie bij de ontcijfering wordt doorgegeven aan enkele andere blokken als gevolg van het kettingeffect.
Het is vermeldenswaard dat de CBC-methode de basis vormt voor een bekend authenticatiemechanisme voor de herkomst van gegevens. Deze modus is dus in het voordeel van toepassingen die zowel symmetrische encryptie als authenticatie van de herkomst van de gegevens vereisen.
Cipher Feedback (CFB) Mode
In deze modus wordt elk blok cijfertekst in het encryptieproces “teruggekoppeld” om het volgende blok klare tekst te versleutelen.
Werking
De werking van de CFB-modus wordt in de volgende illustratie weergegeven. In het huidige systeem heeft een berichtblok bijvoorbeeld een grootte van “s” bits, waarbij 1 < s < n. De CFB-mode vereist een initialisatievector (IV) als het aanvankelijke willekeurige n-bit invoerblok. De IV hoeft niet geheim te zijn. De bewerkingsstappen zijn –
-
Laad het IV in het bovenste register.
-
Versleutel de gegevenswaarde in het bovenste register met het onderliggende blokcijfer met sleutel K.
-
Neem alleen ‘s’ aantal meest significante bits (linkerbits) van de uitvoer van het versleutelingsproces en XOR deze met ‘s’ bits blok met onbewerkte tekst om een blok met cijfertekst te genereren.
-
Geef het cijfertekstblok in het bovenste register door de reeds aanwezige gegevens naar links te verschuiven en ga door met de bewerking totdat alle platte-tekstblokken zijn verwerkt.
-
In wezen wordt het vorige cijfertekstblok gecodeerd met de sleutel en wordt het resultaat vervolgens ge-XOR-eerd aan het huidige platte-tekstblok.
-
Dezelfde stappen worden gevolgd voor decryptie. Bij het begin van de ontcijfering wordt een vooraf bepaalde IV geladen.
Analyse van de CFB-modus
De CFB-modus verschilt aanzienlijk van de ECB-modus: de cijfertekst die overeenkomt met een bepaald blok onbewerkte tekst is niet alleen afhankelijk van dat blok onbewerkte tekst en de sleutel, maar ook van het vorige blok cijfertekst. Met andere woorden, het cijfertekstblok is afhankelijk van het bericht.
CFB heeft een zeer vreemde eigenschap. In deze modus ontcijfert de gebruiker de cijfertekst door alleen het vercijferingsproces van het blokcijfer te gebruiken. Het ontcijferingsalgoritme van het onderliggende blokcijfer wordt nooit gebruikt.
Het lijkt erop dat de CFB mode een blokcijfer omzet in een soort stroomcijfer. Het vercijferingsalgoritme wordt gebruikt als key-stream generator om een key-stream te produceren die in het onderste register wordt geplaatst. Deze sleutelstroom wordt dan ge-XORed met de klare tekst zoals bij een stroomcijfer.
Door een blokcijfer om te zetten in een stroomcijfer biedt de CFB mode enkele van de voordelige eigenschappen van een stroomcijfer terwijl de voordelige eigenschappen van een blokcijfer behouden blijven.
Aan de andere kant wordt de transmissiefout verspreid door het veranderen van blokken.
Output Feedback (OFB) Mode
Hierbij worden de opeenvolgende outputblokken van het onderliggende blokcijfer teruggekoppeld. Deze terugkoppelingsblokken vormen een reeks bits waarmee het vercijferingsalgoritme wordt gevoed, dat als sleutelstroomgenerator fungeert, net als bij de CFB-modus
De gegenereerde sleutelstroom wordt ge-XOR-ed met de klare tekstblokken. De OFB-methode vereist een IV als het oorspronkelijke willekeurige n-bit invoerblok. Het IV hoeft niet geheim te zijn.
De werking wordt in de volgende afbeelding weergegeven –
Counter (CTR) Mode
Het kan worden beschouwd als een op tellers gebaseerde versie van de CFB-modus zonder de terugkoppeling. In deze modus moeten zowel de verzender als de ontvanger toegang hebben tot een betrouwbare teller, die een nieuwe gedeelde waarde berekent telkens wanneer een blok cijfertekst wordt uitgewisseld. Deze gedeelde teller is niet noodzakelijkerwijs een geheime waarde, maar de uitdaging is dat beide zijden de teller gesynchroniseerd moeten houden.
Werking
Zowel vercijfering als ontcijfering in CTR modus worden in de volgende illustratie afgebeeld. De stappen in de werking zijn –
-
Laad de initiële tellerwaarde in het bovenste register is dezelfde voor zowel de verzender als de ontvanger. Deze speelt dezelfde rol als de IV in de CFB- (en CBC-)modus.
-
Versleutel de inhoud van de teller met de sleutel en plaats het resultaat in het onderste register.
-
Neem het eerste klare-tekstblok P1 en XOR dit met de inhoud van het onderste register. Het resultaat hiervan is C1. Stuur C1 naar de ontvanger en werk de teller bij. De tellerupdate vervangt de cijfertekstterugkoppeling in CFB-modus.
-
Ga op deze manier door totdat het laatste blok onbewerkte tekst is gecodeerd.
-
De ontcijfering is het omgekeerde proces. Het blok cijfertekst wordt ge-XOR-ed met de uitvoer van de gecodeerde inhoud van de tellerwaarde. Na ontcijfering van elk cijfertekstblok wordt de teller bijgewerkt zoals bij vercijfering.
Analyse van de tellermodus
Er is geen berichtafhankelijkheid en dus is een cijfertekstblok niet afhankelijk van de voorgaande platte-tekstblokken.
Net als bij de CFB-modus is er bij de CTR-modus geen ontcijferingsproces van het blokcijfer nodig. Dit komt omdat de CTR modus in feite het blokcijfer gebruikt om een key-stream te genereren, die wordt vercijferd met de XOR functie. Met andere woorden, de CTR mode zet ook een blokcijfer om in een stroomcijfer.
Het grote nadeel van de CTR mode is dat er een synchrone teller nodig is bij verzender en ontvanger. Verlies van synchronisatie leidt tot onjuist herstel van de klare tekst.
De CTR modus heeft echter bijna alle voordelen van de CFB modus. Bovendien worden geen transmissiefouten verspreid.