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.

sábado, 29 de outubro de 2011

Princípios de Kerckhoff


Kerkhoff nos traz 6 princípios da segurança da informação que um sistema deve atender para que seja considerado seguro:
  1. Caso um sistema seja teoricamente passível de ser quebrado, ele não deverá o ser na prática. Kerkhoff traz esse princípio baseado na ideia que qaunado se trata de segurança da informação, não se pode garantir que nada será seguro na teoria, porem na prática devem ser estabelecidos métodos para que se consiga manter a segurança e a confiança no sistema.
  2. A efetividade do sistema não deve depender de que seu desenho se mantenha em segredo. Para Kerkhoffs, a segurança deve ser estabelecida na chave e não no código ou desenho do sistema. A segurança deve conseguir se manter apenas com a qualidade da chave. Complementando o princípio, shannon, traz a ideia de que o atacante conhece seu sistema e por isso basear sua segurança nisso pode ser uma ideia errada. Essa ideia é conhecida como máxima de Shannon.
  3. A chave deve ser facilmente memorizável. Quando trata-se de segurança da informação na prática, o elo mais fraco é o ser humano. Por isso, para Kerkhoffs, se houver necessidade de que se escreva a senha, então ela não é ideal, pois será criada mais uma vulnerabilidade a ser explorada por atacantes.
  4. Os criptogramas deverão apesentar resultados alfanuméricos. Esse princípio já não tão importante nos dias atuais, pois os computadores já são capazes até mesmo de criar chaves em formatos unicamente computacionais. Contudo, para Kerckoffs, os sistemas criptográficos deveriam respeitar as limitações humanas, pois do contrário eles estariam fadados ao fracasso. Essa situação realmente se torna importante, ao verificarmos que se um sistema trouxesse extrema dificuldade de operação, os usuários acabariam por utilizar “gatos” com o objetivo de simplificar o uso.
  5. O sistema deve ser operável por uma única pessoa. Seguindo a linha do 4º princípio, Kerckoff acreditou que um sistema que não fosse operável por uma única pessoa, considerado até mesmo portável, estaria com os dias contados.
  6. O sistema deve ser fácil de utilizar.  Este princípio encerra a ideia trazida pelo princípios 4º e 5º, tendo em vista que havendo extrema dificuldade de operação do sistema, logo ele será abandonado ou enfraquecido por uso de atalhos. Um exemplo que temos na história é o caso da Máquina Enigma, utilizada pelo exército Alemão. A máquina era utilizada por todas as forças alemãs, e com o tempo passou inclusive a integrar as forças do eixo, Espanha e Itália. O problema é que a versão alemã sofreu diversas alterações, o que garantia de certa forma as segurança, porém pela dificuldade de se adaptar a máquina, as forças espanholas adquiriram uma versão comercial deste equipamento. Junto a isso, existem relatos que indicam que os alemães, devido a dificuldade de operação, começaram a utilizar formas previsíveis de encaixe dos discos. Estes dois fatos facilitaram em grande parte a decodificação do sistema pelas forças aliadas. Acredita-se que a guerra teve seu termino adiantado em 1 ano devido a esse episodio.

  
Atualmente, em Segurança da Informação, apenas o 2º  princípio é utilizado, não apenas utilizado, mas serve como um norte para desenvolvimento de novos algoritmos criptográficos. Esta situação ocorre, pois se percebeu que a manutenção em segredo de todo o processo envolvido na construção dos mais diversos algoritmos criptográficos era muitíssimo dispendiosa a qualquer um. Devido a isso, o princípio tornou-se então quase que uma norma para quem quisesse desenvolver novos algoritmos criptográficos. Com o tempo, constatou-se que a segurança dos novos algoritmos tinha sido incrementada com essa prática, pois antes apenas uma cabeça conhecia o processo, agora todos o conhecem e podem melhorá-lo, aperfeiçoando, assim, toda a segurança do algoritmo.

Flws...