Rijndael (cryptografie)

Rijndael is een cryptografisch algoritme bedacht door Joan Daemen en Vincent Rijmen. In november 2001 werd het algoritme door het Amerikaanse NIST uitgekozen tot de nieuwe Advanced Encryption Standard, de opvolger van de Data Encryption Standard. De naam Rijndael is enigszins afgeleid van "Rijmen" en "Daemen".

Rijndael is een doorontwikkeling van het cryptografisch algoritme Square, terwijl Square een doorontwikkeling is van Shark. Het grote voordeel van Rijndael ten opzichte van DES is dat het in software efficiënt te implementeren is. In het DES-algoritme is het namelijk het geval dat in veel stappen bits verwisseld worden. Processoren werken echter op woord-niveau en moeten met losse instructies iedere keer een losse bit uit een encryptieblok halen en op de juiste plaats op de bestemming gezet worden. In hardware is dit beter op te lossen met de juiste configuratie: hardware is niet gebonden aan hele word-bewerkingen.

Rijndael werkt daarentegen met 32 bit-words zodat een processor die opereert op 32 bit-words simpelweg een word kan lezen en op de juiste plaats wegschrijven. Vrijwel iedere moderne processor is in staat tot 32 bit-word-operaties. Daardoor kan een processor dit algoritme efficiënter uitvoeren dan het oude DES algoritme. Voor hardware maakt het voor de implementatie geen verschil welk van de twee algoritmes er wordt gebruikt.

Werking

Om Rijndael toe te passen wordt eerst de te vercijferen tekst in blokken opgedeeld. Deze blokken worden vervolgens in matrixvorm geplaatst. De grootte van deze blokken kan variëren van 128 bits tot 256 bits met een stapgrootte van 32 bits. Dit houdt in dat men de volgende blokgroottes kan krijgen:

  • 128 bits (16 bytes)
  • 160 bits (20 bytes)
  • 192 bits (24 bytes)
  • 224 bits (28 bytes)
  • 256 bits (32 bytes)

De sleutel wordt ook in blokken opgedeeld en in een matrixvorm geplaatst. De sleutelgrootte kan theoretisch alle sleutelgroottes aannemen van minstens 128 bits en ook een stapgrootte van 32 bits. Vervolgens wordt een aantal ronden toegepast. Het aantal ronden is afhankelijk van de lengte van de sleutel en van het blok. Het aantal rondes zou men kunnen berekenen met deze formule: waar x de blokgrootte of sleutelgrootte is, in bits. Van de blokgrootte en sleutelgrootte wordt de grootste gekozen om x te 'vullen'. Dus bij een blokgrootte van 128 bits en een sleutelgrootte van 256 bits wordt x = 256 ingevuld en dan kan men dus het aantal rondes uitrekenen door: Men kan nagaan dat dan dit het aantal rondes is voor een paar andere groottes:

Blockgrootte
128 bits 192 bits 256 bits
Sleutelgrootte 128 bits 10 12 14
192 bits 12 12 14
256 bits 14 14 14

AES is hetzelfde als Rijndael, maar dan alleen met de blokgrootte 128 bits en de sleutelgroottes 128 bits, 192 bits en 256 bits. Hier wordt heel vaak een fout in gemaakt.

Om een blok te vercijferen wordt eerst het blok met een XOR-operatie op de sleutel verwerkt, vervolgens wordt het bovenstaand aantal ronden uitgevoerd, de laatste ronde wordt alleen de mix-columns-stap overgeslagen.

Uitvoeren van een ronde

Een ronde bestaat uit een aantal stappen.

Subbytes

In de subbytes-stap wordt ieder byte door een ander byte vervangen. De byte-waarde wordt in een tabel opgezocht, de S-box, en de waarde in de S-Box-tabel is de vervangwaarde. De S-box ziet er in 16 bij 16 formaat zo uit:

9912411912324210711119748110343254215171118
2021302011252508971240173212162175156164114192
183253147385463247204521652292411132164921
41993519524150515471812822623539178117
91314426271109016082592141794122747132
832090237322521779110620319057747688207
2082391702516777511336924921278060159168
8116364143146157562451881822183316255243210
2051219236951516823196167126611009325115
9612979220344214413670238184202229411219
224505810736369219421117298145149228121
2312005510914121378169108862442341011221748
1861203746281661801982322211163175189139138
112621811027232461497538718513419329158
22524815217105217142148155301352332068540223
14016113713191230661046515345151768418722

Shiftrow

Zoals gezegd waren de 128 bits = 16 bytes in matrix-vorm gezet. In deze matrix worden de rijen op de volgende manier verschoven:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

  wordt  

1 2 3 4 6 7 8 5 11 12 9 10 16 13 14 15

Elke rij wordt n keer naar links geroteerd waarbij n het rijnummer is. Rij 0 wordt 0 keer geroteerd, rij 1 wordt 1 keer geroteerd, ...

Mix Column

Mix columns moet niet gebruikt worden bij de laatste ronde.

In de mix-column stap wordt het blok vermenigvuldigd met de volgende matrix:

2311
1231
1123
3112

Deze vermenigvuldiging wordt echter uitgevoerd over GF(2^8). Dat betekent dat de bytes als polynomen in plaats van getallen worden behandeld. Een vermenigvuldiging kan uitgevoerd worden met behulp van de volgende tabellen:

E-tabel

0123456789ABCDEF
00103050F113355FF1A2E7296A1F81335
15FE13848D87395A4F702060A1E2266AA
2E5345CE43759EB266ABED97090ABE631
353F5040C143C44CC4FD168B8D36EB2CD
44CD467A9E03B4DD762A6F10818287888
5839EB9D06BBDDC7F8198B3CE49DB769A
6B5C457F9103050F00B1D2769BBD661A3
7FE192B7D8792ADEC2F7193AEE92060A0
8FB163A4ED26DB7C25DE73256FA153F41
9C35EE23D47C940C05BED2C749CBFDA75
A9FBAD564ACEF2A7E829DBCDF7A8E8980
B9BB6C158E82365AFEA256FB1C843C554
CFC1F2163A5F407091B2D7799B0CB46CA
D45CF4ADE798B8691A8E33E42C651F30E
E12365AEE297B8D8C8F8A8594A7F20D17
F394BDD7C8497A2FD1C246CB4C752F601

L-tabel

0123456789ABCDEF
000190132021AC64BC71B6833EEDF03
16404E00E348D81EF4C7108C8F8691CC1
27DC21DB5F9B9276A4DE4A6729AC90978
3652F8A05210FE12412F082453593DA8E
4968FDBBD36D0CE94135CD2F140468338
566DDFD30BF068B62B325E29822889110
67E6E48C3A3B61E423A6B2854FA853DBA
72B790A159B9F5ECA4ED4ACE5F373A757
8AF58A850F4EAD6744FAEE9D5E7E6ADE8
92CD7757AEB160BF559CB5FB09CA951A0
A7F0CF66F17C449ECD8431F2DA4767BB7
BCCBB3E5AFB60B1863B52A16CAA55299D
C97B2879061BEDCFCBC95CFCD373F5BD1
D5339843C41A26D47142A9E5D56F2D3AB
E441192D923202E89B47CB8267799E3A5
F674AEDDEC531FE180D638C80C0F77007

Om een vermenigvuldiging van twee getallen uit te voeren zoeken we beide getallen op in de L-tabel. Vervolgens worden beide getallen bij elkaar opgeteld. Komt het getal boven de 255 uit dan trekken we er 256 van af. Het resulterende getal wordt in de E-tabel opgezocht.

Bijvoorbeeld we willen het hexadecimale getal B6 met 4 vermenigvuldigen. We zoeken B6 op in de L-tabel, daar staat B1. We zoeken 4 op, daar staat 32. We tellen ze getallen bij elkaar op: B1+32=E3. We zoeken E3 op in de E-tabel en vinden EE.

Addkey

In deze stap wordt op tussenresultaat een XOR-bewerking met de ronde-sleutel uitgevoerd.

Veiligheid

In augustus 2004 waren er nog geen succesvolle aanvallen tegen het Rijndael-algoritme uitgevoerd. De meest gebruikte aanval tegen blokvercijferingsalgoritmen als Rijndael is het uitvoeren van een aanval op een enigszins aangepaste versie met minder ronden. In 2000 zijn er met succes aanvallen uitgevoerd op versies met 7 ronden voor 128 bits-sleutels, 8 voor 192 bits-sleutels en 9 voor 256 bits-sleutels (Ferguson et al, 2000).

Sommige cryptoanalisten maken zich zorgen om de veiligheid van het Rijndael algoritme. Tussen het aantal ronden dat gebruikt wordt en het aantal ronden waar men aanvallen op heeft kunnen uitvoeren zit volgens hen een te klein gat. Indien deze aanvallen verbeterd kunnen worden, zou dat betekenen dat het algoritme gebroken kan worden; dat wil zeggen, men kan sneller ontcijferen dan alle mogelijke sleutelcombinaties afzoeken, een brute force attack. Het algoritme is technisch gezien gebroken als men 2128-1 of minder berekeningen nodig zou hebben om een 128 bits-sleutel te bepalen.

Verder maakt men zich zorgen over de wiskundige structuur van het Rijndael-algoritme. In tegenstelling tot andere algoritmen kan het algoritme wiskundig netjes beschreven worden. Er wordt gevreesd dat het mogelijk zal zijn hierdoor wiskundige vereenvoudigingen door te voeren.

In 2002 beschreven Nicolas Courtois en Josef Pieprzyk een theoretische aanval genaamd XSL-aanval. Ook deze aanval vergt vooralsnog veel te veel berekeningen om praktisch uitvoerbaar te zijn. Alhoewel er inmiddels claims zijn dat de berekeningen drastisch verlaagd kunnen worden zijn er inmiddels zwakheden in de wiskunde achter de aanval gevonden, en kan het het geval zijn dat de aanval in het geheel niet werkt. Voorlopig blijft de vraag of de XSL-aanval tegen Rijndael gebruikt kan worden dan ook speculatie.

Op 17 augustus 2011 raakte bekend dat onderzoekers aan de Katholieke Universiteit Leuven in samenwerking met Microsoft en de École Normale Supérieure in Parijs een zwak puntje in het algoritme gevonden hadden. Door dit te benutten kan het kraken van het algoritme vier keer zo snel gebeuren, al duurt het nog altijd twee miljard jaar met duizend miljard computers die duizend keer sneller zijn dan de huidige generatie computers.[1][2]

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.