AES.pdf
(
199 KB
)
Pobierz
Szyfrowanie AES
Ogólny opis algorytmu
Rodzaj szyfru:
Data stworzenia:
Autorzy:
Długość klucza:
Ilość rund
symetryczny szyfr blokowy
1997
Vincent Rijmen, Joan Daemen
128, 192, 256 bitów
zależna od klucza:
* 10 dla 128-bitowego
* 12 dla 192-bitowego
* 14 dla 256-bitowego
Wielkość bloku wejściowego: 128 bitów
AES (ang. Advanced Encryption Standard, nazywany również Rijndael) to
symetryczny szyfr blokowy przyjęty przez NIST (National Institute of
Standards and Technolog) w wyniku konkursu ogłoszonego w roku 1997.
Możliwe jest w nim użycie kluczy o długościach 128, 192 i 256 bitów i operuje
on na blokach danych o długości 128 bitów (oryginalna specyfikacja Rijndael
dopuszczała również bloki 192- i 256-bitowe).
AES wykonuje 10 (klucz 128 bitów), 12 (klucz 192 bity) lub 14 (klucz 256
bitów) rund szyfrujących substitution-permutation. Składają się one z
substytucji wstępnej, permutacji macierzowej (mieszanie wierszy, mieszanie
kolumn) i modyfikacji za pomocą klucza. Funkcja substytucyjna ma bardzo
oryginalną konstrukcję, która uodparnia ten algorytm na znane ataki
kryptoanalizy różnicowej i liniowej. Odmiany algorytmu Rijndael niebędące
standardem AES, w zależności od długości klucza i bloku danych wykonują 12
lub 14 rund szyfrujących.
Opublikowana została praca, w której twierdzi się, że AES nie jest w pełni
odporny na atak XSL, ale oszacowanie ilości koniecznych obliczeń obarczone
jest dużą niepewnością, w związku z tym oceny, na ile skuteczny jest ten atak,
są różne.
Twórcami szyfru są Vincent Rijmen i Joan Daemen.
AES jest szyfrem blokowy w którym blok wejściowy oraz klucz przechodzą
kilkakrotnie rundy transformacji, zanim dadzą końcowy wynik. Po przejściu
każdej rundy, powstaje szyfr pośredni, zwany stanem.
Oficjalna Specyfikacja AES (PDF)
AES-256
Dane (klucz + dane szyfrowane) reprezentowane są za pomocą macierzy.
Elementem takiej macierzy jest 1bajt (8 bitów). Macierz taka ma 4 wiersze, 8
kolumn, zatem mieści w sobie całe 256 bitów.
Przebieg całego algorytmu można podzielić na fazy i rundy. Wyróżnione są 3
główne fazy, w których przebiega 14 rund.
Ns = 4 (oznacza 128 bitowy bloku danych)
Nk = 8 (oznacza 256 bitowy klucz)
Nr = 14 (liczba rund)
Szyfr AES składa
się z trzech faz:
I. Transformacja
klucza
"AddRoundKey"
II. Nr-1 rund
składających się z:
* Transformacja
SubBytes
* Transformacja
ShiftRows
* Transformacja
MixColumns
* Transformacja
AddRoundKey
III. Runda finałowa
składająca się z:
* Transformacja
SubBytes
* Transformacja
ShiftRows
* Transformacja
AddRoundKey
Transformacja SubBytes
Transformacja SubBytes (podstawienie bajtów) jest oddzielnie wykonywana na
każdym bajcie stanu. S-box (substitution box, czyli tabela podstawień )
kontroluje całą transformację. Operacyjnie, S-box to macierz 16*16. Bajt
wynikowy odnajdywany jest pod adresem wiersza i kolumny uzyskanym za
pomocą 4-bitowego adresu (młodsza i starsza połówka bajtu).
a
e
i
b c d
f
j
g h
→ S-box →
k l
i'
j'
k' l'
m n o p
m' n' o' p'
a'
e'
b' c' d'
f'
g' h'
Transformacja ShiftRows
Transformacja ShiftRows przesuwa cyklicznie bajty w 3 dolnych wierszach
macierzy Stanu.
Wiersz 2 jest przesuwany o 1 bajt w lewo, wiersz 3 przesuwany jest o 2 bajty w
lewo, a wiersz 4 przesuwany jest o 3 bajty w lewo.
Macierz s
a
e
i
b c d
f
j
g h
k l
→ brak przesunięcia →
→
→
→
w lewo o 1
w lewo o 2
w lewo o 3
→
→
→
Macierz s'
a b
f
g
c d
h e
i
j
k l
m n o p
p m n o
Transformacja MixColumns
Operacja MixColumns miesza zawartość kolumn macierzy. Na każdej z 4
kolumn operacja mieszania wykonywana jest niezależnie.
Transformacja MixColumns działa na kolumnach macierzy stanu traktując je
jako współczynniki określonego wielomianu:
W rzeczywistości ta operacja sprowadza się do mnożenia macierzy:
Gdzie c oznacza numer kolumny, Nb liczba kolumn w macierzy stanu.
Zatem rozpisując powyższą macierz otrzymujemy następujące równania:
Gdzie
⊕
to operacja XOR, a działanie • zostało opisane poniżej. W celu
uzyskania dokładniejszych informacji na temat wykonywanych działań
odsyłamy do dokumentu standardu szyfrowania AES.
W praktyce operacja s
x,y
•{02} sprowadza się do przesunięcia bitowego w lewo
o jeden bit, operacja s
x,y
•{01} nie zmienia ciągu bitów, natomiast s
x,y
•{03}
można znacznie uprościć korzystając z zależności:
s
x,y
•{03} = s
x,y
• ({02}
⊕
{01})
Aby przybliżyć sposób wykonywania obliczeń przedstawiamy poniższy
przykład operacji MixColumns:
Wyliczmy wartość pierwszego bajtu w kolumnie wyjściowej.
Na początku zapisujemy ogólne równanie z podstawionymi współczynnikami:
s
0
’ = ({02}•d4)
⊕
({03}•bf )
⊕
({01}•5d)
⊕
({01}•30)
następnie upraszczamy zapis eliminując współczynniki {01} oraz rozpisując
współczynnik {03} zgodnie z podanym wcześniej wzorem. Uzyskujemy zatem
kolejno:
s
0
’ = ({02}•d4)
⊕
[ ({02}
⊕
{01})•bf ]
⊕
5d
⊕
30
s
0
’ = ({02}•d4)
⊕
({02}•bf)
⊕
bf
⊕
5d
⊕
30
d4
16
= 1101 0100
2
{02}• d4
16
= 1010 1000
2
{02}• bf
16
= 0111 1110
2
Kolejno wykonujemy działania XOR:
Otrzymany wynik to 0000 0100
2
= 04
16
CUD.
Generacja klucza rundy i transformacja AddRoundKey
Klucz szyfrujący używany jest wewnątrz algorytmu do otrzymania odrębnego
klucza w każdej rundzie procesu szyfrowania. Klucze takie są zwane kluczami
rundy i mają długość taką jak długość bloku danych.
Operacja AddRoundKey polega na wykonaniu operacji XOR pomiędzy całym
Plik z chomika:
hanss92
Inne pliki z tego folderu:
DynDLL_src_Lazarus.zip
(1736 KB)
project_EXE_DLL.zip
(1128 KB)
RADTools-199d.exe
(1270 KB)
Biecek-R-basics.rar
(990 KB)
workshop.chm
(853 KB)
Inne foldery tego chomika:
Ada
Assembler
C
C#
C++ (Cpp)
Zgłoś jeśli
naruszono regulamin