Advanced Encryption Standard

Tekniska data
Källa: FIPS-197[1]
NamnAES
KryptotypSubstitution-permutation
Blockstorlek128 bit
Nyckellängder128, 192, 256 bit

Advanced Encryption Standard (AES) är en standardiserad krypteringsalgoritm fastslagen av NIST den 26 november 2001. Standarden bygger på krypteringsalgoritmen Rijndael framtagen av belgarna dr Joan Daemen och dr Vincent Rijmen. Namnet Rijndael är en sammanslagning av deras namn.

AES är ett symmetriskt blockkrypto konstruerat för att kunna använda krypteringsnycklar med längderna 128, 192 och 256 bit där varje variant benämns AES-128, AES-192, respektive AES-256.[1]

Både AES och föregångaren DES är substitutions-permutationskrypton men AES är till skillnad från DES inte ett Feistelkrypto. AES bygger därmed på förvanskning av texten genom en serie av omväxlande substitutioner och permutationer, där varje substitution-permutation är en iteration eller runda (engelska round). Antalet rundor varierar beroende på nyckellängden: AES-128 har 10 rundor, AES-192 har 12 rundor och AES-256 har 14 rundor. En runda består av fyra steg: byte substitution, radskiftning, kolumnblandning och nyckeladdition. Undantaget är sista rundan där man hoppar över kolumnblandningen; innan man över huvud taget börjar med rundorna måste man emellertid genomföra en nyckelexpansion.

AES är vinnaren av en internationellt utlyst tävling för att få fram en modern kryptoalgoritm. Till följd av tävlingsreglerna är algoritmerna väl genomlysta och dokumenterade, dessutom befriade från patent eller andra immaterialrättsliga begränsningar. Utöver att vara baserad på en bra krypteringsalgoritm är Advanced Encryption Standard dessutom förhållandevis enkel att implementera i mjuk- eller hårdvara. Detta var också ett av kriterierna för att få delta i tävlingen.

AES är inte till fullo symmetriskt, i så måtto att kryptering respektive dekryptering utförs på för all del liknande, men inte exakt samma vis. Ovan nämnda kolumnblandning (matrismultiplikation) är dessutom mer beräkningsintensiv vid krypteringen än vid dekrypteringen; följaktligen behöver också AES något mer processorkraft vid kryptering av data, än vid dekrypteringen av dessa data. Det finns emellertid inget som hindrar att man växlar algoritmerna, och använder dekrypteringsalgoritmen för kryptering, och krypteringsalgoritmen för dekryptering.

Algoritmen

Den här artikeln är helt eller delvis baserad på material från engelskspråkiga Wikipedia, Advanced Encryption Standard.

Nyckelexpansion

Innan man kan börja med rundorna måste nyckeln expanderas till olika nycklar för varje runda. För att göra det ska följande algoritm utövas:

Definiera rci enligt följande tabell:

i (decimalt)12345678910
rci (hexadecimalt)01020408102040801b36

Definiera även:

  • l - nyckelns storlek i ord (32 bitar): 4 ord på 128 bitar, 6 ord på 192 bitar och 8 ord på 256 bitar.
  • k0, k1, k2 etc.: orden i den ursprungliga nyckeln
  • n - hur många nya nycklar som behövs: 11 nycklar för 128 bitar, 13 för 192 bitar och 15 för 256 bitar.
  • w0, w1, w2 etc.: orden i den nya, expanderade nyckeln.

Definiera även r(x) som ett teckenskifte åt vänster och s(x) som alla tecken utbytta genom S-boxen (som förklaras längre ner):

Den expanderade nyckeln definieras som följande, där i går från 0 till 4n-1:

där syftar på exklusiv eller-operatorn (XOR). Efter att man har gjort detta utövas en nyckeladdition med w0-w3 i de fyra kolumnerna i blocket innan den första teckensubstitutionen sker.

Teckensubstitution

Varje tecken (8 bitar) i blocket, här benämnt b0 till b15 ersätts med ett annat tecken, s(bx), via en tabell, den så kallade S-boxen. Den ser ut så här (värden är hexadecimala):

000102030405060708090a0b0c0d0e0f
00637c777bf26b6fc53001672bfed7ab76
10ca82c97dfa5947f0add4a2af9ca472c0
20b7fd9326363ff7cc34a5e5f171d83115
3004c723c31896059a071280e2eb27b275
4009832c1a1b6e5aa0523bd6b329e32f84
5053d100ed20fcb15b6acbbe394a4c58cf
60d0efaafb434d338545f9027f503c9fa8
7051a3408f929d38f5bcb6da2110fff3d2
80cd0c13ec5f974417c4a77e3d645d1973
9060814fdc222a908846eeb814de5e0bdb
a0e0323a0a4906245cc2d3ac629195e479
b0e7c8376d8dd54ea96c56f4ea657aae08
c0ba78252e1ca6b4c6e8dd741f4bbd8b8a
d0703eb5664803f60e613557b986c11d9e
e0e1f8981169d98e949b1e87e9ce5528df
f08ca1890dbfe6426841992d0fb054bb16

Värdena i tabellen genereras genom att ta den multiplikativa inversen under den ändliga kroppen 28. Sedan multipliceras inversen med denna matrismultiplikation

där b0-b7 är bitarna i inversen från höger till vänster och s0-s7 är bitarna i det slutgiltiga resultatet. Varför just den här algoritmen valdes var för att göra matematiska samband så otydliga som möjligt, samt att det inte kan bli samma resultat som tecknet du började med.

Radskiftning

Varje rad i blocket skiftas ett visst antal steg. Den översta raden skiftar inte, raden under skiftas 1 tecken åt vänster, raden under det 2 tecken och den nedersta skiftas 3 tecken. Det ser ut så här:

där ax,y är ett tecken ur det originella blocket och bx,y är ett tecken ur det nya. Det här steget är mycket viktigt för att det grundar sig på rader istället för kolumner, så det förhindrar att kolumnerna krypteras var för sig och bildar fyra separata blockkrypton. Det är dessutom, tillsammans med kolumnblandningen, den viktigaste källan till diffusion inom kryptot.

Kolumnblandning

De fyra tecknen i en kolumn genomgår en matrismultiplikation:

där varje multiplikation görs i den ändliga kroppen 28. Det här steget utövas däremot inte under sista rundan. Meningen med det här steget är främst för att skapa diffusion och få bort matematiska samband.

Nyckeladdition

Nyckelexpansionen ovan genomförs, och man tar sedan en del av den expanderade nyckeln och använder XOR-operatorn för att kombinera dess tecken med tecknen i blocket. Detta steg utövas även en extra gång i början av kryptot, innan runda 1 börjar. XOR-operatorn är reversibel, vilket gör dekryptering enkelt.

Källor

  1. ^ [a b] ”Advanced Encryption Standard” (PDF). Federal Information Processing Standards Publications. National Institute of Standards and Technology. 2001. http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf. Läst 19 juni 2017. 

Externa länkar