# Blokvercijfering

blokvercijfering is een algoritmen uit de symmetrische cryptografie, dat tot doel heeft om een blok aan klare tekst te transformeren naar een blok aan cijfer tekst. Gedurende dit transformatieproces zal het algoritme gebruikmaken van een geheime sleutel voor de encryptie als wel voor de decryptie. De andere algoritmen in de symmetrische cryptografie zijn de stroomvercijfering;
Bij blokvercijfering wordt een boodschap blok voor blok versleuteld dan wel ontsleuteld. Een blok bestaat uit een aantal bits. De blokgrootte is veelal gelijk aan de lengte van de sleutel. De blokgrootte is overigens telkens van een vaste lengte, bijvoorbeeld 64 bits of 128 bits. Het komt daartoe soms voor dat een blok nog verplicht moet worden gepad. DES voegt bijvoorbeeld één 1 bit toe, om vervolgens het blok op te vullen met een aantal 0 bits. Het gevolg hiervan is dat wanneer men een identiek blok klare tekst versleutelt, dit veelal zal resulteren in één en hetzelfde blok cijfertekst.
De encryptie en decryptie van een boodschap geschiedt volgens een van de volgende modi, in het Engels: mode of operation:
* Electronic Code Book ECB
* Cipher Block Chaining CBC
* Cipher Feedback Mode CFB
* Output Feedback Mode OFB
Voorbeelden van blokvercijferings-algoritmes zijn DES, IDEA en AES.

## Electronic Code Book ECB

De ECB modus is zeer snel als het gaat om het versleutelen en ontsleutelen, de tekst kan in elke volgorde en parallel verwerkt worden. Een foute bit kan er echter voor zorgen dat een blok verloren gaat, bit verlies is niet te repareren.
Omdat identieke klare teksten vercijferd worden tot identieke cijferteksten ontstaan er data-patronen. De vertrouwelijkheid van de boodschap is hiermee dan ook in het geding.
* versleutelen met de ECB mode
De formule voor ECB versleuteling:
* $C_{n}=E_{K}(M_{n})$
* ontsleutelen met de ECB mode
De formule voor ECB decryptie:
* $M_{n}=D_{K}(C_{n})$

## Cipher Block Chaining CBC

Het probleem bij ECB is dat een derde persoon, Eve, eenvoudig blokken kan toevoegen aan de boodschap dan wel blokken kan verwijderen. Het is dus van belang een bepaalde controle in te bouwen. De controle die CBC propageert is een controle door een keten van blokken te creëren, waarbij elk cijfertekstblok afhankelijk is van al de voorgaande blokken. Om dit effect te bewerkstelligen zal er gebruik worden gemaakt van de booleaanse operator XOR. Dezelfde blokken klare tekst anders zullen worden versleuteld om ook eventuele data-patronen te verbergen, zodat er verschillende cijfertekstblokken ontstaan bij een identieke klare tekst.
Wanneer CBC wordt toegepast zal de encryptie sequentieel geschieden. Een eenbits verandering in de cijfertekst zal bij het ontsleutelen leiden tot corruptie van het corresponderende blok klare tekst. Bitverlies is dus nog steeds niet te repareren.
Om elke boodschap uniek te maken voegt men in de CBC mode een initialisatievector IV toe aan de boodschap. Een IV is een blok van willekeurige nummers om zo te verzekeren dat geen boodschap hetzelfde begin heeft. Daartoe moeten zowel zender als ontvanger dezelfde IV gebruiken bij het versleutelen en ontsleutelen van de boodschap. Qua lengte is de IV overigens vaak gelijk aan de lengte van het te vercijferen blok klare tekst.
* versleutelen met de CBC mode
De formule voor CBC encryptie:
* $C_{n}=E_{K}(C_{n-1}\oplus M_{n}),C_{0}=IV$
* ontsleutelen met de CBC mode
De formule voor CBC decryptie:
* $M_{n}=C_{n-1}\oplus D_{K}(C_{n}),C_{0}=IV$
Een variatie van CBC is de PCBC Propagating Cipher Block Chaining mode. De formule voor PCBC encryptie:
* $C_{n}=E_{K}(C_{n-1})\oplus M_{n-1}\oplus M_{n}$
De formule voor PCBC decryptie:
* $M_{n}=C_{n-1}\oplus M_{n-1}\oplus D_{K}(C_{n})$

## Cipher Feedback Mode CFB

CFB zorgt ervoor dat een blokvercijfering geïmplementeerd wordt als een zelf synchroniserende stroomvercijfering. Een zelf synchroniserende blokvercijfering staat het toe om deel (bijvoorbeeld acht bytes) van een blok te versleutelen. Een deel van een blok is dus n bits, en is qua lengte kleiner dan het blok.
Een probleem met Cipher Feedback Mode is dat als er een bit van de ciphertext per ongeluk verwisseld wordt tijdens het omzetten, de 8 bytes die gedecrypt worden terwijl de verkeerde byte in het shift register zit, deze in zijn geheel fout zal zijn. Wanneer de verkeerde byte uit het shift register gepusht is zal weer correcte plaintekst worden gegenereerd. Het effect van een enkele geïnverteerde bit is dus relatief klein aangezien de rest van de boodschap toch correct blijft.
* versleutelen met de CFB mode
De formule voor CFB encryptie:
* $C_{n}=E_{K}(C_{n-1})\oplus M_{n}$
De IV wordt dus links geplaatst in de input queu (IV = C0), na versleuteling zal het meeste linkse deel van de output queu ge-XORed worden met het meest rechtse deel van de klare tekst. Na het toepassen van de XOR zal dit cijfertekst deel rechts toegevoegd worden aan de input queu. Hierna kan het volgende deeltje van de klare tekst verwerkt worden, dit proces zal zich herhalen totdat alle deeltjes van de klare tekst verwerkt zijn.
* ontsleutelen met de CFB mode
Let erop dat bij CFB de input queu bij decryptie wordt versleuteld en niet ontsleuteld.
De formule voor CFB decryptie:
* $M_{n}=E_{K}(C_{n-1})\oplus C_{n}$

## Output Feedback Mode OFB

OFB zorgt ervoor dat een blokvercijfering geïmplementeerd wordt als een zelfsynchroniserende stroomvercijfering. Bij OFB kan er geen sprake zijn van meerdere voorwaartse vercijferingen. Parallelle vercijfering is niet mogelijk wanneer er gebruik wordt gemaakt van deze werkwijze. Maar als de IV bekend is dan kan men wel de outputblokken genereren voordat de klare tekst of de cijfertekst beschikbaar is.
* versleutelen met de OFB mode
* ontsleutelen met de OFB mode
De formule voor OFB encryptie en decryptie:
* $C_{n}=M_{n}\oplus S_{n}$
* $M_{n}=C_{n}\oplus S_{n}$
* $S_{n}=E_{K}(S_{n-1})$
* $S_{0}=IV$
* ↑ (en) AS Tanenbaum. Computer Networks, 2002.