Criptografia Numaboa
O algoritmo IDEA ilustrado
Dom 11 Set 2005 17:16 |
- Detalhes
- Categoria: Cifras de bloco
- Atualização: Terça, 14 Abril 2009 14:06
- Autor: vovó Vicki
- Acessos: 30109
O algoritmo IDEA (International Data Encryption Algorithm) foi desenvolvido em 1990, na ETH Zurique - Suíça, por James L. Massey e Xueija Lai. O IDEA é um algoritmo simétrico que utiliza uma chave de 128 bits.
Originalmente, o IDEA foi chamado de PES (Proposed Encryption Standard). Um ano após o seu lançamento, em 1991, Biham e Shamir demonstraram que o algoritmo era susceptível à criptoanálise diferencial e os autores fizeram modificações substanciais. Chamaram o novo algoritmo de IPES (Improved Proposed Encryption Standard). Em 1992, o IPES foi rebatizado transformando-se no IDEA, um dos melhores algoritmos de bloco. O proprietário da patente deste método é a ASCOM. Visando sua disseminação, a ASCOM autorizou o uso não comercial do algoritmo.
O algoritmo IDEA
O algoritmo é usado tanto para a cifragem quanto para a decifração e, como outras cifras de bloco, usa a confusão e a difusão (maiores detalhes na Teoria da Informação) para produzir o texto cifrado. A filosofia que norteou este projeto foi "misturar operações de grupos algébricos diferentes". O IDEA possui três grupos algébricos cujas operações são misturadas. Estas operações, que podem ser facilmente implementadas via hardware e/ou software, são:
Adição módulo 216 (adição ignorando qualquer overflow)
Multiplicação módulo 216+1 (multiplicação ignorando qualquer overflow)
Todas estas operações são feitas com blocos de 16 bits, o que faz com que este algoritmo também seja eficiente em processadores de 16 bits.
Descrição do IDEA
Na cifragem, o texto claro é dividido em blocos de 64 bits. Cada um destes blocos é dividido em quatro sub-blocos de 16 bits: B1, B2, B3 e B4. Estes quatro sub-blocos são a entrada da primeira volta ou rodada do algoritmo. No total, são oito rodadas. Em cada rodada, os quatro sub-blocos são submetidos à operação lógica XOR, somados e multiplicados entre si e com seis sub-blocos de 16 bits oriundos da chave (K1, K2, K3, K4, K5 e K6). Entre cada rodada, o segundo e o terceiro sub-bloco são trocados.
Em cada rodada, a sequência de eventos é a seguinte (acompanhe no fluxograma acima):
- Multiplicação de B1 pelo primeiro sub-bloco da chave K1.
- Adição de B2 com o segundo sub-bloco da chave K2.
- Adição de B3 com o terceiro sub-bloco da chave K3.
- Multiplicação de B4 pelo quarto sub-bloco da chave K4.
- XOR entre os resultados obtidos nas etapas (1) e (3).
- XOR entre s resultados obtidos nas etapas (2) e (4).
- Multiplicação do resultado da etapa (5) pelo quinto sub-bloco da chave K5
- Adição dos resultados das etapas (6) e (7).
- Multiplicação do resultado da etapa (8) pelo sexto sub-bloco da chave K6.
- Adição dos resultados das etapas (7) e (9).
- XOR entre os resultados obtidos nas etapas (1) e (9).
- XOR entre os resultados obtidos nas etapas (3) e (9).
- XOR entre os resultados obtidos nas etapas (2) e (10).
- XOR entre os resultados obtidos nas etapas (4) e (10).
A saída da rodada são os quatro sub-blocos resultantes das etapas (11), (13), (12) e (14). Exceto na última rodada, os sub-blocos (13) e (12) trocam de lugar e esta nova sequência de sub-blocos será a entrada para a próxima rodada.
Após a oitava rodada, a saída final é transformada com:
- Multiplicação de B1 pelo primeiro sub-bloco da chave K1.
- Adição de B2 com o segundo sub-bloco da chave K2.
- Adição de B3 com o terceiro sub-bloco da chave K3.
- Multiplicação de B4 pelo quarto sub-bloco da chave K4.
No final, os quatro sub-blocos obtidos (G1, G2, G3 e G4) são concatenados para produzir o texto cifrado.
Sub-blocos da chave
A obtenção de sub-blocos da chave é simples. O algoritmo usa 52 destes sub-blocos - seis em cada uma das oito rodadas, mais quatro na última transformação. Inicialmente, a chave de 128 bits é dividida em oito sub-blocos de 16 bits. Estes são os primeiros sub-blocos da chave: seis serão usados na primeira rodada e os outros dois serão K1 e K2 da segunda rodada. Depois disto, os bits da chave são deslocados 25 posições para a esquerda e a nova chave é novamente dividida em oito sub-blocos, dos quais quatro serão usados na segunda rodada e quatro na terceira. Este processo continua enquanto sub-blocos da chave forem necessários para completar o algoritmo.
A decifração do IDEA
O processo da decifração é o mesmo da cifragem, com exceção dos sub-blocos da chave que precisam ser revertidos. Na decifração, os sub-blocos da chave são o inverso aditivo ou o inverso multiplicativo dos sub-blocos da chave usados na cifragem. É preciso salientar que, no caso do IDEA, o inverso multiplicativo de 0 é 0. Estes cálculos são um pouco trabalhosos, mas, em compensação, só precisam ser realizados uma vez para cada um dos sub-blocos. A tabela abaixo mostra os sub-blocos da chave na cifragem e os sub-blocos da chave correspondentes na decifração:
RODADA SUB-BLOCOS NA CIFRAGEM ------ --------------------------------- 1 K1(1) K2(1) K3(1) K4(1) K5(1) K6(1) 2 K1(2) K2(2) K3(2) K4(2) K5(2) K6(2) 3 K1(3) K2(3) K3(3) K4(3) K5(3) K6(3) 4 K1(4) K2(4) K3(4) K4(4) K5(4) K6(4) 5 K1(5) K2(5) K3(5) K4(5) K5(5) K6(5) 6 K1(6) K2(6) K3(6) K4(6) K5(6) K6(6) 7 K1(7) K2(7) K3(7) K4(7) K5(7) K6(7) 8 K1(8) K2(8) K3(8) K4(8) K5(8) K6(8) saída K1(9) K2(9) K3(9) K4(9)
RODADA SUB-BLOCOS NA DECIFRAÇÃO ------ -------------------------------------------- 1 K1(9)-1 -K2(9) -K3(9) K4(9)-1 K5(8) K6(8) 2 K1(8)-1 -K2(8) -K3(8) K4(8)-1 K5(7) K6(7) 3 K1(7)-1 -K2(7) -K3(7) K4(7)-1 K5(6) K6(6) 4 K1(6)-1 -K2(6) -K3(6) K4(6)-1 K5(5) K6(5) 5 K1(5)-1 -K2(5) -K3(5) K4(5)-1 K5(4) K6(4) 6 K1(4)-1 -K2(4) -K3(4) K4(4)-1 K5(3) K6(3) 7 K1(3)-1 -K2(3) -K3(3) K4(3)-1 K5(2) K6(2) 8 K1(2)-1 -K2(2) -K3(2) K4(2)-1 K5(1) K6(1) saída K1(1)-1 -K2(1) -K3(1) K4(1)-1
A velocidade do IDEA
A velocidade de cifragem e decifração do IDEA é praticamente a mesma do DES. Devido aos cálculos suplementares nos sub-blocos da chave, a decifração é um pouco mais lenta do que a cifragem.
Criptoanálise
O comprimento da chave do IDEA é de 128 bits. Um ataque de força bruta dos mais eficientes precisaria fazer 2128 (ou 1036) cifragens para recuperar a chave. Se dispuséssemos de um bilhão de chips que testassem um bilhão de chaves por segundo cada um, ainda assim seriam necessários 1013 anos para se realizar a tarefa! Talvez a força bruta não seja o melhor método para se quebrar o IDEA...
O algoritmo IDEA é imune à criptoanálise diferencial e, de acordo com Eli Biham, seu ataque criptoanalítico de chave relacionada também não funcionou contra o IDEA. Existem alguns textos que "descobriram" uma classe de chaves fracas. Estas chaves fracas são diferentes das chamadas chaves fracas do DES, onde a função de cifragem é auto-inversa. São consideradas fracas porque, se forem utilizadas, um atacante pode identificá-las com facilidade através de um ataque de texto claro escolhido. Por exemplo, a chave
é uma chave fraca, sendo que os F podem ser substituídos por qualquer dígito hexadecimal. Este não é um problema crucial porque a chance de acidentalmente gerar uma chave deste tipo é extremamente pequena, da ordem de 2-96.
Programando o IDEA
A seguir, transcrevo o texto HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM - sumário da implementação por Fauzan Mirza ( O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. )
Observações do autor
Este documento foi escrito para ajudar programadores a entenderem como implementar o criptossistema IDEA.
Obrigado a Colin Plumb ( O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. ) por ajudar a eliminar os erros que fiz na versão rascunho deste documento. As fontes foram obtidas da implementação do IDEA em assembly 8086 feita por Colin Plumb e a fonte da referência IDEA é de Richard De Moliner ( O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. ). Por favor, avisem-me se houver erros ou omissões.
O IDEA trabalha com unidades de 16 bits. Se você for processar bytes, estes estão definidos como big-endian de modo que, numa máquina Intel, é preciso trocar os bytes de posição.
O IDEA possui uma chave de usuário de 16 bytes (128 bits) que é expandida numa subchave de 104 bytes (832 bits). Os dados são processados em blocos de 8 bytes (64 bits).
O código fonte em C
A função Idea precisa receber a subchave, não a chave do usuário. O exemplo de código a seguir exige que a multiplicação seja feita em módulo 65537 (como definido nas especificações do IDEA). Uma entrada zero é considerada como sendo 65536.
A função a seguir pode ser usada para realizar a multiplicação módulo 65537 usada no IDEA.
A função a seguir é usada para expandir a chave do usuário e obter a subchave de cifragem. Os primeiros 16 bytes são a chave do usuário, o restante da subchave é calculado fazendo a rotação dos 16 bytes anteriores deslocando-os 25 bits para a esquerda. O processo é repetido até que a subchave seja completada. O código a seguir pode ser otimizado.
A função para inverter a subchave de cifragem para obter a subchave de decifragem é necessária para decifrações que usam modos ECB e CBC. Inclui também as funções dos inversos multiplicativo e aditivo.
Regras:
- x + addinv(x) == 0
- x * mulinv(x) == 1 (modulo 65537)
Esta função calcula o inverso multiplicativo usando o algoritmo do Máximo Divisor Comum de Euclides. Zero e um são inversos deles mesmos.
Comentários e Sugestões
Caso você queira criticar, complementar ou alterar este texto sobre o algoritmo IDEA, faça contato por email usando a área de texto do menu identificada com PERGUNTA/CONTATO. É a forma mais rápida de se comunicar comigo. Não se esqueça de incluir o seu endereço de email para que eu possa responder. Por favor, confira seu endereço antes de enviar sua mensagem.
Grande abraço
vovó Vicki
Fontes
- at-mix
- Schneier, Bruce - Applied Cryptography, 1994
- HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM