Histria do Algoritmo
Em 1997, o NIST (National Institute of Standards and Technology), rgo dos EUA, lanou um concurso para adotar um novo algoritmo de criptograa simtrica para proteger informaes condenciais. O novo algoritmo, que passaria a se chamar AES (Advanced Encryption Standard), substituiria o DES (Data Encryption Standard).
Histria do Algoritmo
O novo algoritmo deveria ter pr-requisitos como: No possuir patentes; Cifrar em blocos de 128 bits com chaves de 128, 192 ou 256 bits; Possibilidade de implementao tanto em software quanto em hardware; Ser mais rpido do que o 3DES.
Histria do Algoritmo
Em 1998, apresentaram-se 15 candidatos e, um ano depois, 5 destes foram escolhidos como nalistas: MARS, RC6, Rijndael, Serpent e Twosh. Em 2000, aps anlises da comunidade criptogrca mundial, escolhido como padro o algoritmo Rijndael, criado pelos belgas Vincent Rijmen e Joan Daemen.
Conceitos Bsicos
Nb Nk
Nr
Conceitos Bsicos
Estado
o bloco de dados, ou seja, a matriz que contm inicialmente a mensagem e possui 4 linhas e Nb colunas.
Exemplo de estado
P S b L
A T N N
L R O C
E A b C
50 41
4c 4f
45 20
ASCII
53 54 20 4e 4c 4e
52 41 43 43
Conceitos Bsicos
B I b C
O S D N
L T O P
S A b q
42
4f
4c 4f
53 41 20 71
ASCII
49 53 54 20 44 43 4e 50
Etapas do Algoritmo
SubBytes
ShiftRows
MixColumns
- Multiplicao, sobre GF (28 ), de uma matriz xa pelo estado. - um XOR byte a byte entre o estado e a chave da rodada.
AddRoundKey
SubBytes
Exemplo da transformao SubBytes
a6 72 c1 f7 45 00 35 d4 82 fc e6 50 be 15 09 99
SubBytes
24 6e 13 ae
40 63 b0 59
78 96 8e 01
68 48 53 ee
SubBytes
S-box usada no AES
x 0 0 1 2 3 4 5 6 y 7 8 9 a b c d e f 63 ca b7 04 09 53 d0 51 cd 60 e0 e7 ba 70 e1 8c 1 7c 82 fd c7 83 d1 ef a3 0c 81 32 c8 78 3e f8 a1 2 77 c9 93 23 2c 00 aa 40 13 4f 3a 37 25 b5 98 89 3 7b 7d 26 c3 1a ed fb 8f ec dc 0a 6d 2e 66 11 0d 4 f2 fa 36 18 1b 20 43 92 5f 22 49 8d 1c 48 69 bf 5 6b 59 3f 96 6e fc 4d 9d 97 2a 06 d5 a6 03 d9 e6 6 6f 47 f7 05 5a b1 33 38 44 90 24 4e b4 f6 8e 42 7 c5 f0 cc 9a a0 5b 85 f5 17 88 5c a9 c6 0e 94 68 8 30 ad 34 07 52 6a 45 bc c4 46 c2 6c e8 61 9b 41 9 01 d4 a5 12 3b cb f9 b6 a7 ee d3 56 dd 35 1e 99 a 67 a2 e5 80 d6 be 02 da 7e b8 ac f4 74 57 87 2d b 2b af f1 e2 b3 39 7f 21 3d 14 62 ea 1f b9 e9 0f c fe 9c 71 eb 29 4a 50 10 64 de 91 65 4b 86 ce b0 d d7 a4 d8 27 e3 4c 3c ff 5d 5e 95 7a bd c1 55 54 e ab 72 31 b2 2f 58 9f f3 19 0b e4 ae 8b 1d 28 bb f 76 c0 15 75 84 cf a8 d2 73 db 79 08 8a 9e df 16
InvSubBytes
Exemplo da transformao InvSubBytes
24 6e 13 ae
40 78 63 96 b0 8e 59 01
68 48 53 ee InvSubBytes
a6 72 45 00 82 fc be 15
c1
f7
35 d4 e6 50 09 99
InvSubBytes
S-box inversa usada no AES
x 0 0 1 2 3 4 5 6 y 7 8 9 a b c d e f 52 7c 54 08 72 6c 90 d0 3a 96 47 fc 1f 60 a0 17 1 09 e3 7b 2e f8 70 d8 2c 91 ac f1 56 dd 51 e0 2b 2 6a 39 94 a1 f6 48 ab 1e 11 74 1a 3e a8 7f 3b 04 3 d5 82 32 66 64 50 00 8f 41 22 71 4b 33 a9 4d 7e 4 30 9b a6 28 86 fd 8c ca 4f e7 1d c6 88 19 ae ba 5 36 2f c2 d9 68 ed bc 3f 67 ad 29 d2 07 b5 2a 77 6 a5 ff 23 24 98 b9 d3 0f dc 35 c5 79 c7 4a f5 d6 7 38 87 3d b2 16 da 0a 02 ea 85 89 20 31 0d b0 26 8 bf 34 ee 76 d4 5e f7 c1 97 e2 6f 9a b1 2d c8 e1 9 40 8e 4c 5b a4 15 e4 af f2 f9 b7 db 12 e5 eb 69 a a3 43 95 a2 5c 46 58 bd cf 37 62 c0 10 7a bb 14 b 9e 44 0b 49 cc 57 05 03 ce e8 0e fe 59 9f 3c 63 c 81 c4 42 6d 5d a7 b8 01 f0 1c aa 78 27 93 83 55 d f3 de fa 8b 65 8d b3 13 b4 75 18 cd 80 c9 53 21 e d7 e9 c3 d1 b6 9d 45 8a e6 df be 5a ec 9c 99 0c f fb cb 4e 25 92 84 06 6b 73 6e 1b f4 5f ef 61 7d
ShiftRows
Exemplo da transformao ShiftRows
24 6e 13 ae
40 78 63 96 b0 8e 59 01
68 48 53 ee Shif tRows
24 40 63 96 8e 53 ee ae
78 68 48 6e 13 b0 59 01
InvShiftRows
Exemplo da transformao InvShiftRows
24 40 63 96 8e 53 ee ae
78 68 48 6e 13 b0 59 01 InvShif tRows
24 40 78 6e 63 96 13 b0 8e ae 59 01
68 48 53 ee
MixColumns
S1,1 S2,1 S3,1 S4,1 01 01 03 02 S1,2 S2,2 S3,2 S4,2 S1,3 S1,4 S2,3 S2,4 = S3,3 S3,4 S4,3 S4,4 S1,1 S1,2 S1,3 S 2,1 S2,2 S2,3 S3,1 S3,2 S3,3 S4,1 S4,2 S4,3
02 01 01 03
03 02 01 01
01 03 02 01
InvMixColumns
0E 09 0D 0B 0B 0E 09 0D 0D 0B 0E 09 09 0D 0B 0E S1,1 S2,1 S3,1 S4,1 S1,2 S2,2 S3,2 S4,2 S1,1 S2,1 S3,1 S4,1 S1,3 S2,3 S3,3 S4,3 S1,2 S2,2 S3,2 S4,2 S1,4 S2,4 S3,4 S4,4 S1,3 S2,3 S3,3 S4,3 S1,4 S2,4 S3,4 S4,4
AddRoundKey
Transformao AddRoundKey
s1,1 s2,1 s3,1 s4,1 s1,2 s2,2 s3,2 s4,2 s1,3 s2,3 s3,3 s4,3 s1,4 s2,4 s3,4 s4,4 s1,1 s2,1 s3,1 s4,1 s1,2 s2,2 s3,2 s4,2 k1,1 k1,2 k1,3 k1,4 s1,3 s2,3 s3,3 s4,3 k2,1 k2,2 k2,3 k2,4 s1,4 s2,4 s3,4 s4,4 k3,1 k3,2 k3,3 k3,4 k4,1 k4,2 k4,3 k4,4 =
Gerao de Chaves
wi seqncia de 4 bytes
Chaves de rodada
w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 ... ...
chave da rodada 0
chave da rodada 1
Gerao de Chaves
RotWord - Rotaciona a palavra uma posio (correspondente a um byte) esquerda; SubWord - Aplica a S-box do AES em cada byte da palavra; Rcon(j) - uma constante diferente a cada rodada (j). Essa constante dada por Rcon(j)=(RC[j],00,00,00), onde RC[1]=1 e RC[j]=2 RC[j-1], com a multiplicao sobre GF (28 ).
Gerao de Chaves
Em pseudocdigo, para N k 6:
KeyExpansion (byte key [4*Nk],word w[Nb*(Nr+1)],Nk) word temp for i from 0 to Nk-1 w[i]=word(key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]) for i from Nk to Nb*(Nr + 1)-1 temp=w[i - 1] if (i mod Nk=0) temp=SubWord(RotWord(temp)) xor Rcon[i/Nk] w[i]=w[i - Nk] xor temp
Gerao de Chaves
Exemplo Vamos supor que a chave principal tenha 128 bits e a
chave de rodada 6 seja: 5c 3a 11 02 14 6f 5b af bc 52 40 dd 50 f4 61 78. Vamos calcular a primeira palavra da chave de rodada 7:
i temp = w[i-1] RotWord SubWord Rcon(7) temp = SubWord Rcon(7) w[i-Nk] w[i] = temp w[i-Nk] 28 50f46178 f4617850 bfefbc53 40000000 fffebc53 5c3a1102 acd5ad51
Cifragem e Decifragem
Nb bytes texto aberto
Nb bytes
K0
Rodada 1
Nk bytes
KN r
AddRoundKey
Nk bytes
Nk bytes
K2
K1
Rodada Nr-1
Nk bytes
KN r1
K1
KN r
AddRoundKey
Nb bytes
Nk bytes
K0
ltimo Slide