Escolar Documentos
Profissional Documentos
Cultura Documentos
O Algoritmo AES Apresentacao e Descricao Da Estrura
O Algoritmo AES Apresentacao e Descricao Da Estrura
1
Laboratório Nacional de Computação Cientı́fica
Av. Getulio Vargas, 333, Quitandinha CEP: 25651-075 Petrópolis - Rio de Janeiro.
2
Universidade Católica de Petrópolis - UCP
Rua Barão do Amazonas, 124, Centro - CEP: 25685-070 Petrópolis - Rio de Janeiro.
{rasouza, borges, gerson}@lncc.br
Abstract. This article has the purpose of show in a clear form the functioning of
AES (Advanced Encryption Standard), algorithm which became the standard of
cryptography, to the security of the American government data. There is a short
introduction telling the story of the AES competition and later we will demons-
trate its functioning, by the explanation of the stages of encryption/decryption
algorithm and a simple example.
1. Introdução
Durante 20 anos, o DES (Data Encryption Standard) foi o algoritmo padrão usado pelo
governo americano para proteger informações confidenciais. O surgimento do AES
(Advanced Encryption Standard) decorreu da grande necessidade de se substituir o DES,
que se tornou ultrapassado em virtude do pequeno tamanho da chave (56 bits) utilizada.
Para isso, o NIST (National Institute of Standards and Technology) lançou em 1997
um concurso para adotar o novo algoritmo simétrico, que passaria a se chamar AES
(Advanced Encryption Standard).
O algoritmo deveria atender a alguns requisitos, tais como: direitos autorais livres;
divulgação pública; maior rapidez em relação ao 3DES; cifrar em blocos de 128 bits com
chaves de 128, 192 e 256 bits; possibilidade de implementação em software e hardware.
Na Primeira Conferência dos Candidatos AES, em 98, apresentaram-se 15 candidatos
e, em 1999, a Segunda Conferência indicou 5 destes para continuar na disputa: MARS,
RC6, Rijndael, Serpent e Twofish. Em 2000, após análises rigorosas de especialistas
na área de criptografia, é conhecido o vencedor: Rijndael. O algoritmo foi criado por
Vincent Rijmen e Joan Daemen, dois belgas. Como tanto na primeira quanto na segunda
etapa do concurso, todos os algoritmos descritos atendiam às exigências do concurso, a
decisão foi tomada com base em outras qualidades como segurança, flexibilidade, bom
desempenho em software e hardware etc.
2. O algoritmo AES
2.1. Estrutura
O Rijndael suporta tamanhos de chave e bloco variando entre 128, 160, 192, 224 e 256
bits, diferentemente do AES. Apesar de os dois possuı́rem o mesmo funcionamento, aqui
usaremos exemplos com blocos e chaves 128 bits, apenas.
A chave é agrupada da mesma maneira que o bloco de dados, com número de co-
lunas Nk [NIST 2001]. Usaremos a sigla Nr (number of rounds) para designar o número
de rodadas que serão utilizadas durante a execução do algoritmo. No AES o número de
rodadas varia de acordo com o tamanho da chave, sendo Nr igual a 10, 12 e 14, para Nk
igual a 4, 6 e 8, respectivamente.
Essa é a única transformação da cifra que não é linear [Daemen and Rijmen 2002]. Cada
byte do estado é substituı́do por outro em uma S-box (caixa de substituição). Todos os
valores dessa caixa são dados em hexadecimal. A substituição é feita da seguinte maneira:
os quatro primeiros e os quatro últimos bits do byte a ser substituı́do representam em
hexadecimal, respectivamente, a linha e a coluna onde se encontra o novo byte. Por
exemplo, o valor hexadecimal c2 deverá ser substituı́do pelo byte que se encontra na linha
c e na coluna 2 da S-box, que é o valor 25. A tabela 1 mostra a S-box usada no AES.
A inversa da operação SubBytes chama-se InvSubBytes, e usa uma S-box inversa. Por
exemplo, aplicando a S-box no valor a6, obtemos o valor 24. Então, aplicando a S-box
inversa em 24 obtemos o valor a6.
Nesta etapa, cada coluna é operada de forma independente. Isso quer dizer que o resultado
da operação em uma determinada coluna não influencia o resultado nas demais. Entre-
tanto, cada byte de uma coluna influencia todos os outros bytes da mesma. Nessa etapa, as
colunas do estado são tratadas como polinômios sobre o corpo finito1 GF (28 ). Podemos
representar essa transformação por uma multiplicação de matrizes. O novo estado S 0 será
o resultado da multiplicação de uma matriz fixa C pela matriz S que representa o estado,
ou seja,
0 0 0 0
S1,1 S1,2 S1,3 S1,4 02 03 01 01 S1,1 S1,2 S1,3 S1,4
0 0 0 0
S2,1 S2,2 S2,3 S2,4 = 01 02 03 01 S2,1 S2,2 S2,3 S2,4 ,
0 0 0 0
S3,1 S3,2 S3,3 S3,4 01 01 02 03 S3,1 S3,2 S3,3 S3,4
0 0 0 0
S4,1 S4,2 S4,3 S4,4 03 01 01 02 S4,1 S4,2 S4,3 S4,4
1 Para saber mais sobre corpos finitos consulte [Horowitz 1971] e [Klima et al. 2000]
2.1.4. Transformação AddRoundKey
AddRoundKey é uma operação de XOR entre o estado e a chave da rodada, que possuem
o mesmo número de bytes. Assim, essa transformação opera cada byte individualmente.
O XOR é feito byte a byte, ou seja, se sx,y é um byte do estado e kx,y um byte da chave,
temos que o byte s0x,y do novo estado é igual a sx,y ⊕ kx,y . A operação é representada na
Tabela 2. A transformação AddRoundKey é sua própria inversa.
primeiras palavras do vetor com os bytes da chave principal. Depois, temos duas ocasiões
a considerar:
i não é múltiplo de Nk - Nesse caso, wi será obtida através de uma operação de XOR
entre temp = w[i−1] e w[i−N k] , as palavras 1 e Nk posições anteriores a ela, respec-
tivamente;
i é múltiplo de Nk - Usamos outras operações [NIST 2001]:
1. RotWord - Rotaciona a palavra uma posição (correspondente a um byte) à
esquerda;
2. SubWord - Aplica a S-box do AES em cada byte da palavra;
3. Rcon(j) - Faz uma operação de XOR entre o resultado dos dois primeiros
itens com 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
multiplicação sobre GF (28 ). A tabela abaixo mostra o valor de RC[j] a
cada rodada.
Como estamos trabalhando com uma chave de 128 bits, e portanto 10 rodadas, de-
vemos ter 11 chaves de rodada. Em primeiro lugar, selecionamos a chave principal. A
nossa será BOLSISTA6 bDO6 bCNPq. Agrupando em bloco e utilizando a tabela ASCII,
podemos ver a matriz da chave na Tabela 7.
Tabela 7. Chave principal agrupada em bloco
B I 6b C 42 49 20 43
O S D N 4f 53 44 4e
L T O P
ASCII
−−−−→ 4c 54 4f 50
S A 6b q 53 41 20 71
A operação de soma no corpo finito que estamos usando corresponde a uma operação
de XOR entre os bits. Então, quando somarmos dois polinômios, eliminaremos os
termos iguais dois a dois. A operação de multiplicação é uma multiplicação comum de
polinômios, porém o resultado é obtido módulo m(x) = x8 + x4 + x3 + x + 1. Isto quer
dizer que iremos trabalhar com o resto da divisão do polinômio em questão (caso seu
grau seja maior que 7) por m(x). Para adiantar, temos que o resto da divisão de x8 por
m(x) é igual a x4 + x3 + x + 1. Usaremos ⊗ para denotar o produto entre dois elementos
de GF (28 ).
A aritmética polinomial que usaremos aqui pode ser encontrada na seção 4.5 do li-
vro de Stallings [Stallings 2005]. Com essas informações em mãos, podemos realizar a
operação MixColumns. Como já vimos, o nosso estado após essa etapa será o resultado
de uma multiplicação de matrizes. Chamando esse novo estado de S, teremos:
S1,1 S1,2 S1,3 S1,4 02 03 01 01 c9 a2 63 76
S2,1 S2,2 S2,3 S2,4 01 02 03 01 c5 67 63 ab
S= S3,1 S3,2 S3,3 S3,4
=
01 01 02 03 63 7d 63 6f
.
S4,1 S4,2 S4,3 S4,4 03 01 01 02 23 47 63 63
Como esta etapa é bastante longa, mostraremos apenas o cálculo do byte da primeira linha
e primeira coluna. Os demais foram calculados de maneira análoga.
S1,1 = (02 ⊗ c9) ⊕ (03 ⊗ c5) ⊕ 63 ⊕ 23
= (00000010 ⊗ 11001001) ⊕ (00000011 ⊗ 11000101)
⊕ (01100011) ⊕ (00100011)
= x ⊗ (x7 + x6 + x3 + 1) ⊕ (x + 1) ⊗ (x7 + x6 + x2 + 1)
⊕ (x6 + x5 + x + 1) ⊕ (x5 + x + 1)
= (x8 + x7 + x4 + x) ⊕ (x8 + x7 + x3 + x + x7 + x6 + x2 + 1)
⊕ (x6 + x5 + x + 1) ⊕ (x5 + x + 1)
= x7 + x4 + x3 + x2 + 1
= 10011101
= 9d
Após Rodada 1: f1 e9 66 40 c2 e3 68 ac 40 4d 97 02 e9 61 4b c1
Acabamos de cifrar a primeira rodada. Este processo é repetido 9 vezes, sendo que na
última é omitida a operação MixColumns. A Tabela 14 mostra os resultados da rodada 10.
No processo de decifragem, a rodada 1 corresponde à decifragem da rodada 10; a rodada
2 decifra a rodada 9, e assim por diante. Isso ocorre, evidentemente, porque partimos
do texto cifrado para chegar à mensagem, realizando um processo de “volta”. Nosso
objetivo neste trabalho é cifrar e decifrar a mesma rodada, para mostrar com detalhes
como funciona cada operação e sua inversa. Assim, os resultados obtidos na rodada 9
podem ser consultados na Tabela 15. Agora vamos para a rodada 10, que corresponde à
a operação InvShiftRows, Tabela 18, e logo após temos a etapa InvSubBytes, Tabela 19.
Finalmente, não podemos nos esquecer de que, durante o processo de cifragem, foi feita
uma AddRoundKey antes da rodada 1. Portanto, faremos agora uma AddRoundKey com
a chave de rodada 0, a mesma utilizada naquela ocasião. Veja o resultado na Tabela 20.
Tabela 19. InvSubBytes - Rodada 10
c9 a2 63 76 12 1a 00 0f
ab c5 67 63 0e 07 0a 00
InvSubBytes
63 6f 63 7d −−−−−−−−−→ 00 06 00 13
47 63 63 23 16 00 00 32
3. Conclusão
Esse trabalho apresentou o algoritmo que é o atual padrão de criptografia dos EUA,
descrevendo detalhadamente suas etapas e os processos de cifragem e decifragem. O al-
goritmo usa uma caixa de substituição (S-box), rotações, a operação de xor, multiplicação
de matrizes, e trabalha sobre o corpo finito GF (28 ).
4. Agradecimentos
Gostarı́amos de agradecer ao PIBIC/CNPq, pelo apoio financeiro para este trabalho.
Referências
Daemen, J. and Rijmen, V. (2002). The design of Rijndael: AES — The Advanced En-
cryption Standard. Springer-Verlag.
Horowitz, E. (1971). Modular arithmetic and finite field theory: A tutorial. In SYMSAC
’71: Proceedings of the second ACM symposium on Symbolic and algebraic manipu-
lation, pages 188–194, New York, NY, USA. ACM Press.
Klima, R. E., Sigmon, N., and Stitzinger, E. (2000). Applications of abstract algebra with
Maple. CRC Press, Boca Raton, FL.
NIST (2001). Specification for the Advanced Encryption Standard (AES). Federal Infor-
mation Processing Standards Publication 197.
Stallings, W. (2005). Cryptography and Network Security Principles and Practices,
Fourth Edition. Prentice Hall.