implementação e análise de desempenho do des e triplo-des
Transcrição
implementação e análise de desempenho do des e triplo-des
IMPLEMENTAÇÃO E ANÁLISE DE DESEMPENHO DO DES E TRIPLO-DES Renan Rodrigues de Oliveira e José Luiz de Freitas Júnior Universidade Católica de Goiás Departamento de Computação Av. Universitária, 1440, Setor Universitário. Goiânia/GO BRAZIL E-mails: [email protected] e [email protected] Resumo: Este poster apresenta um comparativo, com relação ao desempenho, entre implementações dos algoritmos criptográficos DES e Triplo-DES desenvolvidas nesta pesquisa e as apresentadas por London[3]. Utilizou-se como ferramentas a linguagem de programação C-ANSI e sistema operacional Linux-Conectiva 8. Apresentam-se os principais procedimentos em C responsáveis pelo ganho em desempenho dos algoritmos DES e Triplo-DES. 1 Introdução Atualmente, devido ao avanço contínuo dos meios de comunicação e transmissão de dados, surgem diversas situações que necessitam de um certo nível de segurança, tornando-se aparente o problema da exposição destes dados ao acesso e uso por pessoas ou entidades não autorizadas. Neste contexto, surge a necessidade de se utilizar a criptografia. Um dos algoritmos criptográficos mais utilizado e difundido é o DES (Data Encryption Standard); proposto pela IBM em 1974 e adotado como padrão pelo governo Americano em 1977 [6]. Em suas operações, utiliza basicamente permutações, transformações, substituições e operações de ou-exclusivo (xor) bit a bit. O DES foi utilizado como padrão até 2001, “cedendo lugar” ao AES (Advanced Encryption Standart), mas ainda é bastante utilizado na versão conhecida como Triplo-DES que ainda é considerado seguro para o padrões atuais. Implementou-se o DES e Triplo-DES e apresenta-se, neste poster, uma avaliação/análise de desempenho destas implementações com as feitas por London [3], ou seja, tratam-se de importantes implementações, pois as mesmas apresentaram melhoras consideráveis com relação ao desempenho com as publicadas por Loudon em 2000 [3]; 2 Implementação do DES e Triplo-DES Considerando que o DES opera sobre blocos de 64 bits, não deve ser surpresa o fato de que seja freqüentemente implementado em hardware. Mas também há lugar para implementações em software, onde é útil ter várias operações básicas para auxiliar no transporte das numerosas permutações, transformações e substituições necessárias no processo de cifragem e decifragem. Para isso, freqüentemente é necessária a execução de operações em nível de um bit de uma determinada estrutura. Para se acessar um bit qualquer, é necessário buscar-se a estrutura que contem o bit desejado, construir uma máscara apropriada de acordo com a posição do bit que se deseja acessar e selecioná-lo com operações lógicas adequadas. Estas são operações simples e rápidas, mas devido a quantidade de operações que são realizadas para se acessar um bit e trabalhando-se com um grande volume de dados, podem não trazer um tempo de execução satisfatório na implementação do DES. Nas implementações em software, surge a possibilidade de se trabalhar apenas com bytes. O byte é o menor dado endereçável, isto é, o menor item que pode ser acessado individualmente. É um tipo de dado “mais visível” que o bit, reduzindo o tempo de acesso às informações requeridas pelo DES e conseqüentemente o tempo de execução da aplicação. Para esse tipo de implementação são utilizadas cadeias de strings onde, no trecho de código apresentado na figura 4, cada byte da string representa o estado de um bit (‘0’ para 0 ou ‘1’ para 1) que são normalmente tratados nas operações realizadas pelo DES através de procedimentos específicos. Como exemplo, é apresentado a seguir (figura 1) o procedimento de permutação do DES, numa implementação baseada em bits, juntamente com outros procedimentos de que necessita (figura 2 e 3). void permuta1(unsigned char *bits,const int *mapeamento, int tam) {unsigned char temp[8]; int i; for(i=0;i<tam;i++) bit_set(temp,i,bit_get(bits,mapeamento[i]-1)); memcpy(bits,temp,8); } Figura 1 - Procedimento de permutação do DES baseado em bits [3] int bit_get(unsigned char *bits, int pos) { unsigned char mask; int i; mask = 0x80; for(i=0;i<(pos%8);i++) mask = mask>>1; return(((mask & bits[(int)(pos/8)]) == mask) ? 1 : 0); } Figura 2 - Verifica o estado de um determinado bit [3] void bit_set(unsigned char *bits, int pos, int state) {unsigned char mask; int i; mask = 0x80; for(i=0;i<(pos%8);i++) mask=mask>>1; if(state) bits[pos/8]=bits[pos/8] | mask; else bits[pos/8]=bits[pos/8] & (~mask);} Figura 3 - Muda o estado de um determinado bit [3] O procedimento de permutação trabalhando-se apenas com bytes, pode ser reduzido ao código apresentado na figura 4. void permuta2(char *bits,const int *mapeamento,int tam) {int i; char per[tam]; for (i=0;i<tam;i++) per[i]=bits[mapeamento[i]-1]; strcpy(bits,per); } Figura 4 - Procedimento de permutação do DES baseado em bytes. Apesar de ser uma implementação “menos elegante”, há uma diminuição da sobrecarga para se realizar as permutações, pois cada permutação é feita de maneira direta considerando o fácil acesso a um determinado byte que representa o estado de um bit. Como no DES existem muitas tabelas de permutações de bits, com esse tipo de acesso consegue-se reduzir de maneira considerável o tempo de execução total do algoritmo. Ainda considerando a implementação em nível de bit, o procedimento responsável pela operação de xor também contribui na sobrecarga da execução total do DES. Este procedimento, quando implementado, realizando a operação de xor diretamente em grupos de bits apresenta um tempo de execução mais satisfatório, do que realizando a operação de xor bit por bit. Como o objetivo é a comparação de implementações diferentes, qualquer modificação pode trazer grande discrepância no resultado final. Os resultados obtidos mostram que quanto menos se trabalha com bits individualmente, mais fácil é o acesso aos dados e mais se ganha no tempo de execução. 3 Análise dos Resultados Obtidos As tabelas 1 e 2 mostram os resultados obtidos nas implementações mencionadas, executadas em um Pentium II - 400 Mhz no sistema Linux - Conectiva 8. Tabela 1 - Tempo de execução do algoritmo DES Qu an t i dade d e b l o co s d e 6 4 bi t s 1 0 .0 0 0 5 0 .0 0 0 1 0 0 .0 0 0 T e m p o T o t a l d a I m p l e m e n t a çã o B as eada B as eada B as eada em by t es em bi t s 1 1 em bi t s 2 2 0 m0 2 . 9 3 8 s 0 m1 0 . 2 6 7 s 0 m1 7 . 9 7 4 s 0 m1 4 . 4 4 7 s 0 m5 1 . 2 9 4 s 1 m2 9 . 6 8 9 s 0 m2 8 . 7 3 2 s 1 m4 2 . 2 5 6 s 2 m5 9 . 4 8 3 s Analisando a tabela 1, a implementação do DES baseada em bytes apresenta ser em média 83,65%, [1 - (0m02.938s / 0m17.974s) x 100], mais rápida do que a implementação baseada em bits2 e 71,38%, [1 - (0m02.938s / 0m10.267s) x 100], mais rápida que a implementação baseada em bits1. 1 2 Utiliza procedimento responsável pela operação xor em grupos de bits. Utiliza procedimento responsável pela operação xor bit por bit. Tabela 2 -Tempo de execução do Triplo-DES Qu an t i dade d e b l o co s d e 6 4 bi t s 1 0 .0 0 0 5 0 .0 0 0 1 0 0 .0 0 0 T e m p o T o t a l d a I m p l e m e n t a çã o B as eada B as eada B as eada em by t es em bi t s 1 1 em bi t s 2 2 0 m0 8 . 8 9 9 s 0 m3 0 . 7 8 1 s 0 m5 3 . 8 7 6 s 0 m4 4 . 3 2 1 s 2 m3 3 . 5 2 3 s 4 m2 9 . 0 4 7 s 1 m2 8 . 4 8 5 s 5 m0 6 . 7 9 9 s 8 m5 8 . 0 0 6 s Era esperado que a implementação do Triplo-DES fosse três vezes mais lenta em relação a implementação do DES normal, devido aos processos utilizados pelo TriploDES na cifragem. Na prática, analisando as tabelas 1 e 2, percebe-se que o Triplo-DES possui em média menos de 1/3 da velocidade do DES normal, pois a implementação baseada em bytes do DES (0m02.938s) e do Triplo-DES (0m08.899s), resulta-se em 3,029 (0m08.899s / 0m02.938s). Isto ocorre devido ao processo de geração dos dois conjuntos de subchaves e artifícios de implementação. A implementação do Triplo-DES baseada em bytes apresenta, proporcionalmente o mesmo desempenho da implementação do DES normal. 4 Conclusão Neste trabalho foram apresentadas diferentes implementações do algoritmo DES, e apontados os principais procedimentos em linguagem C, responsáveis pela diferença no tempo de execução total do algoritmo. Comparando tais implementações, destacou-se a implementação baseada em bytes, que devido às características das operações do DES, analisadas de outro ponto de vista em uma implementação em software, proporcionou resultados mais significativos, tornando o algoritmo DES mais de 4 vezes mais rápido. Implementações do algoritmo DES em ASSEMBLY encontra-se em fase final, assim como implementações do algoritmo IDEA e AES e serão publicadas futuramente. 5 Referências 1. Denning, Dorothy E., (Dorothy Elizabeth), Cryptography and Data Security. Addison-Wesley, 1982 2. Júnior, José Luiz de Freitas, Teixeira, Edilberto Pereira, Souza, João Nunes: Cryptographic System For Storage Of Data Using Linear Codes, IJCR – International Journal of Computer Research, Volume 12, Number 1, pp. 73-80. Nova Science Publishers, 2003. 3. London, Kyle, Dominando Algoritmos com C. Rio de Janeiro, Editora Ciência Moderna Ltda., 2000. 4. Salomaa, Arto, Public-Key Cryptography (EATCS monographs on theoretical computer science; v.23), 2nd enlarged ed. 1996 5. Schneier, Bruce., Aplied Cryptography: Protocols, algorithms and source code in C. New York: John Wiley, 1996. 6. Stinson, D. R., Cryptography: Theory And Practice. CRC Press LLC, 1995.