Criptografia chave simétrica de bloco e de fluxo

Este artigo descreve o que são os algoritmos de chave simétrica, no que são baseados e suas aplicações. Descreve os algoritmos simétricos de bloco e de fluxo. Pode ser considerado uma continuação do artigo "Introdução a criptografia".

[ Hits: 180.186 ]

Por: Elgio Schlemer em 09/03/2009 | Blog: https://profelgio.duckdns.org/~elgio


Algoritmos simétricos de fluxo



Historicamente nunca se precisou agrupar uma mensagem em tamanhos de bloco para poder cifrá-la. Os algoritmos de substituição monoalfabética usados no passado permitiam cifrar letra a letra e não precisavam que eu agrupasse-as em conjunto de X letras e tão pouco que eu inserisse caracteres de lixo para completar um bloco. Tradicionalmente, portanto, as cifras eram de fluxo.

Em um algoritmo de fluxo não é necessário ter um bloco para cifrar. Cifra-se o que se tem e, se desejar, no momento que se quiser. Se tenho um byte, cifro e já envio se for o meu desejo. Ao ter mais um byte, cifro e envio e se este era o último byte a ser cifrado, encerro o algoritmo sem qualquer necessidade de completar a informação com "lixo".

De fato, considerando que dentro do processador a menor unidade de informação é um bit, os algoritmos de fluxo permitem cifrar até mesmo bit a bit. Na prática não o fazem por questões de desempenho, já que dificilmente teria apenas um bit para transmitir, sendo que o byte é considerado a informação mínima na maioria dos casos.

O mais incrível é que a operação matemática que permite tal façanha é bem conhecida de muitos. Trata-se do XOR.

O XOR, também conhecido como "OU exclusivo" é uma operação bit a bit, assim como o AND e o OR. No ramo da microeletrônica (onde reside meu passado) o XOR é uma porta lógica. A chamada "Tabela verdade" apresentada na Figura 2 mostra os resultados das operações binárias AND, OR e XOR.
Figura 2: Tabela Verdade
Analisando os resultados da Figura 2 percebe-se que no caso do AND, ambos os bits, A e B, precisam estar em 1 para que a saída seja 1. No caso do OR, basta que um dos bits, A ou B, esteja em 1 para que a saída seja 1. AND e OR não nos interessam aqui, sendo nosso alvo o XOR.

Veja que no XOR, sempre de dois bits A e B forem iguais, o bit resultante será ZERO, sendo UM nos demais casos.

A propriedade que mais nos interessa do XOR é a sua comutatividade e possibilidade de reversão. Se eu faço A xor B = X, ao fazer X xor B eu terei o A e ao fazer X xor A eu terei o B. Ainda, se preciso fazer A xor B xor C, não importa a ordem em que eu faça, o resultado será o mesmo, isto é, pode fazer (A xor B) xor C ou A xor (B xor C) ou qualquer outra combinação.

Veja o exemplo de um XOR bit a bit de 011 com 101:

A = 0 1 1
B = 1 0 1
X = 1 1 0

Aplicando-se o XOR bit a bit de A com B, ou seja, cada bit de A xor com o bit de B de acordo com a tabela verdade, chega-se ao valor de X=110. Observe que se eu fizer A xor X terei:

A = 0 1 1
X = 1 1 0
? = 1 0 1

Veja que os bits resultantes correspondem na verdade aos bits de B. Neste sentido que o XOR é comutativo e reversível, sendo um algoritmo de criptografia por si só. O Word, quando eu o usava há uns 15 anos, permitia que se cifrasse o DOC usando apenas XOR.

Para usar o XOR como algoritmo basta que A seja a mensagem a ser cifrada e B a chave, sendo X o texto cifrado. O destinatário receberá apenas o X e se ele souber antecipadamente o valor de B, poderá realizar X xor B recuperando o A original.

O XOR não pode, porém, ser usado simplesmente como um algoritmo natural pois se o for, será muito vulnerável a criptoanálise. Ele tem uma limitação, pois a chave não pode ser reaproveitada para cifrar mensagens futuras (para não tornar este capítulo massante, explico este problema em um capítulo a parte, no final do artigo).

De qualquer forma o XOR poderia ser usado com segurança se jamais houver uma repetição de chave. Em outras palavras, a chave deve ser tão grande quanto a mensagem e não pode ser reaproveitada. Se a mensagem tiver 1Mbit a chave terá que ter, pelo menos, 1Mbit também.

Esta limitação é uma barreira ao uso seguro do XOR, pois como usaríamos uma chave tão grande quanto a mensagem e ainda descartável. Impraticável.

Porém o algoritmo RC4 conseguiu esta façanha.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Algoritmos simétricos de bloco
   3. Algoritmos simétricos de fluxo
   4. Algoritmo de fluxo RC4
   5. Conclusão e referências
   6. Anexo A: problema do XOR
Outros artigos deste autor

Fundamentos da criptografia assimétrica

Criptografia assimétrica com o RSA

A mágica do dc

Armazenamento de senhas no Linux

Programação com números inteiros gigantes

Leitura recomendada

ttyrec - Ferramenta para auditoria de sistemas Linux

PFSense com Snort

Entendendo SQL Injection

Segurança em seu Linux (parte 2)

Bloqueio de usuários com página de aviso

  
Comentários
[1] Comentário enviado por elgio em 09/03/2009 - 15:08h

***** ERRATA: No desenho da Figura 1 onde lê-se Bytes na verdade são bits. 288 Bits, 320 Bits

[2] Comentário enviado por gustavs em 29/04/2009 - 22:06h

Muito bom! Não conhecia praticamente nada de criptografia, agora me interessei.
Recomenda alguma leitura nesse assunto ?

[3] Comentário enviado por adrianoturbo em 02/05/2009 - 14:24h

Interessante a utilização do XOR.

[4] Comentário enviado por grandmaster em 05/05/2009 - 21:06h

Muito legal o artigo. Bem interessante.

Renato de Castro Henriques
CobiT Foundation 4.1 Certified ID: 90391725
http://www.renato.henriques.nom.br

[5] Comentário enviado por thiagods.ti em 17/06/2009 - 16:12h

Teus artigos geralmente são bons, hoje foi só ver que você lançou um artigo novo que a primeira coisa que eu faço quando tenho tempo é ler.

Parabéns =)

[6] Comentário enviado por Credmann em 21/06/2009 - 17:35h

Este artigo é quase a resposta da minha dúvida:
Qual criptografia tem melhor desempenho numa sessão interativa SSH?

[7] Comentário enviado por leomarcsys em 05/01/2012 - 18:30h

Há uma imprecisão quanto a informação sobre os tamanhos de bloco do AES.
O algoritmo de Rijndael, vencedor do concurso do nist para a definição do AES, prevê tamanhos variados de blocos e de chaves, no entanto o fips-197 que especifica o AES define apenas o tamanho de bloco como 128 bits.
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts