Pular para o conteúdo

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".
Elgio Schlemer elgio
Hits: 182.992 Categoria: Linux Subcategoria: Segurança
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Parte 3: 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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
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.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   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

Criptografia assimétrica com o RSA

Estrutura do Iptables

Introdução a criptografia

Programação com números inteiros gigantes

Sinais em Linux

PSAD: Port Scan Attack Detector

Metaspoit: Brute force + invasão com meterpreter encriptado com RC4

Squid 3 - Instalação no Debian/Ubuntu

Portal de autenticação wireless (HotSpot)

Como saber se houve uma invasão

#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.
#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

Entre na sua conta para comentar.