DEAL
Esta página ou se(c)ção precisa ser formatada para o padrão wiki. (Junho de 2016) |
Em Criptografia, DEAL (Data Encryption Algorithm with Larger blocks) é um algoritmo de cifra de blocos simétrica construído baseado em um outro, conhecido como DES (Data Encryption Standard). Proposto inicialmente por Lars Knudsen em 1998, e, posteriormente, submetido ao AES Contest por Richard Outerbridge, o DEAL não avançou às finais do concurso, como já se era esperado, pois foram encontradas falhas de segurança graves, além de que seu tempo de execução, comparado com os demais candidatos, era muito alto, próximo ao do Triple-DES.
Diz-se que o DEAL é uma rede de Feistel que usa o DES como função de turno, em inglês, round function. Seu funcionamento se dá com blocos de 128 bits, e com as chaves podendo ter tamanhos iguais a 128, 192 ou 256 bits. Nos casos em que o tamanho da chave é igual a 128 ou a 192 bits, o DEAL realiza 6 turnos para cifrar ou decifrar a mensagem, e no caso de a chave possuir tamanho igual a 256 bits, o algoritmo realiza 8 turnos.
Introdução
[editar | editar código-fonte]O DES é um algoritmo de cifra de blocos que utiliza chaves de tamanho igual a 64 bits, dos quais 56 são realmente utilizados, e o restante . Possui estrutura de uma rede de Feistel, e realiza 16 turnos de maneira iterativa para criptografar a mensagem original [1].
Segundo [2] e [1], um dos problemas que podem ser apontados no DES é o tamanho da chave, considerado pequeno atualmente, pois alguns softwares conseguiram quebrar sua criptografia, por meio de buscas exaustivas pela chave, ou seja tentando todas as chaves possíveis.
Esta falha foi superada com o 3-DES, ou Triple-DES, que consiste em criptografar a mensagem 3 vezes usando o DES e chaves diferentes a cada vez. Entretanto, ainda assim o algoritmo é vulnerável a um ataque conhecido como "Chave Relacionada", em inglês, related-key attack, com tempo de execução próximo ao ataque no DES original [2].
Proposto em 1999 por Lars Knudsen, o DEAL é uma rede de Feistel com R turnos, sendo o DES a função de turno do algoritmo, e utiliza blocos de tamanho igual a 128 bits e a chave tem tamanho variando entre 128, 192 ou 256 bits. O autor do projeto é professor no departamento de matemática aplicada e ciência da computação na universidade técnica de Denmark, e sua página com informações de contato pode ser acessada em [3].
Segundo [2] para chaves de tamanho 128 ou 192 bits, é recomendado usar R = 6, isto é, realizar 6 turnos do algoritmo, e R = 8 no caso de a chave ter 256 bits de tamanho, e seu tempo de execução é próximo do Triple-DES. O DEAL foi um dos algoritmos que concorreram no AES contest.
Este concurso foi promovido para eleger um algoritmo para substituir o DES. O algoritmo não avançou às finais, pois foi considerado lento e algumas falhas graves de segurança foram apontadas.
Algoritmos semelhantes ao DEAL, são conhecidos por serem cifras de Luby-Rackoff. Isso se deve ao fato de que Michael Luby e Charles Rickoff demonstraram uma forma eficiente de se construir funções pseudo-aletórias, de maneira bastante eficiente, utilizando uma rede de feistel de 3 ou 4 turnos.
Um algoritmo semelhante ao DEAL também caiu em desuso, pois foram encontradas falhas de segurança. Este algoritmo é conhecido como Ladder-DES e alguns artigos como [4] provam as falhas encontradas.
Princípios do projeto
[editar | editar código-fonte]O algoritmo DES foi tido como seguro durante algum tempo, e considerado como algoritmo padrão de criptografia pela NIST (National Institute of Standards and Technology). Entretanto, com o avanço da tecnologia foi possível explorar falhas do algoritmo, tais como encontrar a chave por meio de tentativa e erro, ou seja testar todas as chaves possíveis até encontrar a correta, dado que o tamanho desta é 56 bits e, posteriormente, publicações demonstravam como quebrar a criptografia do algoritmo em menos e um dia [5].
Por volta de 1999, a NIST anunciou a intenção de substituir o DES, dando lugar a um outro algoritmo que receberia o nome de AES (Advanced Encryption Standart), motivando a criação de vários outros algoritmos que buscavam suprir as falhas que eram apontadas, como o DEAL. Além disso, nesta época, a NIST se mostrou ciente de que levaria alguns anos até que o AES estivesse pronto para uso e, por conta disso, o Triple-DES foi reconhecido como algoritmo oficial [2].
Esta atitude da NIST, de aprovar o Triple-DES como algoritmo oficial para criptografia, motivou a criação do DEAL, uma vez que ele pode ser entendido como um aprimoramento do DES e executa com tempo similar ao do Triple-DES, utiliza conceitos conhecidos, explicados mais adiante, e seguros, além de que ele oferece meios para aumentar o tamanho da chave, visando se prevenir de ataques de força bruta, ainda que a tecnologia avançasse bastante, e, portanto, poderia vir a ser o algoritmo padrão.
Estrutura de funcionamento
[editar | editar código-fonte]O DEAL é uma cifra de blocos de tamanho igual a 128 bits, que fornece três opções para o tamanho, em bits, da chave: 128, 192 ou 256, denominados DEAL-128, DEAL-192 ou DEAL-256. Sua estrutura é de uma rede de Feistel, explicada a seguir, que utiliza como função de turno o algoritmo DES, também explicado a seguir.
Um turno do DEAL funciona da seguinte forma:
- Divide a entrada em duas partes de mesmo tamanho L e R;
- Seja NL o resultado da aplicação do DES em L;
- recebe R ⊕ NL;
- Retorne R || L, em que || significa concatenação.
A saída de um turno é a entrada do próximo, com exceção do último, cuja saída é o texto cifrado.
Rede de Feistel
[editar | editar código-fonte]Rede de Feistel, em inglês Feistel Network, é uma construção especifica para esquemas de criptografia simétrica e foi descrita primeiramente por Horst Feistel durante seu trabalho na cifra de Lúcifer, predecessora do DES, na IBM [6].
Uma rede de Feistel define uma função F: → parametrizada por um número inteiro D, geralmente entre 12 e 16, que é a quantidade de turnos a serem executados. Cada turno utiliza uma função, denominada função de turno, definida por f : → . A figura 1 descreve o processo de encriptação e decriptação de uma rede de Feistel:
Formalmente, um turno i ∈ [1, D], da rede de Feistel pode ser descrito da seguinte forma:
- Divida a entrada em duas partes de mesmo tamanho, denominadas e ;
- Aplique a função de turno à metade direita, denominada ;
- Faça um XOR bit a bit da metade esquerda com ;
- Gere || ⊕ , em que || indica concatenação.
Inicialmente, é a metade esquerda da entrada e a metade direita;
A saída de um turno é a entrada do seguinte, com exceção do último, cuja saída é o resultado esperado.
DES - Data Encryption Standard
[editar | editar código-fonte]O DES, algoritmo base para o DEAL, também é uma rede de Feistel de 16 turnos e seu funcionamento, simplificado, está descrito pelo pseudo-código a seguir:
Entrada:
- T: 64 bits de texto em claro
- chaves para cada turno
Saída:
- C: texto cifrado de 64 bits
inicio T ← IP(T) //IP = Permutação Inicial ← T >> 32 ← T & 0xFFFF para r = 1 a R faça: ← ← ⊕ fim_para X ← << 32 & retorne FP(X) //FP = Permutação Final fim_algoritmo
Funcionamento do algoritmo
[editar | editar código-fonte]Segundo [2], o funcionamento do DEAL pode ser explicado, utilizando o modo de operação ECB, de acordo com a figura 2, que mostra a estrutura de um dos R turnos que são executados:
Neste caso, é a função usada no turno j, que corresponde ao DES aplicado a com a chave . Neste caso é a parte esquerda da entrada e a parte direita. Formalmente, define-se a estrutura de funcionamento da seguinte forma:
- Seja a encriptação em 64 bits de A com a chave b usando o DES;
- Seja a metade esquerda do texto no turno i;
- Seja a metade direita do texto no turno i;
Divide-se o texto em claro P em blocos de 128 bits, denominados . A rotina de geração de chaves, definida mais adiante, recebe um conjunto de S chaves como entrada e retorna R chaves para o DES, denominadas .
Para cada bloco executa-se o seguinte procedimento, para cada bloco i, com i variando de 1 a n:
inicio Inicialmente define-se e ; Para todo j de 1 à r executa-se os seguintes passos: = ⊕ ; = . fim_para || , em que || significa concatenação. Retorne fim_algoritmo
A rotina, retirado de [7], de modo geral, para criação das R chaves necessárias está descrita a seguir:
- Receba como entrada S chaves para o DES: ;
- Seja DK uma chave para aplicação do algoritmo DES;
- Expanda as S chaves para R chaves, com operações ⊕ (XOR) entre elas e uma nova constante para cada repetição, usando as S chaves de maneira cíclica, isto é, use-as na sequência e volte ao começo quando a sequência acabar;
- Criptografe as R chaves com o DES em modo CBC com IV (Initial value) igual a zero e aplicado com a chave DK;
- O resultado destas criptografias formam o conjunto de chaves do DEAL.
Em particular, esta rotina funciona de três formas diferentes, uma para cada um dos três tamanhos de chave do DEAL, e estão especificados a seguir:
Para chave de tamanho 128 bits é construída uma chave para cada um dos 6 turnos:
- ;
- ⊕ ;
- ⊕ 1 ⊕ ;
- ⊕ 2 ⊕ ;
- ⊕ 4 ⊕ ;
- ⊕ 8 ⊕ .
Desta forma, para chave de tamanho igual a 128 bits é necessário a escolha de S = 2 chaves para o DES, além da chave DK.
Para chave de tamanho 192 bits é construída uma chave para cada um dos 6 turnos:
- ;
- ⊕ ;
- ⊕ ;
- ⊕ 1 ⊕ ;
- ⊕ 2 ⊕ ;
- ⊕ 4 ⊕ .
Desta forma, para chave de tamanho igual a 192 bits é necessário a escolha de S = 3 chaves para o DES, além da chave DK.
Para chave de tamanho 256 bits é construída uma chave para cada um dos 8 turnos:
- ;
- ⊕ ;
- ⊕ ;
- ⊕ ;
- ⊕ 1 ⊕ ;
- ⊕ 2 ⊕ ;
- ⊕ 4 ⊕ ;
- ⊕ 8 ⊕ .
Desta forma, para chave de tamanho igual a 256 bits é necessário a escolha de S = 4 chaves para o DES, além da chave DK.
Segundo [2], as constantes foram incluídas para evitar chaves fracas, pois caso estas não estivessem presentes todas as subchaves poderiam ser iguais, por exemplo, suponha para o DEAL-128 as chaves geraria 6 subchaves iguais a zero.
Criptoanálise
[editar | editar código-fonte]Segundo [2] [7] [8] , o DEAL está vulnerável aos seguintes ataques:
- Meet-in-the-middle;
- Ataque de texto em claro escolhido para a versão de 6 turnos;
- Ataque de texto cifrado escolhido ao DEAL-192;
- Ataque de chaves relacionadas ao DEAL-192 e 256.
Segundo [8], o ataque Meet-in-the-middle pode ser aplicado para recuperar as chaves utilizadas nos turnos do DEAL. O autor do algoritmo, Lars Knudsen, em [7], explica que o ataque pode ser feito, embora demande um alto processamento computacional e muito tempo para se conseguir. Para a versão de 6 turnos são necessárias encriptações, e para a versão de 8 turnos são necessárias encriptações. Desta forma, devido a quantidade de memória necessária, este ataque não poderia ser feito com a tecnologia atual.
Segundo [7], o ataque de texto cifrado escolhido pode ser aplicado ao DEAL para qualquer tamanho de chave, uma vez que é possível mostrar que para quebrar a criptografia gerada a partir de uma rede de Feistel de N bits com 5 ou 6 turnos, que utiliza uma função de turno que gera uma permutação de bits verdadeiramente aleatória, requer o conhecimento de pelo menos textos em claro e suas cifras correspondentes. Desta forma, ele enuncia a seguinte proposição: "Existe um ataque ao DEAL de 6 turnos independente do tamanho da chave, que necessita de encriptações usando DES e textos em claro escolhidos".
Segundo [8], para este ataque são necessários textos cifrados escolhidos, com r ∈ ]0,32], podendo ser um número real.
Uma vez que este ataque é realizado ao DEAL-192, o número de turnos é igual a seis. Desta forma, considere os últimos quatro turnos . Seja a entrada destes o par ∈ e a saída o par ∈ . Considere dois pares de entrada e saída , e , com , ⊕ = α = ⊕ .
Entretanto, esses dois pares de entrada e saída não podem existir, pois: uma vez que α = ⊕ e , temos que ⊕ = α = ⊕ e, então, ⊕ ≠ 0. Por outro lado, uma vez que ⊕ = α = ⊕ , e ⊕ = α = ⊕ , seria necessário que ⊕ = 0. O que é uma contradição com e .
Desta forma, é possível explorar a não existência destes pares para recuperar as chaves:
- Escolha um valor = ∈ e ∈ valores diferentes, gerando textos cifrados diferentes . Considere dois textos cifrados e com ≠ e os correspondentes textos cifrados e ;
- Para todas as possíveis chaves R, compute ⊕ e ⊕ ;
- Para todas as possíveis chaves S, compute ⊕ e ⊕ . Se ⊕ ⊕ , então o par pode ser descartado, ou seja ≠ . Se é um par errado, espera-se atingir o par correto com probabilidade . Uma vez que temos textos cifrados escolhidos e assim conjuntos com exatamente dois textos cifrados, e espera-se que pares descartados, logo se r = 0.5, espera-se descartar 50% dos pares.
Segundo [2], há ainda um ataque possível de se fazer ao DEAL quando as chaves possuem tamanhos 192 ou 256. Neste ataque, detecta-se chaves quase equivalentes às chaves originais. Isto pode ser feito da seguinte forma: dado três pares de textos em claro e cifrados, suponha que o par de chaves seja quase equivalente aos pares originais. É possível determinar se este par possui esta propriedade, ou seja de ser quase equivalente, com um custo de e utilizando alocações de memória. Montamos algo muito parecido com o ataque Meet-in-the-middle utilizado para quebrar o 2-DES (uma variante do algoritmo DES, que utiliza duas chaves do DES para encriptar a mensagem).
Exemplo prático
[editar | editar código-fonte]Devido às falhas de segurança e ao tempo de execução, o DEAL não avançou às finais do concurso do AES, e, por conta disso, não há exemplos práticos de uso deste algoritmo.
Algoritmos semelhantes, tais como Ladder-DES, também não têm aplicações práticas que podem ser descritas aqui.
Entretanto, é possível implementar o DEAL, uma vez que há bibliotecas que implementam o DES. Fica a cargo do programador definir as rotinas de geração das chaves para o DES. Feito isso, pode-se usar o código, implementado em Java, a seguir como base para a construção do algoritmo:
Cipher enc = Cipher.getInstance("DES/ECB/PKCS5Padding");
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
byte chaveBytes[] = {(byte)0xf3,(byte)0xf1,(byte)0x10,(byte)0x56,
(byte)0x89,(byte)0x23,(byte)0x07,(byte)0x43};
DESKeySpec dks = new DESKeySpec(chaveBytes);
SecretKey chave = skf.generateSecret(dks);
String[] DESkeys = constructKeysForDES();
enc.init(Cipher.ENCRYPT_MODE, chave);
String input;
input = entrada();
String []blocos128bit = quebraBlocos(input);
int tamanho_chave = getKeyLength();
int turnos = getTurnos(tamanho_chave);
String[] chaves = geraChaves(tamanho_chave, DESkeys);
ArrayList<String>cifrados = new ArrayList<>();
for (int i = 0 ; i < blocos128bit.length ; ++i)
{
String x0 = esquerda(blocos128bit[i]);
String y0 = direita(blocos128bit[i]);
for (int j = 0; j < turnos; ++j)
{
String auxiliar = y0;
y0 = XOR(enc.update(x0.getBytes(), 0, x0.getBytes().length), y0);
x0 = auxiliar;
}
cifrados.add(y0 + x0);
}
Conclusões
[editar | editar código-fonte]O DEAL foi excluído da competição para a escolha do AES por apresentar falhas de seguranças graves conforme foi discutido. Isso implica que o algoritmo foi deixado de lado e atualmente não é possível encontrar aplicações nem implementações deste.
Embora o DEAL tenha algumas provas de segurança, outros ataques puderam ser feitos para quebrar a sua segurança, partindo do princípio de que a tecnologia atual tem poder para executar um número de operações bastante elevado, que permite quebrar criptografias que no passado eram consideradas seguras, avanço este que motivou o concurso para a substituição do DES.
Algoritmos como o Ladder-DES, que é muito semelhante ao DEAL por usar blocos de 128 bits e usar o DES como função de turno para a rede de Feistel, também caíram em desuso por apresentarem falhas de segurança, o que torna mais complicado encontrar aplicações que implementam algoritmos semelhantes ao DEAL.
Inclusive o autor do algoritmo Lars Knudsen [3] não possui nada sobre o algoritmo em sua página.
Desta forma, apesar de usar conceitos bastante conhecidos, o DEAL, embora seja imune a ataques de força bruta, parte de premissas, cujas falhas podem ser exploradas por um atacante, e o torna vulnerável a ataques de texto em claro ou cifrado escolhido.
- ↑ a b «Chapter 2 The Data Encryption Standard (DES)» (PDF). Consultado em 30 de junho de 2016. Arquivado do original (PDF) em 20 de novembro de 2016
- ↑ a b c d e f g h John Kelsey and Bruce Schneier (Agosto 1999). «Key-Schedule Cryptanalysis of DEAL» (PDF). Consultado em 30 de junho de 2016
- ↑ a b «Lars R. Knudsen». Consultado em 30 de junho de 2016
- ↑ Eli Biham (Maio 2006). «Cryptanalysis of Ladder-DES» (PDF). Consultado em 30 de junho de 2016[ligação inativa]
- ↑ SciEngines. «Break DES in less than a single day». Consultado em 30 de junho de 2016
- ↑ Michael Backes. «Block Ciphers» (PDF). Consultado em 30 de junho de 2016
- ↑ a b c d Lars Knudsen (Fevereiro 1998). «DEAL - A 128-bit Block Cipher» (PDF). Consultado em 30 de junho de 2016. Arquivado do original (PDF) em 18 de setembro de 2016
- ↑ a b c Stefan Lucks (Maio 2001). «On the Security of the 128-bit Block Cipher DEAL». Consultado em 30 de junho de 2016