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: 169.266 ]

Por: Elgio Schlemer em 09/03/2009 | Blog: http://gravatai.ulbra.tche.br/~elgio


Algoritmos simétricos de bloco



Um algoritmo de bloco é, na verdade, uma novidade trazida pelo uso do computador. De fato, todos os algoritmos históricos, até mesmo os usados em guerras como o implementado pela máquina Enigma, não podem ser considerados como de bloco, mas sim como de fluxo.

Em um algoritmo de bloco um bloco de determinado tamanho deve ser cifrado de cada vez. Não é possível cifrar menos do que o tamanho de um bloco.

Em outras palavras, se estou usando um algoritmo de bloco e neste algoritmo o bloco possui 16 letras de tamanho, eu só posso cifrar 16 letras, nem 15 e nem 17. Se ocorrer o fato de precisar cifrar 15 letras ou eu espero a chegada de mais uma letra para ser cifrada ou serei obrigado a inserir uma letra a mais de lixo (chamada de padding).

Se neste hipotético algoritmo de 16 letras como tamanho de bloco eu precisar cifrar 35 letras, terei que dividí-las em pedaços de 16, criando três blocos, os dois primeiros com 16 letras (o que somam 32 letras) e um terceiro bloco com 3 letras + 13 de padding.

A característica de um algoritmo simétrico de bloco é que ele é executado igualmente bloco a bloco, ou seja, o conjunto de operações matemáticas envolvendo a chave é repetido a cada bloco, como demonstra a Figura 1 no caso de um arquivo.
Linux: Criptografia chave simétrica de bloco e de fluxo

No caso da cifra da Figura 1, o tamanho do bloco é 64 bits (8 bytes ou, se for um texto ascii normal, seriam 8 letras). Como o arquivo não é múltiplo de 64 bits, uma "sujeira", chamada de padding, precisou ser inserida para que ele fosse formado por exatos 5 blocos. Cabeçalhos inseridos no arquivo cifrado devem informar qual foi o algoritmo de cifra usada, qual o tamanho de bloco e qual o tamanho real do arquivo para que no ato da decifragem o padding seja descartado.

Como exemplos de algoritmos simétricos pode-se citar o DES e o AES. O DES é um algoritmo de bloco de 64 bits, ou seja, cifra-se 64 bits de cada vez. A chave usada no DES é de 56 bits, mas para que ela fique do mesmo tamanho de um bloco, 8 bits adicionais de paridade são inseridos. Como estes bits são previsíveis eles não aumentam em nada a complexidade de um força bruta que no caso é de 256 possíveis chaves. O DES já é considerado ultrapassado devido ao seu tamanho de chave muito reduzido que. embora ainda demorado para quebrar em um PC caseiro, já não fornece mais segurança.

O AES é um algoritmo de bloco de 128, 192 ou 256 bits. Em sua versão mais "fraquinha", a informação é dividida em blocos de 128 bits de tamanho (16 bytes) e o esquema segue do mesmo jeito como apresentado na Figura 1.

Os algoritmos de bloco possuem um inconveniente quando se pensa em utilizá-los para a comunicação de dados. Se minha intenção é cifrar um arquivo que já se encontra em meu disco, não há problema algum. Porém considere a utilização do AES de bloco (16 bytes) como parte de um protocolo de comunicação instantânea, como ICQ por exemplo. O usuário digita: "OI" e pressiona ENTER.

Neste momento eu tenho apenas três bytes para serem enviados que são 'O' 'I' '\n', ou seja, as duas letras digitadas e a informação da quebra de linha. São apenas 3 bytes, mas eu preciso de 16 para poder cifrar, no mínimo o tamanho de um bloco. Esperar mais caracteres não é uma solução, pois o usuário pode só voltar a digitar depois de obter uma resposta ao seu "OI". Se realmente estivermos usando um algoritmo de bloco, só nos resta a desagradável solução de preencher 12 bytes de lixo, compondo o padding para formar um bloco cifrável. Posso, a título de exemplo e baseado em C, cifrar a string 'O' 'I' '\n' 0 'X' 'X' 'X' 'X' 'X' 'X' 'X' 'X' 'X' 'X' 'X' 'X' Ou ou seja, indicando através de um ZERO que acabou e colocando outras letras até fecharem 16, letras estas que serão ignoradas na decifragem.

A técnica descrita acima, embora perfeitamente viável, consome muitos recursos, sejam de largura de banda ou de processamento para cifrar e decifrar lixo. Ai entram os algoritmos de fluxo para nos salvar.

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

Mecanismo de firewall e seus conceitos

255.255.255.0: A matemática das máscaras de rede

Autenticação por desafio e resposta no SSH

Túneis cifrados com SSH

A mágica do dc

Leitura recomendada

Introdução ao Conceito de Hardening

Testando configurações e segurança do Apache com Nikto

SDI (IDS) com o SNORT, MySQL, PHP e BASE em 15 minutos

Melhorando o nível de segurança com chflags

SmoothWall - Linux para gateway

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts