sexta-feira, 2 de março de 2012

AES explicado....

Depois de bastante tempo.... volto a fazer uma postagem aqui no Blog. Dessa vez vou tentar esmiuçar o AES. Esse algoritmo ele tem algumas peculiaridades bem interessantes. Primeiro porque ele é o novo padrão de cifra de bloco do NIST, isso porque foi vencedor de um concurso promovido por esse próprio órgão para substituição do DES. Segundo porque o nome dele, antes do concurso, era RIJNDAEL e ele não foi considerado o mais seguro, e sim o mais eficiente. Além disso temos algumas outras características dele em relação a chaves e tamanhos de bloco:


·         Originalmente operava com blocos de 128, 160, 192, 224 ou 256, mas foi determinado pelo governo que o algoritmo iria operar apenas em 128.
·         A chave também poderia ser de 128, 160, 192, 224 ou 256, mas foi estabelecido que a chave poderia ter como valores: 128, 192 e 256.


Depois desse breve histórico, vejamos como ele opera:

·         Principio:
o    Existe uma matriz com os bits de entrada.
o    Faz-se substituição por S-box. (Confusão)
o   ShiftRows: Gera-se deslocamento nas linhas da matriz. Permutação
o    MixColumns: Combinação das colunas. Permutação
o    AddRoundKey: Função XOR. Função
o    São feitos:
     ·  10 passos à Chave 128 bits.
     · 12 passos à Chave 192 bits.
     · 14 passos à Chave 256 bits
·         Como funciona o AES:
·  O AES é um algoritmo que trabalha byte a byte, porém é considerado uma cifra de bloco preferencialmente. Vejamos como ele opera:
o    1º - Conversão dos dados em uma matriz.
§  Pois bem, para começar o AES recebe os dados da de algum algoritmo de cifração e então os organiza em uma matriz de 4x4, de forma que serão acondicionados 16 bytes dentro dessa matriz. Não havendo quantidade suficiente, haverá o padding (termo utilizado quando precisamos completar o bloco, por exemplo se não tivermos 16 Bytes, mas sim 12 teremos de completar com Zeros até chegarmos em 16 Bytes.).
o    2º - Primeira rodada
§  Feita a conversão dos dados na matriz de operação (confusão), então AES irá realizar a primeira rodada de cifração. Uma simples operação XOR com a Chave da primeira rodada.
o    3º - A Expansão.
§  De acordo com o tamanho da chave, lembrem-se o AES deriva-se do RINJDAEL, que possui chaves de 128, 160, 192, 224 e 256 bits, que por padrão do Governo americano será de 128, 192 e 256 bits, temos a quantidades de rodadas de cifração. Dessa forma, 128 bits nos trarão 9 rodadas. Para isso precisamos expandir a chave inicial. Sendo assim vejamos:
·         1ª fase – Colunas
o    Para a expansão, então, iremos utilizar a última coluna da última chave utilizada. Por exemplo: se fizermos a segunda chave utilizaremos a última coluna da primeira chave.
o    Iremos trazer o último byte dessa coluna para a primeira posição.
o    Feita essa troca, iremos inserir essa coluna em um s-box. Teremos nossa primeira substituição.
·         2ª fase – XOR
o    Feita a s-box, temos agora que realizar uma XOR com uma constante.
o    Agora de posse dessa nova coluna, temos que realizar mais um XOR agora com a primeira coluna da chave anterior. No nosso exemplo, a primeira coluna.
o    Temos pronta a primeira coluna da próxima chave.
·         3ª fase – Outras colunas
o    De posse da primeira coluna da próxima chave, agora temos de descobrir as outras colunas.
o    Faremos da seguinte forma: coluna anterior XOR coluna correspondente na chave anterior. Por exemplo: para definirmos a 3ª coluna, ela será a 2ª coluna XOR 3ª coluna da chave anterior.
o    4ª – Rodadas
§  Após definirmos as chaves, iremos a seguir realizar as rodadas necessárias para o tamanho da chave.
o    5ª – Confusão e difusão.
§  Após as rodadas iremos agora, de posse do novo texto quase cifrado, aplicar mais uma vez a s-box. Essa ação é necessária para aplicarmos a confusão na nossa cifração.
§  Feitas as s-box, iremos agora movimentar nossa linhas para aplicar a difusão. Faremos assim, a primeira linha desloca-se um byte para a esquerda e o que sobrar irá par ao final da linha. A segunda irá deslocar-se 2 posições a esquerda e os dois que sobrarem para o final da linha. Faremos assim até a quarta linha, sempre aumentando o numero de bytes que voltam para o final da linha.
§  Para terminar nossa difusão, iremos misturar as colunas.
o    6ª – Mais uma chave
§  Ao final de cada rodada, iremos aplicar a chave da próxima rodada no nosso texto atual.
o    7ª – só pra terminar
§  Terminando iremos misturar as colunas mais uma vez para aumentar a segurança. Lembrando que isso não será feito na ultima rodada.