Вы находитесь на странице: 1из 9

Ministerul Educaţiei al Republicii Moldova

Universitatea de Stat din Moldova


Facultatea de Matematică şi Informatiă

Лабораторная работа

Метод AES.

Chişinău 2020
Вводимый текс (128 бит):
IRA MasterandUSM. -> in ASCII (на базе 10)
49 52 41 20 4d 61 73 74 65 72 61 6e 64 55 53 4d
Cheia (128 biti):
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f

Nb = 128/32 = 4
Nk = 128/32 = 4
Nr = 10
Исходное состояние:
49 4d 65 64
52 61 72 55
41 73 61 53
20 74 6e 4d
Ключ (W):
0 00 01 02 03
1 04 05 06 07
2 08 09 0a 0b
3 0c 0d 0e 0f
4 …
Расширение ключа:
1)row=Nk=4
temp = W[row-1]=W[4-1]=W[3] =0c0d0e0f
row%Nk=4%4=0 =>
temp = SubWord(RotWord(temp))
RotWord(temp) = 0c0d0e0f <<<1 = 0d0e0f0c
SubWord(RotWord(temp)) = SubWord(0d0e0f0c)
Используйте таблицу замещения:
0d -> d7 , 0e -> ab , 0f -> 76, 0c -> fe
Получаем temp=SubWord(RotWord(temp)) = d7ab76fe
temp = temp XOR Rcon[row/Nk] = temp XOR Rcon[4/4] = temp XOR Rcon[1] = d7ab76fe xor
01000000 = D6AB76FE
W[4] = W[row-Nk] xor temp = W[4-4] xor temp = W[0] xor temp = 00010203 xor D6AB76FE
= D6AA74FD
W:
0 00 01 02 03
1 04 05 06 07
2 08 09 0a 0b
3 0c 0d 0e 0f

2
4 D6 AA 74 FD
2)row=row+1=4+1=5
temp = W[row-1]=W[5-1]=W[4] = D6AA74FD
row%Nk=5%4=1, Nk<>8, row%Nk<>4 =>
W[5] = W[5- Nk] XOR Temp = W[5-4] xor temp = 04050607 XOR d6aa74fd = d2 af 72 fa
W:
0 00 01 02 03
1 04 05 06 07
2 08 09 0a 0b
3 0c 0d 0e 0f
4 D6 AA 74 FD
5 d2 af 72 fa
3)row=row+1=5+1=6
temp = W[row-1]=W[6-1]=W[5] = d2af72fa
row% Nk =6%4=2≠0 =>
W[6] = W[6- Nk] XOR temp = W[2] XOR temp = 08090a0b XOR d2af72fa = daa678f1
W:
0 00 01 02 03
1 04 05 06 07
2 08 09 0a 0b
3 0c 0d 0e 0f
4 D6 AA 74 FD
5 d2 af 72 fa
6 da a6 78 f1
4)row=row+1=6+1=7
row% Nk = 7%4=3≠0
W[7] = W[7- Nk] XOR temp = W[3] XOR temp =0c0d0e0f XOR daa678f1 = d6ab76fe
W:
0 00 01 02 03
1 04 05 06 07
2 08 09 0a 0b
3 0c 0d 0e 0f
4 d6 aa 74 fd
5 d2 af 72 fa
6 da a6 78 f1
7 d6 ab 76 fe

Шифрование
AddRoundKey:
Stare[i,j]= Stare[i,j] XOR W[round*4+j,i]
round = 0

3
Исходное состояние:
49 4d 65 64
52 61 72 55
41 73 61 53
20 74 6e 4d
XOR
Используемый ключ:
00 01 02 03
04 05 06 07
08 09 0a 0b
0c 0d 0e 0f
Полученное состояние:
49 56 49 2c
4c 64 7a 79
67 74 6b 60
67 52 58 42

Раунд 1:
ByteSub:
Исходное состояние:
49 56 49 2c
4c 64 7a 79
67 74 6b 60
67 52 58 42

Используем таблицу замещения.

Полученное состояние:
3b b1 3b 71
29 43 da b6
85 92 7f d0
85 00 6a 2c

ShiftRow:
Исходное состояние:
3b b1 3b 71 <<<0
29 43 da b6 <<<1
85 92 7f d0 <<<2
85 00 6a 2c <<<3

Полученное состояние: (Шестнадцатеричная система)

4
3b b1 3b 71
43 da b6 29
7f d0 85 92
2c 85 00 6a

Полученное состояние: (Десятеричная система)

59 177 59 113
67 218 182 41
127 208 133 146
44 133 00 106

MixColumn:
Создаем Таблицу:
2*a:
76 79 76 e2
86 af 77 52
fe bb 11 3f
58 11 0 d4

3*a:
4d c8 4d 93
c5 75 c1 7b
81 6b 94 ad
74 94 0 be
Считаем b:

b[0,0]=76+c5+7f+2c=e0 b[0,1]=79+75+d0+85=59
b[1,0]=86+81+2c+3b=10 b[1,1]=af+6b+85+b1=f0
b[2,0]=fe+74+3b+43=f2 b[2,1]=bb+94+b1+da=44
b[3,0]=58+4d+43+7f=29 b[3,1]=11+c8+da+d0=d3

b[0,2]=76+c1+85+0=32 b[0,3]=e2+7b+92+6a=61
b[1,2]=77+94+0+3b=d8 b[1,3]=52+ad+6a+71=e4
b[2,2]=11+0+3b+b6=9c b[2,3]=3f+be+71+29=d9
b[3,2]=0+4d+b6+85=7e b[3,3]=d4+93+29+92=fc

Полученное состояние:
e0 59 32 61
10 f0 d8 e4
f2 44 9c d9
29 d3 7e fc
AddRoundKey

5
Исходное состояние:
e0 59 32 61
10 f0 d8 e4
f2 44 9c d9
29 d3 7e fc

Используемый ключ: (Последние 4 ключевых слова):


d6 aa 74 fd
d2 af 72 fa
da a6 78 f1
d6 ab 76 fe
Полученное состояние:
36 f3 46 9c
c2 5f aa 1e
28 e2 e4 28
ff 78 08 02

Зашифрованное сообщение: 36 f3 46 9c c2 5f aa 1e 28 e2 e4 28 ff 78 08 02

Дешифровка
Зашифрованное сообщение: 36 f3 46 9c c2 5f aa 1e 28 e2 e4 28 ff 78 08 02

Ключ (128 бит):


0 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
W:
0 00 01 02 03
1 04 05 06 07
2 08 09 0a 0b
3 0c 0d 0e 0f
4 d6 aa 74 fd
5 d2 af 72 fa
6 da a6 78 f1
7 d6 ab 76 fe

Раунд 1:
AddRoundKey
Исходное состояние:
36 f3 46 9c
c2 5f aa 1e
28 e2 e4 28
ff 78 08 02
Используемый ключ:

6
d6 aa 74 fd
d2 af 72 fa
da a6 78 f1
d6 ab 76 fe
Полученное состояние:
e0 59 32 61
10 f0 d8 e4
f2 44 9c d9
29 d3 7e fc

InvMixColumn
Создаем Таблицу:
14*b = 2*2*2*b+2*2*b+2*b

37 33 27 78
e0 d7 7c f
cb 95 e9 72
a5 1e c2 9f
11*b=2*2*2*b+2*b+b
7a 15 dd 86
b0 ca e9 56
dc da 33 e2
28 ac 5f be
13*b=2*2*2*b+2*2*b+b
c d8 71 db
d0 dc f 38
c6 59 56 2
de 70 40 80
9*b=2*2*2*b+b
a1 a7 b9 44
90 31 42 85
23 52 10 4b
7a 11 a3 5d
Считаем a:
a[0,0]=37+b0+c6+7a=3b a[0,1]=33+ca+59+11=b1
a[1,0]=e0+dc+de+a1=43 a[1,1]=d7+da+70+a7=da
a[2,0]=cb+28+c+90=7f a[2,1]=95+ac+d8+31=d0
a[3,0]=a5+7a+d0+23=2c a[3,1]=1e+15+dc+52=85

a[0,2]=27+e9+56+a3=3b a[0,3]=78+56+2+5d=71
a[1,2]=7c+33+40+b9=b6 a[1,3]=f+e2+80+44=29
a[2,2]=e9+5f+71+42=85 a[2,3]=72+be+db+85=92
a[3,2]=c2+dd+f+10=0 a[3,3]=9f+86+38+4b=6a

Полученное состояние:
7
3b b1 3b 71
43 da b6 29
7f d0 85 92
2c 85 00 6a

InvShiftRow
Исходное состояние:
3b b1 3b 71 <<<0
43 da b6 29 <<<3
7f d0 85 92 <<<2
2c 85 00 6a <<<1
Полученное состояние:
3b b1 3b 71
29 43 da b6
85 92 7f d0
85 00 6a 2c

InvByteSub:
Исходное состояние:
3b b1 3b 71
29 43 da b6
85 92 7f d0
85 00 6a 2c
Полученное состояние:
49 56 49 2c
4c 64 7a 79
67 74 6b 60
67 52 58 42

AddRoundKey (последний)
Исходное состояние:
49 56 49 2c
4c 64 7a 79
67 74 6b 60
67 52 58 42
Используемый ключ:
00 01 02 03
04 05 06 07
08 09 0a 0b
0c 0d 0e 0f
Полученное состояние:
49 4d 65 64
52 61 72 55
41 73 61 53

8
20 74 6e 4d

Полученное сообщение: IRA MasterandUSM