Escolar Documentos
Profissional Documentos
Cultura Documentos
Resumo: Este trabalho retrata a implementao do algoritmo criptogrfico Advanced Encryption Standard (AES). A escolha do Algoritmo AES se deve ao fato de
ser o atual padro avanado de encriptao sendo selecionado aps um longo concurso
onde vrios algoritmos foram criptoanalisados por toda a comunidade de criptologia.
Alm de sua eficincia, o AES tambm foi projetado para permitir a expanso da
chave quando necessrio, ser implementado tanto a nvel de software quanto a nvel
de hardware e disponibilizado livremente, o que permite o seu uso em aplicaes
diversas sem a necessidade de pagamento de royalties.
Abstract: This paper shows the implementation of cryptographic algorithm Advanced Encryption Standard (AES). The choice of AES algorithm considered the fact
that it is the current advanced encryption standard, being selected after a long contest
where various algorithms were cryptoanalized by the cryptology community. Furthermore, the AES was designed to allow expansion of the key when necessary, allow
implementation in software and in hardware and is free, allowing its use in many
applications without requiring the payment royalties.
Introduo
a chave. A criptologia, do grego krypts + lgos (estudo, cincia), a cincia que rene a
criptografia e a criptoanlise.
Embora existam vrios mtodos para esconder informaes, do ponto de vista computacional predominam dois, a saber, o mtodo de chaves simtricas e o mtodo de chave
pblica ou chaves assimtricas.
No mtodo de chaves simtricas uma mensagem ou arquivo encriptado com uma
chave e, a mesma utilizada para fazer a decriptografia. A chave composta por caracteres
alfanumricos caracteres e dgitos e tambm caracteres especiais (acentos, espaos), pois,
o que realmente conta seu valor em binrio e, o tamanho da chave mensurado pelo nmero
de bits que a compe. A encriptao por chave privada funciona muito bem quando o usurio
que encripta o mesmo que desencripta o arquivo e os arquivos no precisam ser transmitidos
pela rede tampouco compartilhados. Mas quando se trata de uma mensagem que vai ser
transmitida, surge um problema, pois, o receptor e o transmissor precisam antes combinar
uma senha, e usar algum meio seguro para transmitir esta informao de tal modo que a
informao no possa ser capturada por alheios, seno a mensagem pode ser descoberta. Um
meio realmente seguro de transmisso de dados muito caro e difcil de obter e, caso exista,
a prpria mensagem pode ser transmitida por ele no tendo necessidade de criptografla.
Na criptografia tradicional os caracteres da frase eram substitudos por outros de um
alfabeto secreto. Assim, bastava conhecer o alfabeto para poder decifrar qualquer mensagem
enviada. Um exemplo deste mtodo a muito conhecida Cifra de Csar, onde cada caractere
substitudo por um que est trs posies frente, por exemplo, A substitudo por D [3].
Os algoritmos criptogrficos baseados em blocos recebem a cada iterao um nmero
de bits como entrada e estes bits so cifrados e armazenados em alguma mdia secundria [3].
Vrios algoritmos utilizam a criptografia por blocos, como o AES, DES e RC5. A criao
destes foi feita atravs de concursos do governo americano para ser o algoritmo padro de
criptografia [3]. Para poder concorrer os algoritmos deveria cumprir alguns requisitos, como:
A segurana do algoritmo deve ficar restrita a chave dele e no ao algoritmo, assim,
recomendvel que o algoritmo seja aberto para que pessoas do mundo todo possam
testar suas fragilidades [3].
O algoritmo tambm deve ser adaptvel para o uso em diversas aplicaes [3].
A implementao em dispositivos eletrnicos (embarcada) deveria ser econmica [3].
O algoritmo deveria ser eficiente [3].
O primeiro algoritmo a ser eleito como padro americano nessas condies foi o DES.
Este ficou por anos sendo o algoritmo padro, at que em 1998 um novo concurso foi feito
para a escolha e uma verso do Rijndael foi apresentada como AES [4].
14
metodologia
b = (b7 x7 + b6 x6 + b5 x5 + b4 x4 + b3 x3 + b2 x2 + b1 x + b0 )
p(x) = (b7 x7 + b6 x6 + b5 x5 + b4 x4 + b3 x3 + b2 x2 + b1 x + b0 )
(1)
15
(2)
P 2(x) = b7 x7 + b1 x + b0
(3)
e
ento
P 1 + P 2 = (ab b7 )x7 + (a6 b6 )x6 + (a5 b5 )x5 + (a4 b4 )x4 +
(a3 b3 )x3 + (a2 b2 )x2 + (a1 b1 )x + (a0 b0 )
(4)
(5)
(6)
x7 + x + 1
(7)
por
16
obtm-se
x13 + x11 + x9 + x8 + x7 + x7 + x5 + x3 + x2 + x + x6 + x4 + x2 + x + 1
(8)
resultando em
x13 + x11 + x9 + x8 + x5 + x5 + x4 + x3 + 1
(9)
(10)
17
plataforma celular (J2ME). Em Java os dados do tipo byte so sinalizados podendo representar valores na faixa 128 a 127. O AES necessita bytes com valores positivos, e, como Java
no possui valores sem sinal mais interessante utilizar dados do tipo short que comportam
valores de 32768 a 32767, tendo 16 bits cada. Todos dados internos do AES so do tipo
short, incluindo o estado, a chave e as tabelas de substituio (SBox e SBox inversa).
O AES foi implementado utilizando o Java JDK verso 1.6 update 20, na IDE Netbeans 6.8 e est dividido em classes e pacotes para uma melhor organizao. A Figura 1
mostra a estrutura do projeto Netbeans.
O pacote aescore tem as classes importantes para cifragem e decifragem e tambm
uma classe para expanso de chave. Neste pacote est a classe Cipher que possui as transformaes SubBytes, ShiftRows, AddRoundKey e MixColumns implementadas.
O mtodo SubBytes recebe como entrada uma matriz 4 4 que representa o estado
atual do AES. Cada byte no estado substitudo por outro byte da SBox que est armazenada
na classe Sbox. O mtodo ShiftRows recebe como entrada o estado e executa as rotaes
cclicas nas linhas 2, 3 e 4 em 1, 2 e 3 posies respectivamente.
No mtodo AddRoundKey so passados como parmetro o estado atual do algoritmo
e o vetor de chaves expandidas, alm do nmero do round, e, a cada round uma chave
expandida misturada matriz do estado. No mtodo MixColumns as colunas do estado
so misturadas a dois bytes, 0x02 e 0x03 atravs da multiplicao. Alm destes mtodos
18
19
20
13.}
Aps desenvolver o crifrador comeou-se o desenvolvimento do decifrador. Os mtodos usados na decifragem esto definidos dentro da classe InverseCipher, sendo estes AddRoundKey que ir adicionar uma chave expandida, InverseMixColumns que faz o inverso
da mistura, InverseShitRows que faz a rotao inversa das colunas, InverseSubBytes que faz
a substituio dos bytes pela tabela inversa (InverseSBox) e um mtodo que controla todos
outros InverseCipherDataBlock, que tem seu pseudocdigo mostrado na Listagem abaixo.
1. public short[][] inverseCipherDataBlock(short[][] state,
short[][] keySchedule)
2. {
3.
addRoundKey(state,keySchedule,nr);
4.
for(int round = nr-1; round > 0; round--){
5.
inverseShiftRows(state);
6.
inverseSubBytes(state);
7.
addRoundKey(state,keySchedule,round);
8.
inverseMixColumns(state);
9.
}
10. inverseShiftRows(state);
11. inverseSubBytes(state);
12. addRoundKey(state,keySchedule,0);
13.}
Aps a implementao do crifrador e decifrador foram feitos testes para verificao de
resultados baseados em [5]. Alm destes testes foram verificadas questes de performance.
Todas operaes aqui citadas esto descritas em [5].
Resultados e Discusso
Os testes para verificar a eficincia da implementao foram feitos de acordo com [5].
Os resultados para o AES com chave de 128 bits pode ser visto na Tabela 4. Na Tabela 5
esto os resultados do AES com chave de 192 bits e na Tabela 6 esto os resultados obtidos
para o AES com uma chave de 256 bits.
Pde-se perceber que nos testes a sada aps a cifragem foi igual sada mostrada por
[5]. Tambm percebe-se que a sada da decifragem igual a entrada, ou seja, aps serem
cifrados os dados puderam tambm ser decifrados.
21
22
Figura 2. Arquivo de entrada com 20 bytes (topo), cifrado (meio) e decifrado com 32 bytes
(baixo).
Armazenando o nmero de bytes que o ltimo bloco possui os bytes excessivos (espaos no caso do texto) deixam de aparecer no arquivo decrifrado.
A velocidade de execuo do AES estava comprometida pelo fato das multiplicaes
levarem muito tempo e, a cada bloco so feitas 32 multiplicaes. Para evitar este problema
os resultados possveis das multiplicaes foram armazenados em um vetor. So 4 multiplicadores utilizados na MixColumns e 255 possveis valores (dos bytes) de entrada. Os
resultados so armazenados em um vetor, assim, para saber o resultado de uma multiplicao
de um byte basta acessar a posio do valor do byte no vetor de resultados.
Aps essa implementao o tempo de execuo diminuiu para um tero do anterior.
Mesmo assim, o tempo de execuo continuou elevado devido ao mtodo de leitura dos
arquivos, j que so lidos 16 bytes por vez, gerando mais acessos ao disco rgido.
23
Concluses
Referncias
[1] Randall K. Nichols. Icsa Guide to Cryptography. McGraw-Hill Professional, 1998.
[2] Bruce Schneier. Applied cryptography (2nd ed.): protocols, algorithms, and source code
in C. John Wiley & Sons, Inc., New York, NY, USA, 1995.
[3] R. F. WEBER. Criptografia contempornea. In VI Simpsio de Computadores Tolerantes
a Falhas, pages 732, 1995.
[4] Jorge De Albuquerque LAMBERT. Cifrador simtrico de blocos: Projeto e avaliao.
Dissertao de mestrado apresentada ao curso de mestrado em sistemas e computao,
Instituto Militar de Engenharia, Rio de Janeiro, 2004.
[5] Announcing The Federal. Processing standards publication 197.
[6] Harvey M. Deitel and Paul J. Deitel. Java How to Program (6th Edition). Prentice-Hall,
Inc., Upper Saddle River, NJ, USA, 2004.
[7] Oracle. Oracle technology network for java developers, jun 2009.
24