AES titkosítási algoritmus
Semenov YA (ITEF-MIPT)
Yu. Semenov (ITEP-MIPT)
Az adatbitek vannak számozva nulla, kezdve a legrégebbi. Az AES mag polinomiális reprezentáció kódokat. Mivel bájt képviseletében a következő: x 6 + x 5 + x + 1.
AES algoritmus működése során a kétdimenziós tömb byte úgynevezett struktúrák (állam). A szerkezet áll 4 sor Nb bájt. Nb a hossza a blokk osztva 32 (ebben a szabványos Nb = 4). Ez lehetővé teszi a címkézési struktúra SR, c, vagy s [r, c], ahol 0≤r<4 и 0≤с<4..
Hozzáférési kódját (in), amely egy sorozat 16 byte felírható:
Végrehajtásakor AES algoritmus segítségével az összeadást bájt (modulo 2 = XOR) és szorzás. Az AES algoritmust használjuk megszorozzuk a byte irreducibilis polinom:
m (X) = x 8 + x 4 + x 3 + x + 1
Számítás terméket M byte itt szerint hajtjuk végre a következő algoritmus:
Ebben az esetben az inverze a byte egyenlő:
szaporodnak nibbles (4 bit hosszú kód) használt irreducibilis polinom:
Számítás termék M nibbles a leírásban a következő:
M jelentése egy falat d. Szorzás művelet nibbles felírható mátrix formában:
Amint a fentiekben említettük Nk kulcs (hossz mérve 32 bites szó) vehet az értékeket 4, 6 vagy 8 (AES-128, -192 és -256, sorrendben). A iterációk száma Nr (kerek), megvalósított az algoritmus AES, rendre 10, 12 és 14.
titkosítás
Amikor elkezdjük a titkosító algoritmus bemenő adatblokkot másolni az állam tömb. Hozzáadása után a kiindulási állapothoz kapcsoló tömb állapotban átalakul a ciklikus feldolgozási funkciót Nr alkalommal (az utolsó ciklus kissé eltér a korábbitól, lásd. Ábra. 19.3). A kapott átalakulás van tárolva a kimeneti tömbben.
Leírása az algoritmus C-ábrázolás ábrán látható. 1. Conversion SubByte (), ShiftRows (), MixColumns () és AddRoundKey (), a feldolgozási tömb állapotban. A tömb w [i] az alábbiakban ismertetjük.
Cipher (byte [4 * Nb], byte ki [4 * Nb], w szó [Nb * (Nr + 1)])
kezdődik
byte állapotban [4, Nb] állapotban = a
AddRoundKey (állam, w [0, Nb-1])
kerek = 1 az 1. lépést Nr-1
SubBytes (állami)
ShiftRows (állami)
MixColumns (állami)
AddRoundKey (állam, W [kerek * Nb, (kerek + 1) * Nb-1])
az év végén az
SubBytes (állami)
ShiftRows (állami)
AddRoundKey (állam, W [Nr * Nb, (Nr + 1) * Nb-1])
out = állam
vég
Ábra. 1. A pszeudo-kód, amely megvalósítja a titkosítási folyamatot
Conversion SubByte ()
Conversion SubByte () egy nemlineáris permutációja bájt amely függetlenül működik minden egyes byte-állam és használja permutációs táblázat S. Ezt a cserét két műveletből:
- Minden byte helyett egy reciprok (lásd ekv. 3). Byte alakítjuk önmagában.
- Minden egyes bájt egy affin transzformáció végezzük területén GF (2), képlet által meghatározott
Conversion ShiftRows ()
Az átalakítások ShiftRows () bájt az utolsó három sorban állami ciklikusan eltolt különböző számú bájt. Az első sor (r = 0) nem tolódik. ShiftRows () átváltás a következőképpen végezzük:
0 ahol a korrekciós érték shift (R, Nb) függ több szám r a következőképpen: shift (1,4) = 1; shift (2,4) = 2; shift (3,4) = 3 Conversion MixColumns () feldolgozza az állam oszlopról oszlopra, az egyes oszlopok egy 4-bites kódot. Oszlopok minősülnek polinomok egy mezőt GF (augusztus 2.). Az oszlopot egy fix polinom = x 3 + x 2 + x + modulo x 4 + 1 (lásd Eq. 2a). Az átalakulás AddRoundKey () adunk az állam iteráció kulcs (Kulcs; bitenkénti XOR művelet). A műveletet minden egyes byte az állam. Keys iteráció alapján számítják ki a titkosítási kulcsot a kulcs segítségével átalakítja eljárás (Key expanzió). Ez az eljárás generál Nb (Nr + 1) szó. Az algoritmus megköveteli Nb szavak és minden iterációban igényel Nr Nb szó. Az eredmény egy lineáris tömb 4-bájtos szó, jelöljük [wi]. ahol i a tartomány 0? i KeyExpansion (bájt nagyságú kulcs [4 * Nk], w szó [Nb * (Nr + 1)], NK) Ábra. 2. A pszeudokódját végrehajtási kulcs transzformációs eljárás Minden leírt eljárásokat az előző szakaszban, visszafordítható. A cél a dekódolás dolgoz titkosított adatfájlt megszerezni az eredeti adatokat blokk. dekódolás eljárások közé InvShiftRows () függvény, InvSubBytes (), InvMixColumns () és AddRoundKey (). A pszeudo-kódot dekódolás eljárás ábrán látható. 3. InvCipher (byte [4 * Nb], byte ki [4 * Nb], w szó [Nb * (Nr + 1)]) byte állapotban [4, Nb] az év végén az Ábra. 3. Az ál dekódolási eljárások InvShiftRows () eljárás fordítottja a ShiftRows (). A bájt az utolsó három sorban állami ciklikusan eltolt különböző számú bájt. Az első sor (r = 0) nem tolódik. Conversion InvSubBytes () van az inverz permutációs bájtok, ahol az S-táblázat szekvenciálisan alkalmazni minden egyes bájt állam. Ez úgy érhető el, mivel a fordított affin transzformáció. InvMixColumns () eljárás a fordított MixColumns () (lásd., 1.3). Oszlopok minősülnek polinomok egy mezőt GF (augusztus 2.). Conversion AddRoundKey (), az 1.4 fejezetben leírtuk reverzibilis, mivel ez tartalmazza csak XOR műveleteket. A dekódoló algoritmus (3.), Egy sorozata transzformációk eltér a sorrendben kriptográfiai műveletek, és az alak a tágulási a titkosítási és visszafejtési változatlan marad (ábra. 4). Azonban, néhány tulajdonságát AES algoritmus kialakulását teszi lehetővé, ezzel egyenértékű dekódolás, amelyben a szekvencia a átalakítási műveletek ugyanaz marad (a helyettesítő transzformációk fordított). EqInvCipher (byte [4 * Nb], byte ki [4 * Nb], szó DW [Nb * (Nr + 1)]) Egy egyenértékű program végén megfejtési kulcs növekedési program felvette a következő pszeudo-kód: i = 0 az 1. lépést (Nr + 1) * Nb-1 Ábra. 4. A pszeudo-kód egyenértékű leképező Nemrégiben egy új változatát az AES-NI (New utasítások) [2], amely lehetővé teszi, hogy optimalizálja az algoritmus működését (alsó 50% CPU használat). Ez a változat lehet használni együtt SSL. Intel kifejlesztett egy chipet, amely végrehajtja az algoritmus (sorozat X5600). Az ügyfelek száma, amikor az AES-NI változata lehet 13% -kal növekedett.Conversion MixColumns ()
Conversion AddRoundKey ()
Az eljárás fő expanziós
kezdődik
szó temp
i = 0
míg a (I 6 és i mod Nk = 4)
temp = SubWord (Temp)
végén, ha
w [i] = w [i-Nk] XOR temp
i = i + 1
end míg
vég
végmásolat
kezdődik
state = a
AddRoundKey (állam, W [Nr * Nb, (Nr + 1) * Nb-1])
kerek = Nr-1 lépésben -1 downto 1
InvShiftRows (állami)
InvSubBytes (állami)
AddRoundKey (állam, W [kerek * Nb, (kerek + 1) * Nb-1])
InvMixColumns (állami)
InvShiftRows (állami)
InvSubBytes (állami)
AddRoundKey (állam, w [0, Nb-1])
out = állam
végConversion InvShiftRows ()
Conversion InvSubBytes ()
Conversion InvMixColumns ()
Visszaképezzük AddRoundKey ()
Egyenértékű kódot dekódolás
kezdődik
byte állapotban [4, Nb]
state = a
AddRoundKey (állam, dw [Nr * Nb, (Nr + 1) * Nb-1])
kerek = Nr-1 lépésben -1 downto 1
InvSubBytes (állami)
InvShiftRows (állami)
InvMixColumns (állami)
AddRoundKey (állam, dw [kerek * Nb, (kerek + 1) * Nb-1])
az év végén az
InvSubBytes (állami)
InvShiftRows (állami)
AddRoundKey (állam, DW [0, Nb-1])
out = állam
vég
dw [i] = w [i]
az év végén az
kerek = 1 az 1. lépést Nr-1
InvMixColumns (dw [kerek * Nb, (kerek + 1) * Nb-1])Kapcsolódó cikkek