Criptografia Numaboa
Modos de operação das cifras de bloco
Qui 6 Out 2005 18:15 |
- Detalhes
- Categoria: Cifras de bloco
- Atualização: Terça, 20 Novembro 2012 18:08
- Autor: vovó Vicki
- Acessos: 30178
As cifras de bloco operam em blocos de tamanho fixo, geralmente de 64 ou 128 bits. Para cifrar mensagens cujo comprimento ultrapasse o tamanho do bloco, existem vários modos de operação. A maioria apenas confere confidencialidade; algumas proporcionam confidencialidade e autenticação. Este texto é um resumo dos principais modos de operação das cifras de bloco.
ECB - Electronic codebook
O modo de operação mais simples é o electronic codebook - ECB (livro de código eletrônico). A mensagem clara é fracionada em blocos de tamanho fixo e cada bloco é cifrado isoladamente. No final, a mensagem cifrada é obtida pela concatenação dos blocos cifrados.
A desvantagem deste método é que blocos de texto claro iguais produzem também blocos cifrados iguais, ou seja, o método não esconde o padrão dos dados. Este modo de operação não acrescenta nada à confidencialidade proporcionada pela cifra. A comparação do resultado da aplicação de uma cifra de bloco nos dados de uma imagem gráfica, usando diversos modos de operação, mostra de forma clara a contribuição à confidencialidade proporcionada pelos modos de operação.
A imagem da direita mostra o aspecto da imagem original cifrada com CBC, CTR ou qualquer outro modo de operação mais seguro. Estes modos fazem com que a imagem cifrada não guarde resquícios da imagem original porque introduzem distúrbios (chamados de ruído) de forma aleatória (ou randômica). Esta aparência, no entanto, não garante que o método de cifragem aplicado seja seguro. Mesmo uma cifra de baixíssima segurança pode introduzir ruído.
O modo ECB também pode fazer com que protocolos sem proteção de integridade se tornem ainda mais vulneráveis a ataques, principalmente a ataques de replay (veja em Criptoanálise/Tipos de ataque).
CBC - Cipher-block chaining
No modo de operação cipher-block chaining - CBC (corrente de blocos), é feita uma operação XOR entre cada novo bloco de texto claro com o bloco cifrado obtido na etapa imediatamente anterior. Desta forma, cada um dos blocos cifrados depende de todos os blocos de texto claro anteriores.
O CBC é um dos modos de operação mais utilizados. Sua maior desvantagem é ser sequencial. Como não pode ser usado em paralelo (pois sempre depende do resultado anterior), seu uso dificulta o processamento de blocos em paralelo, o que melhoraria o desempenho do método.
PCBC - Propagating cipher-block chaining
O modo de operação propagating cipher-block chaining - PCBC (corrente de blocos em propagação) foi projetado para propagar ou esparramar melhor que o CBC pequenas alterações no texto cifrado. É usado quase que exclusivamente no Kerberos e no WASTE. As rotinas de cifragem e decifração são as seguintes:
O vetor de inicialização é
CFB - Cipher feedback e OFB - output feedback
O modo Output Feedback (OFB) transforma uma cifra de bloco num gerador de números pseudo-aleatórios. O texto cifrado realimenta a cifra de bloco e este processo é repetido para produzir um fluxo de bits pseudo-randômicos. O fluxo de bits é totalmente determinado pelo algoritmo, pela chave, por um vetor de inicialização e pelo número de bits que realimentam a cifra em cada etapa. O fluxo de bits pode então servir para fazer uma operação XOR com o texto claro afim de produzir o texto cifrado, transformando efetivamente a cifra de bloco numa cifra de fluxo.
O modo Cipher Feedback (CFB) difere do OFB apenas porque o texto cifrado (depois da etapa XOR) realimenta o método ao invés da saída da cifra de bloco (antes da etapa XOR). Uma cifra de bloco operando no modo CFB não pode ser usada como um gerador de números randômicos.
Com o cipher feedback um bloco de fluxo de chave é calculado cifrando-se o bloco de texto cifrado anterior.
O modo output feedback gera o próximo bloco de fluxo de chave cifrando o bloco de fluxo de chave anterior:
Cifras de Feistel
O diagrama a seguir mostra a estrutura genérica de uma cifra de Feistel, um esquema usado na grande maioria das cifras de bloco modernas. A entrada é quebrada em dois blocos de mesmo tamanho, geralmente chamados de esquerdo (L - left) e direito (R - right), que são repetidamente ciclados através do algoritmo. Em cada ciclo, uma função hash (f) é aplicada no bloco direito e na chave, e o resultado do hash é usado para fazer um XOR com o bloco esquerdo. Depois disto, os blocos são trocados. O resultado do XOR torna-se o novo bloco direito e o bloco direito inalterado torna-se o bloco esquerdo. O processo é então repetido algumas vezes.
A função hash é apenas um embaralhador de bits. A operação correta do algoritmo se baseia apenas na propriedade determinística da função hash, ou seja, se processar exatamente as mesmas entradas o resultado será sempre o mesmo.
Na decifração, o texto cifrado é dividido nos blocos esquerdo e direito. A chave e o bloco bloco direito são submetidos à função hash para se obter o mesmo resultado hash usado no último ciclo da cifragem (observe que o bloco direito permanece inalterado no último ciclo da cifragem). Depois disto é feito um XOR entre o hash e o bloco esquerdo para reverter o último ciclo da cifragem e o processo é repetido até que todos os ciclos tenham sido revertidos.
A segurança de uma cifra de Feistel depende essencialmente do tamanho da chave e da irreversibilidade da função hash. A forma ideal é quando o resultado da função hash se parece com bits randômicos, a partir dos quais não seja possível obter qualquer informação a respeito da(s) entrada(s).
CTR - Counter
Assim como o OFB, o modo de operação counter - CTR (contador) transforma a cifra de bloco numa cifra de fluxo. Ele cria o próximo bloco de fluxo de chave cifrando os valores sucessivos de um "contador". O contador pode ser qualquer função simples que produza uma sequência que, com certeza, só srá repetida depois de um longo intervalo de tempo. Apesar dessa exigência, os contadores simples são os mais utilizados. O modo CRT possui características muito semelhantes às do OFB, porém permite um acesso randômico na decifração e é comprovadamente seguro se a cifra de bloco também for segura.
Proteção de Integridade e propagação de erro
Os modos de operação das cifras de bloco mostrados acima não proporcionam qualquer proteção de integridade. Isto significa que um atacante, apesar de não conhecer a chave, pode modificar o fluxo de dados de acordo com as suas necessidades. Hoje em dia se sabe que, sempre que houver uma cifragem de dados, é também essencial que se adicione uma proteção de integridade para garantir a segurança. Em operações seguras, o VI (vetor de inicialização) e o texto cifrado gerado através destes modos de operação deveriam ser autenticados com um MAC que deve ser checado antes de se efetuar uma decifração.
Antes desses fatos serem conhecidos, era comum a discussão da "propagação de erros" dos modos de operação. Observava-se, por exemplo, que um erro em um dos blocos cifrados transmitidos resultaria num erro em apenas um dos blocos de texto claro recuperado se o modo fosse ECB, enquanto que, no modo CBC, o erro afetaria dois blocos.
Havia os que achavam que esta resiliência era desejável devido aos erros randômicos, como também havia os que argumentavam que isto aumentava as possibilidades de atacantes modificarem mensagens em proveito próprio. Entretanto, quanto uma proteção de integridade efetiva é aplicada, tais erros fazem com que a mensagem seja (com grande probabilidade) descartada.
O vetor de inicialização
Para finalizar, algumas considerações sobre os vetores de inicialização. Com exceção do modo de operação ECB, todos os outros requerem um vetor de inicialização - VI. Este vetor é uma espécie de "bloquinho" (dummy block) cuja única função é inicializar o processo para o primeiro bloco. Além disso, este bloquinho também adiciona um elemento randômico ao processo. O VI não precisa ser secreto, mas é importante que o mesmo VI não seja reutilizado com a mesma chave. Nos modos CBC e CFB, a reutilização de VIs deixa vazar algumas informações. Nos modos OFB e CTR, VIs repetidos destroem totalmente a segurança. Já no modo CFB, o VI precisa ser gerado randomicamente e ser mantido em segredo até que o primeiro bloco de texto claro esteja pronto para ser cifrado.