Вы находитесь на странице: 1из 294

Dedicatria

Agradeo minha familia pelo apoio, incentivo e compreenso nos momentos de ausncia e, em especial, por terem sempre pacincia e muito amor. minha familia da Colmbia por seu eterno amor. Edward

Dedico este livro minha esposa Ednia, e ao meu filho, Pedro Lus, que iluminam o meu caminho. Aos meus pais que sempre me apoiaram, e aos meus amigos, que sempre me incentivaram em todos os sentidos. Fbio

Ofereo este livro aos meus pais Alcides e Marta, e minha irm Josiane, que sempre estiveram ao meu lado, apoiando-me e incentivando. Aos meus familiares pela compreenso e ateno em todos os momentos. Rodolfo

Agradecimentos

A DEUS pois, sem Ele, no estaramos aqui e no fariamos nada daquilo que fazemos. Mantenedora do UNIVEM, Fundao de Ensino Eurpides Soares da Rocha, pelo comprometimento com a educao de ensino superior, formando profissionais com excelncia acadmica e responsabilidade social, e principalmente, por oferecer condies acadmicas integradas realizao de pesquisas, pois entendem que um dos caminhos para se alcanar excelncia acadmica, universitria e profissional. Aos amigos e colegas do UNIVEM (Centro Universitrio Eurpides de Marlia, S.P.) que trabalham no LAS Laboratrio de Arquitetura e Sistemas Computacionais. Em especial a Cesar Giacomini Penteado e Rodrigo de Almeida Pericini que dividiram momentos de dificuldade e sucesso nos projetos e na vida. Aos amigos Paulo Henrique Trecenti, Luis Fernando Ruivo Gatti, Eduardo Elias Lano de Oliveira, Thiago Albuquerque Pinto; cujos trabalhos de Concluso de curso apresentado no curso de Bacharelado em Cincia da Computao do UNIVEM auxiliaram e, muito, a realizao deste livro. Aos profissionais da rea de computao e informtica: Emiliano da Silva Alves, Vivian Patricia Mascarin e Everson Luiz Vilela Tescaro, que fizeram a sua especializao em engenharia de software, nos cursos lato-sensu do UNIVEM. Aos alunos do Mestrado em Cincia da Computao e alunos da especializao em redes de computadores e segurana da informao do UNIVEM. A todas as outras pessoas que, mesmo no citadas aqui, deram muito apoio e incentivo, que, sem os quais, esse livro no chegaria sua concluso.

Sobre os autores

Edward David Moreno professor Doutor no UNIVEM (Centro Universitrio Eurpides de Marlia), e atua tanto no programa de mestrado stricto-sensu em cincia da computao quanto no curso de BCC (Bacharelado em Cincia da Computao). Tambm Professor credenciado no programa de Ps-graduao da Universidade de So Paulo (USP, So Paulo) e membro do grupo HPCAC (High Performance Computer Architecture and Communications) da POLI-USP. O Prof. Moreno finalizou seu Ps-Doutorado na UFSCar (Universidade Federal de So Carlos), So Carlos/SP, 2000 na rea de Aplicaes em Computao de Alto Desempenho, o seu Doutorado em Eng. Eltrica/POLI-USP, 1998 na rea de Computao de Alto Desempenho e Arquiteturas Avanadas de Computador e o seu Mestrado em Eng. Eltrica/POLI-USP, 1994 na rea de Arquitetura de Computadores. Finalmente, a Graduao foi em Eng. Eltrica/Universidad del Valle, Cali,Colmbia,1991, com o projeto de Microcontroladores em Gate Arrays CMOS. No ano de 1999, fez uma especializao em Gesto de Projetos, na PUCParan. As reas de interesse do Prof. Moreno so: Arquitetura de Computadores, Computao de Alto Desempenho, Avaliao de Desempenho, Computao Reconfigurvel e Prototipao de Sistemas Digitais. O Prof. Moreno tem escrito e publicado, como autor principal e co-autor, aproximadamente 100 artigos em eventos nacionais e internacionais. Experincia internacional trabalhando como pesquisador convidado em projetos tais como NUMAchine Multiprocessor desenvolvido na universidade de Toronto, Canad, e no projeto Large Databases for Multiprocessors desenvolvido em Chalmers University of Technology, Gotebrg, Sucia. Ele participa ativamente na comunidade internacional, tendo j colaborado como membro de comit de programa em aproximadamente 50 eventos de renome internacional. Fbio Dacncio Pereira bacharel e Mestre em Cincia da Computao pelo UNIVEM (Centro Universitrio Eurpides de Marlia). O projeto do mestrado foi na rea de processadores para Segurana. Foi monitor do Laboratrio de Arquitetura e Sistemas Computacionais (LAS) e Bolsista de IC da FAPESP (Fundao de Amparo Pesquisa do Estado de So Paulo), no perodo de Agosto 2000 a Dezembro 2002, e bolsista CAPES no ano de 2004. Atualmente professor do UNIVEM. As reas de interesse so: Circuitos e Sistemas Digitais em FPGAs, Avaliacao de Desempenho e Projeto de Processadores em FPGAs. Tem publicado alguns trabalhos em eventos nacionais e internacionais na rea com nfase no livro recente: Projeto, Implementao e Desempenho de Sistemas Digitais em FPGAs.
5

Rodolfo Barros Chiaramonte bacharel em Cincia da Computao pelo UNIVEM. Atualmente mestrando na mesma instituio, no projeto Sistemas Inteligentes de Segurana, com bolsa da CAPES. O Rodolfo foi monitor do Laboratrio de Realidade Virtual (LRV) do UNIVEM e Bolsista de Iniciao Cientfica, durante 3 anos, da FAPESP (Fundao de Amparo Pesquisa do Estado de So Paulo), no perodo de Maro 2001 a Dezembro 2003. As reas de interesse so: Segurana de dados, Algoritmos de Criptografia, Circuitos e Sistemas Digitais em FPGAs, Avaliao de Desempenho. Tem publicado alguns trabalhos em eventos nacionais na rea de criptografia e segurana da informao. Alm disso, tem participado em algumas palestras e workshops sobre os assuntos acima mencionados.

Prefcio

Objetivos: Apresentar os principais algoritmos de criptografia utilizados na rea de segurana e respectiva implementao em software (linguagem C e Java) e hardware (VHDL e FPGAs); Explicar alguns cdigos em C, enfatizando nas similaridades e diferenas de se programar usando linguagem C e VHDL (amplamente usada em projetos de hardware); Comparar o desempenho desses algoritmos, tanto na implementao em software quanto em hardware. A anlise comparativa realizada atravs de parmetros tais como: desempenho (velocidade, utilizao de memria, impacto provocado pelo tamanho das chaves, etc.), nvel de segurana, flexibilidade e facilidade de implementao e utilizao; Mostrar a importncia da criptografia implementada em hardware (usando-se de circuitos programveis tais como FPGAs e equipamentos modernos tais como HSM e Smart Cards); Facilitar o aprendizado de segurana da informao usando-se de algoritmos de criptografia e a existncia de algumas bibliotecas tais como CryptoAPI, JCA, OpenSSL e JCA; Motivar o aprendizado de projeto de sistemas digitais prprios da rea de segurana de dados, usando-se de tcnicas de prototipao rpida de sistemas de segurana em hardware.

Dessa maneira, o livro oferece ao leitor uma ferramenta de aprendizagem sobre os diferentes algoritmos de criptografia atualmente utilizados, enfatizando em aspectos de desempenho, a qual est amplamente relacionada com a forma de implementao. O livro ensina os aspectos tericos, relacionando-os com a parte prtica (implementao e utilizao), e pode ser lido tanto por iniciantes quanto por profissionais e acadmicos que queiram se aprofundar mais no assunto.

Resumo: O texto est composto de 17 captulos, organizados em quatro partes: Parte I: Conceitos Bsicos de Segurana, Software e Hardware Parte II: Algoritmos Clssicos de Criptografia
7

Parte III: Algoritmos Modernos de Criptografia Parte IV: Ferramentas e Dispositivos Modernos de Segurana

Em termos gerais, a proposta do livro apresenta de maneira clara os principais algoritmos de criptografia (tanto simtricos e assimtricos), explicando de maneira simples o respectivo funcionamento, sem necessidade de aprofundamentos nos conceitos matemticos. O livro destaca a implementao de alguns algoritmos de criptografia utilizando principalmente a linguagem C, assim como, a liguagem JAVA e VHDL, enfatizando a analise de desempenho de cada algoritmo, permitindo que o leitor saiba quando um algoritmo melhor do que outro e porque. Isto , apresenta, pela primeira vez, detalhes de performance (desempenho) desses algoritmos. Alm de apresentar os nveis de segurana e aplicaes, apresenta-se a velocidade com que cada algoritmo pode executar para diferentes tipos de arquivos de diferentes aplicaes. Mais uma grande diferena, a apresentao das potencialidades oferecidas por implementaes em hardware desses algoritmos. Assim, ele apresenta uma nova tcnica de projetar sistemas digitais em uma tecnologia moderna chamada de circuitos programveis (FPGAs). Para isso se mostram os conceitos da linguagem prpria para hardware (VHDL) e como se projetam esses circuitos especficos de criptografia a partir das respectivas implementaes em software (a maioria em linguagem C e alguns outros algoritmos em Java). Finalmente, se faz uma comparao entre as respectivas implementaes em Software e Hardware. Finalmente, no ltimo captulo, o dcimo stimo (17) se oferecem informaes de uma ferramenta, chamada pelos autores de WEBCRY, e se disponibiliza um site na Internet com algumas informaes pblicas para que os leitores se atualizem a respeito dos algoritmos discutidos no livro, assim como a possibilidade de acessar alguns cdigos e exemplos fornecidos no livro e a utilizao da ferramenta WEBCRY criada pelos autores. Dessa maneira, os leitores e usurios podem exercitar a parte prtica do livro e vivenciar por si mesmos os conhecimentos, experincias, resultados e os efeitos de desempenho desses algoritmos.

Pblico alvo: Estudantes e Professores da rea da Computao e Informtica (tais como Cincia da Computao, Sistemas de Informao, Engenharia da Computao, Engenharia Eltrica, Engenharia Eletrnica), interessados em adquirir e aprofundar os conhecimentos na rea de segurana, do ponto de vista de algoritmos, sistemas digitais e desempenho. Profissionais que estejam realizando ps graduao lato sensu ou stricto sensu, nas reas de segurana de dados e da informao.

Engenheiros e profissionais atuando na rea de segurana de dados e da tecnologia da informao, com interesse em programao, no projeto de circuitos e sistemas digitais, e principalmente, no desempenho de sistemas de segurana.

Informaes adicionais, tais como cdigos da maioria dos algoritmos apresentados no livro podem ser acessados no link http://www.novateceditora.com.br/downloads.php, assim como detalhes da ferramenta WEBCRY.

Parte I
Conceitos Bsicos de Criptografia, Software e Hardware

A primeira parte divide-se em cinco captulos, e feita uma introduo sobre o que ser abordado no livro, como ele est estruturado e como pode ser lido. Este captulo apresenta o assunto e motiva a necessidade do estudo de VHDL e a possvel insero de FPGAs como alternativa de projeto de circuitos e sistemas digitais, enfatiza principalmente os aspectos de implementao e desempenho de algoritmos de criptografia tanto em software quanto em hardware. Apresenta um algoritmo de criptografia, criado pelos autores e denominado de ALPOS, o qual visa, fundamentalmente, mostrar aos leitores com pouca experincia na rea, como possvel criar solues criptogrficas. Esse algoritmo no muito seguro, mas uma verso didtica que facilita o entendimento de vrios conceitos relacionados segurnaa de dados.

10

Captulo 1
Conceitos de Segurana de Dados e Criptografia

Neste primeiro captulo, Conceitos de Segurana de Dados e Criptografia, se apresenta e enfatiza a necessidade da segurana de dados nos tempos modernos, focalizando principalmente o papel dos algoritmos de criptografia e as vantagens de se ter conhecimento dos conceitos, implementao e, principalmente, do seu desempenho.

1.1 A Criptografia
A criptografia pode ser entendida como um conjunto de mtodos e tcnicas para cifrar ou codificar informaes legveis atravs de um algoritmo, convertendo um texto original em um texto ilegvel, sendo possvel atravs do processo inverso recuperar as informaes originais (SIMON, 1999), ver processo na figura 1.1.

Figura 1.1 Esquema geral para cifragem de um texto.

Pode-se criptografar informaes basicamente atravs de cdigos ou de cifras. Os cdigos protegem as informaes trocando partes da informao por cdigos predefinidos. Sendo que todas as pessoas autorizadas a ter acesso uma determinada informao devem conhecer os cdigos utilizados. As cifras so tcnicas nas quais a informao cifrada atravs da transposio e/ou substituio das letras da mensagem original. Assim, as pessoas autorizadas podem ter acesso s informaes originais conhecendo o processo de cifragem. As cifras incluem o conceito de chaves, que ser apresentado em outra seo. Os principais tipos de cifra so: as cifras de transposio que a mistura dos caracteres da informao original. Por exemplo, pode-se cifrar a palavra "CRIPTOGRAFIA" e escrev-la "RPORFACITGAI"; e as cifras de substituio que atravs de uma tabela de substituio predefinida possvel trocar ou substituir um caractere ou caracteres de uma informao.
11

1.1.1 Uma Breve Histria da Criptografia


A criptografia to antiga quanto a prpria escrita, j estava presente no sistema de escrita hieroglfica dos egpcios. Os romanos utilizavam cdigos secretos para comunicar planos de batalha. Com as guerras mundiais e a inveno do computador, a criptografia cresceu incorporando complexos algoritmos matemticos. A criptologia faz parte da histria humana porque sempre houve frmulas secretas e informaes confidenciais que no deveriam cair no domnio pblico ou na mo de inimigos. Segundo Kahn (1967), o primeiro exemplo documentado da escrita cifrada aconteceu aproximadamente no ano de 1900 a.C, quando o escriba de Khnumhotep II teve a idia de substituir algumas palavras ou trechos de texto. Caso o documento fosse roubado, o ladro no encontraria o caminho que o levaria ao tesouro e morreria de fome perdido nas catacumbas da pirmide. Em 50 a.C, Jlio Csar usou sua famosa cifra de substituio para cifrar (criptografar) comunicaes governamentais. Para compor seu texto cifrado, Csar alterou letras desviando-as em trs posies; A se tornava D, B se tornava E, e etc. s vezes, Csar reforava seu mtodo de criptografar mensagens substituindo letras latinas por gregas. O cdigo de Csar o nico da antigidade que usado at hoje. Atualmente qualquer cifra baseada na substituio cclica do alfabeto denomina-se de cdigo de Csar. Apesar da sua simplicidade (ou exatamente devido a ela), esta cifra foi utilizada pelos oficiais sulistas na Guerra de Secesso americana e pelo exrcito russo em 1915. Em 1901, iniciou-se a era da comunicao sem fio. Apesar da vantagem de uma comunicao de longa distncia sem o uso de fios ou cabos, o sistema aberto e aumenta o desafio da criptologia. Em 1921, Edward Hugh Hebern funda a Hebern Electric Code, uma empresa produtora de mquinas de cifragem eletro-mecnicas baseadas em rotores que giram a cada caracter cifrado (TKOTZ, 2003). Entre 1933 e 1945, a mquina Enigma que havia sido criada por Arthur Scherbius foi aperfeioada at se transformar na ferramenta criptogrfica mais importante da Alemanha nazista. O sistema foi quebrado pelo matemtico polons Marian Rejewski que se baseou apenas em textos cifrados interceptados e numa lista de chaves obtidas atravs de um espio (KAHN, 1967). A seguir, outros acontecimentos relacionados utilizao da criptografia (TKOTZ, 2003): 1943 - Mquina Colossus projetada para quebrar cdigos. 1969 - James Ellis desenvolve um sistema de chaves pblicas e chaves privadas separadas. 1976 Diffie-Hellman um algoritmo baseado no problema do logaritmo discreto, o criptosistema de chave pblica mais antigo ainda em uso.

12

1976 - A IBM apresenta a cifra Lucifer ao NBS (National Bureau of Standards) o qual, aps avaliar o algoritmo com a ajuda da NSA (National Security Agency), introduz algumas modificaes (como as Caixas S e uma chave menor) e adota a cifra como padro de criptografia de dados nos EUA (FIPS46-3, 1999), conhecido hoje como DES (Data Encryption Standard). Hoje o NBS chamado de National Institute of Standards and Technology, NIST. 1977 - Ronald L. Rivest, Adi Shamir e Leonard M. Adleman comearam a discutir como criar um sistema de chave pblica prtico. Ron Rivest acabou tendo uma grande idia e a submeteu apreciao dos amigos: era uma cifra de chave pblica, tanto para confidencialidade quanto para assinaturas digitais, baseada na dificuldade da fatorao de nmeros primos grandes. Foi batizada de RSA, de acordo com as primeiras letras dos sobrenomes dos autores (TKOTZ, 2003). 1978 - O algoritmo RSA publicado na ACM (Association for Computing Machinery), um dos melhores meios de divulgao de pesquisas cientficas. Maiores detalhes desta organizao podem ser obtidos no link www.acm.org. 1990- Xuejia Lai e James Massey publicam na Suia "A Proposal for a New Block Encryption Standard" ("Uma Proposta para um Novo Padro de Encriptao de Bloco")(LAI, 1990), o assim chamado IDEA (International Data Encryption Algorithm), para substituir o DES. O algoritmo IDEA utiliza uma chave de 128 bits e emprega operaes adequadas para computadores de uso geral, tornando as implementaes em software mais eficientes (SCHNEIER, 1996). 1991- Phil Zimmermann torna pblica sua primeira verso de PGP (Pretty Good Privacy) como resposta ao FBI, o qual invoca o direito de acessar qualquer texto claro da comunicaes entre usurios que se comunicam atravs de uma rede comunicao digital. O PGP oferece uma segurana alta para o cidado comum e, como tal, pode ser encarado como um concorrente de produtos comerciais como o Mailsafe da RSADSI. Entretanto, o PGP especialmente notvel porque foi disponibilizado como freeware e, como resultado, tornou-se um padro mundial enquanto que seus concorrentes da poca continuaram absolutamente desconhecidos (BROWN, 2000). 1994- Novamente o professor Ronald L. Rivest, autor dos algoritmos RC2 e RC4 includos na biblioteca de criptografia BSAFE do RSADSI, publica a proposta do algoritmo RC5 na Internet. Este algoritmo usa rotao dependente de dados como sua operao no linear e parametrizado de modo que o usurio possa variar o tamanho do bloco, o nmero de estgios e o comprimento da chave. 1994- O algoritmo Blowfish, uma cifra de bloco de 64 bits com uma chave de at 448 bits de comprimento, projetado por Bruce Schneier (SCHNEIER, 1993). 1997- O PGP 5.0 Freeware amplamente distribudo para uso no comercial. 1997- O cdigo DES de 56 bits quebrado por uma rede de 14.000 computadores (CURTIN, 1998).

13

1998 - O cdigo DES quebrado em 56 horas por pesquisadores do Vale do Silcio (DESKEY, 2001). 1999 - O DES quebrado em apenas 22 horas e 15 minutos, atravs da unio da Electronic Frontier Foundation e a Distributed.Net, que reuniram em torno de 100.000 computadores pessoais ao DES Cracker pela Internet (MESERVE, 1999). 2000 - O NIST (National Institute of Standards and Technology) anunciou um novo padro de uma chave secreta de cifragem, escolhido entre 15 candidatos. Este novo padro foi criado para substituir o algoritmo DES, cujo tamanho das chaves tornouse insuficientes para conter ataques de fora bruta (MESERVE, 1999). O algoritmo Rijndael cujo o nome uma abreviao dos nomes dos autores Rijmen e Daemen foi escolhido para se tornar o futuro AES (Advanced Encryption Standard) (FIPS197, 2001). 2000 2004 Muitos professores e profissionais da computao com vnculo em centros de pesquisa, universidades e empresas motivam-se e comeam a pesquisar novas formas de implementar algoritmos e solues de segurana. Surge assim, uma onda de pesquisas e desenvolvimentos voltados a realizar otimizaes dessas primeiras implementaes e uma dessas tendncias a implementao em hardware. Assim, este livro, mostra a importncia de se implementar alguns desses algoritmos criptogrficos em hardware, em especial, atravs do uso da tecnologia de circuitos programveis (FPGAs), a qual acessvel e diminui de forma significativa os tempos e custos associados realizao de projetos e prottipos. Os computadores so a expresso maior da era digital, marcando presena em praticamente todas as atividades humanas. Da mesma forma com que revolucionaram a informao, tambm influenciaram na criptologia: por um lado ampliaram seus horizontes, por outro, tornaram a criptologia quase que indispensvel. Na prxima seo apresenta-se a importncia da criptografia.

1.1.2 A Importncia da Criptografia


Nesta seo discutida a importncia da criptografia, a segurana dos sistemas operacionais e porque se deve utilizar este recurso contra intrusos que desejam acessar informaes alheias. A segurana eletrnica nunca foi to amplamente discutida: casos de violao de contas bancrias, acesso a informaes sigilosas, invaso e destruio de sistemas so cada vez mais comuns. Informaes so transmitidas com mais eficincia e velocidade, mas como se sabe, nem sempre de forma segura. A privacidade importante para pessoas e para as empresas. Muitos problemas podem acontecer se uma pessoa no autorizada tiver acesso a dados pessoais como: contracheque, saldo bancrio, faturas do carto de crdito, diagnsticos de sade e senhas bancrias ou de credito automtico. No caso de empresas, os danos podem ser de maior magnitude, atingindo a organizao e os prprios funcionrios. Dados estratgicos da empresa, previso de venda, detalhes tcnicos de produtos, resultados
14

de pesquisas e arquivos pessoais so informaes valiosas que caso alguma empresa concorrente tiver acesso de forma indevida, pode acarretar em srios problemas. A Internet um ambiente que viabiliza principalmente a comunicao, a divulgao, a pesquisa e o comercio eletrnico. Em 1999 havia mais de 100 milhes de usurios da Internet nos Estados Unidos. No final de 2003 esse nmero alcanou 177 milhes nos Estados Unidos e 502 milhes no mundo todo (BURNETT, 2002). O comrcio eletrnico emergiu como um novo setor da economia norte-americana, sendo responsvel por cerca de U$100 bilhes em vendas durante 1999, em 2003 o comrcio eletrnico excedeu a U$1 trilho. Ao mesmo tempo, o Computer Security Institute (CSI) constatou um aumento de crimes cibernticos, 55% dos entrevistados na pesquisa informaram atividades maliciosas relacionadas com pessoas da prpria organizao. Ciente disso pode-se ter certeza que as empresas em expanso precisam de produtos, mecanismos e solues de segurana (BURNETT, 2002). No muito tempo atrs a segurana era uma questo de se trancar uma porta ou um cofre. Atualmente as informaes geralmente no esto armazenadas somente em papis e sim em banco de dados. Como proteger essas informaes? O que os sistemas operacionais (SO) oferecem para essa proteo ? Os sistemas operacionais oferecem um sistema de proteo atravs de permisses (ver figura 1.2). Isto , atravs do SO possvel criar usurios com diferentes nveis de acesso para as informaes contidas em um computador. Tal acesso implementado via procedimento de login. Assim quando um determinado usurio fazer login em um computador ter acesso s pastas e arquivos designados pelo seu nvel de permisso, isto , se um usurio tiver restries para o acesso de pasta, arquivos e programas, este no conseguir acessar. Os cadastros de usurios e as permisses so concedidos pelo superusurio ou administrador do sistema. Este responsvel pelo gerenciamento do sistema, inclusive pode permitir que outros usurios possam alterar algumas permisses, como de uma pasta pessoal. Independente das restries impostas, com o login de superusurio pode-se ter acesso a todas as funes do sistema. A questo como o sistema operacional sabe que a pessoa que est acessando o sistema realmente o superusurio? O SO concede a permisso atravs de um nome de usurio e senha, normalmente os nomes de usurios administradores so root, su ou administrador e infelizmente sabe-se que as tcnicas para superar essas defesas so amplamente conhecidas (BURNETT, 2002). A seguir so descritos alguns dos principais ataques.

15

Figura 1.2 Configurao da permisso de acesso a uma pasta no Windows 2000.

Ataque contra senhas: Vrios sistemas operacionais vm com um nome de usurio e senhas predefinidas e muitas vezes o mesmo login utilizado para realizar vrias tarefas como: criao de usurios, manuteno e backup, instalao de programas assim por diante. No uma boa prtica utilizar o login predefinido. A utilizao da senha predefinida ou de uma senha derivada de uma data de aniversrio ou qualquer dado pessoal, pode facilitar o ataque ao sistema. Se o invasor no tiver a competncia para descobrir a senha, este poder utilizar aplicativos, chamados de software de cracking de senha. Esses softwares testam exaustivamente as possibilidades de senhas at encontrar uma vlida, se a senha for fraca, em questo de minutos o invasor ter acesso ao sistema. Seria interessante dar preferncia a diferentes senhas de superusurio para cada funo do sistema, pois se o sistema for invadido, o intruso no ter acesso a todas as informaes do sistema, mesmo acessando com um login de superusurio. Uma outra maneira para invadir e recuperar os dados do sistema desviando do controle de permisses do SO, chamado de ataque de recuperao de dados. Ataques de recuperao de dados: O sistema operacional organiza as informaes em arquivos e diretrios para que o usurio possa fazer um acesso rpido a uma determinada informao. Contudo, os dados assim como o controle de acesso a esses dados so bits eletrnicos. Assim, possvel fazer uma leitura destes bits no como arquivos de texto ou de nmeros e sim como bits, independente do SO. Estes ataques
16

desviam do SO e capturam os bits brutos, reconstituindo-os em arquivos originais, burlando os controles de permisso do SO. Ataque de reconstruo de memria: Freqentemente, o material sigiloso est armazenado na memria do computador. Quando executar um programa, este ser armazenado em uma rea da memria principal e o SO marca esta rea como indisponvel. Quando o programa finalizado, o SO apenas disponibiliza a rea sem sobrescrev-la. O invasor simplesmente aloca a memria liberada e examina o que sobrou (BURNETT, 2002). Como impedir que um invasor tenha acesso a informaes privadas? Para impedir o acesso a informao privada pode-se utilizar a proteo por criptografia. A proteo por criptografia uma soluo prtica para proteger informaes sigilosas, independente do algoritmo criptogrfico utilizado sempre ocorrer uma transformao de um texto legvel em um ilegvel. Mesmo que o invasor obtenha o contedo de um arquivo, este ser ilegvel. Para ter acesso informao original, o invasor ter que resolver um problema matemtico de difcil soluo. A criptografia pode adicionar tambm maior segurana ao processo de identificao de pessoas, criando identidades digitais fortes. De modo algum a criptografia a nica ferramenta necessria para assegurar a segurana de dados, nem resolver todos os problemas de segurana. um instrumento entre vrios outros. Alm disso, a criptografia no prova de falhas. Toda criptografia pode ser quebrada e, sobretudo, se for implementada incorretamente, ela no agrega nenhuma segurana real (BURNETT, 2002).

1.1.3 Alguns Termos utilizados na Criptografia


Junto com o conceito de criptografia, tem-se alguns termos oficiais comumente utilizados, que so conceituados nesta seo. O ato de transformar um texto legvel (texto claro, texto original, texto simples) em algo ilegvel (cifra, texto cifrado, texto cdigo) chamado de encriptar (codificar, criptografar, cifrar). A transformao inversa chamada de decriptar (decodificar, decriptografar, decifrar). O algoritmo de criptografia uma seqncia de procedimentos que envolvem uma matemtica capaz de cifrar e decifrar dados sigilosos. O algoritmo pode ser executado por um computador, por um hardware dedicado e por um humano. Em todas as situaes o que diferencia a velocidade de execuo e a probabilidade de erros. Existem vrios algoritmos de criptografia, neste livro apresenta-se especificamente o DES, AES, RC5, IDEA e RSA, MD5 e SHA-1, pois so os mais utilizados atualmente, alm do ALPOS (um algoritmo didtico criado pelos autores). Alm do algoritmo, utiliza-se uma chave. A chave na criptografia computadorizada um nmero ou um conjunto de nmeros. A chave protege a informao cifrada. Para decrifrar o texto cifrado o algoritmo deve ser alimentado com a chave correta,
17

que nica. Na figura 1.3 tem-se a ilustrao do esquema geral de cifragem utilizando chave.

Figura 1.3 Esquema geral de cifragem com chave.

Na histria da criptografia sempre ficou evidente que no existe um algoritmo que no possa ser quebrado (descoberto ou solucionado). Com a criptografia computadorizada, atualmente, os algoritmos so divulgados comunidade e o sigilo das informaes garantido apenas pela chave. Isto significa que se algum descobrir a chave para decifrar uma determinada informao, todas as outras informaes cifradas com este algoritmo ainda estaro protegidas, por terem chaves diferentes. J um algoritmo criptogrfico que no utiliza o recurso de chaves para cifrar as informaes pode levar a um efeito cascata perigoso. Se este algoritmo for quebrado, todas as informaes cifradas com ele estaro desprotegidas, pois o que garante o sigilo das informaes seria o prprio algoritmo. Assim, toda criptografia moderna e computadorizada opera com chaves. A criptografia desde seu inicio, foi desenvolvida para impedir que um invasor ou intruso, algum que est tentando acessar informaes sigilosas tivesse sucesso. H pouco tempo a criptografia era amplamente utilizada para proteger informaes militares. Atualmente protege uma gama maior de diferentes informaes. Os invasores no necessariamente s querem acessar informaes sigilosas, mas tambm desativar sites, excluir informaes de uma pessoa ou empresa, danificar sistemas em geral. O estudo sobre a quebra de sistemas criptogrficos conhecido como anlise criptogrfica. Semelhante ao invasor, o criptoanalista procura as fraquezas dos algoritmos. O criptgrafo desenvolve sistemas de criptografia. importante que a comunidade de criptografia conhea as fraquezas, pois os invasores tambm esto procurando por elas. quase certo que os invasores no iro publicar suas descobertas para o mundo (BURNETT, 2002).

18

1.1.4 Algoritmos de Bloco e Fluxo


Pode-se classificar os algoritmos de criptografia atravs tratamento dado as informaes que sero processadas assim, tem-se os algoritmos de bloco e os algoritmos de fluxo. A cifra de blocos opera sobre blocos de dados. O texto antes de ser cifrado dividido em blocos que variam normalmente de 8 a 16 bytes que sero cifrados ou decifrados. Quando o texto no completa o nmero de bytes de um bloco, este preenchido com dados conhecidos (geralmente valor zero 0) at completar o nmero de bytes do bloco, cujo tamanho j predefinido pelo algoritmo sendo usado. A forma mais comum de preenchimento determinar o nmero de bytes que deve ser preenchido e utilizar este valor para preencher o bloco. Por exemplo: Suponha que o tamanho do bloco em um determinado algoritmo seja de 16 bytes e foi utilizado apenas 9. Deve-se preencher os 7 bytes restantes com o valor 07. Um problema na cifra de bloco que se o mesmo bloco de texto simples aparecer mais de uma vez, a cifra gerada ser a mesma facilitando o ataque ao texto cifrado. Para resolver este problema so utilizados os modos de realimentao. O modo mais comum de realimentao a cifragem de blocos por encadeamento (Cipher Block Chaining - CBC). Neste modo realizada uma operao de XOR do bloco atual de texto simples com o bloco anterior de texto cifrado. Para o primeiro bloco no h bloco anterior de texto cifrado assim, faz-se uma XOR com um vetor de inicializao. Este modo no adiciona nenhuma segurana extra. Apenas evita o problema citado da cifra de bloco. Portanto, os algoritmos de blocos processam os dados como um conjunto de bits, so os mais rpidos e seguros para a comunicao digital. Tem ainda como vantagem que os blocos podem ser codificados fora de ordem, o que bom para acesso aleatrio, alm de ser resistente a erros, uma vez que um bloco no depende do outro. Entretanto, possuem como desvantagem que se a mensagem possui padres repetitivos nos blocos, o texto cifrado tambm o apresentar, o que facilita o servio do criptoanalista. Outra desvantagem que um bloco pode ser substitudo por outro modificando a mensagem original. Os algoritmos de fluxo criptografam (cifram) a mensagem bit a bit, em um fluxo contnuo, sem esperar que se tenha um bloco completo de bits. tambm chamado de criptografia em Stream de dados, onde a criptografia se d atravs de uma operao XOR entre o bit de dados e o bit gerado pela chave. A tabela 1.1 mostra algumas recomendaes para selecionar o tipo de algoritmo que dever ser usado em uma determinada aplicao.

Tabela 1.1 - Escolhendo um algoritmo por aplicao (BURNETT, 2002) 19

Aplicao
Banco de Dados E-mail SSL Criptografia de Arquivos

Cifragem Recomendada
Bloco AES RC4 Bloco

Comentrios
A interoperabilidade com um outro software no uma questo, mas necessrio reutilizar as chaves. Ganha-se interoperabilidade em todos os pacotes de e-mail utilizando o AES padro. A velocidade extremamente importante, cada conexo pode ter uma nova chave. Assim, na prtica, a maioria dos navegadores e servidores possuem o RC4. A interoperabilidade no uma questo, porm cada arquivo pode ser cifrado com a mesma chave e ento proteger essa chave.

1.1.5 Vrus ou Informao Cifrada


Fernando de la Cuadra, editor tcnico internacional da empresa Panda Software, empresa de software de segurana e antivrus, aponta em seu artigo vantagens e problemas da criptografia atual (CUADRA, 2003). Enviar uma mensagem cifrada por correio eletrnico traz vantagens tanto para o emissor como para o receptor. A confidencialidade est praticamente assegurada. Ningum que no conhea a chave utilizada na cifragem poder entender as informaes da mensagem. Assim, pode-se enviar todo tipo de informao com um bom nvel de segurana, e praticamente estar salvo de tericas interceptaes na comunicao. Mas quem intercepta uma comunicao? Em principio imagina-se que seja um hacker, um espio ou qualquer outro usurio que queira acessar as informaes da comunicao, mas tambm pode ser um antivrus fazendo uma verificao. Um antivrus sempre tentar impedir o ataque de um vrus, para isso, este examinar a mensagem enviada pelo correio eletrnico. O que pode acontecer que dentro do contedo de uma mensagem cifrada pode existir um vrus e o antivrus no o identificar. Ou ainda, o antivrus pode identificar uma mensagem cifrada como sendo um vrus e esta mensagem poder ser excluda. Atualmente 90% dos vrus esto espalhados pela Internet. Sendo assim, o mais lgico a instalao de antivrus nos firewalls, proxys, etc. Mas se o vrus estiver em uma mensagem de correio eletrnico cifrada, at o melhor antivrus poder falhar em seu objetvo de proteger as informaes. E os usurios que receberem a mensagem cifrada, inconscientemente, sero infectados (CUADRA, 2003). Em definitivo, ningum dvida que os sistemas de criptografia sejam uma ferramenta que fornece segurana s comunicaes, mas podem ter uma deficincia: podem esconder vrus. Uma soluo para evitar que o vrus cifrado entre em uma determinada companhia ou organizao, deveria ser uma proteo efetiva que bloqueia as mensagens cifradas no autorizadas, antes de chegar aos usurios finais (CUADRA, 2003).

20

1.2 Importncia da Chave ou senha


O termo chave vem do fato de que o nmero secreto, a famosa senha usada nos nos sistemas computacionais, funciona da mesma maneira que uma chave convencional usada nas portas e entradas a lugares fechados de residncias, empresas e etc. de modo a proteger o patrimnio de um determinado usurio. Assim, de forma similar acontece com a criptografia, onde para proteger a informao de um determinado usurio (armazenada em arquivos de computador), se deve instalar uma fechadura (algoritmo de criptografia). Para operar a fechadura precisa-se da famosa chave ou senha (nmero secreto), a qual permite cifrar ou decifrar a informao desejada. O algoritmo realiza seus passos utilizando a chave para alterar o texto simples (mensagem original) e convert-lo em texto cifrado. Para recuperar a informao em forma legvel, necessrio inserir a mesma chave ou alguma que esteja relacionada com aquela que foi usada no processo anterior, e executar a operao inversa. O algoritmo inverte os passos e converte o texto cifrado de volta no texto simples original. Assim como apenas a chave correta de um determinado prdio pode abrir sua entrada, apenas a chave correta usada em criptografia pode cifrar ou decifrar os dados. Na criptografia de chave simtrica, a chave que utilizada para criptografar os dados a mesma chave que utilizada para decifr-los. Na criptografia assimtrica, usa-se outra chave que possui um valor relacionado com essa primeira chave, na seo 1.3 apresenta-se mais detalhes sobre criptografia simtrica e assimtrica. Toda criptografia moderna e computadorizada opera com chaves. Por que uma chave necessria? Por que no criar um algoritmo que no necessite de uma chave?. Se os invasores podem entender o algoritmo, eles podem recuperar os dados secretos simplesmente executando o algoritmo. Uma primeira soluo seria manter o algoritmo em segredo, mas essa abordagem tem vrios problemas. Um deles , supondo que no seja possvel manter o algoritmo em segredo, os invasores sempre quebram o algoritmo. Isso no seria possvel se houvesse especialistas em criptografia que desenvolvem seus prprios algoritmos, mas neste caso tambm deve-se confiar que a empresa ou usurio que escreveu o algoritmo nunca o revele. Neste ponto aparece um aspecto relevante em criptografia: o que mais importante, um algoritmo que deve ser mantido em segredo ou um algoritmo que pode fazer seu trabalho de cifrar informaes mesmo que os usurios de sistemas computacionais saibam como ele funciona. Neste segundo aspecto, aparece a importncia dos algoritmos com chave, e principalmente, a relevncia da chave. As chaves aliviam a preocupao com o algoritmo utilizado no esquema de criptografia. Em termos computacionais para proteger os dados com uma chave, necessrio proteger apenas a chave, algo que mais fcil de ser feito do que proteger
21

um algoritmo. Alm disso, se utilizar chaves para proteger os segredos, possvel utilizar diferentes chaves para proteger diferentes segredos. Isso significa que se algum descobrir (quebrar) uma das chaves, os outros segredos ainda podero estar seguros. Se alguma informao depender somente de um algoritmo secreto, algum invasor que quebre esse segredo obter acesso a todas as informaes contidas em um determinado sistema computacional. Assim, as chaves so muito importantes em criptografia. Esse o princpio de Kerckhoffs, que diz da relevncia do espao de chaves, muito mais seguro um sistema onde se conhece o algoritmo de criptografia, do que o espao de chaves. Manter em segredo as chaves, e supondo conhecer o algoritmo usado, gera-se um sistema incondicional e computacionalmente seguro. Esse princpio ainda vlido, por vrias razes (KERCKHOFFS, 1983). Os invasores podem deduzir um algoritmo sem ajuda nenhuma. Na histria da criptografia nunca algum foi capaz de manter um algoritmo criptogrfico em segredo. Eles sempre o descobrem. Um exemplo disso que durantes as guerras, os espies sempre encontraram maneiras de descobrir o algoritmo, seja ele originado de uma operao matemtica ou de uma mquina. Eles o roubam ou fazem com que algum o revele (por meio de chantagem, extorso ou pelo uso de tcnicas de anlise criptogrfica). Agentes sempre descobriam o algoritmo ou obtinham uma cpia da mquina. Por exemplo, na Segunda Guerra Mundial, os soldados poloneses capturaram a mquina alem Enigma, logo no incio da guerra. A Enigma era uma mquina de criptografia que o exrcito alemo utilizava. Os aliados (isto , os britnicos) foram capazes de quebrar o cdigo mais facilmente porque tinham a posse dessa mquina. Alternativamente, os analistas criptogrficos descobrem o algoritmo. Na Segunda Guerra Mundial, decifradores de cdigo dos Estados Unidos foram capazes de determinar o funcionamento interno das mquinas codificadas japonesas sem ter a posse de uma dessas mquinas. Um caso mais recente, refere-se ao exemplo do algoritmo RC4, um algoritmo inventado em 1987, mas nunca publicado. Os analistas de criptografia e outros especialistas o estudaram e determinaram que o RC4 era uma boa maneira de manter os dados em segredo. Atualmente o RC4 utilizado como parte do Secure Sockets Layer (SSL), o protocolo de comunicao segura da WEB (World Wide Web). Mas a empresa que o criou, a RSA Data Security, nunca tornou pblico o funcionamento interno do algoritmo RC4. Esse segredo tinha interesses financeiros e no de segurana. A empresa esperava que mantendo-o em segredo ningum mais o implementaria e o comercializaria. Em 1994, hackers annimos divulgaram o algoritmo na Internet. Acredita-se que eles provavelmente o descobriram usando um depurador de linguagem assembly, aps terem tido acesso a uma cpia do cdigoobjeto. Se um sistema criptogrfico estiver baseado no hardware, os engenheiros abrem-no e examinam as partes internas. Em 1998, David Wagner e Ian Goldherg, nessa poca
22

alunos graduados da Universidade da Califrnia em Berkeley, abriram um telefone celular digital, supostamente seguro, e quebraram seu cdigo. s vezes possvel manter um algoritmo em segredo por um perodo suficientemente longo para que ele seja eficaz, mas aps certo tempo algum acaba descobrindo-o. A segunda razo de relevncia da senha, mais do que o algoritmo usado refere-se assuntos comerciais. Empresrios e usurios sempre desejam saber como um determinado software de interesse foi realizado. Caso a empresa no revele os segredos de implementao e construo, atravs de tcnicas de reengenharia reversa sobre um software pode-se conhecer detalhes da sua criao e respectiva implementao. Soma-se a isso o fato que somente pessoas que adquiriram o produto podem se comunicar entre si. Isso enviabiliza a comunicao com pessoas que no adquiriram ou compraram o algoritmo de um mesmo fornecedor. Dessa maneira, como resultado, os algoritmos devem ser padronizados e isso significa que eles devem ser pblicos. Se algum quiser utilizar a criptografia, necessrio empregar um dispositivo de hardware ou um programa de software. Portanto, se faz necessrio adquirir o produto em algum lugar. Assim, como os usurios podem ter acesso a ele, os invasores tambm tm. Desse modo, possveis invasores podem ir mesma fonte e conseguir suas prprias cpias. Isso faz com que os algoritmos devem ser disponibilizados, e melhor ento, deve-se cuidar da chave. Uma outra razo para cuidar da chave e no do algoritmo refere-se ao fato que possvel construir sistemas criptogrficos no qual o algoritmo completamente conhecido, mas seguro pois os possveis invasores precisam conhecer a chave para descobrir as informaes. Estes sistemas so mais seguros do que aqueles que no tem chave, e somente confiam no segredo de no se conhecer o algoritmo. Quando os algoritmos se tornam pblicos, os analistas criptogrficos e os profissionais da rea de computao tm uma chance de examinar suas fraquezas. Se um algoritmo for vulnervel, pode optar por no utiliz-lo. Caso contrrio, pode ter certeza de que os dados esto seguros. Por outro lado, se um algoritmo for mantido em segredo, os analistas no sero capazes de encontrar nenhuma fraqueza que ele possa ter, assim no se sabe se ele ou no vulnervel.

1.2.1 Como Gerar a Chave


Em um sistema criptogrfico de chave simtrica, a chave formada por um conjunto de caracteres. Ele pode ser um nmero qualquer, ou uma seqncia de caracteres

23

alfanumricos (letras e smbolos especiais) contanto que tenha um tamanho correto e adequado quele que o algoritmo criptogrfico selecionado permitir. Geralmente, aconselha-se que a chave seja formada por nmeros ou caracteres alfanumricos sem coerncia nenhuma entre si, pois assim fica mais dficil descobrla (ou em termos criptogrficos, quebr-la). A chave deve ser, dentro do possvel, selecionada de forma aleatria. Para os criptgrafos, valores aleatrios so simplesmente conjuntos de nmeros que passam em testes estatsticos de aleatoriedade e no so repetveis. Com esse intuito, de gerar chaves, h vrias tcnicas usadas. Entre elas destaca-se a utilizao de sistema geradores de nmero aleatrios (GNA) ou RNG (Random Number Generator). Esses dispositivos funcionam agrupando nmeros de diferentes tipos de entradas imprevisveis como a medio da desintegrao espontnea de radioatividade, o exame das condies atmosfricas ou o clculo de minsculas varincias na corrente eltrica. Esses nmeros passam por testes de aleatoriedade. Se solicitar um segundo grupo de nmeros, a nova seqncia ser completamente diferente, isto , nunca receber a mesma seqncia novamente. Isso ocorre porque a sada baseada em uma entrada que sempre est mudando. Esses nmeros podem ser obtidos utilizando algoritmos chamados de GNPA geradores de nmeros pseudo-aleatrios (pseudo-random number generators PRNGs). Se um desses algoritmos for utilizado para gerar alguns milhares de nmeros e aplicar testes estatsticos, os nmeros passariam no teste de aleatoriedade. O que torna esses nmeros pseudo-aleatrios, e no aleatrios, que eles so repetveis. Se for instalado o mesmo GNPA em um outro computador, os mesmos resultados podero vir a ser obtidos. Se o programa for executado um tempo depois, os mesmos resultados podem ser obtidos. Para evitar esse problema, costuma-se usar GNPA com uma entrada diferente em cada evento de utilizao (chamada de semente). Assim, gerar-se- dados diferentes, pois alterando a entrada, a sada ser alterada. A gerao aleatria dessa chave est associada a dois parmetros importantes: velocidade de gerao e entropia, as quais esto intimamente relacionadas com o tamanho da chave.

1.2.2 Importncia do Tamanho da Chave


Se os invasores puderem descobrir qual a chave usada na cifragem dos dados, eles podem decifrar a mensagem enviada e obter os dados contidos nela. Um mtodo, conhecido como ataque de fora bruta, consiste em tentar todas as possveis chaves at que a correta seja identificada. Ele funciona dessa maneira. Suponha que a chave seja um nmero entre 0 e 1.000.000 (um milho). O invasor pega o texto cifrado e alimenta o algoritmo de criptografia junto com a suposta chave de valor 0. O algoritmo realiza seu trabalho e produz um resultado. Se os dados resultantes parecerem razoveis, 0 provavelmente a chave correta. Se for um texto sem sentido, 0 no a verdadeira chave. Nesse caso, ele tenta outro valor, por exemplo 1 e em seguida 2, 3, 4 e assim por diante.
24

Um algoritmo simplesmente realiza os passos, independentemente da entrada. Ele no tem nenhuma maneira de saber se o resultado que ele produz o correto. Mesmo se o valor for um prximo da chave, talvez errado em apenas 1, o resultado ser um texto sem sentido. Assim, necessrio examinar o resultado e compar-lo para identificar algum sentido e assim informar se o valor usado como chave pode ser a chave realmente usada para cifrar as mensagens. Como isso depende de uma seqncia de entrada e sada, com valores supostos de chaves, um mtodo consiste em criar programas que faam esses passos at descobrirem alguma informao. Normalmente, esse processo requer pouco tempo para testar uma chave. Assim, pode-se escrever um programa que verifique vrias chaves por segundo. Computacionalmente isso torna possvel descobrir qualquer chave, somente precisase de tempo. Interessante perceber que esse tempo de procura est fortemente associado ao tamanho da chave. Chaves criptogrficas so medidas em bits. O intervalo de possveis respostas para identificar uma chave est em correspondncia ao nmero 2TC, onde TC o Tamanho da Chave em bits. Assim, tendo-se uma chave de 2 bits significa que o intervalo de possveis valores de 0 at 22 = 4. Uma chave de 40 bits significa que o intervalo dos possveis valores de 0 at aproximadamente 1 trilho (240). Uma chave de 56 bits de 0 at aproximadamente 72 quatrilhes (256). O intervalo de uma chave de 128 bits to grande que mais fcil apenas dizer que ela uma chave de 128 bits (nmero de possibilidades igual a 2128). Cada bit adicionado ao tamanho da chave dobrar o tempo requerido para um ataque de fora bruta. Se uma chave de 40 bits levasse trs horas para ser quebrada, uma chave de 41 bits levaria seis horas, uma chave de 42 bits, 12 horas e assim por diante. Isso acontece pois cada bit adicional da chave dobra o nmero de chaves possveis, (lembrar que esse nmero est em funo de 2TC). Assim ao adicionar um bit o nmero de chaves possveis dobrado. Dobrando o nmero de chaves possveis, o tempo mdio que um ataque de fora bruta leva para encontrar a chave correta tambm dobrado. Portanto, para se ter maior segurana, isto tornar o trabalho de um determinado invasor mais difcil, deve-se escolher uma chave maior. Chaves mais longas significam maior segurana. A tabela 1.2 mostra o impacto de se aumentar o tamanho da chave e o respectivo tempo de quebrar a chave usando ataque por fora bruta, assim como a respectiva estimativa de custo (em dolres) da tecnologia necessria para encontrar a chave. Pode-se ver que tendo mais recursos disponveis (em tecnologia e portanto maior custo em dolres) possvel diminuir o tempo de se encontrar uma determinada chave. No obstante seja possvel achar a chave, h tamanhos de chave que inviabilizam esse fato, pois demandaria muito tempo.

25

Nessa tabela, o termo 2s significa 2 segundos; 200ms siginifica que o tempo dado em milisegundos (10-3 segundos); 200 us significa que o tempo dado em microsegundos (isto , 10-6 segundos).
Tabela 1.2 Tempo gasto para quebra de chaves por fora bruta (SCHNEIER, 1996) Tamanho da Chave (bits) Custo U$ 40 56 64 80 112 100000 2s 35 horas 1 ano 70000 anos 10 e 14 10 e 19 1 Milho 200 ms 3,5 h 37 dias 7000 anos 10 e 13 10 e 18 10M Milhes 20s 21 m 4 dias 700 anos 10 e 12 10 e 17 100 M 2 ms 2m 9h 70 anos 10 e 11 10 e 16 1G 200 us 13 s 1h 7 anos 10 e 10 10 e 15 10G 20 us 1 s 5,4 m 245 anos 10 e 9 10 e 14 100G 2 us 100 ms 32 s 24 anos 10 e 8 10 e 13 1T 0,2 us 10 ms 3 s 2,4 anos 10 e 7 10 e 12 10T 0,02 us 1 ms 300 ms 6 horas 10 e 6 10 e 11

128

Importante lembrar que o poder computacional dobra a cada 1.5 anos, e que o tempo de existncia do universo, segundo os ltimos estudos cientficos, est em torno de 10 10e10 anos. Assim, chega-se concluso que sempre possvel decrifrar uma determinada mensagem, pois sempre ser possvel descobrir a chave: basta testar todas as chaves possveis somente uma questo de tempo. Mas pode demorar mais que o tempo de durao do Universo (SCHNEIER, 1996). Ento, qual o tamanho mximo que uma chave deve ter? Com o passar dos anos, o RSA Laboratories props alguns desafios. A primeira pessoa ou empresa a quebrar uma mensagem em particular ganharia um prmio em dinheiro. Alguns desafios foram testes do tempo de um ataque de fora bruta. Em 1997, uma chave de 40 bits foi quebrada em trs horas e uma chave de 48 bits durou 280 horas. Em 1999, a Electronic Fronter Foundation encontrou uma chave de 56 bits em 24 horas. Em cada um dos casos, pouco mais de 50% do espao de chave foi pesquisado antes de a chave ser encontrada. Em todas essas situaes, centenas ou at milhares de computadores operavam conjuntamente para quebrar as chaves. Na realidade, com o desafio de 56 bits de DES que a Electronic Frontier Foundation quebrou em 24 horas, um dos computadores era um cracker especializado em DES. Esse tipo de computador faz apenas uma coisa: verifica as chaves de DES. Um invasor que trabalhe secretamente, provavelmente no seria capaz de reunir a fora de centenas de computadores e talvez no possua uma mquina especificamente construda para quebrar um algoritmo em particular. Para a maioria dos invasores, essa a razo pela qual o tempo que leva para quebrar a chave quase certamente seria significativamente mais alto. Por outro lado, se o invasor fosse uma agncia governamental de inteligncia com grandes recursos, a situao seria diferente.
26

Pode-se pensar em situaes ainda mais crticas. Suponha que examinar 1% do espao de chave de uma chave de 56 bits leva 1 segundo e examinar 50% leva 1 minuto. Todas as vezes que se adicionar um bit ao tamanho de chave dobra-se ento o tempo de pesquisa. Os resultados so mostrados na tabela 1.3, onde se percebe que o impacto e observaes realizadas para os dados da tabela 1.2, so tambm aplicavis.
Tabela 1.3 Tempo gasto para quebra de chaves (BURNETT, 2002)

Bits 1% do Espao da Chave 50% do Espao da Chave 56 57 58 64 72 80 90 1 segundo 2 segundos 4 segundos 4,2 minutos 17,9 horas 190,9 dias 535 anos 1 minuto 2 minutos 4 minutos 4,2 horas 44,8 dias 31,4 anos 321 sculos 8 milhes de milnios 8 trilhes de milnios

108 140.000 milnios 128 146 bilhes de milnios

Atualmente, 128 bits o tamanho de chave simtrica mais comumente utilizado. Se a tecnologia avanar e os invasores de fora bruta puderem melhorar esses nmeros (talvez eles possam reduzir para alguns anos o tempo das chaves de 128 bits), ento precisar-se- de chaves de 256 bits ou ainda maiores. Assim, considerando que a tecnologia sempre est avanando, ento teremos de aumentar repetidas vezes o tamanho das chaves. Ento, com o passar do tempo sempre ser necessrio aumentar o tamanho das chaves. bom lembrar que aumentar a chave significa tambm em aumentar o tempo cifragem e decifragem. Por isso recomnedvel ter cuidados com a escolha do tamanho da chave. Assim, possvel pensar que pode chegar um um momento quando precisaremos de uma chave to grande que ela se tornar muito difcil de lidar. No momento atual, e considerando os conhecimnentos adquiridos na rea de segurana, quase certamente nunca precisaremos de uma chave mais longa do que 512 bits (64 bytes). Supondo que cada tomo no universo conhecido (h aproximadamente 2300) fosse um computador e que cada um desses computadores pudesse verificar 2300 chaves por segundo, isso levaria cerca de 2162 milnios para pesquisar 1% do espao de chave de uma chave de 512 bits. De acordo com a teoria do Big Bang, o tempo decorrido desde a criao do universo menor de 224 milnios. Em outras palavras,
27

altamente improvvel que a tecnologia v to longe para forar a utilizar chaves que sejam muito grandes (BURNETT, 2002). Apesar do ataque de fora bruta precisar de muito tempo, principalmente quando a chave possui um tamanho razovel, h outros ataques que exploram as fraquezas nos algoritmos criptogrficos, e tendem a diminuir o tempo do ataque. Por esse motivo, no momento recomenda-se usar chaves relativamente longas, superiores a 128 bits. J aplicaes comerciais e financeiras (por exemplo, transaes bancrias), necessrio que a chave seja maior que 128 bits. Isso significa que usurio comum que tente fazer um ataque de fora bruta, precisar de muito tempo para ter uma invaso considerada bem sucedida.

1.3 Criptografia de Chave Simtrica e Assimtrica


Na criptografia de chave simtrica os processos de cifragem e decifragem so feitos com uma nica chave, ou seja, tanto o remetente quanto o destinatrio usam a mesma chave. Em algoritmos simtricos, como por exemplo o DES (Data Encription Standard), ocorre o chamado "problema de distribuio de chaves". A chave tem de ser enviada para todos os usurios autorizados antes que as mensagens possam ser trocadas. Isso resulta num atraso de tempo e possibilita que a chave chegue a pessoas no autorizadas. A criptografia assimtrica contorna o problema da distribuio de chaves atravs do uso de chaves pblicas. A criptografia de chaves pblicas foi inventada em 1976 por Whitfield Diffie e Martin Hellman a fim de resolver o problema da distribuio de chaves. Neste novo sistema, cada pessoa tem um par de chaves chamadas: chave pblica e chave privada. A chave pblica divulgada enquanto que a chave privada deixada em segredo. Para mandar uma mensagem privada, o transmissor cifra a mensagem usando a chave pblica do destinatrio pretendido, que dever usar a sua respectiva chave privada para conseguir recuperar a mensagem original. Atualmente, um dos mecanismos de segurana mais usados a assinatura digital, a qual precisa dos conceitos de criptografia assimtrica. A assinatura digital uma mensagem que s uma pessoa poderia produzir, mas que todos possam verificar. Normalmente autenticao se refere ao uso de assinaturas digitais: a assinatura um conjunto inforjvel de dados assegurando o nome do autor que funciona como uma assinatura de documentos, ou seja, que determinada pessoa concordou com o que estava escrito. Isso tambm evita que a pessoa que assinou a mensagem depois possa se livrar de responsabilidades, alegando que a mensagem foi forjada. Um exemplo de criptossistema de chave pblica o RSA (Rivest-Shamir-Adelman). Sua maior desvantagem a sua capacidade de canal limitada, ou seja, o nmero de bits de mensagem que ele pode transmitir por segundo (BURNETT, 2002). A figura 1.4 ilustra o funcionamento da criptografia simtrica e assimtrica. Observa-se que existem duas chaves na criptografia assimtrica.

28

Figura 1.4 Modelo simtrico e assimtrico de criptografia.

Aps analisar o exposto acima, pode-se ficar em dvida de qual modelo utilizar: simtrico ou assimtrico. Pois bem, devido a isso foi desenvolvido um modelo hbrido, ou seja, que aproveitasse as vantagens de cada tipo de algoritmo. O algoritmo simtrico, por ser muito mais rpido, utilizado no ciframento da mensagem em si, enquanto o assimtrico, embora lento, permite implementar a distribuio de chaves e alguns a assinatura digital. Ento, os algoritmos criptogrficos podem ser combinados para a implementao dos trs mecanismos criptogrficos bsicos: o ciframento, a assinatura digital e o hashing, sendo que estes ltimos dois conceitos ainda sero descritos e analisados em captulos posteriores. Estes mecanismos so componentes de protocolos criptogrficos, embutidos na arquitetura de segurana dos produtos destinados ao comrcio eletrnico. Estes protocolos criptogrficos, portanto, provm os servios associados criptografia que viabilizam o comrcio eletrnico. Descreve-se abaixo alguns exemplos de protocolos que empregam sistemas criptogrficos hbridos. O IPSec o padro de protocolos criptogrficos desenvolvidos para o IPv6. Realiza tambm o tunelamento de IP sobre IP. Prometido como futuro padro para todas as formas de VPN Virtual Private Network(MAIA, 1999). O SSL e TLS oferecem suporte de segurana criptogrfica para os protocolos NTTP, HTTP, SMTP e Telnet. Permitem utilizar diferentes algoritmos simtricos, message digest e mtodos de autenticao e gerncia de chaves para algoritmos assimtricos (MAIA, 1999). O SSL, que significa Security Socket Layer, o protocolo mais
29

conhecido em transaes via WEB e hoje domina esse mercado, estando presente principalmente em vendas on-line envolvendo carto de crdito. Foi criado pela Netscape, sendo o padro livre para uso pessoal e empresarial. Ressalte-se novamente o nvel de segurana deste protocolo, o qual assegura a inviolabilidade das vendas on-line com carto de crdito (GEEK, 2002). Pode-se citar tambm como exemplo o PGP, j descrito anteriormente, lembrando-se de que se trata de um programa de criptografia famoso e bastante difundido na internet, destinado a criptografia de e-mail. Suporta os algoritmos hashing MD5 e SHA-1. O S/MIME (Secure Multipurpose Internet Mail Extensions) consiste em um esforo de um consrcio de empresas, tendo inclusive como um dos lderes a Microsoft, para adicionar segurana a mensagens eletrnicas no formato MIME. Acredita-se que o S/MIME dever se estabelecer no mercado corporativo, enquanto que o PGP atuar no mundo do e-mail pessoal (MAIA, 1999). J o SET um conjunto de padres e protocolos para realizar transaes financeiras seguras, como as realizadas com cartes de crdito na internet. Oferece um canal seguro entre todos os envolvidos na transao, bem como autenticidade e privacidade entre as partes envolvidas. A especificao X.509 define o relacionamento entre as autoridades de certificao. Baseado em criptografia de chave pblica e assinatura digital (MAIA,1999). Pode-se ento traar um comparativo entre os modelos vistos (criptografia simtrica e assimtrica), conforme se mostra na Tabela 1.4.
Tabela 1.4 Comparao entre os Tipos de Algoritmos de Criptografia

Criptografia Simtrica Rpida Gerncia e distribuio das chaves complexa No oferece assinatura digital.

Criptografia Assimtrica Lenta Gerncia e distribuio simples Oferece assinatura digital

A tabela 1.5, mostra detalhes dos algoritmos simtricos mais conhecidos pela comunidade da rea de segurana da informao e criptografia.

Tabela 1.5 Caractersticas dos Algoritmos Simtricos mais Conhecidos

30

Algoritmo DES Triple Des (2 chaves) Triple DES (3 chaves) IDEA Blowfish RC5 CAST-128 RC2 RC4 Rijndael (AES) MARS RC6 Serpent Twofish

Tipo Bloco Bloco Bloco Bloco Bloco Bloco Bloco Bloco Stream (fluxo) Bloco Bloco Bloco Bloco Bloco

Tamanho Chave 56 112 168 128 32 a 448 0 a 2040 40 a 128 0 a 1024 0 a 256 128, 192, 256 Varivel Varivel Varivel 128, 192, 256

Tamanho Bloco 64 64 64 64 64 32, 64, 128 64 64 -128, 192, 256 128 128 128 128

Nessa tabela possvel observar que a maioria dos algoritmos criptogrficos modernos, os mais usados na atualidade, so baseados no sistema de cifrar as informaes por bloco, cujo tamanho de bloco mais usado de 64 bits e possuem chaves de tamanho relativamente grande, superior a 56 bits. Outro aspecto que merece destaque, o fato de alguns algoritmos possuem tamanhos de chave e/ou de bloco varivel (ver situao dos algoritmos blowfish, RC5, CAST, RC2, RC4, Rijndael - AES, MARS, RC6, Serpent e Twofish, que casualmente foram os algoritmos que fizeram parte do projeto AES) (BIHAM, 1999).

1.4 Assinatura Digital


Alguns algoritmos criptogrficos de chave-pblica permitem a sua utilizao para gerar o que se denomina de assinaturas digitais. O algoritmo RSA um destes algoritmos, assim, alm da operao normal de cifrar com a chave-pblica e decifrar com a chave-privada, permitir que, cifrando-se com a chave-privada, o processo de decifrar com a chave-pblica resulta na recuperao da mensagem (BUCHMANN, 2001). Obviamente esta forma de uso no assegura o sigilo da mensagem, uma vez que qualquer um pode decifrar a mensagem, dado que a chave-pblica de conhecimento pblico. Entretanto, se esta operao resulta na mensagem esperada pode-se ter a certeza de que somente o detentor da correspondente chave-privada poderia ter realizado a operao de cifragem. Assim, uma assinatura digital o criptograma resultante da cifrao de um determinado bloco de dados (documento) pela utilizao da chave-privada de quem assina em um algoritmo assimtrico. A verificao da assinatura feita decifrandose o criptograma (assinatura) com a suposta chave-pblica correspondente. Se o resultado for vlido, a assinatura considerada vlida, ou seja, autntica, uma vez que apenas o detentor da chave privada, par da chave pblica utilizada, poderia ter gerado aquele criptograma. Na figura 1.5 ilustra-se este procedimento.

31

Figura 1.5 Gerao de Assinatura Digital de um documento (BURNETT, 2002).

Nesta figura um usurio de nome Fbio assina um documento, cifrando-o com sua chave-privada e enviando tanto o documento original quanto a assinatura para um outro usurio chamado de Edward. Este usurio verifica a assinatura decifrando-a com a chave-pblica de Fbio (de conhecimento pblico), e comparando o resultado com o documento recebido. Se estiverem de acordo, a assinatura confere, caso contrrio a assinatura considerada invlida, significando que ou no foi Fbio quem assinou, ou o documento foi adulterado aps a assinatura. Interessante observar que este procedimento capaz de garantir tanto a origem (autenticao do emissor), tendo em vista que supostamente somente Fbio conhece sua chave privada e portanto somente ele capaz de gerar uma assinatura que possa ser verificada com sua chave-pblica, como tambm a integridade do documento, j que, se o mesmo for alterado, a verificao da assinatura ir indicar isto, caso tenha vindo efetivamente do pretenso emissor. Usualmente, face ineficincia computacional dos algoritmos assimtricos, os mtodos para assinatura digital empregados na prtica no assinam o documento que se deseja autenticar em si, mas uma smula deste, obtida pelo seu processamento atravs do que se denomina uma funo de Hashing. Uma funo de hashing uma funo criptogrfica que gera uma sada de tamanho fixo (geralmente 128 a 256 bits) independentemente do tamanho da entrada. A esta sada se denomina de hash da mensagem (ou documento ou o que quer que seja a entrada). Segundo Burnett (BURNETT, 2002), para ter utilidade criptogrfica, a funo de hashing deve ser: Simples (eficiente, rpido) se computar o hash de dada mensagem; Impraticvel se determinar a entrada a partir de seu hash; Impraticvel se determinar uma outra entrada que resulte no mesmo hash de uma dada entrada; Valores de hash possveis so estatisticamente equiprovveis.

32

A tabela 1.6 mostra as caractersticas dos algoritmos de hashing mais conhecidos pela comunidade da rea de segurana de dados.
Tabela 1.6 Caractersticas dos Algoritmos de hashing mais conhecidos (GUELFI,2002)
Algoritmo de Hash Abreast Bavies-Meyer (c/IDEA) Davies-Meyer (c/DES) GOST-Hash NAVAL (3 passos) NAVAL (4 passos) NAVAL (5 passos) MD4 Message Digest 4 MD5 Message Digest 5 N-HASH (12 rounds) N-HASH (15 rounds) RIPE-MD RIPE-MD-160 SHA Secure Hash Algorithm SNEFRU (4 passos) SNEFRU (8 passos) Tamanho HASH 128 64 256 Varivel Varivel Varivel 128 128 128 128 128 160 160 128 128 Kbytes/s 22 9 11 168 118 95 236 174 29 24 182 -75 48 23

Nessa tabela possvel observar que a maioria dos algoritmos de hashing usam um tamanho de hash fixo, com destaque para 128 e 160 bits, que so os tamanhos mais usados pela comunidade. Os algoritmos mais conhecidos pela comunidade acadmica e com utilidade comercial so o algoritmo SHA, MD4 e MD5. J os outros, como o nome indicado na tabela 1.6 sugere, pertencem a aplicaes governamentais e de uso privado, como por exemplo aplicaes militares e navais.

1.5 Consideraes Finais do Captulo


Ainda no contexto da viso atual de criptografia, pode-se elencar outros fatores que impulsionam seu estudo e evoluo: A tecnologia de protocolos de rede tornar a Internet uma rota vulnervel invases e furto de informaes; Crackers de todas as partes esto dispostos a destruir at mesmo os mais slidos negcios on-line e possuem armas intelectuais para isso; E-commerce comeou a perder adeptos, por ser suscetvel a fraudes em operaes envolvendo transferncia de dinheiro e cartes de crdito; Correio eletrnico tambm no seguro; Diversos servios on-line aproveitam a ingenuidade do internauta para invadir um microcomputador e obter dados pessoais; Pelo computador muito mais fcil e provvel a aplicao de mtodos de monitoramento;
33

Ainda existe um sentimento de insegurana quando se realiza alguma transao comercial via internet, fazendo com que no seja aproveitado todo o potencial neste tipo de comrcio; A invaso de mquinas/sistemas e roubo de informao uma realidade, deixando de lado a imagem fictcia e cinematogrficas; Os algoritmos de criptografia ainda so um conceito distante da grande massa de usurios, se apresentado como algo abstrato e intangvel.

Por esse motivo, este livro alm de apresentar de forma clara os algoritmos criptogrficos mais usados no momento, preocupa-se em apresentar dados de desempenho: tempos de execuo do processo de cifragem e decifragem, tempo de processamento de alguns algoritmos simtricos (DES, AES, IDEA, RC5) e assimtricos como o RSA e funes de hashing (MD5 e SHA-1), quando implementados em software (usando-se da linguagem C e alguns deles em Java) e hardware (em circuitos programveis FPGAs atravs da linguagem especial para descrio de sistemas digitais, conhecida como VHDL). Um dos pontos de interesse ao leitor destacar que ao aumentar o tamanho da chave aumenta o nvel de segurana, mas aumenta-se tambm o tempo de processamento do processo de cifragem e decifragem. Neste livro mostra-se qual o real impacto desse processo, tais como impacto do algoritmo no tempo de processamento, impacto do sistema operacional (Windows, Linux), impacto do processador e etc.

34

Captulo 2
Conceitos de Circuitos Programveis FPGAs e VHDL e VHDL

Neste captulo, apresentam-se conceitos bsicos de circuitos programveis FPGAs e da linguagem de descrio de hardware VHDL. Inicialmente apresentada a estrutura interna e roteamento dos circuitos FPGAs, discutindo conceitos de reconfigurao. Posteriormente tem-se a definio das formas de descrever um circuito utilizando VHDL, exemplificando cada metodologia de descrio de hardware, onde a sintaxe da linguagem baseada no padro VHDL93. Alm de descrever os principais elementos que compem a estrutura da linguagem como: operadores, expresses, atributos, tipos da linguagem, declarao de entidades e arquiteturas, expresses concorrentes, expresses seqenciais, processos, comando seqenciais e outros.

2.1 Estrutura Interna de um FPGA


Como ponto de partida para este captulo, faz-se necessrio apresentar a estrutura interna de circuitos programveis FPGAs, mostrando algumas arquiteturas desta tecnologia, bem como discutir os conceitos de reconfigurao e roteamento desses circuitos. No objetivo deste livro explorar em profundidade detalhes da tecnologia FPGA, mas apenas alguns conceitos bsicos quse sero importantes para entender o projeto e desempenho dos algoritmos criptogrficos implementados atravs desta tecnologia. A figura 2.1 apresenta quatro principais arquiteturas internas utilizadas em circuitos programveis: matriz simtrica, sea-of-gates, row-based e PLD hierrquico. J a figura 2.2 mostra que um FPGA (Field Programmable Gate Arrays) so circuitos programveis compostos de CLBs, switch boxes, IOBs e canais de roteamento.

35

Figura 2.1 Arquiteturas interna de circuitos programveis FPGA.

A arquitetura sea-of-gates um circuito composto por transistores ou blocos lgicos de baixa complexidade. A vantagem dessa arquitetura a grande disponibilidade de portas lgicas por rea. Porm, como no h uma rea dedicada para o roteamento, necessrio que o mesmo seja feito sobre as clulas, muitas vezes inutilizando reas disponveis para implementao de uma determinada lgica. Nos circuitos de arquitetura row-based os blocos lgicos esto dispostos horizontalmente. Existe uma rea dedicada de roteamento localizada entre as linhas de blocos lgicos. As arquiteturas row-based e sea-of-gates originaram-se das metodologias de projeto de ASICs, standard-cells e gate-array. A arquitetura tipo PLD hierrquico constitudo por uma matriz de blocos lgicos, denominados logic arrays blocks, sendo interligados atravs do recurso de roteamento conhecido como matriz programvel de interconexo (PIA). Esse tipo de dispositivo dito hierrquico, porque os blocos lgicos podem ser agrupados entre si. A arquitetura tipo matriz simtrica flexvel no roteamento, pois possui canais verticais e horizontais.

36

Figura 2.2 Dispositivos internos de um FPGA.

J a figura 2.2 mostra que um FPGA (Field Programmable Gate Arrays) so circuitos programveis compostos de CLBs, switch boxes, IOBs e canais de roteamento.

2.2 Roteamento e Configurao de um FPGA


Nesta seo so discutidos conceitos bsicos de roteamento e reconfigurao de circuitos programveis e reconfigurveis FPGAs. O roteamento a interconexo entre blocos lgicos atravs de uma rede de camadas de metal. As conexes fsicas entre os blocos lgicos so feitas com transistores controlados por bits de memria (PIP) ou por chaves de interconexo (switch matrix). Eis alguns elementos bsicos utilizados na malha de roteamento da famlia XC4000 da Xilinx: Conexes globais: estas formam uma rede de interconexo em linhas e colunas ligadas atravs de chaves de interconexo. Esta rede circunda os blocos lgicos (CLBs) e os blocos de E/S (IOBs). Matriz de conexo (Switch Matrix): so chaves de interconexo que permitem o roteamento entre os blocos lgicos atravs das conexes globais. Conexes diretas: interligam CLBs vizinhos e permitem conectar blocos com menor atraso, pois no utilizam recursos globais de roteamento. Linhas longas: so conexes que atravessam todo o circuito sem passar pelas matrizes de conexo e so utilizadas para conectar sinais longos. A exigncia de alto poder de processamento e o surgimento de novas aplicaes, promovem uma constante busca por alternativas e arquiteturas que visem melhorar a performance dos computadores, especialmente em aplicaes de tempo real. Uma destas alternativas a reconfigurao.

37

Acoplando um dispositivo programvel FPGA a um processador de propsito geral (GPP), torna-se possvel a explorao eficiente do potencial das chamadas arquiteturas reconfigurveis. Arquiteturas reconfigurveis permitem ao projetista a criao de novas funes, e possibilita a execuo de operaes com um nmero consideravelmente menor de ciclos do que necessrio em GPPs. Em uma arquitetura reconfigurvel, so desnecessrias muitas das unidades funcionais complexas usualmente encontradas em processadores de propsito geral. Os mtodos de reconfigurao de um dispositivo programvel e reconfigurvel podem ser classificados como: Reconfigurao total: a forma de configurao, onde o dispositivo reconfigurvel inteiramente alterado. Tambm tratada apenas como configurao. Reconfigurao parcial: a forma de configurao que permite que somente uma parte do dispositivo seja reconfigurada. A reconfigurao parcial pode ser: no-disruptiva, onde as partes do sistema que no esto sendo reconfiguradas permanecem completamente funcionais durante o ciclo de reconfigurao; ou disruptiva, onde a reconfigurao parcial afeta outras partes do sistema, necessitando de uma parada no funcionamento do mesmo. Reconfigurao dinmica: tambm chamada de run-time reconfiguration (RTR), on-the-fly reconfiguration ou in-circuit reconfiguration. Todas essas expresses podem ser traduzidas tambm como reconfigurao em tempo de execuo. Nesse tipo de reconfigurao no h necessidade de reiniciar o circuito ou remover elementos reconfigurveis para programao. Reconfigurao extrnseca: reconfigura parcialmente o sistema, mas somente considerando cada FPGA que o compe como unidade atmica de reconfigurao. Reconfigurao intrnseca: reconfigura parcialmente cada FPGA que compe o sistema. A partir desta seo apresentam-se conceitos bsicos da linguagem VHDL utilizados nas implementaes dos circuitos digitais bsicos descritos no captulo 3, os quais sero teis para entender o projeto em hardware dos algoritmos criptogrficos focados neste livro.

2.3 VHDL - Descrio Estrutural e Comportamental


Na linguagem VHDL (VHSIC Hardware Description Language) existem duas formas para a descrio de circuitos digitais: a estrutural e a comportamental. A forma estrutural indica os diferentes componentes que constituem o circuito e suas respectivas interconexes. Desta maneira pode-se especificar um circuito e saber como seu funcionamento.
38

A forma comportamental consiste em descrever o circuito pensando no seu comportamento e funcionamento e no na sua estrutura. Essa metodologia facilita a descrio de circuitos onde a estrutura interna no est disponvel, mas o seu funcionamento e comportamento podem ser interpretados. Assim, esse tipo de descrio vem se desenvolvendo a cada dia. A descrio comportamental pode-se dividir em duas metodologias, dependendo do nvel de abstrao: a descrio algortmica e de fluxo de dados. Na descrio de um circuito utilizando a linguagem VHDL, comum ter-se trechos implementados de maneira comportamental e estrutural, sendo de responsabilidade do projetista a utilizao correta dos mtodos de implementao de circuitos em VHDL.

2.4 Exemplo dos Estilos de Descries em VHDL


A figura 2.3 representa um comparador de 1 bit simplificado. Este ser descrito nos dois estilos de descrio de circuitos digitais em VHDL, estrutural e comportamental. Onde U1, U2 so os componentes do circuito, L1 uma linha de conexo entre os componentes, e E1, E2 e S so as portas de entrada e sada do circuito.

Figura 2.3 - Representao de um comparador de 1 bit

O funcionamento do comparador de 1 bit simplificado, onde os valores lgicos da portas de entrada E1 e E2 sero comparados. Se E2 for menor que E1 a sada S recebe o valor lgico 1, caso contrrio, 0. Este exemplo do comparador de 1 bit ser utilizado para demostrar as formas de descrio de circuito digitais em VHDL nas sees 2.4.1, 2.4.2 e 2.4.3.

2.4.1 Descrio Algortmica


A descrio algortmica um conjunto de passos que descreve de forma comportamental o circuito digital projetado. Em primeiro lugar, deve-se descrever a entidade do circuito, onde so definidas as portas de entrada e sada. A entidade (entity) independente do mtodo de descrio de circuitos digitais sempre se mantm a mesma. J a arquitetura (architecture) responsvel pela descrio do circuito de maneira estrutural ou comportamental. Neste caso, o comparador de 1 bit (figura 2.3) descrito na seqncia, de maneira comportamental, aplicando o princpio algortmico.
39

Comparador de 1 Bit (Descrio Algortmica) -- definio da entidade: portas de E/S


entity comp is port (e1,e2: in bit; s: out bit); end comp;

-- definio da arquitetura: descrio da lgica interna do circuito


architecture comp_alg of comp is begin process (e1,e2) begin if e2 < e1 then s<=1; else s<= 0;

end if; end process; end comp_alg;

Nota-se que a comparao foi descrita de forma comportamental utilizando o comando seqencial IF-THEN-ELSE, desprezando a lgica composta pelas portas lgicas XOR e AND do comparador de 1 bit representado na figura 2.3.

2.4.2 Descrio de Fluxo de Dados


A descrio de fluxo de dados pode ser visualizada como a transferncia entre registradores possibilitando o paralelismo de instrues. Quando se tem vrias instrues, estas tornam-se concorrentes entre si. Comparador de 1 Bit (Descrio de Fluxo de Dados )
architecture comp_fluxo_dados of comp is begin s<= e1 when else e2; end comp_fluxo_dados; e2> e1

interessante perceber que em ambas as descries comportamentais no foi necessrio utilizar os componentes do circuito descrito na figura 2.3, descrevendo apenas o comportamento em um alto nvel de abstrao.

2.4.3 Descrio Estrutural

40

Para descrever um circuito na forma estrutural, deve-se conhecer seus componentes e interconexes. Em sistemas onde no possvel visualizar a estrutura interna de maneira detalhada, torna-se difcil a descrio utilizando a metodologia estrutural. Comparador de 1 bit (Descrio Estrutural)
architecture comp_fluxo_dados of comp is signal l1: bit; begin u1: entity xor2 port map (e1,e2,l1); u2: entity and2 port map (e1,l1,s); end comp_fluxo_dados;

Interessante observar que sem a correta visualizao dos componentes e as respectivas interconexes do comparador de 1 bit, conforme a descrio da figura 2.3, pode dificultar sua descrio estrutural em VHDL.

2.5 Elementos Sintticos do VHDL


Toda linguagem possui elementos sintticos, tipos de dados e estruturas. A linguagem VHDL no diferente, porm uma linguagem de descrio de hardware, portanto deve oferecer suporte para a descrio de trechos concorrentes. A seguir os elementos sintticos mais comuns: Comentrios: Qualquer linha precedida de -- no ser compilada. Smbolos especiais: Contendo apenas um caracter: + - / * ( ) . , : ; & < > = | # Contendo dois caracteres: ** => := /= >= <= <> -Identificadores: Identificadores so usados para nomear objetos da linguagem como variveis, sinais, rotinas, etc. Composto por letras, nmeros e o smbolo _. Nunca pode conter smbolos especiais ou coincidir com palavras reservadas. Maisculas e minsculas so consideradas iguais, assim VHDL, vhdl e VhDl so possibilidades que representam o mesmo objeto. Nmeros: Qualquer nmero que se encontra considerado na base 10. Admite-se a notao cientfica convencional para nmeros com ponto flutuante. possvel alterar a base de um nmero usando o simbolo #. Exemplo: 2#00001111, 16#0F ambos representam o nmero 15, respectivamente na base 2 e 16. Caracteres: Qualquer caracter deve estar entre aspas simples: Exemplo 1 A. Cadeia de bits: Cadeia ou vetor de bits uma seqncia de bits em uma determinada base Ex.: B 00001111, X0F, onde B binrio e X Hexadecimal. Palavras reservadas: So palavras que possuem um significado especial, so instrues e elementos que permitem definir sentenas. As palavras reservadas do padro VHDL93 so (ORDONEZ, 2003):
41

ABS ACCESS AFTER ALIAS ALL AND ARCHITECTU RE ARRAY ASSERT ATTRIBUTE BEGIN BLOCK BODY BUFFER BUS CASE COMPONENT GROUP IMPURE LITERAL

CONFIGURATION CONSTANT DISCONNECT DOWNTO ELSE ELSIF END ENTITY EXIT FILE FOR FUNCTION GENERATE GENERIC GUARDED IF IN POSTPONED PURE UNAFFECTED

INOUT IS LABEL LIBRARY LINKAGE LOOP MAP MOD NAND NEW NEXT NOR NOT NULL OF ON OPEN ROR SHARED

OR OTHERS OUT PACKAGE PORT PROCEDURE PROCESS RANGE RECORD REGISTER REM REPORT RETURN SELECT SEVERITY SIGNAL SUBTYPE SRA SRL

THEN TO TRANSPORT TYPE UNITS UNTIL USE VARIABLE WAIT WHEN WHILE WITH XOR XNOR SLL SLA ROL REJECT INERTIAL

2.6 Operadores em VHDL


Operador de concatenao: & concatena bits e cadeias de bits, gerando um novo vetor de bits. Ex.: S<= 000&111; faz com que o vetor S seja de 6 bits; Operadores aritmticos A seguir uma descrio dos operadores aritmticos: Operador Descrio da Funcionalidade serve para elevar um nmero a uma potncia: 2**3 23. O operador ** pode ser inteiro ou real. devolve o valor absoluto. ABS serve para multiplicar qualquer dado do tipo numrico (bit e bit_vector * no so numricos). serve para dividir qualquer dado numrico; / calcula o mdulo de dois nmeros e os operandos s podem ser MOD inteiros. calcula o resto da diviso inteira. REM quando est entre dois operandos calcula a soma, quando est na frente + de um operando, indica que este positivo. quando est entre dois operandos calcula a subtrao. Quando esta na frente de um operando, indica que este negativo. Operadores relacionais

42

= ou /= O primeiro indica true, se os operandos forem iguais e false se forem diferentes. O segundo funciona justamente ao contrrio, indicando o fato das relaes sendo comparadas so diferentes ou no.

< , <= , > ou >= indicam respectivamente menor, menor igual, maior e maior igual.

Operadores lgicos NOT , AND , NAND , OR , NOR , XOR ou XNOR atuam sobre os tipos bit, bit_vector e boolean. No caso de operaes com vetores, a operao realizada bit a bit.

2.7 Tipos de Dados em VHDL


H basicamente dois tipos de dados: escalares e compostos. A seguir, uma melhor descrio de cada um deles.

2.7.1 Tipos Escalares


Inteiros: So dados cujo contedo um valor numrico inteiro. Pode definir um intervalo usando a palavra reservada RANGE, e os limites do intervalo so do tipo numrico inteiro.
Ex.: TYPE integer IS RANGE 0 TO 255,

neste caso tem-se um tipo inteiro que pode variar dentro do intervalo de 0 a 255.

Reais: Conhecidos como numerao com ponto flutuante que define um nmero real. Pode-se utilizar intervalos do tipo numrico real.
Ex.: TYPE real IS RANGE 0.0 TO 9.0;

Fsicos: Como o prprio nome j diz, so dados que correpondem a fenmenos fsicos e portanto expressam medidas fsicas.
Ex.: TYPE altitude IS RANGE 0 TO 1.0e6; UNITS um; mm=1000um;

43

M=1000mm Inch=25.4 mm; END UNITS; UNITS

Enumerados: So dados que podem assumir qualquer valor especificado em um conjunto finito. Este conjunto indicado atravs de uma lista entre parnteses onde os elementos esto separados por vrgula.
Ex.: TYPE estados IS (reset, busca, executa);

2.7.2 Tipos Compostos


Matrizes: uma coleo de elementos do mesmo tipo acessados por um ndice. Pode ser unidimensional e multidimencional.
Ex.: TYPE positivo IS ARRAY (byte RANGE 0 TO 127 ) OF integer;

Registro: equivalente ao tipo registro (record) de outra linguagens.


Ex.: TYPE agenda IS RECORD Nome: string; Rg: integer; END RECORD; RECORD

Subtipos de dados : um nome de um conjunto de tipos j definidos.


Ex.: SUBTYPE digitos IS integer RANGE 0 TO 9,

neste caso o subtipo digitos representa os nmeros inteiros entre 0 e 9.

2.8 Atributos em VHDL


Os elementos como variveis, sinais e outros podem ser acompanhados por atributos. Os atributos so utilizados para explorar as opes de cada elemento da linguagem. Os atributos esto associados a elementos da linguagem atravs da aspa simples. O tipo do elemento define os atributos herdados. Os atributos definidos neste tpico so os mais utilizados. Se o elemento t um tipo enumerado, inteiro, real, fsico, herdar os seguintes atributos: tleft. tright tlow limite esquerdo do tipo t limite direito do tipo t. limite inferior do tipo t.
44

thigh

limite superior do tipo t.

Supondo um tipo t como o anterior, um membro x desse tipo, e um n como valor inteiro, pode-se utilizar os seguintes atributos. tpos (x) tval (n) tleftof (x) thighof (x) tpred (x) tsucc (x) posio de x dentro do tipo t. elemento n do tipo t. elemento que est esquerda de x em t. elemento que est direita de x em t. elemento que est adiante de x em t elemento que est atrs de x em t

Supondo que a uma matriz e n um inteiro desde 1 at o nmero de dimenso da matriz, ento pode-se utilizar os seguintes atributos. aleft (n) aright (n) alow (n) ahigh (n) arange (n) Alength (n) limite esquerdo do intervalo de dimenso n de a. limite direito do intervalo de dimenso n de a. limite inferior do intervalo de dimenso n de a. limite superior do intervalo de dimenso n de a. intervalo do ndice de dimenso n de a. comprimento do ndice de dimenso n de a.

Supondo que s um sinal, pode-se utilizar os seguintes atributos: Devolve true, se acontecer uma troca de valores do sinal s. sstable (temp) Devolve true, se o sinal for estvel durante o ltimo perodo de temp. sevent

O atributo event um dos atributos mais utilizados. Atravs dele possvel detectar a borda de subida de determinado sinal. Ex.: IF sevent AND s=1 THEN

2.9 Constantes, Variveis e Sinais


Um elemento em VHDL contm um valor de um tipo especfico. H trs tipos de elemento em VHDL: constantes, variveis e sinais. As variveis e as constantes possuem um conceito semelhante ao de outras linguagem, enquanto que o conceito de sinais diferente. Constantes
45

Uma constante um elemento iniciado com um determinado valor que no pode ser modificado depois de ter sido atribudo.
Ex.: CONSTANT zera: integer : = 0; CONSTANT max: bit_vector ( 3 downto 0 ) : = 1010;

Variveis Uma varivel em VHDL similar ao conceito de varivel de outras linguagens. Toda varivel deve ser declarada em um processo (PROCESS que ser explicado na seo 2.16) ou num subprograma. Seu escopo vlido apenas no processo ou subprograma em que foi declarada. As variveis so elementos abstratos da linguagem e possuem uma concordncia fsica real imediata, isto , quando atribudo algum valor para uma varivel, a atualizao instantnea.
Ex.: VARIABLE flag: bit; VARIABLE registrador: bit_vector (2 downto 0);

Sinais Os sinais so declarados da mesma maneira que as constantes e variveis com a diferena que os sinais podem ser, normal, register ou bus. Se na declarao no se especifica nada, o sinal do tipo normal. Para utilizar os tipos register e bus, devese declarar explicitamente com as palavras reservadas REGISTER e BUS. Os sinais devem ser declarados unicamente nas arquiteturas, pacotes ou nos blocos concorrentes. O conceito de sinais possui um significado fsico. Representam conexes reais de um circuito. Isto na verdade no ocorre instantaneamente e sim quando o processo acaba ou encontra uma sentena WAIT.
Ex.: SIGNAL teste: bit; SIGNAL byte: bit_vector ( 7 DOWNTO 0) BUS : = 00001111;

2.10 Entidade e Arquitetura


Entidade ( ENTITY ) A entidade uma estrutura onde se define as entradas e sadas de um determinado circuito. Na declarao desta estrutura pode-se incluir outros elementos. A forma geral para declarao de uma entidade :

ENTITY nome IS [GENERIC GENERIC (lista de parmetros);] [PORT PORT ( lista de portas);] [declaraes] [BEGIN BEGIN END [ENTITY ENTITY] ENTITY [nome]; sentenas]

46

Na declarao da entidade, observam-se os elementos como PORT e GENERIC. Aps a instruo PORT, declarada uma lista de portas de entrada e sada do circuito. J a instruo GENERIC define uma lista de parmetros que so instanciados com a instruo GENERIC MAP, assim como o PORT MAP instancia as portas de entradas e sadas do circuito, o GENERIC MAP instancia os parmetros pr-definidos na entidade. A seguir um exemplo de utilizao:

Ex.: ENTITY registrador IS GENERIC (tamanho: integer); PORT (Clk: IN bit; Enable: IN bit; Din: IN bit_vector (tamanho-1 DOWNTO 0); Dout: OUT bit_vector (tamanho-1 DOWNTO 0)); END registrador;

Arquitetura ( ARCHITECTURE ) Na arquitetura implementa-se o funcionamento do mdulo definido na entidade. Toda arquitetura faz referncia a uma entidade especifica, mas uma entidade pode referenciar diferentes arquiteturas. A forma geral para declarao de uma arquitetura :
ARCHITECTURE nome OF nome_entidade IS [declaraes] BEGIN [sentenas concorrentes] END [ARCHITECTURE ARCHITECTURE] ARCHITECTURE [nome];

2.11 Componentes em VHDL


O componente uma estrutura que referencia diretamente uma entidade e possibilita a instanciao e replicao da mesma sem a necessidade de descrev-la novamente. A forma geral para declarar um componente :
COMPONENT nome [IS IS] IS [GENERIC GENERIC (lista de parmetros);] [PORT PORT (lista de portas);] END COMPONENT [nome];

Ex.: COMPONENT inv PORT (e: IN bit; s: OUT bit); END COMPONENT; COMPONENT

A forma geral para instanciar um componente :

47

ref_id: [COMPONENT] nome_do_componente | ENTITY nome_da_entidade [(nome_da_arquitetura)] | CONFIGURATION nome_da_configurao [GENERIC MAP (parametros)] [PORT MAP (lista de portas)];

Onde, ref_id uma referncia ao componente que est sendo instanciado, possibilitando a rplica do mesmo componente, bastando mudar o identificador de referncia.
Ex.: u1:inv PORT MAP (e=>, s => s1); u2:inv PORT MAP (e=>, s => s1);

2.12 Pacotes em VHDL (Package)


O pacote ou PACKAGE uma coleo de tipos, constantes, subprogramas, etc. Esta a maneira de agrupar elementos relacionados. Os pacotes esto divididos em duas partes, a declarao e corpo, onde o corpo contm definies de procedimentos e funes que podem ser omitidos, se no h nenhum desses elementos para declarar. A forma geral para a declarao de um pacote :
PACKAGE nome declaraes END [PACKAGE PACKAGE] PACKAGE [nome]; IS

PACKAGE BODY BODY nome IS declaraes , subprogramas, etc. END [PACKAGE PACKAGE BODY] BODY [nome];

Uma vez declarado o pacote, os elementos podem ser referenciados atravs do nome do pacote. Pode-se referenciar apenas um elemento ou todos, bastando declarar no programa principal quais os elementos do pacote que estaro disponveis. A seguir, um exemplo utilizando PACKAGE.
PACKAGE cpu IS SUBTYPE byte IS bit_vector (7 DOWNTO 0); FUNCTION inc (valor: interger) RETURN interger; END cpu;

PACKAGE BODY cpu IS FUNCTION inc (valor: interger) RETURN interger IS VARIABLE result: integer; BEGIN Result <= valor +1; RETURN result; END inc; END cpu;

48

Ex.: Utilizao do pacote declarado.


VARIABLE reg: work.cpu.byte; pc <= work.cpu.inc(pc);

Ou ainda: quando declarado o uso do pacote no incio do programa, no necessrio apontar o caminho de referncia.

Ex.:

USE work.cpu.ALL ALL; ALL ... VARIABLE reg: byte; pc <= inc(pc);

2.13 Configurao em VHDL (Configuration)


A configurao um bloco especial do VHDL que permite especificar os mnimos enlaces componente-entidade, atravs da parte declarativa de uma arquitetura. A forma geral para a declarao de uma configurao :
CONFIGURATION nome OF nome_entidade IS { sentenas | atributos }

END [CONFIGURATION CONFIGURATION] CONFIGURATION [nome];

Outros elementos podem ser declarados na configurao, mas no so discutidos neste livro.

2.14 Procedimentos e Funes em VHDL


Procedimentos e funes podem ser declarados nas partes declarativas de arquiteturas, blocos, pacote, etc. A forma geral para a declarao de procedimentos e funes :
PROCEDURE nome [(parmetros)] IS [declaraes] BEGIN [sentenas seqenciais] END [PROCEDURE PROCEDURE] PROCEDURE [nome];

FUNCTION nome [(parmetros)] RETURN tipo IS [declaraes] BEGIN

49

[sentenas seqenciais] END [FUNCTION FUNCTION] FUNCTION [nome];

Com relao aos parmetros nas funes, estes devem ser apenas do tipo IN (entrada) e podem ser CONSTANT e SIGNAL. Nos procedimentos, os parmetros podem ser do tipo CONSTANT, IN, OUT e INOUT, sendo que CONSTANT apenas do tipo IN.
Ex.: PROCEDURE inc_pc IS BEGIN next_PC := PC + 1; END; END

2.15 Execuo Concorrente em VHDL


A execuo de instrues concorrentes feita atravs de atribuies entre sinais, utilizando o operador <=. Para facilitar algumas atribuies complexas, o VHDL possui alguns elementos de alto nvel que so instrues condicionais, de seleo, e outras que auxiliam a implementao. Atribuio condicional concorrente: WHEN...ELSE... Toda expresso condicional descreve o hardware de forma concorrente. Deve incluir todas as possibilidades de variao de um sinal. A forma geral para declarao de uma atribuio condicional concorrente :
sinal <= {forma_de_onda WHEN condio ELSE} ELSE forma_de_onda [ WHEN condio];

Ex.: s <= 0

WHEN 1 X;

a>b WHEN

ELSE a<b ELSE

Atribuio com seleo concorrente: WITH...SELECT...WHEN Este tipo de atribuio semelhante a construes do case e do switch em Pascal e C. A atribuio executada com base no valor da expresso em teste. A expresso deve sempre retornar um tipo discreto enumerado, inteiro ou um vetor de uma dimenso. A forma geral para declarao de uma atribuio com seleo concorrente :
WITH expresso SELECT sinal <= forma_de_onda WHEN caso caso};

{, forma_de_onda WHEN

Ex.: WITH sel SELECT s <= 1 WHEN 00,

0 WHEN OTHERS; OTHERS

50

Estes so os principais e mais utilizados mtodos para atribuies concorrentes. As atribuies em blocos concorrentes (BLOCK) no so discutidas neste livro. Para maiores informas, verificar as aplicaes e exemplos descritos em (ORDONEZ, 2003).

2.16 Execuo Seqencial


Processo ( PROCESS ) Os processos so, por definio, concorrentes, mas o contedo de cada processo executado de forma seqencial. A forma geral para declarao de um processo :
[id_proc:] [POSTPONED POSTPONED] IS] POSTPONED PROCESS [(lista sensvel)] [IS IS Declaraes BEGIN Instrues seqenciais END [POSTPONED POSTPONED] POSTPONED PROCESS [id_proc];

Onde id_proc um rtulo ou uma etiqueta opcional, lista sensvel uma lista de sinais separados por vrgula que esto entre parnteses. Quando ocorre um evento de mudana em qualquer sinal da lista sensitiva, o processo executado. Processos podem no possuir lista de sensibilidade, mas devem ser controlados pela sentena WAIT. Na parte de declaraes, podem ser criadas variveis, tipos, subprogramas, atributos, etc. No possvel declarar sinais. Declarar um processo e utilizar o elemento POSTPONED significa que este processo s ser executado aps a execuo dos outros processos existentes na descrio de um determinado circuito digital.
Ex.: PROCESS (a,b); BEGIN a<= a AND b; END PROCESS; PROCESS

Comando condicional seqencial: IF...THEN...ELSE A partir do resultado de uma expresso booleana, decide-se qual sentena ser executada. A forma geral para descrever um comando condicional seqencial :
[id_if:] IF condio THEN sentena {ELSIF ELSIF condio THEN {ELSE ELSE sentena} sentena}

END IF [id_if];

Note que h a possibilidade de utilizar IFs aninhados, utilizando a palavra reservada ELSIF, sendo que ELSIF no pede um END IF como finalizao de comando.
51

Ex.: IF a>b THEN c <= a; ELSIF a<b THEN c <= b; ELSE c <= a AND b; END IF; IF

Comando de seleo seqencial : CASE Esta estrutura permite executar uma ou outra instruo, dependendo do resultado de uma expresso, esta deve ser do tipo discreto ou uma matriz de caracteres de uma dimenso. A forma geral para descrever um comando de seleo seqencial :
[id_case:] CASE expresso IS WHEN caso => sentena; {WHEN WHEN caso => sentenas;} [WHEN WHEN OTHERS => sentenas] END CASE; CASE [id_case]

O comando case exige que todas as possibilidades de casos sejam esgotadas. A palavra reservada OTHERS satisfaz todos os casos no previstos anteriormente.
Ex.: CASE semaforo IS WHEN 00 => sinal <= verde; WHEN 01 => sinal <= amarelo; WHEN 10 => sinal <= vermelho; WHEN OTHERS => sinal <= Erro; END CASE; CASE

Comandos de lao: FOR e WHILE A definio dos laos FOR e WHILE segue a mesma estrutura e implementao de outras linguagens como C, Java, Fortran, C++ e etc., onde determinado trecho seqencial executado o nmero de vezes determinado em um intervalo. No caso do comando FOR ou WHILE, a sentena que ir repetir deve estar entre as palavras reservadas LOOP...END. A forma geral para descrever os comandos de lao FOR e WHILE :

Comando FOR
[id_for:] FOR identificador IN intervalo LOOP sentena END LOOP [id_for];

Comando WHILE
[id_while:] WHILE condio LOOP sentena [id_while]; END LOOP

52

Os comandos de lao possuem mtodos auxiliares para a interrupo usando-se os comandos: NEXT e EXIT. O comando NEXT detm a execuo do lao atual e passa para a prxima execuo, enquanto que o comando EXIT finaliza o lao que est executando.
Ex.: FOR I IN 0 TO 9 LOOP A <= i+1; EXIT WHEN a = 6; END LOOP; LOOP

No prximo captulo, estas definies e exemplos da linguagem VHDL sero usadas para implementar ciruitos digitais bsicos, os quais sero usados nos captulos seguintes, o que facilitar o entendimento da verso em hardware dos algoritmos criptogrficos objeto de estudo neste livro.

53

Captulo 3
Exemplos de Circuitos em VHDL

No terceiro captulo, apresentam-se conceitos e a correspondente descrio em VHDL, no padro VHDL93, de alguns circuitos bsicos tais como circuitos combinacionais (Ex. portas lgicas bsicas, multiplexadores, demultiplexadores, somadores, subtratores, multiplicadores, divisores, decodificadores, codificadores e comparadores). Para cada circuito implementado, so gerados dados estatsticos de sua respectiva implementao em FPGA. As estatsticas geradas so: espaciais, como nmero de flip-flops, de LUTs de 4 e 3 entradas e de CLBs utilizadas; e temporais, relacionada aos atrasos para gerar a sada desejada de um determinado circuito. Este tempo o resultado da soma do tempo de lgica mais o de roteamento do circuito digital. As estatsticas geradas so comparadas e analisadas.

3.1 Circuitos Combinacionais


Um circuito combinacional constitudo por um conjunto de portas lgicas que determinam os valores das sadas diretamente, a partir dos valores atuais das entradas. Pode-se dizer que um circuito combinacional realiza uma operao de processamento de informao, a qual pode ser especificada por meio de um conjunto de equaes booleanas. No caso, cada combinao de valores de entrada pode ser vista como uma informao diferente, e cada conjunto de valores de sada representa o resultado da operao. Na figura 3.1, observa-se a representao geral de um circuito combinacional com n entradas que passam por uma lgica combinacional at gerar m sadas.

Figura 3.1 - Diagrama genrico de um circuito combinacional.

O objetivo da anlise de um circuito combinacional determinar seu comportamento. Ento, dado o diagrama de um circuito, deseja-se encontrar as
54

equaes que descrevem suas sadas, a partir de um conjunto de entradas. Uma vez encontradas tais equaes, pode-se obter a tabela verdade, caso esta seja necessria. importante certificar-se de que o circuito combinacional e no seqencial. Um modo prtico verificar se existe algum caminho (ou ligao) entre a sada e a entrada do circuito. Caso no exista, o circuito combinacional. Os circuitos combinacionais so responsveis por operaes lgicas e aritmticas dentro de um sistema digital. Alm das operaes lgicas e aritmticas como adio, subtrao e complementao, existem ainda outras funes necessrias para a realizao de conexes entre os diversos operadores. Dentre estas funes, esto a multiplexao e a decodificao. Os elementos que realizam estas duas ltimas operaes so denominados multiplexadores e decodificadores. A maioria dos circuitos e sistemas digitais so implementados usando circuitos bsicos, conhecidos como portas lgicas. Estes circuitos simples e bsicos so estudados na seo 3.2.

3.2 Portas lgicas Bsicas


As portas lgicas bsicas esto presentes em todos os circuitos lgicos, possuem estrutura e funcionamento simplificados e podem ser classificadas como portas: AND, OR, NOT, NAND, NOR e XOR e XNOR, adotando o padro VHDL93.

3.2.1 Porta AND


A funo lgica da porta AND combinar dois ou mais sinais de entrada de forma equivalente a um circuito em srie, para produzir um nico sinal de sada. A porta AND produz uma sada 1, se todos os sinais de entrada forem 1. Caso qualquer um dos sinais de entrada for 0, a porta AND produzir um sinal de sada igual a 0. Na figura 3.2, visualiza-se a representao de uma porta AND de 2 entradas, a tabela verdade e um exemplo de funcionamento.

Figura 3.2 (a) representao, (b) tabela verdade e (c) exemplo de funcionamento de uma porta AND de duas entradas.

O exemplo de funcionamento da figura 3.2 (c), mostra duas portas AND, onde a sada de uma alimenta a entrada da outra. A resposta de cada operao AND est relacionada com a tabela verdade, figura 3.2 (b).
55

A linguagem VHDL tem como uma de suas primitivas a porta AND, assim como todas as outras portas lgicas bsicas, facilitando a implementao de circuitos digitais. O cdigo VHDL de uma porta AND de duas entradas, a e b e uma sada c :
Porta AND de duas entradas de 1 bit
library ieee; use ieee.std_logic_1164.all all; all

-- declarao da entidade entity and2 is port (a,b: in std_logic; c: out std_logic); end and2;

-- declarao da arquitetura architecture arch_and2 of and2 is begin c <= a and b; end arch_and2;

3.2.2 Porta OR
A funo lgica de uma porta OR consiste em combinar dois ou mais sinais de entrada, de forma equivalente a um circuito em paralelo, para produzir um nico sinal de sada. A porta OR produz uma sada 1, se qualquer um dos sinais de entrada for igual a 1, ou produzir um sinal de sada igual a 0 se todos os sinais de entrada forem 0. A figura 3.3, mostra a representao de uma porta OR de 2 entradas, a tabela verdade e um exemplo de funcionamento.

Figura 3.3

(a) representao, (b) tabela verdade e (c) exemplo de funcionamento de uma porta OR de duas entradas.

O cdigo VHDL de uma porta OR de duas entradas a e b e uma sada c utilizando as primitivas que o VHDL93 oferece :
Porta OR de duas entradas de 1 bit
library ieee;

56

use ieee.std_logic_1164.all all; all entity or2 is port (a,b: in std_logic; c: out std_logic); end or2; architecture arch_or2 of or2 is begin c <= a or b; end arch_or2;

3.2.3 Porta NOT


A funo lgica implementada por uma porta NOT inverter o sinal de entrada, ou seja, se o sinal de entrada for 0 ela produz uma sada 1, se a entrada for 1 produz uma sada 0. A representao de uma porta NOT, a tabela verdade e um exemplo de funcionamento melhor visualizada na figura 3.4.

Figura 3.4 (a) representao, (b) tabela verdade e (c) exemplo de funcionamento de uma porta NOT.

O cdigo VHDL de uma porta NOT utilizando as primitivas que o VHDL93 oferece :
Porta NOT de 1 bit
library ieee; use ieee.std_logic_1164.all all; all entity inv is port (a: in std_logic; c: out std_logic); end inv; architecture arch_inv of inv is begin c <= not a; end arch_inv;

3.2.4 Porta NAND


A funo lgica implementada por uma porta NAND eqivalente a uma porta AND seguida de uma porta NOT, isto , ela produz uma sada que o inverso da sada produzida pela porta AND. Na figura 3.5 tem-se a representao de uma porta
57

NAND de duas entradas a e b e uma sada c, a tabela verdade e um exemplo de funcionamento.

Figura 3.5 (a) Representao, (b) tabela verdade e (c) exemplo de funcionamento de uma porta NAND de duas entradas.

O cdigo VHDL de uma porta NAND de duas entradas a e b e uma sada c utilizando as primitivas que o VHDL93 oferece :
Porta NAND de duas entradas de 1 bit
library ieee; use ieee.std_logic_1164.all all; all entity nand2 is port (a,b: in std_logic; c: out std_logic); end nand2; architecture arch_nand2 of nand2 is begin c <= a nand b; end arch_nand2;

3.2.5 Porta NOR


A funo lgica implementada por uma porta NOR eqivalente a uma porta OR seguida por uma porta NOT. Isto , ela produz uma sada que o inverso da sada produzida pela porta OR. Na figura 3.6, visualiza-se a representao de uma porta NOR de duas entradas a e b e uma sada c, a tabela verdade e um exemplo de funcionamento.

Figura 3.6 (a) representao, (b) tabela verdade e (c) exemplo de funcionamento respectivamente de uma porta NOR de duas entradas. 58

O cdigo VHDL de uma porta NOR de duas entradas a e b e uma sada c utilizando as primitivas que o VHDL93 oferece :
Porta NOR de duas entradas de 1 bit
library ieee; use ieee.std_logic_1164.all all; all entity nor2 is port (a,b: in std_logic; c: out std_logic); end nor2; architecture arch_nor2 of nor2 is begin c <= a nor b; end arch_nor2;

3.2.6 Porta XOR


A funo lgica implementada por uma porta XOR ou tambm conhecida como ou exclusivo comparar os bits e produzir sada 0 quando todos os bits de entrada so iguais, e sada 1 quando pelo menos um dos bits de entrada diferente dos demais. Na figura 3.7, tem a representao de uma porta XOR de duas entradas a e b e uma sada c, a tabela verdade e um exemplo de funcionamento.

Figura 3.7

(a) representao, (b) tabela verdade e (c) exemplo de funcionamento respectivamente de uma porta XOR de duas entradas.

O cdigo VHDL de uma porta XOR de duas entradas a e b e uma sada c utilizando as primitivas que o VHDL93 oferece :
Porta XOR de duas entradas de 1 bit
library ieee; use ieee.std_logic_1164.all all; all entity entit y xor2 is port (a,b: in std_logic; c: out std_logic); end xor2; architecture arch_xor2 of xor2 is

59

begin c <= a xor b; end arch_xor2;

3.2.7 Porta XNOR


A funo lgica da porta XNOR eqivalente a uma porta XOR seguida por uma porta NOT. Isto , ela produz uma sada que o inverso da sada produzida pela porta XOR. A representao de uma porta XNOR de duas entradas, a tabela verdade e um exemplo de funcionamento, pode ser visualizado na figura 3.8.

Figura 3.8

(a) representao, (b) tabela verdade e (c) exemplo de funcionamento respectivamente de uma porta XNOR de duas entradas.

O cdigo VHDL de uma porta XNOR de duas entradas a e b e uma sada c utilizando as primitivas que o VHDL93 oferece :
Porta XNOR de duas entradas de 1 bit
library ieee; use ieee.std_logic_1164.all all; all entity xnor2 is port (a,b: in std_logic; c: out std_logic); end xnor2; architecture arch_xnor2 of xnor2 is begin c <= a xnor b; end arch_xnor2;

3.2.8 Estatsticas de Recursos Usados em FPGAs


Observa-se nos resultados da tabela 3.1 que as portas lgicas so implementadas basicamente com um nico elemento, uma nica LUT de 4 entradas, utilizando assim parte de uma CLB, com exceo da porta lgica NOT, onde no foi necessrio a utilizao de nenhum recurso listado na tabela 3.1.
Tabela 3.1 Recursos utilizados do FPGAs Portas lgicas bsicas 60

Porta Lgica AND OR NOT NAND NOR XOR XNOR

FF 0 0 0 0 0 0 0

LUTs 4 1 1 0 1 1 1 1

LUTs 3 0 0 0 0 0 0 0

CLBs 1 1 0 1 1 1 1

Isto acontece, porque a lgica de inverso da porta NOT pode ser implementada por inversor que compe uma das IOBs, no tendo a necessidade de utilizar nenhum outro recurso do FPGA. Isto justifica o atraso total de execuo do circuito ser menor que das outras portas lgica (tabela 3.2). Os tempos gerados representam o tempo levado para executar cada operao lgica listada na tabela 3.2. Esse tempo pode ser um dos elementos para medir o desempenho de um circuito. Neste caso, est-se medindo o tempo de propagao do sinal em operaes lgicas bsicas. Esse tempo dado em: Tempo de Lgica (TL), o tempo que leva efetivamente para implementar a lgica do circuito; Tempo de Roteamento (TR), o tempo gasto no roteamento implementado pelo software. Sendo que a soma do TL com TR resulta no Atraso Total (AT). Esses tempos so dados em nanosegundos (10-9 segundos).
Tabela 3.2 Temporizao das portas lgicas bsicas. Porta Lgica TL (ns) TR (ns) AT (ns) 6.899 2.451 9.350 AND 6.899 2.472 9.371 OR 5.709 0.194 5.903 NOT 6.899 2.472 9.371 NAND 6.899 2.472 9.371 NOR 6.899 2.472 9.371 XOR 6.899 2.472 9.371 XNOR

interessante perceber que quase todas a funes lgicas possuem os mesmos tempos. Isso acontece, porque so circuitos bsicos e simples, o tempo de roteamento deste circuitos quase mnimo. Esses dados foram obtidos para portas lgicas mapeadas fisicamente em um FPGA simples, do modelo XC4000 da Xilinx.

3.3 Multiplexadores e Demultiplexadores


A figura 3.9 (a) representa um circuito multiplexador 2x1 que possui algumas caractersticas como a presena de dois sinais lgicos de entrada e1 e e2, um de sada s e um de seleo sel. A funo lgica do multiplexador simplesmente selecionar um destes sinais de entrada e1 e e2 atravs do sinal de seleo sel, atribuindo sada s o sinal de entrada desejado. Portanto, pode-se definir um multiplexador como um circuito que possui 2n entradas, n sinais de controle e uma sada.
61

Figura 3.9 (a) representao, (b) tabela verdade e (c) descrio com portas lgicas.

Tem-se tambm os demultiplexadores, que implementam a lgica inversa dos multiplexadores. Portanto, so circuitos com um nico sinal de entrada, 2n sadas e n sinais de controle, que tem a funo de selecionar qual deve ser a sada desejada. O VHDL permite descrever um mesmo circuito em inmeras formas. Isto , um circuito X pode ser descrito de vrias maneiras, mantendo a sua funo lgica original. Seguindo e usando essas possibilidades a maioria dos circuitos descritos neste livro apresentam mais de uma descrio. A seguir apresentam-se quatro diferentes descries em VHDL de um mesmo circuito multiplexador incluindo tambm suas respectivas estatsticas de desempenho espacial e temporal em um FPGA. As implementaes do circuito multiplexador 2x1 utiliza quatro diferentes estruturas disponveis na linguagem VHDL, que so: Execuo concorrente com WITH...SELECT. Execuo seqencial com IF...THEN...ELSE. Execuo seqencial com CASE Implementao com portas lgicas.

3.3.1 Multiplexador 2x1 Cdigos em VHDL


Cdigo VHDL de um multiplexador 2x1 usando o comando de execuo concorrente WITH SELECT:
Multiplexador 2x1
library ieee; ; use ieee.std_logic_1164.all all; all

entity mult2x1 is port ( e1,e2,sel: in std_logic; s: out std_logic);

62

end mult2x1;

architecture arch_mult2x1 of mult2x1 is begin with sel select s <= e1 when '0', e2 when others; others end arch_mult2x1;

Cdigo VHDL de multiplexador 2x1 usando o comando de execuo seqencial IF...THEN...ELSE:


Multiplexador 2x1
library ieee; use ieee.std_logic_1164.all all; all entity mult2x1 is port ( e1,e2,sel: in std_logic; s: out std_logic); end mult2x1;

architecture arch_mult2x1 of mult2x1 is begin process (e1,e2,sel) begin if sel=0 then s <= e1; else s <= e2; end if; ;

end process;
end arch_mult2x1;

Cdigo VHDL de multiplexador 2x1 usando o comando de execuo seqencial CASE:


Multiplexador 2x1
library ieee; use ieee.std_logic_1164.all all; all entity mult2x1 is port ( e1,e2,sel: in std_logic; s: out std_logic); end mult2x1; architecture arch_mult2x1 of mult2x1 is begin process (e1,e2,sel) begin case sel is when '0' => s <= e1;

63

when others => s <= e2; end case; ; end process; ; end arch_mult2x1;

Cdigo VHDL de multiplexador 2x1 usando portas lgicas bsicas:


Multiplexador 2x1
library ieee; use ieee.std_logic_1164.all all; all

entity mult2x1 is port ( e1,e2,sel: in std_logic; s: out std_logic); end mult2x1;

architecture arch_mult2x1 of mult2x1 is begin s <= (e1 and not (sel)) or (e2 and sel); end arch_mult2x1; ;

Observa-se que usando os comandos IF-THEN-ELSE e CASE precisa-se definir um processo, pois so comando seqenciais e so executados a partir de um evento predefinido.

3.3.2 Multiplexador 2x1 Estatsticas em FPGAs


Atavs dos dados apresentados na tabela 3.3, possvel observar que apesar dos cdigos VHDL dos multiplexadores 2x1 serem diferentes, do ponto de vista das estatsticas de utilizao de recursos do FPGA e dos tempos de funcionamento (tabela 3.4), so equivalentes, pois nem a estatstica de elementos utilizados para implementao do circuito e a temporizao foram alterados.
Tabela 3.3 Recursos utilizados do FPGAs Multiplexador 2x1 Multiplexador FF LUTs 4 LUTs 3 CLBs 0 1 0 1 With Select 0 1 0 1 If-Then-Else 0 1 0 1 Case 0 1 0 1 Porta Lgica

Tabela 3.4 Temporizao dos multiplexadores 2x1.

64

Multiplexador With Select If-Then-Else Case Porta Lgica

TL (ns) 6,899 6,899 6,899 6,899

TR (ns) 3,336 3,336 3,336 3,336

AT (ns) 10,235 10,235 10,235 10,235

Observando os dados de temporizao da tabela 3.4, interessante perceber que o tempo de lgica do multiplexador igual de algumas portas lgicas bsicas (tabela 3.2). Isso mostra que do ponto de vista de implementao em FPGA, um multiplexador 2x1, seja qual for a sua implementao, tambm pode ser considerado como um circuito bsico e simples. J quando se observa o tempo de roteamento, percebe-se que maior que o tempo de uma porta lgica bsica, pois um multiplexador possui uma maior complexidade quando comparado a uma simples porta lgica, mas no deixa de ser um circuito simples. Esta diferena no tempo de roteamento, faz com que o atraso total seja maior que das portas lgicas bsicas.

3.4 Decodificadores
O tipo mais comum de decodificador o chamado decodificador binrio, possui n entradas e 2n sadas, onde apenas uma estar ativa para cada combinao possvel das suas entradas. Na tabela 3.5, observa-se a tabela verdade de um decodificador 3x8.
Tabela 3.5 Tabela verdade de um decodificador 3x8. Entradas Sadas X2 X1 X0 S7 S6 S5 S4 S3 S2 S1 S0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0

Na figura 3.10, visualiza-se a representao e a implementao com portas lgicas bsicas de um decodificador 3x8. As entradas so indicadas com x(0), x(1) e x(2) e as sadas com s(0) a s(7).

65

Figura 3.10 (a) Representao e (b) implementao com portas lgicas bsicas de um decodificador 3x8 (b).

A seguir, similar ao multiplexador, apresentam-se quatro diferentes descries em VHDL de um circuito decodificador e suas estatsticas de desempenho espacial e temporal.

3.4.1 Decodificador 3x8 Cdigos em VHDL


Cdigo VHDL de decodificador 3x8 usando o comando de execuo concorrente WITH...SELECT:
Decodificador 3x8
library ieee; use ieee.std_logic_1164.all all; all entity dec3x8 is port ( x: in std_logic_vector (2 downto 0); s: end dec3x8; architecture arch_dec3x8 of dec3x8 is begin with x select s <= "00000001" when "000", "00000010" "00000010" when "001", "00000100" when "010", "00001000" when "011", "00010000" when "100", out std_logic_vector (7 downto 0));

66

"00100000" when "101", "01000000" when "110", "10000000" when "111", "ZZZZZZZZ" when others; ; end arch_dec3x8;

Cdigo VHDL de decodificador 3x8 usando o comando de execuo seqencial IF...THEN...ELSE:


Decodificador 3x8
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity dec3x8 is port (s: out std_logic_vector (7 downto 0); x: in std_logic_vector (2 downto 0)); end dec3x8; architecture arch_dec3x8 of dec3x8 is begin process (x) begin if (x = "000") then s <= "00000001";

elsif (x = "001") then s <= "00000010"; elsif (x = "010") then s <= "00000100"; elsif (x = "011") then s <= "00001000"; elsif (x = "100") then s <= "00010000"; elsif (x = "101") then s <= "00100000"; elsif (x = "110") then s <= "01000000"; elsif (x = "111") then s <= "10000000"; else s <= "ZZZZZZZZ"; end if; ; end process; ; end arch_dec3x8 ;

Cdigo VHDL de decodificador 3x8 usando o comando de execuo seqencial CASE:


Decodificador 3x8
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity dec3x8 is port ( x: in std_logic_vector (2 downto 0); s: out std_logic_vector (7 downto 0)); end dec3x8; architecture arch_dec3x8 of dec3x8 is begin process (x) begin

67

case x is when "000" => s <= "00000001"; when "001" => s <= <= "00000010"; when "010" => s <= "00000100"; when "011" => s <= "00001000"; when "100" => s <= "00010000"; when "101" => s <= "00100000"; when "110" => s <= "01000000"; when "111" "111" => s <= "10000000"; when others => s <= "ZZZZZZZZ"; end case; ; end process; ; end arch_dec3x8;

Cdigo VHDL de decodificador 3x8 usando portas lgicas bsicas:


Decodificador 3x8
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity dec3x8 is x: in std_logic_vector (2 downto 0); s: out std_logic_vector (7 downto 0)); end dec3x8; architecture arch_dec3x8 of dec3x8 is begin s(0) <= not (x(2)) s(1) s(1) <= not(x(2)) (x(2)) s(2) <= not(x(2)) (x(2)) s(3) <= not(x(2)) (x(2)) s(4) <= x(2) s(5) s(5) <= x(2) s(6) <= x(2) s(7) <= x(2) end arch_dec3x8; and not(x(1)) (x(1)) and and not(x(1)) (x(1)) and and and x(1) x(1) and and not(x(0)); (x(0)); x(0); not(x(0)); (x(0)); x(0); not(x(0)); (x(0)); x(0); and and not(x(0)); (x(0)); x(0);

port (

and not(x(1)) (x(1)) and and not(x(1)) (x(1)) and and and x(1) x(1)

3.4.1 Decodificador 3x8 - Estatsticas em FPGAs


Observando os dados da tabela 3.6 e comparando-os queles obtidos para portas bsicas possvel notar que um decodificador 3x8 um circuito mais complexo que os anteriores. Um decodificador utiliza muito mais recursos do FPGA do que circuitos mais simples como portas lgicas bsicas e multiplexadores e, mesmo sendo mais complexo, o atraso total destes circuitos no so muito maiores que os tempos de circuitos bsicos.
Tabela 3.6 Recursos utilizados do FPGAs Decodificador 3x8

68

Decodificador If-Then-Else With-Select Case Porta Lgica

FF 0 0 0 0

LUTs 4 8 8 8 8

LUTs 3 0 0 0 0

CLBs 4 4 4 4

Na tabela 3.7 possvel observar o tempo de propagao de sinal para um decodificador 3x8, implementado de vrias formas em VHDL, e mapeado em um FPGA simples XC4000 da empresa Xilinx. Neste caso, a implementao de um decodificador 3x8 com os comandos IF...THEN...ELSE, WITH...SELECT e CASE tiveram um melhor desempenho que a implementao do mesmo circuito com portas lgicas bsicas. Nota-se que o tempo de lgica igual para todos os decodificadores implementados, mas isso no acontece com o tempo de roteamento, pois o circuito implementado com portas bsicas teve um pior desempenho.
Tabela 3.7 - Temporizao dos decodificador 3x8 Decodificador TL (ns) TR (ns) AT (ns) 6.899 5.079 11.978 If-Then-Else 6.899 5.079 11.978 With Select 6.899 5.079 11.978 Case 6.899 7.872 14.771 Porta Lgica

interessante perceber que o decodificador implementado apenas com portas lgicas teve o seu atraso total prejudicado em aproximadamente 18.9% quando comparado ao atraso total dos outros decodificadores. Esses dados so importantes para demonstrar a influncia do tipo de implementao no desempenho final de um circuito. Observa-se que nem sempre a implementao com portas lgicas a mais otimizada. Neste caso, esta implementao no obteve as melhores estatsticas de desempenho.

3.5 Codificadores em VHDL e FPGAs


Os codificadores implementam a funo inversa dos decodificadores, isto , um codificador binrio possui 2n entradas, codificadas em sadas de n bits. Na figura 3.11, nota-se a representao de um codificador 8x3.

69

Figura 3.11 Representao de um codificador 8x3.

Na tabela 3.8 observa-se a tabela verdade de um codificador com 8 entradas e 3 sadas. As entradas so indicadas como x0 a x7 e as sadas como s0, s1 e s2.
Tabela 3.8 - Tabela verdade de um codificador 8x3 . Entradas Sadas X6 X5 X4 X3 X2 X1 X0 S2 S1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1

X7 0 0 0 0 0 0 0 1

S0 0 1 0 1 0 1 0 1

A seguir, quatro implementaes em VHDL do mesmo circuito codificador 8x3 e suas respectivas estatsticas de desempenho espacial e temporal.

3.5.1 Codificador 8x3 Cdigos em VHDL


Cdigo VHDL do codificador 8x3 usando o comando de execuo concorrente WITH...SELECT:
Codificador 8x3
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity cod8x3 is port ( x: in std_logic_vector (7 downto 0); s: out std_logic_vector (2 downto 0)); end cod8x3; cod8x3; architecture arch_cod8x3 of cod8x3 is begin with x select s <= "000" when "00000001", "001" when "00000010", "010" when "00000100",

70

"011" when "00001000", "100" when "00010000", "00010000", "101" when "00100000", "110" when "01000000", "111" when "10000000", "ZZZ" when others; ; end arch_cod8x3;

Cdigo VHDL do codificador 8x3 usando o comando de execuo seqencial IF...THEN...ELSE:


Codificador 8x3
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity cod8x3 is port ( x: in std_logic_vector (7 downto 0); s: out std_logic_vector (2 downto 0)); end cod8x3; architecture arch_cod8x3 of cod8x3 is begin process (x) begin if (x= "00000001") then s <= "000";

elsif (x= "00000010") then s <= "001"; elsif (x= "00000100") then s <= "010"; elsif (x= "00001000") then s <= "011"; elsif (x= "00010000") then s <= "100"; elsif (x= "00100000") then s <= "101"; elsif (x= "01000000") then s <= "110"; elsif (x= "10000000") then s <= "111"; else s <= "ZZZ";

end if; ; end process; ; end arch_cod8x3;

Cdigo VHDL do codificador 8x3 usando o comando de execuo seqencial CASE:


Codificador 8x3
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity cod8x3 is port ( x: in std_logic_vector (7 downto 0); s: out std_logic_vector (2 downto 0)); end cod8x3; architecture arch_cod8x3 of cod8x3 is begin process (x) begin case x is when "00000001" => s <= "000";

71

when "00000010" => s <= "001"; when "00000100" => s <= "010"; when "00001000" => s <= "011"; when "00010000" => s <= "100"; when "00100000" => s <= "101"; when "01000000" => s <= "110"; when "10000000" => s <= "111"; when others => s <= "ZZZ"; end case; ; end process; ; end arch_cod8x3;

Cdigo VHDL de codificador 8x3 usando portas lgicas bsicas:


Codificador 8x3
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity cod8x3 is port ( x: in std_logic_vector (7 downto 0); s: out std_logic_vector (2 downto 0)); end cod8x3; architecture arch_cod8x3 of cod8x3 is begin s(2)<= x(4) or x(5) or x(6) or x(7) or x(0); s(1)<= x(2) or x(3) or x(6) or x(7) or x(0); s(0)<= x(1) or x(3) or x(5) or x(7) or x(0); x(0); end arch_cod8x3;

3.5.2 Codificador 8x3 Estatsticas em FPGAs


Atravs das tabelas 3.9 e 3.10 possvel observar como essas implementaes de um codificador 3x8 demandam recursos especiais em um FPGA e os respectivos tempos quando mapeados em um FPGA do tipos XC4000.
Tabela 3.9 Recursos utilizados do FPGAs Codificador 2x1 Codificador FF LUTs 4 LUTs 3 CLBs 0 3 0 2 If-Then-Else 0 3 0 2 With -Select 0 3 0 2 Case 0 3 0 2 Porta Lgica Tabela 3.10 Temporizao dos codificadores 8x3 Codificador TL (ns) TR (ns) AT (ns) 6.899 4.222 11.121 If-Then-Else 6.899 4.222 11.121 With -Select 6.899 4.222 11.121 Case 6.899 4.222 11.121 Porta Lgica

72

O codificador um circuito mais simples que um decodificador percebe-se observando o nmero menor de componentes utilizados para implementa-lo e o menor tempo de atraso do seu funcionamento. Neste caso a implementao do circuito codificador utilizando portas lgicas bsicas no alterou o desempenho final do circuito implementado. Isto acontece pois o circuito codificador implementado no complexo, utilizando apenas 2 CLBs. J em um circuito que utilizam vrios componentes e possui um roteamento mais complexo possvel visualizar esta diferena no desempenho final do circuito implementado.

3.6 Circuitos Combinacionais Aritmticos em VHDL


Os circuitos combinacionais aritmticos so encontrados em todos os sistemas digitais que realizam operaes lgicas e aritmticas. Existem circuitos aritmticos de baixa complexidade como, somadores, subtratores e outros. Existem tambm circuitos aritmticos que possuem maior complexidade, como operaes com ponto flutuante. Nesta seo se faz a descrio dos seguintes circuitos: comparadores simples e com mltiplas comparaes, um somador completo de 1 e 4 bits, um subtrator completo de 4 bits , um multiplicador de 4 bits e um divisor tambm de 4 bits. Ao final tem-se estatsticas de desempenho e temporizao das respectivas implementaes em FPGAs, as quais so comparadas e analisadas.

3.6.1 Comparadores
Um comparador pode ser classificado como um comparador simples ou com mltiplas comparaes. Independente do tipo de comparador, a comparao sempre realizada bit a bit desde o menos significativo at o mais significativo ou viceversa. No padro VHDL93 possvel realizar as comparaes listadas na tabela 3.11.
Tabela 3.11 Tabela de comparaes possveis.
Smbolo = != > Significado Igual Diferente Maior Smbolo >= < <= Significado Maior Igual Menor Menor Igual

A seguir apresenta-se trs descries VHDL, estas so: um comparador simples, um comparador simples utilizando portas lgicas e um comparador usando mltiplas comparaes. Cdigo VHDL do comparador simples usando o comando de execuo seqencial IF...THEN...ELSE:
73

Comparador simples
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity comp_simp is port ( x , y : in std_logic_vector (3 downto 0); s : out std_logic); end comp_simp; architecture arch_comp_simp arch_comp_simp of comp_simp is begin process (x,y) begin if x<y then s <='0'; else s <='1'; end if; ; end process; ; end arch_comp_simp;

Cdigo VHDL do comparador simples usando portas lgicas bsicas:


Comparador simples
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity comp_simp is port ( x, y: in std_logic_vector (3 downto 0); s: out std_logic); end comp_simp; architecture arch_comp_simp of comp_simp is begin process (x,y) variable aux : std_logic_vector(3 downto 0); variable vaium : std_logic; begin vaium := '0'; for i in 0 to 3 loop aux(i) := (x(i) xor y(i) xor vaium); vaium := (y(i) and aux(i)) or (y(i) and vaium) or (vaium and aux(i)); end loop; ; s <= not vaium; end process; ; end arch_comp_simp;

Cdigo VHDL de comparador com mltiplas comparaes usando o comando de execuo seqencial IF...THEN...ELSE:
Comparador com mltiplas comparaes 74

library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164.

entity comp_mult is port ( x, y, z, w: in std_logic_vector (3 downto 0); s: out std_logic); end comp_mult;

architecture arch_comp_mult of comp_mult is begin process (x,y,z,w) begin if (x<=y and (z<=w or x=z)) then s <= '0'; else s <= '1'; end if; ; end process; ; end arch_comp_mult;

3.6.2 Somadores e Subtratores


Os somadores e subtratores so circuitos combinatrios dedicados que executam, respectivamente, as operaes de adio e subtrao. Estes circuitos podem fazer parte de uma ULA (Unidade Lgica Aritmtica), a qual est contida em calculadoras eletrnicas, microprocessadores e outros sistemas digitais. H vrias formas de implementar somadores. Uma delas, bem conhecida, o circuito meio-somador, que pode perfeitamente efetuar operaes de 1 bit, mas em caso de palavras maiores, falha por no levar em conta o estouro da adio anterior. Para resolver este problema precisa-se de um somador completo ou full adder que considera o estouro da adio anterior. Para isso so implementados sinais de controle chamados de vem-um ou carry in e vai-um ou carry out. O subtrator obedece ao mesmo raciocnio do circuito somador mudando apenas o tipo de operao a ser executada. A seguir so apresentadas descries em VHDL de um somador completo de 1 e 4 bits e um subtrator completo de 4 bits. A representao de um somador completo de 1 bit com portas lgicas pode ser visualizada na figura 3.12.

75

Figura 3.12 Somador completo de 1 bit.

Cdigo VHDL do somador completo de 1 bit usando portas lgicas bsicas:


Somador completo de 1 bit
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity somador1bit is port ( cin, a, b: in std_logic; s, cout: out std_logic); end somador1bit;

architecture arch_somador1bit of somador1bit is begin s <= a xor b xor cin; cin; cout <= (a and b) or (cin and a) or (cin and b); end arch_somador1bit;

Cdigo VHDL do somador completo de 4 bits usando portas lgicas bsicas:


Somador completo de 4 bit
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity somador4bits is port ( cin: in std_logic; a,b: in std_logic_vector (3 downto 0); cout: out std_logic; s: out std_logic_vector (3 downto 0)); end somador4bits; architecture arch_ somador4bits of somador4bits is begin

76

process(a, (a, b, cin) variable soma: std_logic_vector(3 downto 0); variable begin c := cin; for i in 0 to 3 loop soma(i) := a(i) xor b(i) xor c; c := (a(i) and b(i)) or ((a(i) xor b(i)) and c); end loop; ; cout <= c; s end process; ; end arch_somador4bits; <= soma; c: std_logic;

Cdigo VHDL de um subtrator completo de 4 bits usando portas lgicas bsicas:


Subtrator completo de 4 bit
library ieee; use ieee.std_logic_1164.all; ; ieee.std_logic_1164. entity sub4bits is port (a,b: in std_logic_vector (3 downto 0); s: out std_logic_vector (3 downto 0)); end sub4bits; architecture arch_ sub4bits of sub4bits is begin process(a, (a, b) variable result: std_logic_vector(3 downto 0); variable vaium: std_logic; begin vaium:='0'; for i in 0 to 3 loop result(i) := (a(i) xor b(i) xor vaium); vaium := ( b(i) and result(i) ) or ( b(i) and vaium) or (vaium and result(i) ) ; end loop ; s<=result; end process; ; end arch_ sub4bits;

3.6.3 Multiplicadores
Um multiplicador um circuito mais complexo em nvel de lgica de funcionamento. Existem muitos algoritmos para a sua implementao (KOREN, 1993). Neste caso, foi selecionado um algoritmo que talvez no seja o mais otimizado, mas um algoritmo com passos simples e bem definidos, facilitando a compreenso do seu funcionamento. Este algoritmo pode ser implementado para multiplicadores de n bits.
77

Algoritmo do Multiplicador
Inicio: Contador de bits recebe o numero de bits a ser multiplicado Inicializa produto com zero Para i de 0 at o nmero de bits da multiplicao faa deslocar (produto) Vaium recebe bit mais significativo do multiplicador Se vaium igual a 1 (um) ento Soma (produto,multiplicando) deslocar (multiplicador) Resultado recebe produto Fim

A tabela 3.12 mostra uma multiplicao usando o algoritmo proposto, onde o resultado final obtido quando o contador de bits for zero (0). Neste caso est fazendo a multiplicao de: 0011b x 0010b 0110b
Vai-um 0 0 0 1 0

3 (decimal - multiplicando) 2 (decimal - multiplicador) 6 (decimal - resultado)


Tabela 3.12 Multiplicao aplicando o algoritmo.
Multiplicador 0010 0100 1000 0000 0000 Multiplicando 0011 0011 0011 0011 0011 Resultado 0000 0000 0000 0000 +0011 0011 0110 Contador de bits 04 03 02 01 00

A seguir, mostra-se a descrio em VHDL de um multiplicador de 4 bits usando um somador e um deslocador de 4 bits.
Multiplicador de 4 bit
library ieee; use ieee.std_logic_1164. ; ieee.std_logic_1164.all; c_1164. entity mult4bits is port ( a, b: in std_logic_vector (3 downto 0); s: out std_logic_vector (3 downto 0)); end mult4bits; architecture arch_mult4bits of mult4bits is

bit menos significativo -- deslocamento de 1 bit para esquerda, zerando o bit


function deslocador (x : std_logic_vector (3 downto 0)) return std_logic_vector is variable y : std_logic_vector (3 downto 0); begin for i in 3 downto 1 loop y(i) := x(ix(i-1);

78

end loop ; y(0) := := '0'; return y; end; ;

-- somador de 4 bits function somador4bits (a : std_logic_vector (3 downto 0); b : std_logic_vector (3 downto 0)) return std_logic_vector is variable vaium : std_logic; variable soma begin vaium := '0'; for i in 0 to 3 loop soma(i) := a(i) xor b(i) xor vaium; vaium := ( a(i) and b(i) ) or ( b(i) and vaium) or (vaium and a(i) ); end loop; ; return soma; end; ; : std_logic_vector (3 downto 0);

begin process(a,b) (a,b) variable aux1 variable aux2 : std_logic_vector (3 downto 0); : std_logic_vector (3 downto 0);

variable vaium : std_logic; begin

-- inicializacoes aux1 := "0000"; aux2 := a; vaium := '0';

-- implementacao do algoritmo for i in 0 to 3 loop aux1 := deslocador( aux1 ); vaium := aux2(3); if vaium = '1' then aux1 := somador4bits( aux1, b ); end if; ; aux2 := deslocador( aux2 ); end loop; ; s <= aux1; end process; ; end arch_mult4bits;

79

3.6.4 Divisores
Os divisores, assim como os multiplicadores, so circuitos relativamente complexos. Neste caso, o divisor descrito em VHDL consegue dividir nmeros de 4 bits, apresentando ao final da operao o resultado e o resto. A seguir, o algoritmo principal da operao de diviso de n bits com ponto fixo.
Algoritmo do Divisor
Inicio: Para i de 0 at o nmero de bits da diviso faa Vaium do quociente recebe o bit mais significativo do quociente. Deslocar (quociente). Bit menos significativo do quociente recebe sinal de resto maior que divisor. Deslocar (resto). Bit menos significativo do resto recebe sinal de Vaium do quociente. Sinal de resto maior que o divisor recebe o resultado da comparao (divisor, resto). Se o sinal de resto maior for igual a um ento Resto recebe o resto menos o divisor. Deslocar (quociente) Bit menos significativo do quociente recebe sinal de resto maior que divisor. Fim

A seguir a descrio em VHDL93 do algoritmo aplicado para um divisor de 4 bits de ponto fixo.
Divisor de 4 bit
library ieee; use ieee.std_logic_1164.all all; all entity div4bits is port(a, b : in std_logic_vector (3 downto 0); port q, r : out std_logic_vector (3 downto 0)); end div4bits; architecture arch_div4bits of div4bits is

-- deslocamento de 1 bit para esquerda, zerando o bit menos significativo function deslocador (x : std_logic_vector (3 downto 0)) return std_logic_vector is variable y : std_logic_vector (3 downto 0); begin for i in 3 downto 1 loop y(i) := x(ix(i-1); 1); end loop ; y(0) := '0'; return y; end;

-- compara dois numeros


function comparador (x : std_logic_vector; y : std_logic_vector) return std_logic is variable s : std_logic_vector (3 downto 0); variable vaium : std_logic; begin

80

vaium := '0'; for i in 0 to 3 loop s(i) := (x(i) xor y(i) xor vaium); vaium := ( y(i) and s(i) ) or ( y(i) and vaium) or (vaium and s(i) ) ; end loop; loop vaium := not vaium; return vaium; end comparador; -- subtracao de dois numeros function sub4bits (x : std_logic_vector; y : std_logic_vector) return std_logic_vector is variable s : std_logic_vector (3 downto 0); variable vaium : std_logic; begin vaium := '0'; for i in 0 to 3 loop s(i) := (x(i) xor y(i) xor vaium); vaium := ( y(i) and s(i) ) or (y(i) and vaium) or (vaium and s(i) ) ; end loop; loop return s; end sub4bits; begin process (a,b) variable vq, vr : std_logic_vector (3 downto 0); variable quoc, resto : std_logic; begin vq := a; quoc := '0'; resto := '0'; vr := "0000"; for i in 0 to 3 loop quoc := vq(3); vq := deslocador(vq); vq(0) := resto; vr := deslocador(vr); vr(0) := quoc; resto := comparador(vr, b); if resto = '1' then vr := sub4bits (vr, b); end if; if end loop; loop vq := deslocador (vq); vq(0) := resto; q <= vq; r <= vr; end process; process end arch_div4bits;

81

3.6.5 Estatsticas de Circuitos Aritmticos em FPGAs


O multiplicador e o divisor por apresentar um algoritmo complexo geram os maiores atrasos e utilizao de recursos do FPGA (tabela 3.13 e 3.14). Normalmente algoritmos de implementao de multiplicadores e divisores so complexos. O tratamento da multiplicao e diviso com pontos flutuantes atingem nveis altos de complexidade.
Tabela 3.13 Recursos utilizados do FPGA - Circuitos aritmticos.
Circuito Aritmtico Comp. Simples Comp. Porta lgica Mltipla Comp. Somador 1bit Somador 4bit Sub. 4bit Mult. 4 bits Div. 4 bits FF 0 0 0 0 0 0 0 0 LUTs 4 3 3 10 2 9 6 10 45 LUTs 3 1 1 2 0 1 0 0 5 CLBs 2 2 6 1 5 4 6 25

Tabela 3.14 Temporizao dos circuitos aritmticos.


Circuitos Aritmtico Comparador Simples Comparador Porta lgica Mltiplicador Complemento Somador 1bit Somador 4bit Subtrator 4bit Multiplicador 4 bits Divisor 4 bits TL (ns) 8,858 8,858 10,048 6,899 10,048 8,089 9,279 18,378 TR (ns) 5,814 5,183 7,925 3,234 6,938 6,025 8,515 30,664 AT(ns) 14,672 14,041 17,973 10,133 16,557 14,114 17,794 49,042

Neste captulo, foram apresentadas descries em VHDL de circuitos combinacionais, ressaltando suas principais caractersticas, enfatizando o funcionamento, metodologias de descrio e estatsticas de desempenho espacial e temporal. Importante ressaltar que os circuitos artimticos implementados em VHDL e os respectivos dados de utilizao de recursos em FPGAs so de grande utilidade para o nosso objetivo, qual de apresentar dados e comparaes de desempenho de algoritmos criptogrficos implemenntados em software e hardware (FPGAs). A maioria dos algoritmos criptogrficos usam operaes bsicas do tipo soma, subtrao, multiplicao e algumas outras operaes especiais tais como substituies, permutaes, deslocamentos, entre outras, como possvel de verificar atravs da tabela 3.15.

Tabela 3.15 Freqncia de operaes em algoritmos simtricos de criptografia. 82

Operaes DES AES Serpent Cast-128 MARS Twofish Magenta Frog BlowFish RC5 RC6 IDEA XOR X X X X X X X X X X X X Deslocamento/Rotao X X X X X X S-BOX X X X X X X X X X X Permutao X

Algoritmo

X X X X

X X X

83

Captulo 4
ALPOS: Um algoritmo Didtico de Criptografia

No captulo 4, apresenta-se um algoritmo criptogrfico didtico, criado e chamado pelos autores de ALPOS algoritmo posicional. Esse algoritmo relativamente simples e baseado em cifras de substituio, considerando a posio do texto a ser cifrado. Esse algoritmo til para mostrar alguns conceitos bsicos do processo de cifrar e decifrar mensagens. Apresenta-se e explica-se o cdigo C e a respectiva implementao em VHDL, com destaque a aspectos de desempenho e segurana. Finalmente, se descrevem mtodos para tentar quebrar o algoritmo, isto a respectiva criptoanlise.

4.1 Conceitos e Exemplos


O algoritmo de criptografia posicional ALPOS consiste em que a posio do byte interfere sobre a chave utilizada na criptografia (CHIARAMONTE, 2001). O ALPOS se baseia no bem conhecido algoritmos de Cifra de Csar (SCHNEIER, 1996). No algoritmo proposto pelos autores, o ALPOS, foi introduzida uma funo sobre o algoritmo Cifra de Csar para que cada posio seja criptografada de forma diferente eliminando o problema de freqncia de letras. Com o algoritmo posicional bsico a seqncia AAABBB, por exemplo, poderia ser criptografada como BCDFGH, sem acrescer a ela nenhum bit. Para isso, admita-se o valor decimal dos bytes A, B, C ,D, E ,F ,G e H de acordo com a tabela ASCII (65, 66, 67, 68, 69, 70, 71 e 72 respectivamente). A esses valores so acrescidos os valores de sua posio. Agora vamos supor o exemplo da tabela 4.1 onde existe uma seqncia AAABBB. Como o primeiro A est na posio um, o seu valor decimal criptografado ser 66 (que equivale na tabela ASCII ao caracter B), mas como o segundo A est na posio dois, deve-se acrescer 2 ao seu valor ASCII, assim o valor decimal do segundo byte ser 67 (que equivale na tabela ASCII ao caracter C), e assim por diante. Infelizmente esse modelo ainda simples de ser quebrado. Por esse motivo, na proposta apresentada pelos autores, no algoritmo posicional recomendvel somar ao valor do byte original representado em ASCII um nmero gerado utilizando-se de uma expresso matemtica que usa a posio do byte (varivel x). Por exemplo: usando uma expresso do tipo a*x + b. Onde a e b so valores da chave; e x a posio.
84

Tabela 4.1 Exemplo do Algoritmo Posicional Bsico

Seqncia Valor decimal na tabela ASCII Valor da posio Valor decimal ASCII (cdigo criptografado) Cdigo em caracteres (criptografado)

A 65 1 66 B

A 65 2 67 C

A 65 3 68 D

B 66 4 70 F

B 66 5 71 G

B 66 6 72 H

Nesse tipo de criptografia, quanto maior o grau da expresso posicional, maior ser a complexidade do algoritmo e por sua vez a segurana dos dados cifrados usando-se desse algoritmo. Por exemplo: Se a expresso posicional for uma equao do terceiro grau, ter uma segurana maior que um sistema com equao do segundo grau. Isto ocorre pois o nmero de valores que compem a chave esto ligados ao grau da expresso posicional. A seguir apresentado um exemplo completo de criptografia utilizando grau 3. Neste exemplo ocorre o estouro de um byte, ou seja, o valor decimal do cdigo criptografado maior que 256 que o valor mximo que pode ser armazenado em um byte (o cdigo ASCII tem a capacidade de 28=256 possibilidades). No caso de estouro, ns assumimos que o valor do byte ser valor encontrado mod 256 onde mod retorna o resto da diviso. A equao posicional utilizada ser: f(x) = 23x3 + 26x2 - 45x1 - 63 onde os coeficientes 23,26,-45,-63 foram selecionados aleatoriamente. Considerando o mesmo exemplo anterior cuja seqncia original AAABBB, temos as seguintes fases.(ver tabela 4.2).
Tabela 4.2 Exemplo Posicional Grau 3 (23x3 + 26x2 - 45x - 63)

Seqncia Valor decimal na tabela ASCII Valor da posio Resultado da expresso: 23x3 + 26x2 45x 63 Valor da expresso + valor ASCII original Valor decimal na tabela (cdigo criptografado) Cdigo em caracteres (criptografado)

A 65 1 -59 6 6


A 65 2 135 200 200 +

A 65 3 657 722 210

B 66 4 1645 1711 175

B 66 5 3237 3303 231

B 66 6 5571 5637 5


As colunas em destaque com sombra indicam aquelas onde ocorreu o estouro de um byte. Os valores 722, 1711, 3303 e 5637 ultrapassam 256 e no podem ser armazenados em apenas um byte. Para solucionar esse problema realizada uma diviso e o resto da diviso utilizado como o valor criptografado. Por exemplo:
85

dividindo o valor 722 por 256 o resto obtido 210 que utilizado na penltima linha da tabela. Os outros valores so calculados do mesmo modo.

4.2 Descrio do Algoritmo


A figura 4.1 mostra o esquema geral necessrio para cifrar uma letra. O algoritmo necessrio para cifrar uma letra apresentado a seguir:
Inicio soma = 0 Para i de 1 at grau_chave Valor_chave = valores[i] Soma = soma + valor_chave * exponencial(pos,i) Fim Para Nova_letra = (antiga_letra + soma) mod 256

O algoritmo acima descrito capaz de processar uma chave de qualquer grau. O funcionamento dele consiste em calcular primeiro a soma que nas tabelas acima equivalem Resultado da expresso e depois calcular a nova_letra que equivalem Valor decimal na tabela (cdigo criptografado). Para o clculo da nova_letra j includa a operao mod que retorna o resto da diviso para corrigir um eventual estouro de byte.

86

Figura 4.1 - Esquema Geral do ALPOS Algoritmo Posicional

A funo para o clculo da soma pode ser expressa genericamente atravs de: f(x) = a1 * xn + a2 * x n-1 + ... + an * x1; onde a1, a2, ..., an so os valores da chave, x a posio do caracter e n o nmero de elementos da chave, tambm chamado de grau da chave. Supondo que os valores a1, a2, ..., an esto armazenados em um vetor chamado valores como mostra a tabela 4.3. Calcular essa expresso seria executar repetidamente durante n vezes a seguinte operao: valores[i] * posioi e acumular esses resultados em uma varivel, no nosso caso: soma.
Tabela 4.3 Vetor valores do ALPOS Algoritmo Posicional

ndice 1 2 ... N valores a1 a2 ... an

O esquema para realizar os clculos do vetor valores discutido anteriormente e grau_chave, que o grau da chave utilizada, esto descritos e explicados a seguir.
87

Figura 4.2 Clculo do vetor valores no ALPOS Algoritmo Posicional

O esquema na figura 4.2 responsvel pelo clculo do vetor valores recebe uma string chamada chave que est no formato (a1, a2, ..., an) e converte em um vetor com n elementos chamado valores. Como a chave est em uma string e precisa ser transformada para o formato numrico necessrio o clculo do valor de cada caractere dessa string. Levando em conta que os valores de cada elemento da chave esto na base 10 necessrio o clculo: (aux[ai]-48)*exponencial(10,j) = (aux[ai]-48)*10j e acumular esse resultado em uma varivel, no esquema acima chamada de valor. No clculo acima, ai a posio de uma string auxiliar que possui apenas um elemento da chave, por exemplo a1. O valor 48 para realizar a transformao de uma string para um valor decimal, valor esse que deve ser multiplicado por 10j, onde 10j equivale ao valor real de um nmero naquela posio. A figura 4.3 mostra o esquema necessrio para o clculo do grau da chave (grau_chave):

88

Figura 4.3 Clculo do Grau da Chave

Como a chave est no formato (a1, a2, ..., an), calcular o grau da chave significa percorrer a chave procurando por virgulas e incrementando o grau da chave a cada virgula encontrada. No algoritmo acima utilizada uma varivel auxiliar j para realizar essa contagem, no final atribudo o valor de j varivel grau_chave.

4.3 Implementao em C do ALPOS


O algoritmo posicional, ALPOS, foi implementado em linguagem C. Os leitores podem verificar a verso completa da implementao no link: http://www.editoranovatec.com.br/download.php, clicando na imagem correspondente ao livro de criptografia. Nesse site aparece tambm uma srie de exemplos que facilitam o entendimento do funcionamento do algoritmo ALPOS e dos outros algoritmos decritos no livro. A seguir so colocados exemplos de funcionamento do algoritmo com vrios tipos de chaves diferentes. Os exemplos foram obtidos atravs da captura da tela de execuo do algoritmo. Os nmeros utilizados para compor a chave podem ser gerados aleatoriamente, contudo, critrios para a formao das chaves esto sendo estudados para evitar a duplicidade das chaves, isto , evitar que mais que uma chave possa decifrar determinada mensagem, como foi constatado atravs de uma criptoanlise por fora bruta que ser discutida em 4.6. As figuras 4.4 e 4.5 mostram o algoritmo posicional implementado sendo executado. Inicialmente, o programa solicita o texto que deve ser cifrado, depois o programa solicita ao usurio a chave. Na figura 4.4 a chave digitada foi (1,1,1,1,1,1,1,1,1,1) o que significa que est se usando uma funo de grau 10 na seguinte maneira: f(x) = 1x10 +1x9 + 1x8 + 1x7 + 1x6 + 1x5 + 1x4 + 1x3 + 1x2 + 1x1 Similarmente na figura 4.5 solicita-se uma chave de entrada: (123,423,573,567,234) o que significa que:
89

f(x) = 123x5 + 423x4 + 573x3 + 567x2 + 234x1. A funo utilizada na figura 4.5 , portanto, de grau 5.

Figura 4.4 Exemplo do algoritmo utilizando a chave (1,1,1,1,1,1,1,1,1,1)

Figura 4.5 Exemplo de algoritmo utilizando a chave (123,423,573,567,234)

A tabela 4.4 mostra como uma mesma mensagem fica cifrada utilizando-se de chaves diferentes. Nessa tabela, pode-se perceber mais uma vantagem do algoritmo posicional. Independentemente do grau do polinmio usado e dos coeficientes usados, a mensagem cifrada permanece do mesmo tamanho que a mensagem original.
Tabela 4.4 Mensagens cifradas com chaves diferentes.

Mensagem \ Chave Algoritmo Posicional Criptografia

(211,197) f(x) = 211x2 + 197x1

(223,239,251) f(x) = 223x3 + 239x2 + 251x1

(227,163,193,179) f(x) = 227x4 + 163x3 + 193x2 + 179x1

Algumas mensagens criptografadas parecem ser menores que a original (ver tabela 4.4). No entanto, isso se deve presena de caracteres invisveis no final das mensagens.

4.4 Implementao em Hardware (VHDL)

90

Para a implementao em VHDL foi utilizada a ferramenta MAX PLUS II da Altera utilizando a FPGA EPF10K20RC240-4 (ALTERA, 2004). Todas as estatsticas e testes apresentados neste captulo foram obtidos utilizando esse dispositivo. Inicialmente, propomos um circuito para realizar a criptografia de um caracter. Para isso, estudaremos o algoritmo de criptografia de um caracter e os mdulos necessrios para a implementao em VHDL. O algoritmo para realizar a criptografia de um caracter descrito a seguir:

PARA i DE 1 AT grau_da_chave soma = soma + (valor_da_chave * posioi ) FIM PARA caracter_cifrado = caracter_original + soma % 256;

Para a implementao desse algoritmo necessrio construir seis blocos digitais, conforme descrito a seguir: (i) (ii) (iii) (iv) (v) (vi) um mdulo contador (CONTADOR_I) que ser necessrio para a execuo do bloco PARA; uma memria para armazenar o valor da chave um contador para contar o grau da chave; um mdulo potncia para realizar a operao posioi; um mdulo multiplicador e um acumulador.

necessrio tambm um comparador para comparar os valores de i e grau_da_chave, pois se esses dois valores forem iguais significa que a criptografia de um caractere terminou e necessrio reiniciar alguns contadores. Os contadores tambm precisam ser reiniciados quando h alguma alterao na chave, portanto, necessrio um mdulo chamado de CTRL_CONT (Controlador Contadores) que responsvel pelo controle dos contadores. Quando a criptografia de um caractere terminar, o resultado deve ser armazenado em um registrador para a sincronizao. H tambm a necessidade de atrasar o clock utilizado nesse registrador para indicar que a sada est disponvel no momento exato. Portanto, tambm foi criado um mdulo REGISTRADOR e um mdulo CLK_D que responsvel pelo atraso do clock do registrador. Os mdulos acima podem ser melhor visualizados atravs da figura 4.6 que mostra a arquitetura total do sistema.

91

Figura 4.6 Arquitetura total do sistema

4.5 Anlise de Desempenho do ALPOS


Nesta seo realizada uma anlise do desempenho em software e em hardware e uma comparao entre os resultados obtidos.

4.5.1 Desempenho em Software


Conhecendo a alta dependncia de funcionamento em relao ao grau das expresses usadas, tem-se considerado mudar e avaliar o tempo de execuo (necessrio para cifrar as mensagens) para vrios valores, considerando que o grau muda entre 1 e 10. Alm disso, o desempenho depende tambm do tamanho da mensagem a ser cifrada. Por esse motivo, consideramos trs exemplos: mensagens com 0,5; 1,0 e 1,5 Mbytes. A tabela 4.5 mostra as estatsticas de desempenho obtidas em um computador Intel Celeron 466Mhz. A figura 4.7 mostra o desempenho do algoritmo posicional em seus vrios graus de expresses e em relao a arquivos de diferentes tamanhos.

Tabela 4.5 Estatsticas do algoritmo Posicional em software

92

Grau 1 2 3 4 5 5 7 8 9 10

Tempo estimado (segundos) 0,5Mb 1,0Mb 1,5Mb 0,99 1,48 2,31 1,09 1,76 2,41 1,27 1,92 2,8 1,32 2,26 3,13 1,49 2,47 3,51 1,65 2,86 4,06 1,81 3,13 4,51 1,98 3,52 5,11 2,15 3,85 5,65 2,31 4,23 6,21

Figura 4.7 Grfico de desempenho da Implementao em Software

O grfico da figura 4.7 mostra que quanto maior o tamanho do arquivo maior o impacto com o aumento do grau da expresso. No arquivo de 0,5 Mbytes, a curva uma linha quase reta, j no arquivo de 1,5Mbytes o tempo cresce quase que exponencialmente. Isso ocorre pois nos arquivos maiores o valor da posio quando o processo de cifrar dados chega perto do final do arquivo so muito grandes, o que exige muito mais processamento. Importante ressaltar tambm que o fato de considerar uma funo posicional com o mesmo grau, porm com coeficientes diferentes, produz resultados diferentes. Maiores coeficientes, produziro um maior tempo pois se associa a operaes de multiplicao e exponenciao que requerem um maior processamento. Apesar disso, o fato de ter coeficientes maiores, no necessariamente produz uma maior segurana do algoritmo.

4.5.2 Desempenho em Hardware


Os autores implementaram uma verso em hardware para cifrar um nico caractere seguindo o processo criptogrfico do ALPOS (CHIARAMONTE, 2002). Nessa
93

implementao, calculou-se que para realizar um acesso memria precisam-se de 100ns (nanosegundos, lembrar que 1 ns = 10-9 segundos). No algoritmo ALPOS, a programao da chave requer somente acessos memria para gravao de seus valores. Considerando que uma chave de grau n possui n valores e com isso requer n acessos memria; o tempo de programao de uma chave pode ser calculado pela frmula: 100ns * grau da chave. No entanto, o tempo necessrio para a criptografia maior, uma vez que para a criptografia os dados devem percorrer o circuito consumindo vrios ciclos de clock dependendo do tamanho das chaves. Os tempos obtidos durante a criptografia de um caractere nos diversos graus possveis para a chave so apresentados na tabela 4.6.
Tabela 4.6 Tempos obtidos na criptografia de um caractere

Grau Tempo (us)

1 0,3

2 0,6

3 1

4 1,5

5 2,1

6 2,8

7 3,6

8 4,5

9 5,5

10 6,6

Com base nesses tempos, podemos calcular o tempo necessrio para criptografar textos com vrios tamanhos e assim comparar os resultados com os obtidos na implementao em software. A tabela 4.7 mostra o tempo estimado para a criptografia de textos com os tamanhos de 0,5; 1,0 e 1,5Mbytes. A figura 4.8 mostra o grfico de desempenho obtido atravs das estimativas calculadas na tabela 4.7. Nota-se que a implementao em hardware possui um desempenho muito parecido com a implementao em software, no entanto, ela um pouco mais lenta. Isso ocorre pois os tempos obtidos so tempos estimados atravs da multiplicao do tamanho do arquivo pelo tempo necessrio para a criptografia de um caractere. Uma otimizao possvel, permitir que mais de um caractere possa ser criptografado em paralelo, o que melhora muito o desempenho. A tabela 4.8 mostra as estatsticas de uso da FPGA, atravs dela podem ser verificados o nmero de clulas lgicas necessrias e o sintetizado bem como os tempos de atraso de cada mdulo e da implementao da criptografia de um caractere (ALPOS.VHD).

Tabela 4.7 Tempo estimado (segundos) para a criptografia de arquivos de 0,5Mb, 1,0Mb e 1,5Mb

94

Grau 1 2 3 4 5 5 7 8 9 10

Tempo estimado (segundos) 0,5Mb 1,0Mb 1,5Mb 0,157286 0,314573 0,471859 0,314573 0,629146 0,943718 0,524288 1,048576 1,572864 0,786432 1,572864 2,359296 1,101005 2,202010 3,303014 1,468006 2,936013 4,404019 1,887437 3,774874 5,662310 2,359296 4,718592 7,077888 2,883584 5,767168 8,650752 3,460301 6,920602 10,38090

Figura 4.8 Grfico de desempenho da Implementao em Hardware Tabela 4.8 Sumrio Estatsticas de uso da FPGA
Mdulo CONTADOR_I EXPO.VHDL MEM.VHD MULT.VHD ACUMULADOR.VHD CONTADOR.VHD COMPARADOR.VHD CTRL_CONT.VHD REGISTRADOR.VHD CLK_D.VHD ALPOS.VHD Pinos de Entrada 2 14 14 16 18 3 8 1 9 1 18 Pinos de Sada 4 9 8 8 8 4 1 2 8 1 9 Logic Cells required 4 103 173 72 15 5 3 4 8 1 393 Flip-Flops 4 17 88 0 8 4 0 2 8 1 132 Synthesized logic cells 0 13 75 30 0 0 1 0 0 0 122 Tempo de atraso 13.1ns 17.4ns 13.2ns 40.9ns 13.1ns 13.1ns 18.3ns 16.0ns 14.0ns 13.1ns 42.6ns

Os autores gostariam de motivar os leitores a criarem a prpria implementao em hardware do algoritmo ALPOS, mas considerando otimizaes tais como execuo paralela da criptografia de vrios caracteres.

95

4.6 Criptoanlise
O sistema posicional parece ser bem resistente contra um ataque testando-se todas as chaves possveis (ataque de fora bruta). Os autores implementaram um programa em C que testa varias chaves at conseguir descobrir a mensagem original a partir da mensagem j cifrada. Testes foram realizados utilizando chaves at o grau 4, aps esse grau de segurana o tempo utilizado para conseguir quebrar uma chave ultrapassa uma hora. A tabela 4.9 apresenta os tempos gastos para a quebra de chaves de diferentes graus de segurana. Alm disso trabalhou-se na criao de um modelo matemtico (KNUTH, 1997) onde conseguiu-se uma expresso para medir o tempo para quebrar uma chave de grau n. Para obter o modelo, foi calculado o tempo mdio do teste de fora bruta em chaves de grau 3 utilizando um computador AMD K6-2 de 300Mhz, a mdia obtida foi 386 milesegundos. Considerando que cada parte da chave suporta um valor at 256, o tempo para o teste de fora bruta para uma chave de grau 4 igual a 256 vezes o tempo de uma chave de grau 3. Para uma chave de grau 5 o tempo de 256 vezes o tempo de uma chave de grau 4. Sendo assim o tempo para uma chave de grau n igual a 256 vezes o tempo de uma chave com grau n-1. J que temos como base que uma chave de grau 3 demora 386 milessegundos, temos que uma chave de grau N demora (256^(N-3))*386 milesegundos para ser descoberta atravs de um teste de fora bruta. Como o tempo mnimo para uma chave de grau 3 ser descoberta 600 milesegundos (ainda com base no mesmo computador descrito acima) eles foram considerados obtendo assim o modelo: 600 + ((256^(N-3))*386). Esses valores so mostrados na tabela 4.9. Foram realizados testes reais onde foi obtido um tempo de 0,6 segundos para uma chave de grau 3 e 98,920 segundos para uma chave de grau 4 (tempo mnimo). O tempo mximo para cada chave igual ao tempo mnimo de uma chave com grau consecutivo. Por exemplo, o tempo mximo de uma chave de grau 3 o mesmo que o tempo mnimo de uma chave de grau 4. Para obter o modelo que estima o tempo necessrio para encontrar as chaves utilizando uma mquina difirente necessrio recalcular o tempo mdio e mnimo para uma chave de grau 3 na mquina desejada e substitu-los no modelo. No entanto, durante esses testes, comprovou-se a existncia de chaves equivalentes. Por exemplo, uma chave de grau 3 pode possuir uma chave de grau 2 equivalente, portanto, um possvel melhoramento do algoritmo posicional proposto criar regras para a composio da chave para que no ocorra esse problema. Explorando esse problema um criptanalista pode conseguir obter uma chave em muito menos tempo. Existem alguns outros problemas conhecidos que sero discutidos e corrigidos no captulo seguinte.
Tabela 4.9 Tempo necessrio para quebrar uma chave 96

Grau 3 4 5 6 7 8 9

Mnimo (segundos) Mximo (segundos) 0,600 98,920 98,920 25.297,110 25.297,110 6.475.922,000 = 74,9 dias 6.475.922,000 = 74,9 dias 1,65786E+12 = 525 sculos 1,65786E+12 = 525 sculos 4,24411E+14 = 13457 milnios 1,08649E+17 = 3445237 milnios 4,24411E+14 = 13457 milnios 1,08649E+17 = 3445237 2,78142E+19 = 881982496 milnios milnios 10 2,78142E+19 = 881982496 7,12044E+21 = 225787671232 milnios milnios N 600 + ((256(Grau-3)) *386) 600 + ((256(Grau-2)) *386) Os dados indicados com significa que o valor foi calculado de acordo com o modelo estabelecido

4.7 Consideraes Finais


A figura 4.9 apresenta uma comparao das velocidades de cifrar dados obtidas com o ALPOS - algoritmo posicional. Atravs dela pode-se notar que a velocidade de para criptografar diminui a medida que o grau da chave aumenta. Pode-se notar tambm que a velocidade do algoritmo posicional em hardware muito alta para chaves pequenas, entretanto, com o aumento do grau da chave o desempenho diminui bruscamente. Isso ocorre pois quando a chave pequena, o nmero de ciclos necessrios para criptografar um caractere pequeno, mas com o aumento do grau da chave, o nmero de ciclos necessrios cresce quase que exponencialmente.

Figura 4.9 Comparao de desempenho do algoritmo Posicional(Software x Hardware)

97

98

Captulo 5
Otimizaes no ALPOS

No captulo 5 apresentam-se algumas otimizaes do algoritmo posicional, e faz-se uma comparao de desempenho com a verso anterior (desempenho e nvel de segurana) finalizando com uma comparao de velocidade com alguns algoritmos de criptografia, considerados clssicos e discutidos nos prximos captulos.

5.1 Motivao
O algoritmo posicional apresentado no captulo 4 obteve um nvel de segurana significativamente maior que o algoritmo Cifra de Csar (que o algoritmo no qual o ALPOS se baseia). No entanto, o ALPOS ainda possui algumas falhas graves de segurana. Com isso so propostas algumas otimizaes para fornecer um maior nvel de segurana corrigindo os problemas conhecidos.

5.2 Criptografia Posicional usando Blocos


Como descrito anteriormente, quando ocorre o estouro de um byte calculado o resto da diviso do valor obtido por 256, ou seja, valor criptografado = valor obtido (mod 256). Isso faz com que a cifra tenha um perodo curto de 256 bytes, ou seja, o resultado da expresso (mod 256) vai coincidir a cada 256 bytes como mostra a tabela 5.1. O exemplo da tabela 5.1 foi gerado utilizando a chave (23,26,45,63): Com isso um criptoanalista pode facilmente dividir o texto cifrado em blocos de 256 bytes e conseguir obter o texto legvel. Para evitar esse ataque necessrio ampliar o perodo da cifra considerando blocos ao invs de bytes. Utilizando blocos de 32 bits (4 bytes) o perodo da cifra alongado para 232, ou seja, a repetio dos valores s ocorrer a cada 232 bytes (4.294.967.296 bytes ou 4 giga bytes).
Tabela 5.1 Repetio dos valores a cada 256 bytes

99

Posio 1 2 3 4 257 258 259 260 513 514 515 516

Resultado da expresso 157 441 1053 2131 392144541 396733113 401357341 406017363 3111996573 3130217401 3148509213 3166872147

Resultado (mod 256) 157 185 29 83 157 185 29 83 157 185 29 83

Para implementar esta operao em C basta fazer com que a funo de leitura do arquivo leia 32 bits; e alterar o tipo de dados utilizado de char para int. Como blocos de 32 bits esto sendo utilizados, so cifrados 4 bytes ao mesmo tempo, o que melhorou significativamente o desempenho. possvel realizar implementaes com blocos maiores, no entanto, foi constatado que isso no oferece muitas vantagens. Dois motivos principais so: 1 As mensagens que se desejam cifrar raramente excedem o limite de 4 giga bytes; 2 Com blocos maiores, maior a probabilidade de parte do bloco cifrado coincidir com o bloco original, pois o valor do resultado da expresso tende a ser pequeno no incio das mensagens, principalmente quando a chave utilizada pequena.

5.3 Incluso de bits Aleatrios


Como visto na seo anterior, realizar a criptografia em blocos alongando o perodo da cifra aumenta significativamente a segurana. No entanto, este algoritmo continua vulnervel a um ataque por texto legvel conhecido, onde um criptanalista de posse de um texto legvel e seu correspondente ilegvel consegue obter a chave. Veja a seguir um exemplo de como isso pode ocorrer com o ALPOS: A funo para cifrar os dados tem como entrada e sada um valor do tamanho do bloco que est sendo utilizado e as operaes so realizadas mod (2t) onde t = tamanho do bloco. Vamos supor que o criptanalista tem acesso seguinte parte ABCDEFGHIJKL que comea na posio 111 de um texto que foi criptografado utilizando uma verso com blocos de 32 bits e com a chave 10,20,30, no entanto o criptanalista no conhece a chave, apenas a mensagem ilegvel correspondente quela parte do texto.

100

A tabela 5.2 mostra como os dados foram criptografados e a tabela 5.3 mostra quais so os dados que o criptoanalista tm acesso.
Tabela 5.2 Exemplo de criptografia

Texto Posio Valor Expresso Resultado da expresso Criptografado

EFGH IJKL 112 113 69707172 73747576 10x3+20x2+30x1 13926060 14303520 14687740 79592828 84010692 88435316

ABCD 111 65666768

Tabela 5.3 Dados em posse do criptanalista

Posio Original Criptografado

111 65666768 79592828

112 69707172 84010692

113 73747576 88435316

O criptoanalista em posse dos dados na tabela 5.3 calcula Criptografado - (menos) Original obtendo os valores equivalentes ao resultado da expresso na tabela 5.2. Com posse desses valores ele pode montar o sistema apresentado na figura 5.1:

Figura 5.1 Sistema utilizado para criptoanalise

Para montar o sistema apresentado na figura 5.1. o criptoanalista utilizou o seguinte raciocnio: Para gerar o resultado da expresso para a posio 111 foi realizado o seguinte clculo: expr111 = chave1 * 1113 + chave2 * 1112 + chave3 * 1111 Como sobraram 3 incgnitas (chave1, chave2 e chave3) necessrio ter pelo menos 3 expresses para poder resolver o sistema. O criptanalista deve ento gerar expresses utilizando os valores obtidos com as outras posies (112 e 113) para montar o sistema completo que foi apresentado. No sistema da figura 5.1 as incgnitas chave1, chave2 e chave3 foram substitudas por a,b e c respectivamente. Existem mtodos matemticos que permitem resolver rapidamente at os sistemas de grau 10 (grau mximo de segurana oferecido pelas implementaes do algoritmo posicional). Para solucionar esse problema a funo para criptografar os dados foi alterada e passou a ter como entrada 3 caracteres de 8 bits (24 bits de entrada) e como sada um
101

inteiro de 32 bits. A funo calcula internamente 8 bits aleatrios e acrescenta entrada (formando o bloco completo de 32 bits) antes de realizar a criptografia do bloco (que ainda de 32 bits). Isso dificulta ao criptoanalista a criao do sistema apresentado acima, pois no ser possvel a ele saber com certeza qual era o bloco original antes de ser criptografado, pois os bits aleatrios foram inseridos dentro da funo de criptografia. Para que o criptoanalista consiga gerar um sistema capaz de calcular a chave, ele ter que descobrir quais foram os bits acrescentados. Para uma chave de grau 1, como necessrio apenas um bloco para conseguir montar o sistema completo, ele ter de testar 256 possibilidades pra descobrir os 8 bits aleatrios acrescentados. J para um sistema de grau 3, em que necessrio utilizar 3 blocos para montar o sistema, uma vez que um sistema com grau 3 existem trs incgnitas, ele ter de testar 224 possibilidades para descobrir os 24 bits acrescentados, ou seja, 16777216 possibilidades. Em um sistema com grau 10, que o que oferece o maior nvel de segurana, necessrio testar 280 possibilidades, ou seja, 1.208.925.819.614.629.174.706.176 possibilidades; o que torna esse tipo de ataque invivel ao criptoanalista.

5.4 Desempenho das Otimizaes


5.4.1 Desempenho da otimizao em blocos
Como descrito anteriormente o desempenho melhorou significativamente. Na tabela 5.4 so apresentadas estatsticas de duas verses em blocos (blocos de 32 e de 64 bits) utilizando chaves de grau 1 at 10. Os tempos foram obtidos com base em um computador com processador AMD Duron 950 Mhz e 128 Mbytes de memria principal, RAM. A figura 5.2 mostra um grfico comparativo de desempenho sobre as implementaes. O grfico mostra a taxa de cifragem em Mbytes/s (Megabytes por segundo). Atravs dele pode-se observar que quanto maior o tamanho do bloco maior a taxa de cifragem (principalmente utilizando chaves pequenas como a de grau 1 ou 2), no entanto, o uso de blocos acima de 32 bits no recomendvel por questes de segurana.
Tabela 5.4 Desempenho do algoritmo Posicional com blocos de 32 e 64 bits

102

Posicional 32 bits

Posicional 64 bits

Tamanho 0,5Mb 1,0Mb 1,5Mb Tamanho 0,5Mb 1,0Mb 1,5Mb Grau Tempo (ms) Grau Tempo (ms) 60 170 280 50 160 110 1 1 60 170 330 50 160 160 2 2 110 280 380 50 160 220 3 3 110 330 440 110 220 270 4 4 160 330 500 110 220 330 5 5 160 380 600 110 270 380 6 6 220 440 650 160 270 440 7 7 270 550 770 160 280 500 8 8 330 610 880 160 330 550 9 9 390 660 930 220 440 600 10 10

Pode-se observar que utilizando blocos de 32 bits possvel conseguir um bom desempenho (1,61 Mbytes/s) utilizando chaves no grau mximo (grau 10); o que oferece tambm um bom nvel de segurana. Essa taxa de cifragem 2,78 vezes maior que a taxa de cifragem do algoritmo posicional sem blocos utilizando chaves de grau mximo (grau 10) que corresponde a 0,58 Mbytes/s.

Figura 5.2 Desempenho das otimizaes.

5.4.2 Desempenho da otimizao com bits aleatrios


Como era de se esperar o desempenho dessa otimizao diminuiu um pouco, no entanto reflete a maior segurana obtida por esse algoritmo. O maior problema quanto ao desempenho dessa otimizao quanto ao arquivo de sada criptografado, que 25% maior que o arquivo de entrada original. Foram implementadas trs verses da otimizao proposta, que diferem entre si apenas pelo modo em que os bits so acrescentados. Uma primeira verso apenas
103

acrescenta os bits aleatrios ao final do bloco. Uma segunda verso implementada, realiza o deslocamento para a esquerda um nmero varivel de vezes, de acordo com o nmero de vezes que a funo de cifragem chamada. Uma terceira verso, considerada a mais aconselhvel, distribui os bits aleatrios por todo o bloco. Na figura 5.3 apresentado um grfico que mostra o desempenho das trs verses dessa otimizao, comparando com o desempenho da verso que criptografa blocos de 32 bits sem acrscimo de nenhum bit aleatrio.

Figura 5.3 Comparao de desempenho entre as otimizaes no ALPOS

Atravs do grfico pode-se notar que o desempenho das trs verses que inserem bits aleatrios no bloco so parecidos e so todos mais lentos que a verso em blocos de 32 bits. No entanto pode-se dizer que o algoritmo se tornou muito mais seguro sem perder muito em eficincia, pois nos maiores nveis de segurana (prximos ao grau 10) o desempenho dos algoritmos que incluem bits aleatrios muito parecido com o desempenho do algoritmo que criptografa blocos de 32 bits sem a incluso de bits. Assim, em termos de velocidade para criptografar dados diferentes verses do ALPOS so similares mas em termos de segurana o melhor o ALPOS com processamento baseado em blocos e com insero de bits aleatrios.

5.5 Consideraes Finais do Captulo


A figura 5.4 mostra um grfico incorporando todas as otimizaes implementadas comparando a velocidade para criptografar dados. Os desempenhos foram obtidos utilizando um computador Duron 950Mhz com 128Mbytes de memria RAM. Atravs dele pode-se notar que todas as otimizaes implementadas so mais rpidas que a implementao do algoritmo posicional simples, simples descrito no captulo 4.

104

Figura 5.4 Comparao das otimizaes do algoritmo Posicional

Pode-se perceber tambm que a medida que o grau da chave aumenta, o impacto de desempenho causado pelo tamanho do bloco diminui. No entanto os algoritmos com blocos continuam mais velozes que o algoritmo simples sem blocos. Assim, possvel observar que em termos de desempenho, as implementaes de algoritmos criptogrficos baseados em blocos so mais rpidas que criptografar dados de maneira simples bit a bit. necessrio observar tambm o impacto que o tamanho do bloco possui, tanto em termos de segurana quanto em velocidade no processo de cifragem. Os prximos captulos apresentam os algoritmos clssicos e modernos usados na comunidade da rea de segurana, com nfase para o respectivo desempenho analisado atravs do tempo para criptografar informaes.

105

Parte II
Algoritmos Clssicos de Criptografia

Nos captulos 6 a 9, segunda parte do livro, se apresentam os conceitos relacionados com os algoritmos criptogrficos clssicos, tais como o DES, IDEA, RSA e os baseados em Hashing. Oferecem-se exemplos, e depois a respectiva implementao, tanto em software (linguagem C e alguns deles em Java) e a respectiva implementao em hardware (usando-se da linguagem VHDL para criar o respectivo circuito que mapeado em um FPGA). Cada algoritmo de interesse estudado e apresentado seguindo a mesma estrutura, e dedicado um captulo a cada um deles. Cada captulo faz nfase nas questes de implementao e desempenho do algoritmo.

106

Captulo 6
Algoritmo DES em Software e Hardware

Este captulo apresenta o famoso algoritmo DES, com nfase para o seu funcionamento e implementao em software e hardware, assim como dados de desempenho da sua implementao em C e FPGAs.

6.1 Um Breve Histrico do DES


O algoritmo DES (Data Encryption Standard) um dos algoritmos de cifragem mais usado no mundo. Durante muitos anos, e para muitas pessoas, criptografia e DES foram sinnimos. Apesar do recente grande feito da Electronic Frontier Foundation, criando uma mquina de US$ 220.000 para quebrar mensagens cifrados com DES, este algoritmo vai continuar sendo til em governos e bancos pelos prximos anos atravs da verso chamada triple-DES (TKOTZ, 2003). O triple-DES ou tambm conhecido como 3-DES faz o processo de cifragem idntico ao algoritmo DES, s que repetido trs vezes, podendo usar sempre o mesmo valor da chave ou usando duas ou trs chaves diferentes. Em 15 de Maio de 1973, durante o governo de Richard Nixon, o National Bureau of Standards (NBS) publicou uma notcia solicitando formalmente propostas de algoritmos criptogrficos para proteger dados durante transmisses e armazenamento. A notcia explicava porque a cifragem de dados era um assunto importante. O National Bureau of Standards solicitava tcnicas e algoritmos para a cifragem de dados por computador. Tambm solicitava tcnicas para implementar as funes criptogrficas de gerar, avaliar e proteger chaves criptogrficas; manter arquivos cifrados com chaves que expiram; fazer atualizaes parciais em arquivos cifrados e misturar dados cifrados com claros para permitir marcaes, contagens, roteamentos, etc. O NBS, no seu papel de estabelecer padres e de auxiliar o governo e a indstria no acesso tecnologia, se encarregaria de avaliar os mtodos de proteo para preparar as linhas de ao. O NBS ficou esperando por respostas. Nenhuma apareceu at 6 de Agosto de 1974, trs dias antes da renncia de Nixon, quando a IBM apresentou um algoritmo candidato que ela havia desenvolvido internamente, denominado LUCIFER.
107

Horst Feistel um dos idealizadores do LUCIFER chegou como imigrante alemo aos Estados Unidos em 1934. Ele ia se tornar um cidado americano quando os EUA entraram na segunda guerra mundial. Para Feistel, alemo, isto significou uma imediata priso domiciliar, a qual se estendeu at 1944. Mesmo depois de alguns anos aps o incidente, Feistel manteve-se distante da criptologia para evitar levantar suspeitas das autoridades. Porm, quando estava no Cambridge Research Center da Fora Area Americana, ele no resistiu e comeou a pesquisar cifras. Imediatamente comeou a ter problemas com a National Security Agency, a NSA, organizao americana responsvel pela segurana das comunicaes militares e governamentais, e que tambm tenta interceptar e decifrar mensagens estrangeiras. A NSA emprega um grande nmero de matemticos e compra a maior quantidade de hardware e intercepta mais mensagens que qualquer outra organizao no mundo. A NSA no se importava com o passado de Feistel, queria apenas ter o monoplio da pesquisa em criptografia e conseguiu fazer com que o projeto de pesquisa de Feistel fosse cancelado. Em 1960, o pesquisador perseguido foi para a Mitre Corporation, mas a NSA continuou fazendo presso e forou-o a abandonar seu trabalho pela segunda vez. Feistel acabou indo para o Thomas J. Watson Laboratory da IBM, perto de Nova Iorque, onde, por alguns anos, conseguiu prosseguir com suas pesquisas sem ser caado. Foi neste laboratrio que, no incio de 1970, ele desenvolveu o sistema LUCIFER. E foi este o sistema apresentado NBS. Aps avaliar o algoritmo com a ajuda da National Security Agency, a NBS adotou o algoritmo LUCIFER com algumas modificaes sob a denominao de Data Encryption Standard (DES) em 15 de Julho de 1977 (TKOTZ, 2003). O DES foi rapidamente adotado na mdia no digital, como nas linhas telefnicas pblicas. Depois de alguns anos, a International Flavors and Fragrances estava utilizando o DES para proteger as transmisses por telefone das suas preciosas frmulas de sabores e fragrncias. Neste meio tempo, a indstria bancria, a maior usuria de criptografia depois do governo, adotou o DES como padro para o mercado bancrio atacadista. Os padres do mercado atacadista da indstria bancria so estabelecidos pelo American National Standards Institute (ANSI). A norma ANSI X3.92, adotada em 1980, especificava o uso do algoritmo DES (TKOTZ, 2003).

6.2 O algoritmo DES


O algoritmo DES composto por operaes simples como: permutaes, substituies, XOR e deslocamentos. O DES criptografa informao atravs do processo de cifra de bloco com tamanho de 64 bits e retorna blocos de texto cifrado do mesmo tamanho usando uma chave de 56 bits. O processo principal do algoritmo executado 16 vezes, em cada iterao utilizada uma subchave derivada da chave original. Nesta seo apresenta-se o algoritmo DES e seus detalhes de funcionamento. O algoritmo foi dividido em duas partes, a gerao de subchaves e o processamento
108

principal que inclui as 16 iteraes do algoritmo (ver figura 6.1). A seguir tem-se a descrio do funcionamento da gerao de subchaves.

Figura 6.1 Descrio do Algoritmo DES (Viso top-level)

6.2.1 Chaves e Subchaves do DES


As chaves do DES so armazenadas com 64 bits (8 bytes), dos quais 8 bits so desprezados. desprezado o ltimo bit de cada byte reduzindo o tamanho da chave para 56 bits. A partir da chave original so geradas 16 subchaves, uma para cada iterao do processamento principal. Na figura 6.2 tem-se a ilustrao da seqncia de passo para gerao das subchaves.

109

Figura 6.2 Ilustrao do algoritmo de gerao de subchaves do DES.

Observa-se na figura 6.2 que a chave original de 64 bits sofre uma permutao de compresso inicial (PCI) de acordo com uma tabela predefinida (ver tabela 6.1). Alm de ocorrer a troca de bits tambm feita uma compresso, isto , transformase uma chave de 64 bits em um vetor de 56 bits permutados (FIPS46-3, 1999).
Tabela 6.1 Permutao de Compresso Inicial (PCI).

57 10 63 14

49 02 55 06

41 59 47 61

33 51 39 53

25 43 31 45

17 35 23 37

09 27 15 29

01 19 07 21

58 11 62 13

50 03 54 05

42 60 46 28

34 52 38 20

26 44 30 12

18 36 22 04

Observando a tabela 6.1, visualiza-se que a primeira entrada da tabela "57", isto significa que o 57 bit da chave original torna-se o primeiro bit da chave permutada. O 49 bit da chave original transforma-se no segundo bit da chave permutada. O 4 bit da chave original o ltimo bit da chave permutada. Importante observar que apenas 56 bits da chave original aparecem na chave permutada. Aps a permutao de compresso inicial (PCI) feito um desmembramento do vetor resultante de 56 bits em duas partes iguais de 28 bits. A parte C ficar com os 28 bits mais significativos e D ficar com os 28 bits menos significativos. Em
110

seguida feita uma rotao esquerda das duas partes C e D conforme a tabela 6.2. As partes C e D podem ser rotacionadas esquerda um ou dois bits de acordo com a iterao que est sendo executada.
Tabela 6.2 Vetor de rotao de chave (ROT).

Na iterao 1 e 2 ser rotacionado apenas 1 bit esquerda (ver tabela 6.2). Na iterao 3, 4, 5, 6, 7 e 8 sero deslocados 2 bits e assim por diante. Depois de cada deslocamento feita uma permutao de compresso (PC), ver tabela 6.3, que concatena C e D formando uma subchave de 48 bits. Ao final do processo so geradas 16 subchaves derivadas da chave original.
Tabela 6.3 Permutao de Compresso (PC).

14 15 26 41 51 34

17 6 08 52 45 53

11 21 16 31 33 46

24 10 07 37 48 42

1 23 27 47 44 50

5 19 20 55 49 36

3 12 13 30 39 29

28 4 02 40 56 32

Basicamente h duas maneiras de se gerar as subchaves: uma j foi apresentada e utiliza rotao de bits e permutaes de compresso. A outra forma seria a permutao direta bastante utilizada na descrio em hardware deste algoritmo. Sabe-se que todos os bits da subchave gerada so derivados da chave original, assim possvel gerar as subchaves atravs de uma permutao direta.

6.2.2 Processamento Principal


No processamento principal (PP) encontram-se operaes como permutaes, substituies, desmembramentos e a operao XOR. O PP utiliza as subchaves geradas pelo mdulo gerador de subchaves. Para cada iterao do algoritmo principal utilizada uma subchave diferente. Para cifrar um determinado bloco de texto (64 bits) necessrio utilizar as subchaves na ordem crescente, isto , na iterao 1 do PP ser utilizada a subchave 1, na iterao 2 a subchave 2, na 3 a subchave 3 e assim por diante. Para decifrar um bloco de texto as subchaves so aplicadas na ordem inversa ou decrescente. Neste
111

contexto, para decifrar a iterao 1 utilizar a subchave 16, a iterao 2 a subchave 15, a 3 a subchave 14 e etc. Observa-se que a seqncia de operaes do processamento principal a mesma sempre, o que muda para cifrar ou decifrar um bloco de texto a ordem que as subchaves so aplicadas. Na figura 6.3 tem-se a representao do PP do algoritmo DES. Elementos utilizados na figura 6.3. Li left block (bloco da esquerda), inicialmente armazena os 32 bits mais significativos resultantes da permutao inicial (PI) Ri right block (bloco da direita), inicialmente armazena os 32 bits menos significativos resultantes da permutao inicial (PI) Ki subchave correspondente a iterao i.

F funo que realiza operaes como P-BOX e S-BOX. Utiliza a subchave Ki e o bloco Ri-1. Observando a figura 6.3 possvel verificar que o processamento principal divido em trs etapas executadas em seqncia. A primeira etapa a permutao inicial (PI), a segunda corresponde s iteraes e a terceira e ltima etapa corresponde permutao final (PF). Permutao Inicial do Processamento Principal: O processamento principal inicia-se com uma permutao inicial (PI) e em seguida so executadas as 16 iteraes do algoritmo DES e por fim realizada uma permutao final, atravs deste processo transforma-se o bloco de texto legvel em algo ilegvel ou vice-versa. A permutao inicial definida pelos valores da tabela 6.4. Nenhum bit descartado ou adicionado nesta permutao, isto , o vetor de bits resultante da PI contm os bits permutados do bloco de texto original.
Tabela 6.4 Tabela de Permutao inicial (PI).

58 60 62 64 57 59 61 63

50 52 54 56 49 51 53 55

42 44 46 48 41 43 45 47

34 36 38 40 33 35 37 39

26 28 30 32 25 27 29 31

18 20 22 24 17 19 21 23

10 12 14 16 09 11 13 15

02 04 06 08 01 03 05 07

112

Figura 6.3 Processamento principal do algoritmo DES.

Iteraes do Processamento Principal: Aps a PI iniciam-se as iteraes do DES. O vetor resultante da PI dividido em duas partes R (Right = direita) e L (Left = esquerda) cada uma com 32 bits. Onde L contm os 32 bits mais significantes e R os demais bits. Estas duas partes, R e L, sofrem as seguintes operaes: Aplica-se a funo VR = f (Ki, Ri-1), onde VR o vetor resultante, K a subchave e i a iterao que esta sendo executada.
113

Realiza-se uma operao XOR de VR com Li (VR = VR xor Li). Li recebe Ri-1 (Li recebe Ri anterior) Ri recebe VR

Esta seqncia de operaes executada 16 vezes. Aps as 16 iteraes, R e L so concatenados formando novamente um vetor de 64 bits que passar pela ltima permutao (PF). A funo f (Ki, Ri-1): A funo f realiza basicamente 4 operaes: (a) Operao de permutao de expanso, (b) Operao XOR com a subchave correspondente a interao, (c) Operao e Substituio S-BOX e, (d) Operao de Permutao P-BOX.

A seguir a descrio destas operaes. (a) Permutao de expanso (PE): realiza uma permutao sobre Ri (32 bits), onde o vetor resultante ter 48 bits. A PE definida pelos valores representados na tabela 6.5 (FIPS46-3, 1999).
Tabela 6.5 Permutao de Expanso (PE).

32 08 16 24

01 09 17 25

02 10 18 26

03 11 19 27

04 12 20 28

05 13 21 29

04 12 20 28

05 13 21 29

06 14 22 30

07 14 23 31

08 16 24 32

09 17 25 01

(b) Xor com a subchave: realizada uma operao de XOR entre o vetor resultante da PE com a subchave da iterao que est sendo executada. (c) S-BOX: Esta operao realiza as substituies de bits. Para isso, utilizam-se 8 tabelas chamadas de caixas de substituio (ou melhor conhecidas como SBOXES) que contm valores predefinidos (ver tabelas 6.6.1 a 6.6.8) (FIPS46-3, 1999). Nesta fase tem-se um vetor de 48 bits ou oito grupos de 6 bits. Cada grupo atuar sobre uma S-BOX, obedecendo a seguinte ordem: os primeiros 6 bits (grupo 1) so substitudos por algum valor da S-BOX 1, o segundo grupo pela S-BOX 2, o terceiro grupo tambm de 6 bits pela S-BOX 3 e assim por diante.
114

Tabela 6.6.1 S-BOX 1.

14 00 04 15

04 15 01 12

13 07 14 08

01 04 08 02

02 14 13 04

15 02 06 09

11 13 02 01

08 01 11 07

03 10 15 05

10 06 12 11

06 12 09 03

12 11 07 14

05 09 03 10

09 05 10 00

00 03 05 06

07 08 00 13

Tabela 6.6.1 S-BOX 2.

15 03 00 13

01 13 14 08

08 04 07 10

14 07 11 01

06 15 10 03

11 02 04 15

03 08 13 04

04 14 01 02

09 12 05 11

07 00 08 06

02 01 12 07

13 10 06 12

12 06 09 00

00 09 03 05

05 11 02 14

10 05 15 09

Tabela 6.6.3 S-BOX 3.

10 13 13 01

00 07 06 10

09 00 04 13

14 09 09 00

06 03 08 06

03 04 15 09

15 06 03 08

05 10 00 07

01 02 11 04

13 08 01 15

12 05 02 14

07 14 12 03

11 12 05 11

04 11 10 05

02 15 14 02

08 01 07 12

Tabela 6.6.4 S-BOX 4.

07 13 10 03

13 08 06 15

14 11 09 00

03 05 00 06

00 06 12 10

06 15 11 01

09 00 07 13

10 03 13 08

01 04 15 09

02 07 01 04

08 02 03 05

05 12 14 11

11 01 05 12

12 10 02 07

04 14 08 02

15 09 04 14

Tabela 6.6.5 S-BOX 5.

02 15 04 11

12 11 02 08

04 02 01 12

01 12 11 07

07 04 10 01

10 07 13 14

11 13 07 02

06 01 08 13

08 05 15 06

05 00 09 15

03 15 12 00

15 10 05 09

13 03 06 10

00 09 03 04

14 08 00 05

09 06 14 03

115

Tabela 6.6.6 S-BOX 6.

12 10 09 04

01 15 14 03

10 04 15 02

15 02 05 12

09 07 02 09

02 12 08 05

06 09 12 15

08 05 03 10

00 06 07 11

13 01 00 14

03 13 04 01

04 14 10 07

14 00 01 05

07 11 13 00

05 03 11 08

11 08 06 13

Tabela 6.6.7 S-BOX 7.

04 13 01 06

11 00 04 11

02 11 11 13

14 07 13 08

15 04 12 01

00 09 03 04

08 01 07 10

13 10 14 07

03 14 10 09

12 03 15 05

09 05 06 00

07 12 08 15

05 02 00 14

10 15 05 02

06 08 09 03

01 06 02 12

Tabela 6.6.8 S-BOX 8.

13 01 07 02

02 15 11 01

08 13 04 14

04 08 01 07

06 10 09 04

15 03 12 10

11 07 14 08

01 04 02 13

10 12 00 15

09 05 06 12

03 06 10 09

14 11 13 00

05 00 15 03

00 14 03 05

12 09 05 06

07 02 08 11

A S-BOX uma matriz 4x16. Para identificar qual ser o valor utilizado na substituio deve-se visualizar cada grupo de 6 bits da seguinte forma: os bits 1 e 6 identificam a linha da matriz e os bits 2,3,4,5 a coluna da matriz. Desta forma podese determinar o valor para substituio. (d) P-BOX: uma permutao comum que segue os valores predefinidos pela tabela 6.7. Tabela 6.7 P-BOX.

16 01 02 19

07 15 08 13

20 23 24 30

21 26 14 06

29 05 32 22

12 18 27 11

28 31 03 04

17 10 09 25

Permutao Final do Processamento Principal:


116

Aps as 16 iteraes realizada uma permutao final (PF) gerando o texto cifrado (FIPS46-3, 1999). As permutaes finais e iniciais no influenciam muito do ponto de vista de segurana, pois no tem relao alguma com a chave criptogrfica. A PF realizada obedecendo a tabela 6.8.
Tabela 6.8 Permutao final (PF).

40 39 38 37 36 35 34 33

08 07 06 05 04 03 02 01

48 47 46 45 44 43 42 41

16 15 14 13 12 11 10 09

56 55 54 53 52 51 50 49

24 23 22 21 20 19 18 17

64 63 62 61 60 59 58 57

32 31 30 29 28 27 26 25

6.3 Exemplo Preliminar de Funcionamento do DES


O DES trabalha cifrando blocos de 64 bits de mensagem, o que significa 16 nmeros hexadecimais, pois cada nmero hexadecimal representa 24 = 16, um grupo de 4bits. Para realizar o processo de cifrar dados, o DES utiliza chaves com comprimento aparente de 16 nmeros hexadecimais (64 bits). Entretanto, no algoritmo DES, cada oitavo bit da chave ignorado, de modo que a chave acaba tendo o comprimento de 56 bits. A seguir um exemplo simples de como funciona a cifragem. Suponha a mensagem clara ou original "8787878787878787h" (apresentao hexadecimal) que cifrada com a chave DES "0E329232EA6D0D73h", obtem-se o texto cifrado "0000000000000000h". Assim, se o texto cifrado for decifrado com a mesma chave secreta DES "0E329232EA6D0D73h", o resultado deve ser o texto claro original "8787878787878787h" (KOCHER, 1999). Este exemplo simples e metdico porque nosso texto claro tinha o comprimento de exatos 64 bits. O mesmo seria verdade caso nosso texto claro tivesse um comprimento mltiplo de 64 bits. Mas a maioria das mensagens no necessariamente cair nesta categoria, pois no necessariamente sero mltiplos exatos de 64 bits. Nestes casos, para cifrar a mensagem, seu comprimento precisa ser ajustado com a adio de alguns bytes extras no final. Depois de decifrar a mensagem, estes bytes extras so descartados. Existem vrios mtodos diferentes para adicionar bytes, um deles o simples preenchimento com zeros.
117

6.4 Segurana do DES


Antes que o DES fosse adotado como padro internacional, durante o perodo em que o NBS estava solicitando comentrios sobre o algoritmo proposto, os criadores da criptografia de chave pblica, Martin Hellman e Whitfield Diffie, registraram algumas objees quanto ao uso do DES como algoritmo de cifragem. Hellman escreveu: Whitfield Diffie e eu ficamos preocupados com o fato de que o padro de criptografia de dados proposto, enquanto provavelmente seguro em relao a assaltos comerciais, pode ser extremamente vulnervel a ataques efetuados por uma organizao de inteligncia" (carta ao NBS, 22 de Outubro de 1975) (TKOTZ, 2003). Diffie e Hellman planejaram na mesma poca um ataque de fora bruta ao DES (lembrar que fora bruta significa aplicar seqencialmente as 256 chaves possveis at encontrar a chave correta que decifra a mensagem cifrada) e propuseram o uso especfico de computadores paralelos, usando um milho de chips para testar um milho de chaves por segundo e estimaram o custo de uma mquina deste tipo em US$ 20 milhes, com um custo diminudo para algumas centenas de milhares de dlares at o final da dcada de 80 (TKOTZ, 2003). Sob a direo de John Gilmore do EFF (DESKEY, 2001), uma equipe gastou US$ 200.000 e construiu uma mquina que pode analisar todo o espao de chaves de 56 bits do DES precisando em mdia 4,5 dias para completar a tarefa. Em 17 de julho de 1998 eles anunciaram que haviam quebrado uma chave de 56 bits em 46 horas. O computador, chamado de DES Key Search Machine (ver figura 6.4), usa 27 placas, cada uma com 64 chips, e capaz de testar 90 bilhes de chaves por segundo (DESKEY, 2001). A nica soluo neste caso era propor um algoritmo com uma chave maior que no pudesse ser quebrado com facilidade, ento surgiu o TripleDES. O algoritmo Triple-DES (FIPS46-3, 1999) apenas o DES com duas chaves de 56 bits aplicadas. Dada uma mensagem em texto claro, a primeira chave usada para cifrar a mensagem em DES. A segunda chave usada para decifrar o DES da mensagem cifrada. Como a segunda chave no a correta para decifrar, esta decifragem apenas embaralha ainda mais os dados. A mensagem duplamente embaralhada , ento, cifrada novamente com a primeira chave para se obter o texto cifrado final. Este procedimento em trs etapas chamado de triple-DES. Assim, o triple-DES ou 3-DES apenas o DES efetuado trs vezes com duas chaves usadas numa determinada ordem. O triple-DES tambm pode ser feito usando-se trs chaves diferentes, ao invs de apenas duas. Em qualquer um dos casos, o espao de chaves resultante de cerca de 2112, o que aumenta consideravelmente sua segurana.

118

Figura 6.4 DES Key Search Machine (DESKEY, 2001).

6.5 Implementao em C e VHDL


O DES um algoritmo criptogrfico possvel de ser implementado em software e em hardware. Nesta seo apresentam-se detalhes da implementao em VHDL e em linguagem C do algoritmo DES. Os leitores podem encontrar detalhes dessa implementao no link www.novateceditora.com.br/downloads.php, onde tambm possvel executar o algoritmo para vrias informaes, conseguindo visualizar o funcionamento do algoritmo. C uma linguagem de programao seqencial. Isto , estabelecida uma determinada seqncia de instrues, estas so executadas uma aps a outra obedecendo a uma lgica predefinida. Quem executa estas instrues um processador genrico encontrado em PCs, estaes de trabalhos, etc. VHDL uma linguagem padro para descrio de hardware. Algumas ferramentas de sntese para FPGA transformam uma descrio VHDL em um circuito que pode conter aes executando em paralelo, ou seja, dois ou mais processos podem executar ao mesmo tempo. Esta diferena de paradigmas entre as duas linguagens torna a implementao em software diferente da implementao em hardware em alguns pontos. Estas diferenas so mostradas nesta seo com a implementao dos principais mdulos de execuo do DES. O DES inicia sua execuo com uma permutao inicial (PI) e termina com uma permutao final (PF), que do ponto de vista de segurana no acrescenta muito. A permutao consiste em uma troca de bits. Para isso, existe uma tabela predefinida que informa para qual posio cada bit ser deslocado conforme informaes
119

contidas nas tabelas 6.4 e 6.8. A tabela 6.9 mostra a implementao em C da permutao final e inicial do DES e a respectiva implementao em VHDL.
Tabela 6.9 Descrio dos mdulos de permutao inicial e final.

Descrio dos mdulos de permutao inicial e final Descrio em C Descrio em VHDL


//declarao da constante PI e //PF const unsigned char PI[64] = { 58,50,42,34,26,18,10,02, 60,52,44,36,28,20,12,04, 62,54,46,38,30,22,14,06, 64,56,48,40,32,24,16,08, 57,49,41,33,25,17,09,01, 59,51,43,35,27,19,11,03, 61,53,45,37,29,21,13,05, 63,55,47,39,31,23,15,07}; const unsigned char PF[64] = { 40,08,48,16,56,24,64,32, 39,07,47,15,55,23,63,31, 38,06,46,14,54,22,62,30, 37,05,45,13,53,21,61,29, 36,04,44,12,52,20,60,28, 35,03,43,11,51,19,59,27, 34,02,42,10,50,18,58,26, 33,01,41,09,49,17,57,25}; //... programa principal //permutao inicial for (i=0;i<=63;i++){ aux64[i]=E[PI[i]-1]; } //iteraes... // permutao final for (i=0;i<=63;i++){ S[i]=RL[PF[i]-1]; } -- vetores para armazenar resultado das permutaes signal PI: std_logic_vector(0 to 63); signal PF: std_logic_vector(0 to 63); -- Programa principal -- Permutao inicial PI <= E(06)&E(14)&E(22)&E(30)&E(38)&E(46)& E(54)&E(62)&E(04)&E(12)&E(20)&E(28)& E(36)&E(44)&E(52)&E(60)&E(02)&E(10)& E(18)&E(26)&E(34)&E(42)&E(50)&E(58)& E(00)&E(08)&E(16)&E(24)&E(32)&E(40)& E(48)&E(56)&E(07)&E(15)&E(23)&E(31)& E(39)&E(47)&E(55)&E(63)&E(05)&E(13)& E(21)&E(29)&E(37)&E(45)&E(53)&E(61)& E(03)&E(11)&E(19)&E(27)&E(35)&E(43)& E(51)&E(59)&E(01)&E(09)&E(17)&E(25)& E(33)&E(41)&E(49)&E(57); -- permutao final S <= RL(39)&RL(07)&RL(47)&RL(15)&RL(55)& RL(23)&RL(63)&RL(31)&RL(38)&RL(06)& RL(46)&RL(14)&RL(54)&RL(22)&RL(62)& RL(30)&RL(37)&RL(05)&RL(45)&RL(13)& RL(53)&RL(21)&RL(61)&RL(29)&RL(36)& RL(04)&RL(44)&RL(12)&RL(52)&RL(20)& RL(60)&RL(28)&RL(35)&RL(03)&RL(43)& RL(11)&RL(51)&RL(19)&RL(59)&RL(27)& RL(34)&RL(02)&RL(42)&RL(10)&RL(50)& RL(18)&RL(58)&RL(26)&RL(33)&RL(01)& RL(41)&RL(09)&RL(49)&RL(17)&RL(57)& RL(25)&RL(32)&RL(00)&RL(40)&RL(08)& RL(48)&RL(16)&RL(56)&RL(24);

Observaes E texto de entrada S texto de sada RL vetor resultado das iteraes Aux64 vetor para armazenar resultado da PI. (em C)

O processamento principal do algoritmo DES, como j foi dito, composto por passos
120

simples tais como: permutaes, substituies e a operao lgica XOR. Na seqncia so implementados os mdulos P-BOX e S-BOX. A P-BOX ou caixa de permutao tem seu funcionamento similar ao das permutaes inicial e final. Dentro do algoritmo principal, a P-BOX executada logo aps a SBOX, isto , o vetor resultante da SBOX alimenta a PBOX. Observa-se na tabela 6.10 que foi utilizada a troca direta de bits na implementao em VHDL.
Tabela 6.10 Descrio da P-BOX.

Descrio da P-BOX Descrio em C


// declarao da constante PBOX const unsigned char PBOX[32] = {16, 07, 20, 21, 29, 12, 28, 17, 01, 15, 23, 26, 05, 18, 31, 10, 02, 08, 24, 14, 32, 27, 03, 09, 19, 13, 30, 06, 22, 11, 04, 25}; //... // programa principal for (i=0;i<=31;i++){ PB[i]=SB[PBOX[i]-1]; }

Descrio em VHDL
-- vetor resultado da PBOX signal PB: STD_LOGIC_VECTOR(0 to 31); -- vetor de entrada da PBOX signal SB: STD_LOGIC_VECTOR(0 to 31); -- Programa principal PB <= SB(15)&SB(06)&SB(19)&SB(20)&SB(28)& SB(11)&SB(27)&SB(16)&SB(00)&SB(14)& SB(22)&SB(25)&SB(04)&SB(17)&SB(30)& SB(09)&SB(01)&SB(07)&SB(23)&SB(13)& SB(31)&SB(26)&SB(02)&SB(08)&SB(18)& SB(12)&SB(29)&SB(05)&SB(21)&SB(10)& SB(03)&SB(24); Observaes

SB PB

vetor resultado da SBOX que alimenta a entrada da PBOX vetor resultado da PBOX

A S-BOX ou caixa de substituio, contm valores que substituiro os bits resultantes da operao XOR com uma subchave. Na implementao em C deve-se identificar, atravs das coordenadas linha e coluna, o conjunto de bits que substituiro os bits originais. Nas tabelas 6.11 e 6.12 so apresentadas as descries em C e VHDL da S-BOX 1
Tabela 6.11 Descrio em C da S-BOX 1.

121

Descrio em C da S-BOX 1
// converte para decimal (no mximo 4 bits) const unsigned char DEC[2][2][2][2][2] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; // declarao da constante SBOX1 (valores convertidos para binrio) const unsigned char SBOX1[4][16*4]= { 1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,1,0,0,0, 0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1, 0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,1, 1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0, 0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1, 1,1,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,0,1,0,0,0,0, 1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,1,1,1, 0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1}; //funo sbox1 void sbox1 (bool E[6]){ int lin,col; //identifica linha e coluna convertendo para decimal lin = DEC[0][0][0][5]; -- bit 0 e 5 col = DEC[1][2][3][4]; -- bit 1,2,3 e 4 // realiza a substituio E[0]=SBOX1[lin][col*4]; E[1]=SBOX1[lin][col*4+1]; E[2]=SBOX1[lin][col*4+2]; E[3]=SBOX1[lin][col*4+3]; }

Observaes
DEC Converte para decimal nmeros binrios de at 4 bits SBOX1 constantes que iro sibstituir os bits de entrada originais. lin, col Valor linha e da coluna da SBOX1 para identificar o conjunto de bits de substituio

Importante destacar que na descrio VHDL no necessrio isolar os bits que identificam a linha e a coluna. Pode-se fazer o acesso direto atravs do vetor de localizao (Pos). Tanto em C, como em VHDL, o valor resultante da S-BOX 1 deve ser o mesmo. De forma similar se implementam todas as outras S-BOXES.
Tabela 6.12 Descrio em VHDL da S-BOX 1.

122

Descrio em VHDL da S-BOX 1


With Pos Select Dado <= "1110" when "000000", "0001" when "000110", "1011" when "001100", "1010" when "010010", "0101" when "011000", "0111" when "011110", "0111" when "000101", "0010" when "001011", "1010" when "010001", "1011" when "010111", "0011" when "011101", "0001" when "100010", "1101" when "101000", "1011" when "101110", "1001" when "110100", "1010" when "111010", "1111" when "100001", "0010" when "100111", "0001" when "101101", "1011" when "110011", "1010" when "111001", "1101" when "111111",

"0100" "0010" "1000" "0110" "1001" "0000" "0100" "1101" "0110" "1001" "1000" "1110" "0110" "1111" "0111" "0101" "1100" "0100" "0111" "0011" "0000" "ZZZZ"

when when when when when when when when when when when when when when when when when when when when when when

"000010", "001000", "001110", "010100", "011010", "000001", "000111", "001101", "010011", "011001", "011111", "100100", "101010", "110000", "110110", "111100", "100011", "101001", "101111", "110101", "111011", others;

"1101" "1111" "0011" "1100" "0000" "1111" "1110" "0001" "1100" "0101" "0100" "1000" "0010" "1100" "0011" "0000" "1000" "1001" "0101" "1110" "0110"

when when when when when when when when when when when when when when when when when when when when when

"000100", "001010", "010000", "010110", "011100", "000011", "001001", "001111", "010101", "011011", "100000", "100110", "101100", "110010", "111000", "111110", "100101", "101011", "110001", "110111", "111101",

Pos Dado

Observaes Armazena a posio dos bits de substituio Armazena os bits j alterados

Durante a descrio do algoritmo DES foram implementadas vrias verses at alcanar uma verso otimizada deste algoritmo em VHDL, gerando um circuito de melhor performance temporal e espacial. A maioria das descries do DES em VHDL o processo de gerao de subchaves e o processo principal executam em paralelo, isto significa que as subchaves do DES so geradas todas as vezes que um novo bloco de texto for cifrado ou decifrado. Portanto, a otimizao de um destes processos, afetaria no desempenho final do sistema de forma positiva. Com base nesta afirmao o processo de gerao de subchaves foi otimizado. Realmente foi constatado que o circuito como um todo teve seu desempenho melhorado. Detalhes desta otimizao podem ser vistos em (PEREIRA, 2003).

6.6 Estatsticas de Desempenho das Implementaes do DES


O DES um algoritmo criptogrfico bastante explorado. Sua implementao em hardware e software atingem um bom nvel de desempenho. Nesta seo apresentam-se algumas estatsticas de desempenho da descrio em C e VHDL do DES implementada pelos autores.
123

Na tabela 6.13 tem-se o tempo de execuo em segundos do algoritmo DES implementado em C. Este programa foi executado em um Pentium III 700MHz com 128 MB de RAM. Foram utilizados arquivos de 1, 5 e 10 Mbytes. Na primeira contagem de tempo foi executado o programa a partir do disco rgido. Neste caso o desempenho temporal medido em segundos foi de 1,26s, 5,82s e 10,27s para os arquivos de texto claro de 1, 5 e 10 Mbytes respectivamente. Com o programa e o arquivo em memria o desempenho melhorado em mais de 25% como pode ser visualizado na tabela 6.13.
Tabela 6.13 Temporizao do Algoritmo DES em C.

1MB 5MB 10MB

DISCO 1,26 s 5,82 s 10,27 s

MEMRIA 0,94 s 3,90 s 7,09 s

% 25,39% 32,98% 30,96%

Na implementao em C pode-se concluir, a partir dessas estatsticas, que possvel cifrar aproximadamente 1 Mbytes/s. Lembrando que conforme o ambiente de execuo este valor pode se alterar de forma significativa. Na respectiva descrio em VHDL e implementao em FPGA do DES foram geradas estatsticas que podem ser visualizadas na tabela 6.14. Ao descrever um circuito em VHDL para FPGAs, dois pontos so relevantes para medir o desempenho: o tempo de propagao e a taxa de ocupao do circuito. O FPGA utilizado da famlia Virtex, especificamente o chip XCV812EFG900 (XILINX, 2004).
Tabela 6.14 Desempenho do Algoritmo DES em VHDL.
Tempo de Propagao

Freqncia Mxima

19,55ns
Taxa de Ocupao do FPGA

51,146 MHz CLBs 381 9.408 4,04% FLIP-FLOP LUTs 68 755 18.816 18.816 0,3% 4,01%

N de componentes utilizados N de componentes disponveis Porcentagem de ocupao

Foram realizadas vrias otimizaes antes de chegar a esta verso final que atingiu 19,55ns, precisando de 381 CLBs e 68 Flip-Flops (ver mais detalhes de implementao em hardware em (MORENO, 2003)). Observando a tabela 6.14 nota-se que o FPGA selecionado comporta o algoritmo DES, utilizando apenas 4% de todas as CLBs disponveis, portanto este algoritmo poderia ser implementado em um FPGA menor e com um custo mais acessvel.
124

Importante lembrar que os FPGAs so de baixo custo. Por exemplo, at final ddo ano de 2004, uma placa Digilent que contm capacidade suficiente para permitir o mapeamento dos algoritmos criptogrficos discutidos no livro, devia custar em torno de R$ 50,00. Placas mais sofisticadas so mais custosas, por exemplo permitem mapear processadores complexos como o PowerPC. Para os algoritmos criptogrficos, FPGAs menores de R$ 50,00 podem ser usados. Em alguns testes realizados foi constatado que o algoritmo DES, implementado pelos autores, pode ser mapeado em um FPGA da famlia XC4010XLPC84. Este FPGA aproximadamente 24 vezes menor que o Virtex utilizado na gerao de estatsticas observadas na tabela 6.14. Esta implementao em hardware simples e bsica pois no utiliza tcnicas de pipeline, apesar disso, o desempenho atingido considerando bom quando comparado a outras implementaes como a encontrada no site mundial OPENCORES que contm cores abertos, isto , disponveis gratuitamente (OPENCORES, 2004). Com um tempo de propagao de 19,55ns, o circuito dedicado poder cifrar em 1s aproximadamente 25 Mbytes de texto claro. Essa taxa de execuo fixa, assim em 2 segundos ser executado exatamente o dobro de informaes, 50 Mbytes. Comparando com a implementao em software pode se dizer que o hardware neste caso aproximadamente 25 vezes mais veloz. Pesquisas e dados estatsticos mostram que a implementao em hardware utilizando tcnicas de pipeline chega a ser 400 vezes mais veloz que a verso em software (OPENCORES, 2004). A figura 6.5 ilustra esta comparao.

Figura 6.5 Desempenho temporal do DES.

A verso implementada em hardware com pipeline pode ser encontrada no site de cdigos abertos Opencores (OPENCORES, 2004). Na figura 6.6 ilustra-se como o algoritmo DES est mapeado no FPGA, destacando principalmente o roteamento fsico do circuito.

125

Figura 6.6 DES mapeado em um FPGA Virtex.

126

Captulo 7
Algoritmo IDEA

Este captulo apresenta o funcionamento do algoritmo IDEA, com nfase na sua implementao em linguagem C e detalhes do seu desempenho.

7.1 Descrio do Algoritmo IDEA


O algoritmo IDEA, inicialmente chamado de IPES, foi proposto por X. Lai e J. Massey em 1991. Foi projetado para ser eficiente em implementaes por software (LAI, 1990). O IDEA possu chave secreta de 128 bits e tanto a entrada (texto legvel) quanto a sada (texto ilegvel) so de 64 bits. O mesmo algoritmo serve tanto para criptografar (cifrar) quanto para decriptografar (decifrar) e consiste de duas fases diferentes: (i) a primeira baseada na realizao de 8 iteraes utilizando sub-chaves distintas e (ii) uma transformao final.

7.2 Operaes no IDEA


O algoritmo IDEA est baseado em trs operaes. Estas operaes so todas sobre 16 bits conforme descrito a seguir (LAI, 1990):

Operao Descrio de Funcionamento Ou exclusivo (XOR) sobre 16 bits 16 Soma mod 2 , ou seja, somar dois valores de 16 bits desprezando o mais + 16

esquerda, correspondente a 2 . Esta operao consiste em vrios passos: 1. Multiplicar dois valores de 16 bits obtendo um valor que chamaremos de Z, sendo que antes de multiplicar, se um desses valores for 0 deve ser alterado para 216. 2. Se o resultado da operao acima for 216, ento o resultado final da operao 0, caso contrrio o valor obtido em 2 (Z mod (216 + 1)). 3. Calcular Z mod (216 + 1), ou seja, o resto da diviso de Z por 216 + 1.

127

7.2.1 Gerao das Sub-Chaves


Como o mesmo algoritmo utilizado tanto na criptografia quanto na decriptografia, o que define qual a operao a ser realizada a forma de gerao das sub-chaves. Para a criptografia so geradas 52 subchaves de 16 bits a partir da chave secreta de 128 bits (chamadas em forma breve de K). A primeira subchave (K1) gerada considerando os 16 bits mais significativos de K, a segunda (K2) gerada considerando os prximos 16 bits, e assim so geradas as subchaves at K8 que ser os 16 bits menos significativos de K. Como a cada 8 subchaves geradas a prxima subchave inicia-se com um deslocamento de 25 bits a partir do incio da chave K, a 9 sub-chave formada por 16 bits a partir do 25 bit a partir da direita de K, a K10 formada pelos 16 prximos bits, e assim at gerar K14. Seguindo o mesmo raciocinio, a 15 sub-chave (K15) ser formada pelos 7 bits menos significativos de K e para complet-la so usados os primeiros 9 bits (os 9 bits mais significativos de K). Lembrando que a cada 8 subchaves a prxima chave inicia-se acrescentando um deslocamento de 25 bits chave inicial K, a K17 inicia-se a partir do 50 bit a partir da direita de K. Dessa forma so geradas as primeiras 48 subchaves. A subchave K49 inicia-se a partir do 22 bit a partir da direita de K, a K50 formada pelos prximos 16 bits, e assim at formar a K52. A tabela 7.1 a seguir apresenta uma representao da criao das 52 subchaves:
Tabela 7.1 Criao das subchaves

K1..K8 K9..K16 K17..K24 K25..K32 K33..K40 K41..K48 K49..K52

0 25 50 75 100 125 22

16 41 66 91 116 13 38

Bit de incio em K (a partir da direita) 32 48 64 80 57 73 89 105 82 98 114 2 107 123 11 27 4 20 36 52 29 45 61 77 54 70

96 121 18 43 68 93

112 9 34 59 84 109

7.2.2 Processamento das Iteraes


Como descrito anteriormente, o algoritmo IDEA possui 8 iteraes e uma transformao final. Cada iterao possui duas partes e utiliza 6 subchaves que chamaremos de Ka, Kb, Kc, Kd, Ke e Kf. A primeira parte de cada iterao usa as quatro primeiras subchaves (Ka, Kb, Kc, Kd); e a segunda parte de cada iterao usa as subchaves Ke e Kf; e utilizam as operaes descritas no incio. As duas partes utilizam tanto entrada quanto sada de 64 bits dividida em quatro blocos de 16 bits que chamaremos de Xa, Xb, Xc e Xd
128

(para a entrada) e Xa, Xb, Xc e Xd (para a sada); e a sada da primeira parte a entrada para a segunda parte. O algoritmo para a primeira parte da iterao :
Xa = Xa Xd = Xd Ka Kd

Xb = Xc + Kc Xc = Xb + Kb

O algoritmo para a segunda parte da iterao :


Y1 = Xa Xb Z1 = Xc Xd Y2 = [(Ke Z2 = (Ke Y1) + Z1] Y1) + Y2 Kf

Xa = Xa Y2 Xb = Xb Y2 Xc = Xc Z2 Xd = Xd Z2

A ultima transformao utiliza as ltimas quatro subchaves (K49, K50, K51 e K52). Aps 8 iteraes descritas anteriormente, a sada Xa, Xb, Xc e Xd fornecida como entrada da transformao final gerando o texto criptografado Xa, Xb, Xc e Xd como descrito a seguir.
Xa = Xa Xd = Xd K49 K52

Xb = Xc + K50 Xc = Xb + K51

O esquema da figura 7.1 mostra como o processo completo realizado pelo algoritmo IDEA.

129

Figura 7.1 Esquema do algoritmo IDEA

7.3 Decriptografia
Como descrito acima, para decriptografar uma mensagem com o algoritmo IDEA basta alterar a forma de como as subchaves so geradas. necessrio calcular a inversa das chaves utilizadas na primeira parte de cada iterao e inverter a ordem em que elas so utilizadas. Inicialmente so utilizadas as inversas multiplicativas mod 216 + 1 das sub-chaves K49 e K52 para formar as sub-chaves K1 e K4 e as inversas aditivas das sub-chaves K50 e K51 para gerar as sub-chaves K2 e K3. Utilizar as subchaves 47 e 48 para formar K5 e K6 que so utilizadas na segunda parte da primeira iterao. Utilizar as subchaves inversas das chaves K43, K44, K45 e K46 na primeira parte da segunda iterao e as subchaves K41 e K42 na segunda parte da segunda iterao. E assim por diante at utilizar K1, K2, K3 e K4 na transformao final.
130

7.4 Implementao em C
Inicialmente foram implementadas as trs operaes bsicas do algoritmo IDEA. O cdigo da implementao das operaes XOR e SOMA16; e uma implementao inicial de MULT16 so apresentados a seguir:
void XOR(int * A, int B, int C) { *A = B ^ C; } void SOMA16(int * A, int B, int C){ *A = (B + C) % v2_16; } void MULT16(int * A, int B, int C){ _int64 aux; if (B == 0) B = v2_16; if (C == 0) C = v2_16; aux = BLAKLEY(B,C,(v2_16_1)); if (aux != v2_16) *A = (int) aux; else *A = 0; }

A constante v2_16 utilizada equivalente a 216. A multiplicao implementada utiliza o algoritmo de BLAKLEY (KO, 1994) para realizar multiplicaes mdulo 216+1 e a implementao desse algoritmo em linguagem C apresentada a seguir:
int BLAKLEY(int a, int b, int n) // entrada: a,b,n // sada: R = (a * b) mod n { unsigned int aux; int R; R = 0; for (aux = 0x80000000; aux > 0; aux >>= 1) { R = (R << 1); if((a & aux) != 0) R += b; if (R > n) R -= n; if (R > n) R -= n; } return R; }

Aps a implementao das operaes bsicas possvel implementar as iteraes (primeira e segunda parte) e a transformao final. O cdigo implementado possui uma funo que implementa a primeira parte da iterao, uma funo para a segunda parte da iterao, uma funo que calcula uma iterao completa fornecendo a sada da primeira parte como entrada para a segunda parte como citado anteriormente na descrio do algoritmo e a transformao final. O cdigo em linguagem C apresentado a seguir:
131

void Iterac1(int Ka, int Kb, int Kc, int Kd, int *Xa, int *Xb, int *Xc, int *Xd) { int Xal=*Xa, Xbl=*Xb, Xcl=*Xc, Xdl=*Xd; MULT16(Xa,Xal,Ka); MULT16(Xd,Xdl,Kd); SOMA16(Xb,Xcl,Kc); SOMA16(Xc,Xbl,Kb); } void Iterac2(int Ke, int Kf, int *Xa, int *Xb, int *Xc, int *Xd) { int Xal=*Xa, Xbl=*Xb, Xcl=*Xc, Xdl=*Xd; int Y1,Z1,Y2,Z2; int aux1,aux2; XOR(&Y1,Xal,Xbl); XOR(&Z1,Xcl,Xdl);

//calculo de Y2 MULT16(&aux1,Ke,Y1); SOMA16(&aux2,aux1,Z1); MULT16(&Y2,aux2,Kf);

//calcule de Z2 SOMA16(&Z2,aux1,Y2); XOR(Xa,Xal,Y2); XOR(Xb,Xbl,Y2); XOR(Xc,Xcl,Z2); XOR(Xd,Xdl,Z2); } void Iteracao(int Ka, int Kb, int Kc, int Kd, int Ke, int Kf, int *Xa, int *Xb, int *Xc, int *Xd) { Iterac1(Ka,Kb,Kc,Kd,Xa,Xb,Xc,Xd); Iterac2(Ke,Kf,Xa,Xb,Xc,Xd); } void TransformacaoT(int K49, int K50, int K51, int K52, int *Xa, int *Xb, int *Xc, int *Xd) { int Xal=*Xa, Xbl=*Xb, Xcl=*Xc, Xdl=*Xd; MULT16(Xa,Xal,K49); MULT16(Xd,Xdl,K52); SOMA16(Xb,Xcl,K50); SOMA16(Xc,Xbl,K51); }

Essa implementao utiliza como chave um vetor do tipo lgico (bool) de 128 posies. Para realizar a criptografia so utilizadas 52 subchaves de 16 bits que so geradas a partir da chave inicial de 128 bits. As funes para gerar um vetor contendo as 52 subchaves a partir da chave inicial so apresentadas a seguir:
132

void GenSubKey(bool Key[], int K[]) { //O vetor Pos possui as posies de incio de cada subchave (ver Tabela 7.1) const Pos[52] = { 0 , 16 , 32 , 48 , 64 , 80 ,

96 , 112, 25 , 41 , 57 , 73 , 89 , 105, 121, 9 82 , 98 , 114, 2 , 50 , 66 , , 18 , 34 ,

75 , 91 , 107, 123, 11 , 27 , 43 , 59 , 100, 116, 4 , 20 ,

36 , 52 , 68 , 84 , 125, 13 , 29 , 45 , 61 , 77 , 93 , 109, 22 , 38 , 54 , 70 }; int i; for (i = 0; i < 52; i++) conv(Pos[i],&K[i],Key); } void conv(int Pos, int * K, bool Key[]) { // gera uma subchave K a partir da posio Pos na chave Key int i; *K = Key[(Pos+15)%128]; for (i=14;i>=0;i--) if (Key[(Pos+i)%128]!=0) *K = *K + (int) pow(2,15-i); }

Para criptografar com o algoritmo IDEA basta aplicar oito iteraes e uma transformao final. A implementao da funo de criptografia com o algoritmo IDEA apresentada a seguir:
void CriptIDEA(int Key[], int *Xa, int *Xb, int *Xc, int *Xd) { int i; for (i=0;i<8;i++) { Iteracao(K[i*6],K[i*6+1],K[i*6+2],K[i*6+3],K[i*6+4], K[i*6+5],Xa,Xb,Xc,Xd); printf("%04x|%04x|%04x|%04x", *Xa,*Xb,*Xc,*Xd); } TransformacaoT(K[48],K[49],K[50],K[51],Xa,Xb,Xc,Xd); } \

Para decriptografar necessrio gerar as subchaves inversas e aplicar o mesmo algoritmo utilizado para a criptografia. Para isso necessrio calcular a inversa das operaes bsicas adio e multiplicao. A seguir so apresentadas as funes que calculam a inversa aditiva e a multiplicativa:
int InvSoma(int A){ return abs((v2_16 - A)); } unsigned int InvMult(unsigned int A) {

133

long n1,n2,q,r,b1,b2,t; if(A==0) b2=0; else { n1=(v2_16_1); n2=A; b2=1; b1=0; do { r = (n1 % n2); q = (n1-r)/n2; if(r==0) { if(b2<0) b2=(v2_16_1)+b2; } else { n1=n2; n2=r; t=b2; b2=b1-q*b2; b1=t; } } while (r!=0); } return b2 & 0xffff; }

A seguir apresentada a funo de decriptografia, onde a medida que as subchaves inversas so geradas elas so aplicadas:
void DecriptIDEA(int Key[], int *Xa, int *Xb, int *Xc, int *Xd) { int i=8; int Ka, Kb, Kc, Kd; Ka = InvMult(K[i*6]); Kd = InvMult(K[i*6+3]); Kb = InvSoma(K[i*6+1]); Kc = InvSoma(K[i*6+2]); for(i=8;i>0;i=i) { Iteracao(Ka,Kb,Kc,Kd,K[i*6-2],K[i*6-1],Xa,Xb,Xc,Xd); i--; Ka = InvMult(K[i*6]); Kd = InvMult(K[i*6+3]); Kb = InvSoma(K[i*6+2]); Kc = InvSoma(K[i*6+1]); } Ka = InvMult(K[0]);

134

Kd = InvMult(K[3]); Kb = InvSoma(K[1]); Kc = InvSoma(K[2]); TransformacaoT(Ka,Kb,Kc,Kd,Xa,Xb,Xc,Xd); }

7.5 Implementao de Otimizaes


possvel aumentar significativamente a performance do algoritmo IDEA apenas alterando a funo de multiplicao (mod 216 + 1). Trocando a funo de multiplicao utilizada pela funo apresentada abaixo que utiliza o algoritmo LowHigh, o desempenho melhora cerca de 2,4 vezes.
void MULT16(unsigned int * X, unsigned int a,unsigned int b) { long p; unsigned int q; if(a==0) p=65537-b; else { if(b==0) p=65537-a; else { q=(unsigned long)a*(unsigned long)b; p=(q & 65535) - (q>>16); if(p<=0) p=p+65537; } } *X = (unsigned int)(p&65535); }

Isso ocorre pois a funo apresentada no utiliza clculos matemticos complexos como a operao % que equivale operao (mod n). Essa funo utiliza apenas uma multiplicao e operaes lgicas que so muito mais rpidas que a operao (mod n), por exemplo.

7.6 Desempenho
O algoritmo IDEA possui um bom desempenho chegando a atingir taxas para criptografar dados de at 500 Kbytes/s em um computador Duron 950 Mhz com 128 Mbytes de memria principal (RAM). O grfico da figura 7.2 mostra uma comparao das duas verses (utilizando BLAKLEY como multiplicao modular, e utilizando o algoritmo Low-High para a multiplicao (mod 216 + 1) e qual o impacto gerado pelo uso dessas implementaes).

135

Figura 7.2 Desempenho do algoritmo IDEA em Software

7.7 Consideraes Finais


A figura 7.3 apresenta um grfico comparando o desempenho das verses dos algoritmos ALPOS e IDEA implementados em C. Atravs dele pode-se perceber que o algoritmo IDEA o mais lento apresentado at aqui, entretanto, isto reflete uma maior segurana oferecida pelo algoritmo. Tambm possvel notar que implementaes mais otimizadas do algoritmo IDEA podem torn-lo quase to rpido quanto o algoritmo ALPOS, descrito no captulo 4.

Figura 7.3 Comparao entre os algoritmos

Importante lembrar que os dados de desempenho apresentados na figura 7.3 foram obtidos utilizando um computador Duron 950 MHz com 128Mbytes de memria.
136

Esses dados podero ser diferentes quando executados em plataformas diferentes. Assim, o leitor poder verificar mudanas nos valores apresentados. No obstante, o comportamento da performance dever seguir aquele da figura 7.3, o que valida as concluses de velocidade at aqui apresentadas.

137

Captulo 8
O Algoritmo Assimtrico - RSA

Este captulo apresenta o funcionamento do algoritmo assimtrico RSA, assim como detalhes da sua implementao em software e hardware, e o respectivo desempenho da implementao em C e FPGAs.

8.1 Introduo ao RSA


O RSA um sistema de criptografia de chave assimtrica ou criptografia de chave pblica que foi inventado por volta de 1977 pelos professores do MIT (Massachusetts Institute of Technology) Ronald Rivest, Adi Shamir e o professor da USC (University of Southern California) Leonard Adleman (RIVEST et al, 1978). O sistema consiste em gerar uma chave pblica (geralmente utilizada para cifrar os dados) e uma chave privada (utilizada para decifrar os dados) atravs de nmeros primos grandes, o que dificulta a obteno de uma chave a partir da outra. Quanto maior os nmeros primos utilizados para a criao da chave, maior a segurana proporcionada por esse algoritmo. Hoje em dia os nmeros primos que so utilizados tm geralmente 512 bits de comprimento e combinados formam chaves de 1024 bits. Em algumas aplicaes, como por exemplo bancrias, que exigem o mximo de segurana a chave chega a ser de 2048 bits. Com o passar do tempo, a tendncia que o comprimento da chave aumente cada vez mais. Esse fenmeno acontece, em grande parte, pelo avano nos sistemas computacionais que acompanham o surgimento de computadores que so capazes de fatorar chaves cada vez maiores em um tempo muito baixo. Os algoritmos para a gerao da chave pblica e privada usadas para cifrar e decifrar as mensagens so simples. Observe-os a seguir (RIVEST et al, 1978): 1. Escolhe-se dois nmeros primos grandes (p e q); 2. Gera-se um nmero n atravs da multiplicao dos nmeros escolhidos anteriormente (n = p . q); 3. Escolhe-se um nmero d, tal que d menor que n e d relativamente primo (p-1).(q-1);

138

4. Escolhe-se um nmero e tal que (ed-1) seja divisvel por (p-1).(q-1). Para realizar esse clculo necessrio o algoritmo de Euclides Estendido (WIKIPEDIA, 2004). 5. Os valores e e d so chamados de expoentes pblico e privado, respectivamente. O par (n,e) a chave pblica e o par (n,d) a chave privada. Os valores p e q devem ser mantidos em segredo ou destrudos.

Para cifrar uma mensagem com esse algoritmo realizado o seguinte clculo: C = Te mod n, onde C a mensagem cifrada, T o texto original, e e n so dados a partir da chave pblica (n,e). A nica chave que pode decifrar a mensagem C a chave privada (n,d) atravs do clculo de: T = Cd mod n.

8.2 Exemplos de Funcionamento


O exemplo utilizado pelos autores para o algoritmo RSA realiza a criptografia da mensagem ITS ALL GREEK TO ME utilizada pelos autores do RSA no artigo A Method for Obtaining Digital Signatures and Public-Key Cryptosystems (RIVEST et al, 1978) utilizando-se de chaves diferentes. Satisfazendo a etapa 1 de criao de chaves descrita acima, so selecionados dois nmeros primos aleatrios p = 53, q = 61. No nosso exemplo utilizamos nmeros pequenos para que possam ser representados facilmente. Pela etapa 2 n = p . q, portanto n = 53 . 61 = 3233; Pela etapa 3 escolher um nmero d tal que d seja menor que n e relativamente primo a (p-1).(q-1) para tanto basta escolher um nmero primo aleatrio maior que p e q. Para o nosso exemplo escolhemos d = 193. Pela etapa 4 escolhe-se um nmero e tal que (ed-1) seja divisvel por (p-1).(q-1), para realizar tal calculo utilizado o algoritmo de Euclides Estendido. Fazendo o uso desse algoritmo calculamos que e = 97. Portanto, em nosso exemplo, os valores importantes do algoritmo RSA so: p = 53, q = 61, n = 53 . 61 = 3233, d = 193 e e = 97. No artigo (RIVEST et al, 1978) as chaves utilizadas foram: p = 47, q = 59, n = 2773, d = 157, e = 17.

139

Para realizar a criptografia foi adotada uma tabela (ver tabela 8.1) para representar numericamente as letras maisculas do alfabeto. Em um algoritmo implementado em computador a tabela utilizada a tabela ASCII que no ser utilizada nesse exemplo para simplificar os clculos.
Tabela 8.1 Valores dos Caracteres para Exemplo do RSA.

00 M 13 N 14

A 01 O 15

B 02 P 16

C 03 Q 17

D 04 R 18

E 05 S 19

F 06 T 20

G 07 U 21

H 08 V 22

I 09 W 23

J 10 X 24

K 11 Y 25

L 12 Z 26

Usando a tabela 8.1 a frase ITS ALL GREEK TO ME seria representada numericamente como: 09 20 19 00 01 12 12 00 07 18 05 05 11 00 20 15 00 13 05 00 Como nosso n = 3233, a mensagem pode ser criptografada em blocos de duas letras pois o valor mximo que pode aparecer na frase original o equivalente seqncia ZZ = 2626 que menor que n (3233). Portanto, agrupando a mensagem em grupos de duas letras temos: 0920 1900 0112 1200 0718 0505 1100 2015 0013 0500 Para cifrar cada bloco realizado o clculo: C = Te mod n, onde C a mensagem cifrada e T a mensagem original. Para T = 0920, temos: C = 092097 mod 3233 = 2546; Para T = 1900, temos: C = 190097 mod 3233 = 1728; Para T = 0112, temos: C = 011297 mod 3233 = 0514; Para T = 1200, temos: C = 120097 mod 3233 = 0210; Para T = 0718, temos: C = 071897 mod 3233 = 2304; Para T = 0505, temos: C = 050597 mod 3233 = 0153; Para T = 1100, temos: C = 110097 mod 3233 = 2922; Para T = 2015, temos: C = 201597 mod 3233 = 2068; Para T = 0013, temos: C = 001397 mod 3233 = 1477; Para T = 0500, temos: C = 050097 mod 3233 = 2726. Assim temos a mensagem cifrada:
140

2546 1728 0514 0210 2304 0153 2922 2068 1477 2426 Para decifrar cada bloco realizado o clculo: T = Cd mod n, onde T a mensagem original e C a mensagem cifrada. Para C = 2546, temos: T = 2546193 mod 3233 = 0920; Para C = 1728, temos: T = 1728193 mod 3233 = 1900; Para C = 0514, temos: T = 0514193 mod 3233 = 0112; Para C = 0210, temos: T = 0210193 mod 3233 = 1200; Para C = 2304, temos: T = 2304193 mod 3233 = 0718; Para C = 0153, temos: T = 0153193 mod 3233 = 0505; Para C = 2922, temos: T = 2922193 mod 3233 = 1100; Para C = 2068, temos: T = 2068193 mod 3233 = 2015; Para C = 1477, temos: T = 1477193 mod 3233 = 0013; Para C = 2726, temos: T = 2726193 mod 3233 = 0500. Assim temos a mensagem decifrada: 0920 1900 0112 1200 0718 0505 1100 2015 0013 0500, que era a nossa mensagem original.

8.3 Descrio do Algoritmo


Para a criao das chaves necessrio um gerador de nmeros aleatrios para a escolha dos nmeros p, q e d descritos nas etapas 1 e 3. O gerador de nmeros aleatrios utilizado na implementao foi inspirado no apresentado no livro de Knuth (KNUTH, 1997), seu esquema apresentado na figura 8.1.

141

Figura 8.1 Esquema do gerador de nmeros aleatrios

Os valores atribudos MM, AA, QQ e RR so definidos para que os nmeros gerados no se repitam facilmente, o valor X o valor a partir do qual ser calculado o prximo nmero. Outro algoritmo necessrio o algoritmo de Euclides Estendido que utilizado para o calculo de e na etapa 4, seu esquema apresentado na figura 8.2.

Figura 8.2 Esquema do algoritmo de Euclides Estendido 142

Para criptografar uma mensagem realizado o clculo C = Me mod n, onde C a mensagem cifrada, M a mensagem original, e o expoente pblico e n o mdulo. Os valores e e n so os calculados de acordo com as etapas de 1 a 4. Para decifrar uma mensagem o clculo realizado : M = Cd mod n, sendo d o expoente privado. Para realizar esses clculos foi necessria a implementao dos algoritmos para exponenciao modular e para multiplicao modular (BLAKLEY). Esses algoritmos esto descritos em (KO, 1994).

8.4 Implementao em C
Para implementar o algoritmo RSA necessrio inicialmente um algoritmo para a gerao de nmeros aleatrios e um algoritmo para verificar se os nmeros gerados so primos. Como esta implementao utilizar chaves entre 16 e 24 bits, que so chaves relativamente pequenas, no ser necessrio a implementao de algoritmos sofisticados para verificar se os nmeros so primos. Em implementaes que consideram chaves grandes (a partir de 512 bits) verificar se os valores utilizados na gerao das chaves so primos um problema, pois para valores grandes um teste utilizando algoritmos comuns demora um tempo impraticvel. Em vez disto so utilizados algoritmos que comprovam que um nmero tem uma probabilidade alta de ser primo, mas no pode-se afirmar com certeza. Desta forma esta implementao utilizar a funo primo abaixo para determinar se um determinado valor primo ou no. Como descrito anteriormente, esta funo uma funo simples e no adequada para o teste de nmeros grandes.
int primo(unsigned int n) { int i; i = (n / 2) + 1; while(n % i != 0) i--; if (i==1) return 1; // primo else return 0; // no primo }

O algoritmo para a gerao de nmeros aleatrios utilizados o que foi esquematizado na figura 8.1. Desta forma, a funo escolha(min,max) escolhe uma valor primo entre min e max. Importante lembrar que o valor de X o valor a partir do qual sero calculados os outros valores. Este valor X chamado de semente do gerador de nmeros aleatrios.
#define MM 2147483647 #define AA 48271 #define QQ 44488 #define RR 3399 int X = 251;

143

int escolha(int min, int max) { int aux=0; while(aux<min) { X=AA*(X%QQ)-RR*(long)(X/QQ); if (X<0) X+=MM; aux = X % max; if (aux>min) while (!primo(aux)) aux++; } return aux; }

Outra funo importante para a gerao das chaves do algoritmo RSA o algoritmo de Euclides Estendido. Esta funo utilizada para gerar o valor do expoente pblico.
int calc_e(unsigned int phi_n, unsigned int d) { int u[3]; int v[3]; int t[3]; int q; u[0] = 1; u[1] = 0; u[2] = phi_n; v[0] = 0; v[1] = 1; v[2] = d; while (v[2] != 0) { q = (u[2] / v[2]); t[0] = u[0] - (v[0] * q); t[1] = u[1] - (v[1] * q); t[2] = u[2] - (v[2] * q); u[0] = v[0]; u[1] = v[1]; u[2] = v[2]; v[0] = t[0]; v[1] = t[1]; v[2] = t[2]; } return u[1]; }

Para gerar as chaves basta executar os algoritmos conforme descrito nos cinco passos da seo 8.1. Desta forma, a implementao da funo para gerar as chaves segue:
void criachave(int *a, int *b, int *c) {

144

//p e q devem ser at 210 //65536 unsigned int p,q,d,e,n; p = escolha(256,4000); q = p; while (p == q) q = escolha(256,4000); n = p * q; d = escolha(50000,100000); e = calc_e(((p-1)*(q-1)),d); *a = e; *b = d; *c = n; }

Aps criadas as chaves, para realizar as operaes de criptografia e decriptografia basta realizar as operaes C = Me mod n e M = Cd mod n respectivamente. Para isto so necessrios algoritmos especficos para a exponenciao modular. Os algoritmos utilizados foram escolhidos por sua performance e por no necessitar de variveis maiores que 32 bits para esta implementao de 24 bits. Maiores detalhes sobre estes algoritmos podem ser obtidos em (KO, 1994). A seguir apresentada a implementao destes algoritmos.
int BLAKLEY(int a, int b, int n) // entradas: a,b,n // sada: R = (a * b) mod n { int i,aux=1; int a_[32]; int R; for (i=0;i<32;i++) { a_[i] = (!((a & aux) == 0)); aux+=aux; } R = 0; for (i=0;i<32;i++) { R = 2 * R + (a_[32-1-i] * b); R = R % n; } return R; } int modexp(unsigned long m, unsigned long e, unsigned int n) /* Algoritmo binrio m = base | e = expoente | n = modulo | t = n de bits */ { unsigned long temp=1; int j,t; int b[32]; int aux=1; //vetor de bits

145

int achou; for (j=0;j<32;j++) { b[j] = !((e &aux) == 0); aux += aux; } j = 31; achou = 0; while ((!achou) && (j >= 0)) { if (b[j] == 1) { t = j+1; achou = 1; } j--; } for (j=t;j>=0;j--) { temp = BLAKLEY(temp,temp,n); if (b[j] == 1) temp = BLAKLEY(temp,m,n); } return temp; } // calcula o n de bits do expoente (t) //converte o expoente em um vetor de bits

Ambos os algoritmos apresentados no esto em sua forma mais otimizada. Sugerese que o leitor verifique pontos onde tais otimizaes possam ser implementadas e realize implementaes otimizadas.

8.5 Exemplos de Funcionamento do Algoritmo Implementado em C


O algoritmo RSA foi implementado em linguagem C. Embora a maioria das chaves utilizadas nos dias de hoje terem 1024 bits de comprimento, a nossa implementao do RSA ter apenas chaves que variam entre 16 e 24 bits, uma vez que o objetivo do livro apresentar o algoritmo de forma didtica, no sendo dessa forma, necessria uma implementao mais complexa do RSA. No entanto, considerando os principios e algoritmos aqui apresentados possvel realizar implementaes completas que utilizem chaves de grandes tamanhos. A tabela 8.2 apresenta exemplos de funcionamento do RSA. Nela aparecem trs mensagens: algoritmo, criptografia e RSA e, as suas respectivas mensagens criptografadas para dois conjuntos diferentes de parmetros e, d e n.

146

Tabela 8.2 Exemplo de Funcionamento do RSA


Mensagem \ Chave Algoritmo Criptografia RSA e = 47453, d = 60077, n = 3269183 2e0e420ac6bc1aa2db2994ae256cbb 0cca360c33e01967140243c313667419 54c9 17f7fd2011e7 e = 54809, d = 88289, n = 787403 08a5a00a35ff0a71a901a423054f79 094d7d0a8af409484a05281104ae8e01d 55a 016c6e00b029

8.6 Implementao em Hardware (VHDL)


Inicialmente ser proposta a implementao dos mdulos necessrios para o clculo de C = Me mod n; e M = Cd mod n. A diferena entre a implementao da funo para cifrar e a implementao da funo para decifrar apenas o tamanho de alguns sinais de entrada e sada. Portanto, basta implementar um mdulo para calcular potncia e um para calcular o mdulo (resduo). Com isso podemos imaginar uma arquitetura simples que realize esse clculo. Essa arquitetura apresentada na figura 8.3.

Figura 8.3 Arquitetura bsica do RSA

Poderamos implementar o RSA utilizando a arquitetura apresentada na figura 8.3, entretanto, o clculo de Me resulta em um valor muito grande, que necessitaria de uma grande quantidade de bits para armazen-lo e seria necessrio muito tempo para calcular o mdulo (que a prxima etapa). Com isso necessrio estudar alguns algoritmos que permitam calcular Me mod n sem que os valores intermedirios sejam muito grandes, reduzindo assim o tempo necessrio. Os algoritmos utilizados para a implementao foram os algoritmos Binary Method Modular Exponentiation e Blakleys Method Modular Multiplication descritos em (KO, 1994).
//Binary Method Modular Exponentiation //Entradas: M, e, n; //Sada temp = Me (mod n); 1. temp = 1; 2. PARA i DE nmero de bits do expoente e AT 0 FAA 3. temp = temp * temp (mod n);

147

4. SE ei = 1 ENTO 5. temp = temp * M (mod n);

6. FIM SE; 7. FIM PARA;

Na linha 4, ei significa o bit i do expoente e. Os clculos realizados nas linhas 3 e 5 so realizados atravs do algoritmo Blakleys Method, apresentado a seguir.
//Blakleys Method Modular Multiplication //Entradas: A,B, n; //Sada: R = A * B (mod n); 1. R = 0; 2. PARA i DE 0 AT 32 FAA 3. R = R * 2 + (A31-i * B); 5. R = R (mod n); 6. FIM PARA;

Para simplificar os clculos a linha 3 pode ser substituda por:


3.a. R = R << 1; //Desloca-se o R uma vez para a esquerda (equivale a multiplicar por 2) 3.b. SE A31-i = 1 ENTO R = R + B;

E a linha 5 pode ser substituda por:


5.a. SE R > n ENTO R = R n; 5.b. SE R > n ENTO R = R n;

Para implementar o RSA basta implementar os algoritmos descritos acima. O algoritmo principal o Binary Method, que utiliza o algoritmo Blakleys Method para realizar a multiplicao mdulo n. Faremos isso propondo uma mquina de estados onde o algoritmo Blakley ser representado por dois estados. A mquina de estados proposta apresentada na figura 8.4.

148

Figura 8.4 Mquina de estados para a implementao do RSA

Os mdulos descritos acima foram implementados e simulados utilizando a ferramenta Xilinx Foundation (XILINX, 2004), verso 3.1 (XILINX, 1998). Ambos os mdulos trabalham a uma freqncia de 50MHz e demoram cerca de 38.8us (1 microsegundo = 10-6 segundos) para cifrar/decifrar blocos de mensagem de dois caracteres. A seguir apresentada a descrio em VHDL para esta mquina de estados. Pode-se perceber atravs desta descrio que as portas de entrada so: M (16 bits representa a mensagem), E (17 bits representa o expoente pblico), n (24 bits valor de n = p * q) e CLK; e as portas de sada so C (24 bits mensagem cifrada) e PRONTO que indica que o bloco atual foi finalizado. A varivel FLAG indica o estado em que a mquina se encontra.
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; use IEEE.std_logic_unsigned.all;

ENTITY mod_exp is port( M : in std_logic_vector(15 downto 0); E : in std_logic_vector(16 downto 0); n : in std_logic_vector(23 downto 0); CLK : in std_logic; C : out std_logic_vector(23 downto 0); PRONTO : out std_logic ); end mod_exp;

149

architecture arc of mod_exp is begin process(clk) variable temp: std_logic_vector(31 downto 0); variable flag: std_logic_vector(2 downto 0); variable A,B,R : std_logic_vector(31 downto 0); variable i,j : integer; begin if clk'event and clk = '1' then if flag = "000" then j := 17; temp := "00000000000000000000000000000001"; flag := "001"; elsif flag = "001" then if j >=0 then A := temp; B := temp; R := "00000000000000000000000000000000"; i := 0; flag := "010"; else PRONTO <= '1'; --Atribuio dos valores aos

C <= temp(23 downto 0); --sinais de sada. end if; elsif flag = "011" then temp := R; if E(j) = '1' then A := temp; B(15 downto 0 ) := M; B(31 downto 16) := "0000000000000000"; R := "00000000000000000000000000000000"; i := 0; flag := "100"; else j := j - 1; flag := "001"; end if; elsif flag = "101" then temp := R; j := j - 1; flag := "001"; elsif flag = "010" or flag = "100" then -- BLAKLEY if i < 32 then R := SHL(R,"1"); if A(31-i) = '1' then R := R + B; end if; if R > n then R := R - n; end if; if R > n then R := R - n; end if; i := i + 1; else flag := flag + 1; end if;

150

end if; end if; end process; end arc;

A figura 8.5 apresenta a criptografia dos caracteres AB, que usando os respectivos valores da tabela ASCII so representados pelos valores em hexadecimal 4142. A chave utilizada E=0B95Dh e N=31E23Fh. O valor criptografado aparece no sinal C=0C134Ah.

Figura 8.5 Simulao de criptografia utilizando o RSA em Hardware

A figura 8.6 mostra como a mesma mensagem decifrada. Na entrada C colocado o valor da mensagem criptografada anteriormente (0C134Ah); a chave utilizada neste caso a chave secreta D=0EAADh e N=31E23Fh. A mensagem decifrada aparece no sinal M. Note que o processo funcionou corretamente, pois a mensagem obtida aps decifrar a mesma do incio (M=4142h).

Figura 8.6 Simulao de decriptografia utilizando o RSA 151

8.7 Desempenho do RSA


8.7.1 Desempenho em Software
A figura 8.7 apresenta um grfico de tempo de execuo do algoritmo RSA. O teste foi realizado com arquivos de 0,5; 1,0 e 1,5 Mbytes, usando a nossa implementao em linguagem C.

Figura 8.7 Grfico de desempenho do RSA em software

No caso do algoritmo RSA, o tempo de execuo linear e no exponencial como ocorre no posicional, o que nos permite calcular uma taxa de criptografar medido em bytes por segundo. Nossa implementao do RSA (utilizando-se de chaves entre 16 e 24 bits) possui uma taxa de cifrar dados de aproximadamente 13,5 Kbytes/s. O desempenho apresentado no grfico foi obtido utilizando-se de um computador Intel Celeron 466 Mhz com 128 Mbytes de RAM.

8.7.2. Desempenho em Hardware


Como visto anteriormente o tempo gasto para criptografar um bloco de dois caracteres utilizando a implementao em hardware do algoritmo RSA foi de 38.8us (microsegundos). Com isso, pode ser calculadas estimativas do tempo necessrio para criptografar arquivos de 0,5; 1,0 e 1,5 Mbytes. Estas estimativas so mostradas no grfico da figura 8.8.

Figura 8.8 Grfico de desempenho do RSA em hardware 152

Interessante perceber que esse tempo pode ser diminudo, atravs de implementaes mais complexas que levem em considerao tcnicas avanadas como projeto de pipelining e outras que exploram o paralelismo de atividades. Essas otimizaes conseguiriam aumentar a velocidade de processamento do algoritmo em hardware.

8.8. Consideraes Finais do Captulo


O grfico da figura 8.9 mostra que o algoritmo RSA o mais lento de todos os algoritmos apresentados. Isto ocorre pois o RSA um algoritmo assimtrico (possui duas chaves, uma para a criptografia e outra para a decriptografia). Tambm pode-se notar que o algoritmo RSA implementado em software mais lento que o algoritmo RSA implementado em hardware. Os desempenhos formam obtidos com base em um computador Duron 950Mhz e 128Mb de memria.

Figura 8.9 Desempenho dos algoritmo implementados

Assim, possvel verificar que os algoritmos simtricos so mais rpidos para realizar o processo de criptografar informaes do que os algoritmos assimtricos. Pode-se tambm dizer que as implementaes em hardware so muito mais rpidas do as respectivas em software. Isso acontece apesar de usar tecnologias modernas que facilitam o projeto de sistemas digitais mas que no so to rpidas como o caso dos FPGAs. Isto , a tecnologias em hardware que produzem circuitos mais velozes.

153

Para projetar circuitos ainda mais rpidos usam-se tcnicas e tecnologias prprias para ASICs (Application Specific Integrated Circuits), as quais esto disponveis em algumas universidades e centros de pesquisa brasileiros. Recentemente, em 2004, foi criado o CEITEC-Centro de Excelncia em Tecnologia Eletrnica Avanada que est localizado em Porto Alegre, R.S. Brasil, e que visa estimular a criao de circuitos e sistemas digitais para prototipar produtos para o setor eletro-eletrnico brasileiro. Para mais informaes, acessar http://www.sct.rs.gov.br/programas/ceitec.

154

Captulo 9
Algoritmos Baseados em Hashing (MD5, SHA-1)

Este captulo apresenta os conceitos relacionados a algoritmos de hashing, fortemente usados em aplicaes de assinatura digital. O captulo destaca os algoritmos SHA-1 e MD5.

9.1 Definio de MAC Cdigo de Autetincao de Mensagens


Funes de espalhamento so funes que calculam um valor y de comprimento relativamente menor que o comprimento de um texto x. Esse valor y chamado de MAC (Message Authentication Code) ou Message Digest de x. Assim, o MAC define, em portugus, um cdigo de autenticao de uma mensagem (FIPS180-1., 1995). Essas funes so utilizadas para garantir a integridade da mensagem, j que o objetivo dessas funes gerar um valor y diferente para cada mensagem. Com isso, caso a mensagem x for modificada para uma mensagem x quando o destinatrio receber a mensagem x ele ir recalcular y para a mensagem que recebeu (x). Como cada mensagem gera um y diferente ele ir detectar que y para a mensagem que ele recebeu diferente do que ele esperava e, com isso detectar que a mensagem foi alterada. No entanto, existe uma probabilidade de que ao calcular a funo para mensagens diferentes o valor y obtido seja o mesmo. Essa situao chamada de coliso. Portanto, um dos objetivos dos projetistas das funes de espalhamento minimizar a probabilidade de ocorrer colises, alm de cuidar da velocidade de processamento.

9.2 Algoritmo MD5


O algoritmo MD5 foi proposto por Rivest e descrito no RFC1321 em Abril de 1992. Ele foi desenvolvido para executar rapidamente em mquinas de 32 bits e no requer longas tabelas de substituio, o que permite que seja codificado de forma compacta. (PINTO, 2004), (RFC1321, 1992). O MD5 uma extenso do algoritmo MD4, sendo cerca de 30% mais lento (TERADA, 2000), mas garantindo uma maior segurana. O algoritmo MD5 possui
155

probabilidade de coliso a cada 264 aplicaes contra 220 aplicaes do algoritmo MD4 (MENEZES, 1997). No algoritmo MD5 a entrada pode ser de comprimento arbitrrio e o processamento ocorre em blocos de 512 bits e a sada de 128 bits. Inicialmente, deve-se realizar o preenchimento da mensagem, para que ela fique de tamanho congruente a 448 (mod 512), ou seja, ao separar a mensagem em blocos de 512 bits no ltimo bloco restar exatamente 448 bits. O formato do preenchimento a ser acrescentado um bit 1 seguido de bits 0 at que o tamanho seja congruente a 448 (mod 512). Importante ressaltar que mesmo que a mensagem original seja de tamanho 448 (mod 512) necessrio realizar o preenchimento, com isto, no mnimo 1 e no mximo 512 bits sero acrescentados mensagem. Como descrito anteriormente, o algoritmo MD5 processa blocos de 512 bits, com isto necessrio que o tamanho da mensagem seja mltiplo de 512. Como aps o preenchimento o tamanho do ultimo bloco de 448 bits so necessrios 64 bits para completar o bloco. Esses ltimos 64 bits so preenchidos com o tamanho em bits da mensagem original. Caso o tamanho da mensagem no possa ser representado em 64 bits, apenas os bits menos significativos sero considerados. Aps realizar as operaes descritas acima a mensagem est no formato correto para ser processada. Porm antes de iniciar o processamento necessrio inicializar os buffers do MD5. O algoritmo MD5 utiliza quatro buffers de 32 bits cada, aqui chamados de A, B, C e D, para realizar o processamento e o clculo do hash. Os buffers do algoritmo MD5 devem ser inicializados com os valores descritos na tabela 9.1 (os valores esto em hexadecimal). Importante salientar que o algoritmo MD5 foi criado para uma mquina little-endian, desta forma deve-se considerar primeiro os bytes menos significativos.
Tabela 9.1 Valores para preencher os Buffers

A B C D

01 89 FE 76

23 AB DC 54

45 CD BA 32

67 EF 98 10

Para realizar o processamento, o bloco de entrada de 512 bits dividido em 16 partes de 32 bits aqui chamadas de x0, x1,..., x15. Observe que 16 x 32 = 512, que o tamanho do bloco usado no MD5. Inicialmente realizada a cpia dos valores antigos do buffer e ento so realizadas operaes sobre o texto de entrada alterando os valores armazenados no buffer (que est composto por quatro partes A, B, C e D). As operaes realizadas so divididas em quatro passos. Cada passo utiliza uma funo auxiliar diferente e utiliza uma ordem diferente para aplicar as entradas x0, x1,..., x15. A tabela 9.2 sumariza quais so as funes auxiliares utilizadas em cada
156

passo bem como a ordem de aplicao das partes do texto de entrada (RFC1321, 1992).
Tabela 9.2 Sumrio das operaes realizadas no MD5 (RFC1321, 1992).

Passo 1

Funo Auxiliar/Operao
F(X,Y,Z) = XY or not(X) Z [abcd k s i] => a = b + ((a + F(b,c,d) + [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 G(X,Y,Z) = XZ or Y not(Z) [abcd k s i] => a = b + ((a + G(b,c,d) + [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 H(X,Y,Z) = X xor Y xor Z [abcd k s t] => a = b + ((a + H(b,c,d) + [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 I(X,Y,Z) = Y xor (X or not(Z)) [abcd k s t] => a = b + ((a + I(b,c,d) + [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 X[k] + 17 3] 17 7] 17 11] 17 15] X[k] + 14 19] 14 23] 14 27] 14 31] X[k] + 16 35] 16 39] 16 43] 16 47] X[k] + 15 51] 15 55] 15 59] 15 63] T[i]) <<< s) [BCDA 3 22 4] [BCDA 7 22 8] [BCDA 11 22 12] [BCDA 15 22 16] T[i]) <<< s) [BCDA 0 20 20] [BCDA 4 20 24] [BCDA 8 20 28] [BCDA 12 20 32] T[i]) <<< s) [BCDA 14 23 36] [BCDA 10 23 40] [BCDA 6 23 44] [BCDA 2 23 48] T[i]) <<< s) [BCDA 5 21 52] [BCDA 1 21 56] [BCDA 13 21 60] [BCDA 9 21 64]

Importante ressaltar que o algoritmo MD5 utiliza 64 constantes, aqui chamadas de T[1], T[2],...,T[64]. Essas constantes so obtidas atravs do calculo: 232 * abs(sin(i)). Para evitar que a cada bloco seja necessrio realizar tal operao recomendvel, em uma implementao, criar uma tabela onde os valores calculados estejam previamente armazenados e simplesmente utiliz-los. A tabela 9.3 apresenta os valores destas constantes. Aps o calculo de todas as operaes de um determinado bloco necessrio realizar o somatrio dos valores antigos contidos no buffer com os valores atuais antes de realizar o processo no prximo bloco. Aps realizar o processamento de todos os blocos o valor de sada o contedo do buffer do MD5 (A, B, C e D).

Tabela 9.3 Constantes utilizadas pelo MD5

157

1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61

1 0xd76aa478 0xf57c0faf 0x698098d8 0x6b901122 0xf61e2562 0xd62f105d 0x21e1cde6 0xa9e3e905 0xfffa3942 0xa4beea44 0x289b7ec6 0xd9d4d039 0xf4292244 0x655b59c3 0x6fa87e4f 0xf7537e82

2 0xe8c7b756 0x4787c62a 0x8b44f7af 0xfd987193 0xc040b340 0x02441453 0xc33707d6 0xfcefa3f8 0x8771f681 0x4bdecfa9 0xeaa127fa 0xe6db99e5 0x432aff97 0x8f0ccc92 0xfe2ce6e0 0xbd3af235

3 0x242070db 0xa8304613 0xffff5bb1 0xa679438e 0x265e5a51 0xd8a1e681 0xf4d50d87 0x676f02d9 0x6d9d6122 0xf6bb4b60 0xd4ef3085 0x1fa27cf8 0xab9423a7 0xffeff47d 0xa3014314 0x2ad7d2bb

4 0xc1bdceee 0xfd469501 0x895cd7be 0x49b40821 0xe9b6c7aa 0xe7d3fbc8 0x455a14ed 0x8d2a4c8a 0xfde5380c 0xbebfbc70 0x04881d05 0xc4ac5665 0xfc93a039 0x85845dd1 0x4e0811a1 0xeb86d391

9.2.1 Implementao em C
O algoritmo MD5 foi implementado em linguagem C e Java. Nesta seo sero apresentados os principais aspectos e alguns exemplos de cdigo da implementao em C deste algoritmo. A primeira etapa apresentada na descrio do algoritmo MD5 define o processo de padding, ou seja, como preencher a mensagem para que seu tamanho seja mltiplo de 512 bits (que o tamanho do bloco). No entanto, em uma implementao real, verificar o tamanho da mensagem e adicionar o preenchimento antes de comear a calcular o hash no a maneira mais eficiente. Desta forma, inicialmente sero processados os primeiros blocos da mensagem calculando o hash, quando o processamento chegar ao ultimo bloco deve-se chamar uma funo para realizar o padding e calcular o hash deste ultimo bloco. Desta forma, seguindo o exemplo de algumas implementaes existentes, sero definidas trs funes principais: md5start() responsvel por inicializar o algoritmo MD5, definindo os valores iniciais utilizados pelo algoritmo. update(dados,numbytes) acrescenta os dados em um buffer e quando o buffer estiver completo (512 bits) realiza a operao de hash neste bloco. O valor numbytes informa quantos bytes de dados devem ser considerados. doFinal() realiza o padding e calcula o hash do ultimo bloco.

158

Considerando que os valores de A, B, C e D esto armazenados em variveis do tipo inteiro, o tamanho da mensagem em um vetor do tipo inteiro no sinalizado (tamanho[]) e um contador (nc) do tipo inteiro para identificar quantos bytes foram utilizados no buffer que armazena os blocos que sero processados(buff[]); a seguir apresentada a funo necessria para inicializar o MD5.
void md5start(void) { A = 0x67452301; B = 0xefcdab89; C = 0x98badcfe; D = 0x10325476; tamanho[0] = 0; tamanho[1] = 0; nc = 0; }

A funo update() responsvel por realizar o controle do buffer (buff[]) e, quando algum bloco estiver completo (512 bits), chamar a funo que realiza o clculo do hash.
void update(unsigned char * bloco, int n) // { int i; unsigned int nbits = n << 3;

tamanho[0] = tamanho[0] + nbits; if (tamanho[0] < nbits) { tamanho[1]++; } tamanho[1] = tamanho[1] + (n >> 29);

for(i=0;i<n;i++) { buff[nc] = bloco[i]; nc++; if(nc == 64) { md5(); nc = 0; } } }

A funo doFinal() verifica quantos bits necessrio adicionar ao buffer para que ele fique com 448 bits (56 bytes) e utiliza a funo update para adicion-los. Aps esta etapa, necessrio apenas acrescentar o tamanho da mensagem em bits para completar este ultimo bloco e finalizar a operao de hash da mensagem. Ao acrescentar o tamanho da mensagem no buffer atravs da funo update, o buffer passar a ter exatamente 512 bits (64 bytes) e com isto a funo para calcular o hash
159

deste ultimo bloco ser chamada pela funo update() gerando o hash final para a mensagem.
void doFinal(void) { int idebug; int i; unsigned int npad; unsigned int t[2];

unsigned char pad[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

t[0] = tamanho[0]; t[1] = tamanho[1];

npad = 56 - nc; if (npad == 0) npad = 64;

update(pad,npad); update((char *)t,8); }

Como pode-se notar, as funes apresentadas at aqui so funes responsveis pelo controle dos blocos e do processamento da mensagem. Pode-se perceber tambm que a funo que realiza a operao hash a funo md5() que chamada atravs da funo update(). Como apresentado na tabela 9.2, o algoritmo MD5 utiliza quatro funes diferentes chamadas de F, G, H e I, sendo uma em cada passo: F(X,Y,Z) = XY or not(X) Z G(X,Y,Z) = XZ or Y not(Z) H(X,Y,Z) = X xor Y xor Z I(X,Y,Z) = Y xor (X or not(Z))

Estas funes por serem baseadas em operaes lgicas simples podem ser facilmente descritas como macros em C, de forma a obter um bom desempenho.
#define F(x,y,z) ((x&y)|(~x&z)) #define G(x,y,z) ((x&z)|(y&~z)) #define H(x,y,z) (x ^ y ^ z) #define I(x,y,z) (y^(x|~z))

Tambm necessrio descrever as operaes executadas em cada passo, para isto, tambm sero utilizadas macros em C. O uso destas macros facilitam o entendimento e permitem obter um bom desempenho.
160

#define ROL(reg,v) (reg << v) | (reg >> (32 - v)) #define R1(a, b, c, d, k, s, i) a = b + (ROL((a + F(b,c,d) + X[k] + T[i]), s)) #define R2(a, b, c, d, k, s, i) a = b + (ROL((a + G(b,c,d) + X[k] + T[i]), s)) #define R3(a, b, c, d, k, s, i) a = b + (ROL((a + H(b,c,d) + X[k] + T[i]), s)) #define R4(a, b, c, d, k, s, i) a = b + (ROL((a + I(b,c,d) + X[k] + T[i]), s))

A macro ROL apresentada utilizada para realizar uma rotao, ou deslocamento circular esquerda. Importante lembrar que o vetor T[] armazena as constantes utilizadas pelo algoritmo MD5. O vetor X[] que tambm aparece na descrio das macros um vetor utilizado localmente na funo md5() para armazenar os dados do bloco no formato que o MD5 processa, ou seja, o bloco de dados tratado como 16 partes de 32 bits. A seguir apresentada a funo completa para realizar o clculo do hash de um bloco. Esta funo baseada na utilizao das macros descritas anteriormente utilizando os valores descritos na tabela 9.2.
void md5(void) { unsigned int X[16]; unsigned int AA,BB,CC,DD;

convert(X);

AA = A; BB = B; CC = C; DD = D;

R1(A,B,C,D, 0, 7, 1);R1(D,A,B,C, 1,12, 2);R1(C,D,A,B, 2,17, 3);R1(B,C,D,A, 3,22, 4); R1(A,B,C,D, 4, 7, 5);R1(D,A,B,C, 5,12, 6);R1(C,D,A,B, 6,17, 7);R1(B,C,D,A, 7,22, 8); R1(A,B,C,D, 8, 7, 9);R1(D,A,B,C, 9,12,10);R1(C,D,A,B,10,17,11);R1(B,C,D,A,11,22,12); R1(A,B,C,D,12, 7,13);R1(D,A,B,C,13,12,14);R1(C,D,A,B,14,17,15);R1(B,C,D,A,15,22,16); R2(A,B,C,D, 1, 5,17);R2(D,A,B,C, 6, 9,18);R2(C,D,A,B,11,14,19);R2(B,C,D,A, 0,20,20); R2(A,B,C,D, 5, 5,21);R2(D,A,B,C,10, 9,22);R2(C,D,A,B,15,14,23);R2(B,C,D,A, 4,20,24); R2(A,B,C,D, 9, 5,25);R2(D,A,B,C,14, 9,26);R2(C,D,A,B, 3,14,27);R2(B,C,D,A, 8,20,28); R2(A,B,C,D,13, 5,29);R2(D,A,B,C, 2, 9,30);R2(C,D,A,B, 7,14,31);R2(B,C,D,A,12,20,32); R3(A,B,C,D, 5, 4,33);R3(D,A,B,C, 8,11,34);R3(C,D,A,B,11,16,35);R3(B,C,D,A,14,23,36); R3(A,B,C,D, 1, 4,37);R3(D,A,B,C, 4,11,38);R3(C,D,A,B, 7,16,39);R3(B,C,D,A,10,23,40); R3(A,B,C,D,13, 4,41);R3(D,A,B,C, 0,11,42);R3(C,D,A,B, 3,16,43);R3(B,C,D,A, 6,23,44); R3(A,B,C,D, 9, 4,45);R3(D,A,B,C,12,11,46);R3(C,D,A,B,15,16,47);R3(B,C,D,A, 2,23,48); R4(A,B,C,D, 0, 6,49);R4(D,A,B,C, 7,10,50);R4(C,D,A,B,14,15,51);R4(B,C,D,A, 5,21,52); R4(A,B,C,D,12, 6,53);R4(D,A,B,C, 3,10,54);R4(C,D,A,B,10,15,55);R4(B,C,D,A, 1,21,56); R4(A,B,C,D, 8, 6,57);R4(D,A,B,C,15,10,58);R4(C,D,A,B, 6,15,59);R4(B,C,D,A,13,21,60); R4(A,B,C,D, 4, 6,61);R4(D,A,B,C,11,10,62);R4(C,D,A,B, 2,15,63);R4(B,C,D,A, 9,21,64);

A = A + AA; B = B + BB; C = C + CC; D = D + DD;

161

A funo convert(X) utilizada para converter os dados contidos no buffer para o formato utilizado pelo MD5, que de 16 partes de 32 bits. Nesta funo importante considerar que o formato que o MD5 utiliza o formato little-endian.

9.2.2 Desempenho em Software


Com a finalidade de obter o desempenho da implementao do algoritmo MD5 foram realizados testes de desempenho em um computador AMD Duron de 1,2Ghz com 128 Mb de memria RAM utilizando o sistema operacional Windows XP. Considerando implementaes do algoritmo MD5 em linguagem C e em linguagem Java. Inicialmente a figura 9.1 apresenta o desempenho obtido aps a execuo de uma implementao em Java do algoritmo MD5 sobre trs arquivos distintos: (i) (ii) (iii) Imagem em vdeo com extenso MPG e um tamanho de 57,1 Mbytes; Msica Digital com Extenso MP3 e um tamanho de 6,43 Mbytes e; Documento do tipo WORD, com extenso DOC e um tamanho de 346 Kbytes.

Figura 9.1 Desempenho do algoritmo MD5 em Java (PINTO, 2004)

Os tempos apresentados na figura 9.1 esto descritos em milisegundos (ms). Como esperado, quanto maior seja um determinado arquivo, maior ser o tempo de processamento. A figura 9.2 apresenta uma comparao dos tempos em milisegundos utilizados para o processamento do algoritmo MD5 utilizando implementaes em diferentes linguagens (C e Java). Atravs da figura pode-se notar que a implementao em Java significativamente mais lenta que a implementao em C, sendo que em alguns arquivos o tempo gasto pela implementao em C considerado insignificante.

162

Figura 9.2 Comparao das implementaes em C e Java do MD5 9PINTO, 2004)

9.3 Algoritmo SHA-1


O algoritmo SHA-1 foi desenvolvido pelo NIST em 1993 (RFC3174, 1994). A entrada pode ser de comprimento arbitrrio e deve ser completada para que o comprimento se torne mltiplo de 512 bits (como ocorre com o MD5). A sada deste algoritmo de 160 bits sendo que blocos de 512 bits so processados a cada passo (RFC3174, 1994). Este algoritmo possui uma menor probabilidade de coliso quando comparado com o algoritmo MD5, sendo que no algoritmo SHA-1 existe a probabilidade de ocorrer colises aps 280 aplicaes, contra 264 aplicaes do MD5 (MENEZES, 1997). A estrutura do algoritmo SHA-1 parecida com a estrutura do algoritmo MD5. O algoritmo SHA-1, a exemplo do algoritmo MD5, possui um buffer que atualizado a cada operao e que ser o resultado final do hash. Neste caso como a sada de 160 bits o buffer composto por cinco partes de 32 bits aqui chamados de (A, B, C, D e E). O algoritmo SHA-1 utiliza tambm um segundo buffer de cinco partes de 32 bits que aqui sero chamadas de H0, H1, H2, H3 e H4. O buffer do algoritmo SHA-1 deve ser iniciado com os valores contidos na tabela 9.4. (os valores esto em hexadecimal).
Tabela 9.4 Valores para preencher o buffer do SHA-1

H0 H1 H2 H3 H4

67 EF 98 10 C3

45 CD BA 32 D2

23 AB DC 54 E1

01 89 FE 76 F0

163

No inicio de cada passo um bloco de entrada (X) de 512 bits utilizado para criar um vetor W de 80 palavras de 32 bits. Inicialmente, o bloco de entrada X dividido para formar as 16 primeiras palavras do vetor W (W0 a W15). As palavras de W16 at W79 so formadas obedecendo: Wi = (Wi-3 XOR Wi-8 XOR Wi-14 XOR Wi-16) <<< 1; onde a <<< b representa o deslocamento circular de a para esquerda b bits. O algoritmo SHA-1 possui quatro funes e quatro constantes que so utilizadas de acordo com a iterao que estiver sendo processada; desta forma a tabela 9.5 apresenta as funes e constantes utilizadas e indica em quais iteraes devem ser utilizadas.
Tabela 9.5 Funes e Constantes utilizadas pelo SHA-1

Funo f(B,C,D) = (B AND C) OR ((NOT B) AND D) f(B,C,D) = B XOR C XOR D f(B,C,D) = (B AND C) OR (B AND D) OR (C AND D) f(B,C,D) = B XOR C XOR D

Constante Iteraes 5A827999 0 a 19 6ED9EBA1 20 a 39 8F1BBCDC 40 a 59 CA62C1D6 60 a 79

Antes de executar as iteraes necessrias para o processamento de um bloco com o algoritmo SHA-1, realizada uma cpia dos valores contidos no buffer H0, H1, H2, H3 e H4 para o buffer A, B, C, D e E. O processamento de um bloco com o algoritmo SHA-1 consiste de 80 iteraes (de i=0 at i=79) onde so processadas as seguintes operaes:
TEMP = (A<<<5) + fi(B,C,D) + E + Wi + Ki; E = D; D = C; C = (B<<<30); B = A; A = TEMP;

Aps a execuo do lao principal realizado o somatrio dos dois buffers como segue:
H0 = H0 + A; H1 = H1 + B; H2 = H2 + C; H3 = H3 + D; H4 = H4 + E

Aps processar todos os blocos da mensagem o valor do hash estar armazenado no buffer H0, H1, H2, H3 e H4.

9.3.1 Implementao em C
Assim como o algoritmo MD5, o algoritmo SHA-1 foi implementado nas linguagens C e Java. Nesta seo sero destacados os principais aspectos relativos a implementao do algoritmo SHA-1 em C. O algoritmo SHA-1, assim como o MD5, trabalha com blocos de 512 bits. Desta forma, tambm necessrio realizar o preenchimento quando o tamanho da mensagem no for multiplo de 512 bits. A estrutura do preenchimento utilizada pelo SHA-1 praticamente a mesma que a utilizada pelo algoritmo MD5, no entanto, ao contrrio do MD5, o algoritmo SHA-1 utiliza o formato big-endian (o bit mais significativo armazenado no endereo de memria mais baixo). Com isto, deve-se observar que o tamanho em bits da mensagem, que acrescentado no final do ltimo bloco, esteja no formato big-endian.
164

Isto faz com que as funes utilizadas para controlar o processamento da mensagem e acrescentar o preenchimento sejam praticamente as mesmas, com algumas pequenas alteraes. Seguindo o exemplo do algoritmo MD5, so descritas trs funes: sha1start() responsvel por inicializar o algoritmo SHA-1, definindo os valores iniciais utilizados pelo algoritmo. update(dados,numbytes) acrescenta os dados em um buffer e quando o buffer estiver completo (512 bits) realiza a operao de hash neste bloco. O valor numbytes informa quantos bytes de dados devem ser considerados. doFinal() realiza o padding e calcula o hash do ltimo bloco.

Como descrito anteriormente, o algoritmo SHA-1 utiliza um buffer H0, H1, H2, H3 e H4 que deve ser iniciado com os valores contidos na tabela 9.4. Com isto, a seguir apresentada a funo sha1start() que realiza esta operao.
void sha1start(void) { H0 = 0x67452301; H1 = 0xEFCDAB89; H2 = 0x98BADCFE; H3 = 0x10325476; H4 = 0xC3D2E1F0; tamanho[0] = 0; tamanho[1] = 0; nc = 0; }

As funes update() e doFinal() so praticamente as mesas utilizadas pelo algoritmo MD5 com algumas pequenas alteraes. Na funo update(), onde existe a chamada para o algoritmo MD5 deve ser substituida por uma chamada ao algoritmo SHA-1. A alterao na funo doFinal() est relacionada com o tratamento do formato com que o tamanho da mensagem em bits acrescentado no final do bloco; esta alterao uma alterao do vetor tamanho[] para o formato big-endian. O algoritmo SHA-1 utiliza quatro funes e quatro constantes que so definidas a seguir.
#define f0(B,C,D) ((B&C)|((~B)&D)) #define f1(B,C,D) (B^C^D) #define f2(B,C,D) ((B&C)|(B&D)|(C&D)) #define f3(B,C,D) (B^C^D) #define K0 0x5A827999 #define K1 0x6ED9EBA1 #define K2 0x8F1BBCDC #define K3 0xCA62C1D6

Outra funo importante utilizada pelo algoritmo SHA-1 um deslocamento circular para a esquerda em n bits. A funo definida a seguir.
#define S(reg,n) (reg << n) | (reg >> (32 - n))

165

A funo principal do algoritmo SHA-1 para o clculo do hash de um bloco apresentada a seguir.
void sha1(void) { int i; convert(W); for(i=16;i<80;i++) W[i]= S((W[i-3]^W[i-8]^W[i-14]^W[i-16]),1);

A=H0; B=H1; C=H2; D=H3; E=H4; for (i=0;i<20;i++) { TEMP = (unsigned int)(S(A,5))+f0(B,C,D)+E+W[i]+K0; E=D;D=C;C=S(B,30);B=A;A=TEMP; } for (i=20;i<40;i++) { TEMP = (unsigned int)(S(A,5))+f1(B,C,D)+E+W[i]+K1; E=D;D=C;C=S(B,30);B=A;A=TEMP; } for (i=40;i<60;i++) { TEMP = (unsigned int)(S(A,5))+f2(B,C,D)+E+W[i]+K2; E=D;D=C;C=S(B,30);B=A;A=TEMP; } for (i=60;i<80;i++) { TEMP = (unsigned int)(S(A,5))+f3(B,C,D)+E+W[i]+K3; E=D;D=C;C=S(B,30);B=A;A=TEMP; } H0+=A;H1+=B;H2+=C;H3+=D;H4+=E; }

Importante destacar que a funo convert(W) que utilizada para converter os dados contidos no buffer para o formato utilizado pelo SHA-1, que de 16 partes de 32 bits deve considerar os dados no formato big-endian.

9.3.2 Desempenho em Software


De forma similar ao MD5, o algoritmo SHA-1 foi implementado usando-se da linguagem C e Java.. De maneira similar ao algoritmo MD5, foram realizadas implementaes em C e em Java do algoritmo SHA-1. Os resultados so apresentados a seguir. Os testes apresentados consideram os mesmos arquivos utilizados nos testes com o MD5, sumarizando, estes arquivos so: Vdeo.MPG de 57,1 Mbytes; Msica.MP3 de 6,43 Mbytes; e Documento.DOC de 346 Kbytes.

166

Para realizar os testes com o algoritmo SHA-1 foi utilizado o mesmo computador em que o algoritmo MD5 foi testado (AMD Duron 1,2Ghz, 128 Mbytes de memria RAM utilizando Windows XP). Desta forma a figura 9.3 apresenta os dados referentes ao desempenho do algoritmo SHA-1 considerando as duas linguagens (C e Java). Atravs desta figura pode-se perceber mais uma vez que a implementao em Java significativamente mais lenta que a implementao em C. Importante ressaltar mais uma vez que determinados arquivos processados pela implementao em C gastam tempo considerado insignificante. Os tempos apresentados na figura 9.3 esto em milisegundos (ms).

Figura 9.3 Comparao das implementaes em C e Java no SHA-1 (PINTO, 2004)

Finalmente, a figura 9.4 apresenta uma comparao entre o desempenho dos algoritmos MD5 e SHA-1. Para realizar o teste foi considerado o maior arquivo do conjunto de testes (video.mpg com 51,7Mbytes) e a implementao em linguagem C utilizando sempre o mesmo computador. Pode-se perceber que o algoritmo MD5 significativamente mais rpido que o algoritmo SHA-1. Isto acontece por duas razes: (i) (ii) o algoritmo SHA-1 foi desenvolvido de forma a evitar a probabilidade de coliso, sendo desta forma mais seguro que o algoritmo MD5 e, O MD5 produz uma sada de 128 bits enquanto que no SHA-1 de 160 bits, o que gera um tempo maior de processamento.

Desta forma, pode-se dizer que o algoritmo SHA-1 possui um desempenho inferior em termos de processamento, mas prov uma maior segurana.

167

Figura 9.4 Comparao de desempenho: MD5 x SHA-1 (PINTO, 2004)

168

Parte III
Algoritmos Modernos de Criptografia

Nos captulos 10 a 12, parte III do livro, trs algoritmos modernos (AES, RC5/RC6 e Blowfish) so explicados do ponto de vista de implementao e desempenho, de forma similar ao explicado anteriormente na parte II do livro.

169

Captulo 10
Algoritmo AES (Rindjael)

Este captulo apresenta um breve histrico do projeto AES, e enfatiza nos detalhes de funcionamento, implementao e desempenho daquele que foi considerado o ganhador do concurso no ano 2000, o algoritmo Rindjael, conhecido comoAES.

10.1 Um Breve Histrico do Projeto AES


Com a evoluo das mquinas uma chave de 56 bits, como a usada pelo algoritmo DES, no poderia mais garantir a segurana desejada por muito tempo. Em 1997 iniciou-se o processo de escolha do sucessor do DES, o Advanced Encryption Standard (AES). O NIST especificou que os candidatos deveriam operar com tamanho de chave e bloco varivel com tamanho mnimo de 128 bits. O NIST colocou como requisitos fundamentais: Segurana Forte: O algoritmo projetado devia suportar os ataques futuros; Projeto Simples: Facilitando a anlise e certificao matemtica da segurana oferecida pelo algoritmo; Desempenho: Razoavelmente bom em uma variedade de plataformas, variando de smartcards a servidores; No serem patenteados: Os algoritmos deviam ser de domnio pblico e deviam estar disponveis mundialmente.

No primeiro congresso, chamado tambm de rodada, o NIST recebeu vinte e uma submisses, das quais quinze atendiam s exigncias. Estes algoritmos foram testados e avaliados pela comunidade cientfica e empresas ligadas ao ramo de segurana durante o intervalo de tempo at a segunda rodada. Para o segundo congresso foram escolhidos apenas cinco algoritmos (AESWINNER, 2003): MARS, RC6, Rijndael, Serpent e TwoFish. Esses algoritmos satisfaziam as principais condies, entre outras, de: cifrar e decifrar blocos de 128 bits; trabalhar com chaves de 128/192/256 bits; ser mais rpido que o 3DES.

170

Como todos os requisitos bsicos foram supridos pelos concorrentes, a deciso foi tomada com base em certas caractersticas, tais como: segurana, eficincia em hardware e software, flexibilidade de implementao e modos de operao. O algoritmo vencedor foi o Rijndael (AESWINNER, 2003), sendo a deciso informada oficialmente no dia 2 de outubro de 2000. Desse momento em diante o cifrador Rijndael passou a ser chamado de AES. A escolha do cifrador Rijndael contra os outros quatro finalistas do processo, os quais tambm foram classificados como altamente seguros pelo NIST, foi baseada na eficincia e baixa requisio de recursos. Os demais cifradores finalistas do concurso para AES podem ser utilizados em produtos especficos (MIERS, 2002).

10.2 Funcionamento do AES/Rindjael


Vrias operaes do AES so definidas em nvel de byte, com um byte representando um elemento no corpo finito GF(28), que em termos matemticos define um campo de Galois ou melhor conhecido como Galois Field (GF). Outras operaes so definidas com palavras de 4 bytes. Como AES trabalha sobre corpos finitos GF(28) pode-se definir uma operao binria em um conjunto, como um mapeamento de matrizes SxS para S. Isto , uma regra pela qual associa-se cada par ordenado de elementos de S com um elemento de S. Para mais informaes sobre corpos finitos consultar em (LIDL, 1994).

10.2.1 Corpo GF(28)


Os elementos de um corpo finito podem ser representados de vrias maneiras diferentes. Para cada potncia prima existe um corpo finito simples, de modo que todas as representaes so isomrficas. Apesar desta equivalncia, a representao possui considervel impacto na complexidade de implementao. A equipe de desenvolvimento do AES optou por uma representao clssica de polinmios. Neste tipo de notao um byte b consiste dos bits: b7, b6, b5, b4, b3, b2, b1, b0. considerados como um polinmio com coeficiente em {0,1}. Isso significa que sua interpretao como polinmio deve ser feita como: b7x7, b6x6, b5x5, b4x4, b3x3, b2x2, b1x1, b0.
10.2.1.1 Operao de Adio

Na representao polinomial, a soma de dois elementos o polinmio com os coeficientes resultantes da operao de soma mdulo 2 dos coeficientes dos dois termos. Exemplo: Soma dos bytes 01010111 e 10000011. 01010111 = x6 + x4 + x2 + x1 + 1 10000011 = x7 + x + 1
171

(x6 + x4 + x2 + x1 + 1) + (x7 + x + 1) = x7 + x6 + x4 + x2

Atravs da notao hexadecimal 57h + 83h = D4h no consegue-se verificar nenhum procedimento simplificado para a operao. Porm analisando a operao em notao binria: 01010111

10000011 11010100

Percebe-se que a soma corresponde operao XOR em nvel de bits.


10.2.1.2 Operao de Multiplicao

Na representao polinomial, a multiplicao em GF(28) corresponde a multiplicao modular de polinmios com um polinmio binrio irredutvel de grau 8. Um polinmio irredutvel caso no tenha nenhum divisor diferente de 1 e ele prprio. Para o AES, este polinmio chamado de m(x) e dado por: m(x)= x8 + x4 + x3 + x + 1 ou 11Bh =100011011 Exemplo: Multiplicao de 57h por 83h. (x6 + x4 + x2 + x1 + 1)( x7 + x + 1) = x13 + x11 + x9 + x8 + x7 + x7 + x5 + x3 + x2 + 1 + x6 + x4 + x2 + x1 + 1 = x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1

Agora:
x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1 mdulo x8 + x4 + x3 + x + 1 igual a: x7 + x6 + 1

Assim, a multiplicao de 57h por 83h igual C1h Devido operao mdulo com o polinmio irredutvel m(x), o resultado sempre ser um polinmio binrio de grau inferior a 8. Diferente da operao de adio, no existe uma operao simples em nvel de bits. A multiplicao definida anteriormente associativa e possui um elemento neutro (01h). Para qualquer polinmio binrio b(x) de grau inferior a 8 esta operao de multiplicao pode ser feita atravs do algoritmo estendido de euclides para calcular:
172

b(x)a(x) + m(x)c(x)=1 b(x) mod m(x) = 1 ou b-1(x) = a(x) mod m(x).

Conseqentemente, a(x)

Aplicando-se a propriedade distributiva tem-se a(x) (b(x) + c(x)) = a(x) b(x) + a(x) c(x).

Desta forma, tem-se um conjunto de 256 valores de bytes, utilizando XOR como adio e a multiplicao sendo definida como uma estrutura sobre um corpo finito GF(28) (FIPS197, 2001). As operaes de multiplicao e similares (como a inversa) tambm podem ser realizadas atravs da utilizao de uma tabela de logaritmos, ver tabela 10.1.
Tabela 10.1 Tabela de logaritmos para multiplicao (FIPS197, 2001)

Exemplo. Multiplicao de 57h por 83h utilizando a tabela de logaritmos. A partir dos valores originais em hexadecimal procura-se o valor do coeficiente de g na tabela 10.1, sendo que a ordem de busca linha e depois coluna. Sendo o primeiro valor 57h, o valor do coeficiente de g estar na linha 5, coluna 7 e corresponde a 14. Para o valor 83h o valor do coeficiente g estar na linha 8, coluna 3 e corresponde a 230. Utilizando a tabela 10.1 obtm-se: 57h = g14 e 83h = g230 portanto, 57h + 83h = g14 + g230 = g244 = C1 Sendo os multiplicadores de mesma base (g), o resultado da operao a mesma base e o coeficiente final consiste da soma dos coeficientes. Contudo o valor que se obtm no final da operao o coeficiente de g resultante da multiplicao. Para transformar este coeficiente em um valor hexadecimal deve-se fazer uma busca nos elementos da tabela 10.1. A linha e coluna correspondentes ao valor do coeficiente so o valor em hexadecimal do resultado da operao.
173

10.2.2 Estrutura do Algoritmo AES


O AES um cifrador de bloco com tamanho de bloco e chave variveis entre 128, 192 e 256 bits. Isto significa que se pode ter tamanho de blocos com tamanhos de chaves diferentes. Em funo do tamanho de bloco e chaves determinada a quantidade de rodadas necessrias para cifrar/decifrar. O AES opera desta forma com um determinado nmero de blocos de 32 bits, os quais so ordenados em colunas de 4 bytes, as quais so chamadas de Nb. Os valores de Nb possveis so de 4, 6 e 8 equivalentes a blocos de 128, 192 e 256 bits. Assim sempre que for referido Nb, significa que tem-se Nb x 32 bits de tamanho de bloco de dados. A chave agrupada da mesma forma que o bloco de dados, isto , em colunas, sendo representado pela sigla Nk. Com base nos valores que Nb e Nk podem assumir que se determina a quantidade de rodadas a serem executadas, identificada pela sigla Nr. Atravs dos dados contidos na tabela 10.2 pode-se verificar as possveis combinaes e o nmero de rodadas necessrias na execuo do algoritmo AES.
Tabela 10.2 Nr em funo do tamanho de bloco e chave no AES

Nb= 4 Nk=4 10 Nk=6 12 Nk=8 14

Nr

Nb=6 Nb=8 12 12 14 14 14 14

O processo de cifrar e decifrar no AES no so funes idnticas, como ocorre na maioria dos cifradores. A seguir apresentam-se as operaes utilizadas nas iteraes do AES.

10.2.3 Operaes por Iterao


As operaes a qual cada bloco (estado) sujeitado durante o processo para cifrar em cada iterao so: SubByte: os bytes de cada bloco so substitudos por seus equivalentes em uma tabela de substituio (S-BOX). ShiftRow (Deslocamento de Linha): Nesta etapa os bytes so rotacionados em grupos de quatro bytes. MixColumn: Cada grupo de quatro bytes sujeitado a uma multiplicao modular. Isto proporciona a cada byte do grupo a influenciar em todos os outros bytes.
174

AddRoundKey (Adio da Chave de Rodada): nesta fase o bloco de dados alterado atravs da subchave da rodada, a qual possui o mesmo tamanho do bloco, que realiza uma operao XOR com o bloco inteiro.

A seguir uma explicao mais detalhada de cada uma dessas quatro opoeraes.
10.2.3.1 Transformao SubByte

A transformao SubBytes modifica cada byte atravs do uso de uma S-BOX. A SBOX pode ser criada em tempo de execuo visto que esta construda atravs de uma operao matemtica. A S-BOX construda atravs da composio de duas transformaes: 1. Realizando a inversa multiplicativa em GF(28), com a representao definida por um polinmio com coeficientes em {0,1}, sendo que o elemento 00h mapeado em si mesmo. 2. Aplicando-se uma operao similar de transformao definida por: b0 b1 b2 b3 b4 b5 b6 b7 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 b0 b1 b2 b3 b4 b5 b6 b7 1 1 0 0 0 1 1 0

A aplicao desta operao para cada byte do estado consiste na operao denotada por SubByte. Para realizar o processo de decifrar necessrio fazer a operao atravs da matriz inversa, que obtida atravs da inversa multiplicativa da mesma sobre o corpo GF(28). Atravs da figura 10.1 pode ser visualizada a forma de atuao da operao SubByte sobre o estado. Do lado esquerdo, um estado com Nb = 4, isto um bloco de dados de 128 bits. Cada elemento do estado S mapeado atravs da S-BOX em um novo elemento no estado novo S, ocupando exatamente a mesma posio em S.

175

Figura 10.1 Transformao SubByte (FIPS197, 2001)

A transformao tambm pode ser implementada de uma forma eficiente atravs de uma S-BOX de dimenso 16x16 armazenada em memria. A Tabela 10.3 demonstra esta S-BOX em notao hexadecimal, onde a transformao da S-BOX inversa feita atravs do emprego da mesma S-BOX.
Tabela 10.3 Caixa de Substituio (S-BOX ) em Hexadecimal

10.2.3.2 Transformao ShiftRow

Nesta transformao, as linhas da matriz que representam o estado so rotacionadas de acordo com uma tabela de rotacionamento. A primeira linha do estado no sofre nenhum rotacionamento, sendo que as demais linhas sofrem um rotacionamento cclico esquerda. A quantidade de elementos que sofrem o rotacionamento dada na tabela 10.4.

176

Tabela 10.4 Deslocamento em funo do tamanho de bloco

. Nb 4 6 8 C1 1 1 1 C2 2 2 3 C3 3 3 4

O emprego de rotacionamento cclico tem por finalidade aumentar a difuso sobre os elementos do estado. Importante notar que de modo diferente ao que ocorre com os outros cifradores da atualidade onde o rotacionamento feito em nvel de bits, no AES o rotacionamento realizado em nvel de bytes.

Figura 10.2 Operao de ShiftRow (FIPS197, 2001)

A motivao para esta operao ser feita em nvel de bytes est relacionada ao fato de que o estado j sofreu uma alterao em nvel de bits no processo de adio de chaves no incio do processo de cifrar. Na figura 10.2 pode-se visualizar mais claramente a ao da transformao ShiftRow.
10.2.3.3 Transformao MixColumn

Na transformao MixColumn, as colunas do estado so consideradas como polinmios sobre GF(28), sendo feita uma multiplicao mdulo x4 + 1 com um polinmio fixo a(x), dado por: a(x) = {03}x3 + {01}x2 + {01} x + {02} A transformao pode ser escrita atravs de uma matriz de multiplicao como:
177

S(x) = a(x) S(x) S0,x S1,x S2,x S3,x = 02 01 01 03 03 02 01 01 01 03 02 01 01 01 03 02 S0,x S1,x S2,x S3,x

Em conseqncia desta multiplicao, os quatro bytes de cada coluna so substitudos pelo seguinte: S0,x = ({02} * S0,x ) ({03} * S1,x) S2,x S3,x S1,x = S0,x ({02} * S1,x) ({03} * S2,x) S3,x S2,x = S0,x S1,x ({02} * S2,x) ({03} * S3,x) S2,x = ({03} * S0,x) S1,x S2,x ({02} * S3,x)
Na ilustrao 10.3 mostra-se a operao de Mixcolumn.

Figura 10.3 Operao de MixColumn (FIPS197, 2001) 10.2.3.4 Tranformao AddRoundKey

A transformao realizada na adio de chaves uma operao XOR byte a byte do estado com a subchave da rodada. O tamanho da chave de rodada igual ao tamanho do bloco Nb. Na figura 10.4 tem-se uma ilustrao da matriz que representa o estado sobre a qual a operao XOR com a matriz da chave de rodada produz o resultado que ser o prximo estado do cifrador (FIPS197, 2001).

178

Figura 10.4 Transformao AddRoundKey (FIPS197, 2001)

10.2.4. Gerao de Subchaves


O algoritmo de gerao de chaves cria a partir da chave principal do AES uma quantidade de subchaves igual quantidade de rodadas mais um, sendo que cada subchave possui o mesmo tamanho da chave principal. O resultado produzido pelo processo de gerao de chaves consiste em um vetor unidimensional com palavras (w) de 4 bytes (ou seja 32bits), sendo que a cada rodada utilizada como subchave a quantidade de quatro palavras seqencialmente (no caso de Nk=4 e Nb=4), caminhando progressivamente sobre os elementos do vetor. O processo de gerao de subchaves tambm conhecido como expanso de chave. Atravs da figura 10.5 pode-se visualizar o vetor que contm as chaves, na figura cada byte nomeado wi de onde i a posio do byte dentro do vetor.

Figura 10.5 Vetor de chaves para Nk=4

179

Deve-se considerar que antes de realizar a expanso, as Nk palavras so preenchidas com a chave original do cifrador. O processo de expanso de uma chave no cifrador AES definido pelo algoritmo mostrado nesta seo. Para compreender corretamente o seu funcionamento e significado torna-se necessrio compreender algumas funes utilizadas durante o processo de expanso de chaves: A constante cons(i) contm um valor resultante de (xi-1,00h,00h,00h) com xi-1 sendo uma potncia de x (x definido por 02h) no corpo GF(28); A operao rotao() faz um rotacionamento cclico esquerda de uma posio nos quatro bytes de s; A operao SubWord aplica a S-BOX do AES em cada um dos 4 bytes da palavra.

O algoritmo para expanso de chave para Nk=4 e Nk=6 representado em pseudocdigo :


KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk) Begin word temp i = 0

while (i < Nk) w[i] = word(key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]) i = i+1 end while

i = Nk

while (i < Nb * (Nr+1)] temp = w[i-1] if (i mod Nk = 0) temp = SubWord(RotWord(temp)) xor Rcon[i/Nk] else if (Nk > 6 and i mod Nk = 4) temp = SubWord(temp) end if w[i] = w[i-Nk] xor temp i = i + 1 end while end

10.3 Algoritmo de Cifragem do AES


O processo de cifrar do AES envolve uma aplicao seqencial de funes explicadas anteriormente. Na figura 10.6 pode-se analisar a estrutura do processo de cifragem do AES.

180

Figura 10.6 Algoritmo de cifragem do AES

Ao analisar essa viso macro do AES pode-se perceber os indicadores Nb, Nk e Nr que possuem seus valores de acordo com o tamanho de bloco e chave a serem utilizados. Observa-se que a ltima iterao diferente das demais.

10.4 Algoritmo de Decifragem do AES


181

O processo de decifrar no AES consiste na execuo de diferentes operaes, devido a sua essncia matemtica. Ao contrrio do DES que tem sua estrutura baseada em Feistel (FIPS46-3, 1999), que possui a caracterstica de ser reversvel apenas invertendo-se a seqncia das chaves para decifrar, o AES necessita de inversas matemticas de suas transformaes para realizar o processo de decifrar. Observando o AES em uma viso macro, o algoritmo poderia ser considerado como uma seqncia de transformaes matemticas e o seu processo reverso consiste na aplicao da seqncia inversa a da original. O processo de expanso de chaves continua sendo o mesmo, descrito anteriormente, porm as funes de SubByte, ShiftRow e MixColumn necessitam ser as suas inversas matemticas para realizar o processo de decifrar. Analisando o fluxo mostrado na figura 10.7 pode-se perceber as diferenas em nvel de funo do processo utilizado para cifrar.

Figura 10.7 Algoritmo de decifragem do AES

A operao inversa da ShiftRow realizada fazendo-se um rotacionamento cclico direita na mesma quantidade de bytes da operao de cifrar. A operao inversa mais complexa a MixColumn. Do mesmo modo que o processo de cifrar, na
182

transformao InvMixColumn as colunas dos estados so considerados como polinmios sobre um corpo GF(28) e sofrem uma multiplicao mdulo x4-1 com um polinmio fixo a-1(x), dado por:

a-1(x) = 0Bx3 + 0Dx2 + 09x + 0E


Da mesma forma que a operao MixColumn utilizada para cifrar, esta operao pode ser escrita como uma multiplicao de matrizes S(x) = a-1(x) xor S(x): S0,x S1,x S2,x S3,x = 0E 09 0B 0D 09 0E 0B 0D 0E 0B 0E S0,x S1,x S2,x S3,x

0D 09

0B 0D 09

Como resultado da multiplicao, os 4 bytes da coluna so substitudos por: S0,x = ({0E} * S0,x ) ({0B} * S1,x) ({0D} * S2,x) ({09} * S3,x) S1,x = ({09} * S0,x ) ({0E} * S1,x) ({0B} * S2,x) ({0D} * S3,x) S2,x = ({0D} * S0,x ) ({09} * S1,x) ({0E} * S2,x) ({0B} * S3,x) S2,x = ({0B} * S0,x ) ({0D} * S1,x) ({09} * S2,x) ({0E} * S3,x)

A operao inversa da adio de chave de rodada a mesma operao utilizada para o processo de cifrar. A operao inversa de SubByte consiste no uso da inversa matemtica da Caixa-S utilizada para cifrar. A Caixa-S invertida pode ser analisada usando a tabela 10.5. Como pode ser observado, a seqncia de operaes para cifrar e decifrar so diferentes, apesar do processo de expanso de chaves continuar sendo o mesmo para os dois processos. Porm atravs de algumas propriedades algbricas e matemticas no algoritmo do AES pode-se obter o que se chama de Cifrador Equivalente Inverso. Em outras palavras, que utilize a mesma seqncia de operaes utilizadas para cifrar (com as transformaes substitudas pelas suas inversas). Contudo isso necessita que o processo de expanso de chaves seja alterado.

Tabela 10.5 S-BOX invertida

183

As duas propriedades que possibilitam isso, so: A ordem das transformaes SubByte e ShiftRow podem ser alteradas sem que com isso o resultado seja alterado. Isso ocorre devido ao fato dessas duas operaes alterarem apenas a posio do byte dentro do estado, no fazendo nenhuma alterao em nvel de bit. Sendo que o mesmo acontece com as inversas dessas duas operaes. As transformaes MixColumn e InvMixColumn so lineares relativas coluna de entrada, o que significa: InvMixcolumn(estado XOR ChaveRodada) = InvMixColumn(estado) XOR InvMixColumn(ChaveRodada) Essas propriedades permitem que a ordem de InvSubytes e InvShiftRow sejam invertidas. As transformaes de AddRoundKey e InvMixColumn tambm podem ser invertidas, prevendo-se que as colunas no processo de expanso de chave sejam alteradas por uma transformao InvMixColumn. Sendo que essa operao no deve ser realizada nas primeiras e ltimas palavras Nb no processo de expanso de chave, visto que essas duas subchaves so utilizadas em rodadas que no possuem a transformao InvMixColumn. Como resultado dessas operaes obtm-se o Cifrador Equivalente Inverso, que possui uma estrutura mais similar estrutura original do cifrador do que o algoritmo decifrador proposto anteriormente. Assim, o algoritmo para decifrar utilizando o Cifrador Equivalente Inverso do AES pode ser especificado em pseudocdigo da seguinte forma:
EqInvCipher(byte in[4*Nb], byte out[4*Nb], word dw[Nb*(Nr+1)]) begin byte state[4,Nb] state = in

AddRoundKey(state, dw[Nr*Nb, (Nr+1)*Nb-1])

184

for round = Nr-1 step -1 downto 1 InvSubBytes(state) InvShiftRows(state) InvMixColumns(state) AddRoundKey(state, dw[round*Nb, (round+1)*Nb-1]) end for

InvSubBytes(state) InvShiftRows(state) AddRoundKey(state, dw[0, Nb-1]) out = state end

Observando o pseudocdigo nota-se que a palavra dw contm as subchaves de cada iterao. A rotina modificada para expanso de chave consiste na adio do algoritmo abaixo no final do algoritmo padro de expanso de chave do AES (RIJNDAEL, 1999).
for i = 0 step 1 to (Nr+1)*Nb-1 dw[i] = w[i] end for

for round = 1 step 1 to Nr-1 InvMixColumns(dw[round*Nb, (round+1)*Nb-1]) end for

10.5 Estatsticas de Desempenho das Implementaes


Assim como o DES, o AES pode ser implementado em software e hardware. O AES um algoritmo mais robusto quando comparado ao DES. Os processos de cifragem e decifragem so diferentes no AES, assim necessria a implementao de funes de cifragem e decifragem separadamente. Esta caracterstica, na implementao em hardware, leva a um aumento considervel do circuito implementado consumindo mais componentes e podendo aumentar o tempo de propagao do circuito. Na implementao em software aumenta a memria necessria para armazenar o algoritmo e isso pode trazer dificuldades em sistemas onde a memria limitada como, por exemplo, PALM, PDA, celulares e etc. Na proposta inicial do AES havia uma regra explcita solicitando que o algoritmo fosse robusto mas que tivesse um bom desempenho em hardware e software. Nesta seo apresentam-se as estatsticas de desempenho obtidas nas implementaes dos autores (ver detalhes no link: www.novateceditora.com.br/downloads.php na pgina associada ao livro de criptografia), as quais permitem comprovar que o AES mesmo sendo um algoritmo complexo atinge um bom desempenho em ambos ambientes de implementao.

185

Na tabela 10.6 mostra-se o desempenho temporal da implementao em C do algoritmo AES de 128 bits. Da mesma forma como observado no DES, a diferena de desempenho do algoritmo em disco e em memria significativo, acima de 20 %.
Tabela 10.6 Temporizao do Algoritmo AES em C

1MB 5MB 10MB

DISCO 1,10 s 4,98 s 10,21s

MEMRIA 0,88 s 3,35 s 5,77 s

% 20,00% 32,73% 43,48%

O desempenho do algoritmo implementado em C no continuo, isto , conforme aumenta o tamanho do arquivo, a taxa de velocidade (medida em Mbytes/s) de texto cifrado no aumenta proporcionalmente. Uma das justificativas quantidade de memria disponvel para a execuo da aplicao. Quanto mais memria disponvel menos swaps (trocas) entre disco e memria sero realizados, assim a maior parte do arquivo ficar residente na memria em um determinado instante de tempo. Quanto maior o arquivo e menor a rea de memria disponvel mais trocas sero necessrias, prejudicando o desempenho do processo de cifragem. Assim, pode-se afirmar que a memria que contm a plataforma onde os programas so executados um fator decisivo para o desempenho de qualquer algoritmo de criptografia. Por esse motivo, pensar em criptografia em novos equipamentos como PDAs, PALM e celulares no to simples quanto parece, e pode sofrer prejuzos no desempenho final. Na verdade todo ambiente de execuo da aplicao influencia no desempenho, mas a memria destaca-se por participar de forma significativa. Na figura 10.8 mostra-se o desempenho ideal (no influenciado pelo ambiente) e o desempenho real em MB/s, obtido nas execues de nossa implementao.

Figura 10.8 Desempenho do AES em C 186

Esta diferena no desempenho pode aumentar ou diminuir conforme o ambiente de execuo. O desempenho mostrado na figura 10.8, do AES executando em uma mquina com 128 Mbytes de memria RAM. O mesmo programa foi executado na mesma mquina s que foram adicionados 384 Mbytes de memria, num total de 512 MBytes. Foi observado um aumento de performance de aproximadamente 20%. Aumentando ainda mais o Gap mostrado na figura 10.8. Nas execues realizadas do AES, sempre o ambiente favoreceu a aplicao, ou seja, a influncia do ambiente melhorou a performance da aplicao. Mas comum acontecer do ambiente ser o principal fator da m performance de um algoritmo de criptografia. Como pode-se perceber nas anlises realizadas anteriormente, a falta de recursos fsicos pode tornar a prtica da criptografia invivel. As estatsticas de desempenho da nossa implementao do AES em hardware (FPGA) podem ser visualizadas na tabela 10.7. Os valores representados nesta tabela comprovam a robustez do AES. J que este consome 1.918 CLBs e 530 Flip-Flops. importante salientar que tanto a implementao em C quanto a implementao em VHDL foram descritas e testadas validando seu funcionamento.
Tabela 10.7 Desempenho do Algoritmo AES em VHDL

Tempo de Propagao Freqncia Mxima 28,789ns 34,73Mhz Taxa de Ocupao do FPGA


CLBs N de componentes utilizados N de componentes disponveis Porcentagem de ocupao FLIP-FLOPs LUTs

1.918 9.408 20,38%

530 18.816 2,8%

3.640 18.816 19,34 %

Em relao temporizao em hardware, o algoritmo AES obteve um tempo de propagao de 28,789 ns, com esta taxa possvel cifrar at 55,575 Mb/s, desta forma, o AES quando comparado ao DES (ver tabela 6.14 do capitulo 6) 32% mais lento. Mas quando se observa o nmero de Megabytes cifrados, o AES supera o DES em mais que o dobro. Enquanto o DES cifra aproximadamente 25 MBytes/seg o AES chega a cifrar 55 MBytes/seg. O FPGA utilizado em nossa implementao da famlia Virtex, especificamente o chip XCV812EFG900 (XILINX, 2004). Interessante perceber que o AES tem um menor desempenho temporal como mostram as estatsticas de desempenho. Parece confuso, mas a resposta simples. interessante perceber que o desempenho temporal no a nica mtrica para calcular o desempenho de um algoritmo. O prprio algoritmo uma das mtricas mais importantes para definir o desempenho. Para justificar essa diferena basta perceber
187

que enquanto o DES consome 19,55ns (nanosegundos, lembrar que 1ns = 10-9 segundos) em uma iterao para cifrar 64 bits, o AES consome 28,789ns para cifrar 128 bits. Assim, mesmo que o tempo de propagao do AES seja maior, no final do processo este ter cifrado 128 bits enquanto que o DES apenas 64 bits. Outro fator importante o nmero de iteraes. Enquanto o AES executa em 10 ciclos, o DES processa em 16 rodadas, assim o DES cifra 64 bits em aproximadamente 312,8ns enquanto que o AES em 287,89ns cifra 128 bits. O algoritmo AES mapeado em um FPGA Virtex pode ser visualizado na figura 10.9.

Figura 10.9 Algoritmo AES mapeado em um FPGA Virtex

10.6 Consideraes Finais do Captulo


Com base nos resultados apresentados neste captulo pode-se dizer que o algoritmo AES efetivamente mais rpido que o algoritmo DES, alm do seu maior nvel de segurana. At hoje no h nenhuma comunicao acadmica e empresarial que tenha manifestado a quebra do sistema usando AES. Finalmente, como o AES um novo padro que comea a ser divulgado e usado, h muitas pesquisas e estudos visando mostrar otimizaes e novas formas de implementao tanto em software (linguagem C, Java e outras) como em hardware (em todas as tecnologias possveis de projetos de sistemas digitais como VLSI, ASIC, FPGAs, entre outras). Nesse sentido, pode-se dizer que vrios centros de pesquisa, universidades e at empresas possuem alguma implementao do AES. Essas pesquisas sempre visam otimizar a implementao, de modo a torn-lo mais rpido e com maior insero em aplicaes modernas.

188

Captulo 11
Algoritmo RC5 em Software e Hardware

Este captulo apresenta um breve histrico do RC5, e enfatiza nos detalhes de funcionamento, implementao e desempenho daquele que considerado um dos algoritmos mais utilizados mundialmente.

11.1 Introduo
O algoritmo RC5 foi projetado pelo Professor Ronald Rivest do MIT, Estados Unidos, e a primeira publicao foi em dezembro de 1994 (RIVEST, 1995). Desde sua publicao, o RC5 chamou a ateno de muitos investigadores na comunidade cientfica em esforos para avaliar com preciso a segurana oferecida. O algoritmo criptogrfico simtrico RC5 o sucessor do RC4 e apresenta significativas melhoras nos fatores segurana e velocidade. Ambos foram criados pela empresa americana RSA Data Security Inc (ver mais informaes no link http://www.rsasecurity.com/) que foi criada pelos autores do sistema RSA, e atualmente uma das mais importantes na rea de sistemas de criptografia e proteo de dados (BURNETT, 2002). Quando o RC5 foi desenvolvido, a empresa RSA tinha os seguintes objetivos em relao ao algoritmo: Cifra simtrica de bloco Apropriado para hardware e software Rpido Flexvel para processadores com diferentes comprimentos de palavra Nmero varivel de iteraes Tamanho de chave varivel Simples Baixa memria requerida Alto nvel de segurana
189

O algoritmo RC5 foi projetado para qualquer computador de 16, 32 ou 64 bits. Possui uma descrio compacta e adequado para implementaes em software ou em hardware. Similarmente ao algoritmo DES, o RC5 possui vrias iteraes e cada iterao utiliza um par de subchaves. Ao contrrio do DES, o nmero de iteraes e o nmero de bytes na chave so variveis. O algoritmo baseia-se na operao de rotao (deslocamento circular) de um nmero varivel de posies, e esse nmero depende de quase todos os bits resultantes da iterao anterior e do valor da subchave em cada iterao. Aps alguns anos de anlise dos especialistas sabe-se que aps 8 iteraes todo bit da entrada legvel afeta pelo menos uma rotao. A criptoanlise diferencial para o RC5 considera o algoritmo seguro aps 16 iteraes (RIVEST, 1995).

11.2 Parmetros do RC5


O RC5 um algoritmo parametrizado, isto , possui flexibilidade quanto ao tamanho do bloco, da chave e nmero de iteraes. Em particular estes parmetros so designados como w, r, b. A seguir a descrio desses parmetros(RIVEST, 1995). w tamanho do bloco em bits que ser cifrado. O valor padro 32 bits; podendo ser 16, 32, ou 64 bits. RC5 codifica blocos de duas palavras de forma que o texto claro e o cifrado so de tamanho 2w. r O nmero de iteraes. Valores permissveis so 0, 1,..., 255.

b O nmero de bytes da chave secreta K. valores permissveis de b so 0, 1,..., 255. O algoritmo genrico representado por RC5-w/r/b. Na verdade uma famlia de algoritmos, no RC5-32 o criador, Prof. Ronald Rivest, recomenda 12 iteraes e para o RC5-64, 16 iteraes.

11.3 Operaes Bsicas do RC5


O algoritmo RC5 consiste em trs componentes bsicos: (i) um algoritmo de expanso fundamental, (ii) um algoritmo de cifragem, e (iii) um algoritmo de decifragem. Estes algoritmos usam 5 operaes primitivas, todas sobre operandos de tamanho w bits. Estas operaes so (RIVEST, 1995): 1. v + u a soma dos inteiros v e u de tamanho w bits, resultando um valor de w bits (soma mod 2w);

190

2. v u a subtrao dos inteiros v e u de tamanho w bits, resultando um valor de w bits (subtrao mod 2w); 3. v xor u o ou-exclusivo (XOR) v e u de tamanho w bits, resultando um valor de w bits; 4. v << t o deslocamento circular (rotao) de t posies para a esquerda dos bits em v. Se t exceder w bits, pode-se considerar os w bits menos significativos sem alterar o resultado; 5. v >> t o deslocamento circular (rotao) de t posies para a direita dos bits em v. Se t exceder w bits, pode-se considerar os w bits menos significativos sem alterar o resultado; O texto claro no algoritmo RC5 consiste em duas palavras de tamanho w bits, denotadas por A e B. O primeiro byte ocupa as posies menos significativas do registro A, e assim por diante, de modo que o quarto byte ocupe o byte mais significativo de A, o quinto byte ocupa a posio menos significativa em B, e o oitavo (ltimo) byte ocupa a posio mais significativa em B. As duas metades de entrada (A, B) so alteradas a cada iterao. So usadas 2 subchaves antes da primeira iterao. E duas subchaves a cada iterao, tendo no total 2r+2 subchaves. A chave K de b bytes, da qual so geradas as subchaves Kj de tamanho w bits cada, como descrito a seguir.

11.4 Gerao de Subchaves do RC5


O algoritmo RC5 expande os b bytes da chave K para 2r+2 subchaves de w bits. Inicialmente este algoritmo descreve como a chave K armazenada nas variveis L[0], L[1], .... Algoritmo de subchaves RC5 Entrada: r (nmero de iteraes), chave K de b bytes armazenados em: K[0], K[1], ... K[b-1];

Sada: 2r+2 subchaves de w bits K0,K1,K2 ... K 2r+1 1. Seja u = w/8 (nmero de bytes em cada varivel de w bits. Para w = 32 bits, valor padro do algoritmo, u = 32/8 = 4 para w igual a 32 bits ; 2. Seja c = [b/u] (nmero de posies de w bits ocupados por K. Considerando como exmplo um valor de b = 10 bytes, ento tem-se c = [10/4] = 3; 3. Se necessrio, preencher K direita de K[b-1] comprimento total em bytes divisvel por u, para j = b, b+1, c x u-1 faa: K[j] 0; at completar um

191

4. para j = 0,1,.... c-1 faa: w-1 Lj

2
t=0

8t

K[j x u + t]

preencher os u bytes, da direita para esquerda, de cada Lj com os bytes K[0], K[1], K[2], ... K[c x u -1];

5. K0 Pw (veja o valor de Pw na tabela 11.1) 6. Para j = 1,2,...2r+1 faa: Kj Kj-1 + Qw (veja o valor de Qw na tabela 11.1) 7. i 0; j 0; A 0; B 0; t Max[c,2r+2]; 8. para s=1,2,3,...3t faa { A Ki (ki + A + B) << 3; A Ki; i = (i +1) mod (2r +2); B Lj (Lj + A + B) << (A + B); B Lj; j = (j +1) mod (c); } 9. A sada K0, K1, K2 K3 ... K 2r+1. As constantes Pw e Qw so representaes binrias das constantes matemticas e e (ver tabela 11.1), e foram escolhidas pelo criador do algoritmo por serem constantes que no foram definidas por ele, e portanto, no levantaria qualquer suspeita de incorporar algum conhecimento prvio que facilite a quebra do algoritmo.
Tabela 11.1 Valores das constantes mgicas Pw e Qw no algoritmo RC5

w Pw Qw

16 B7E1 9E37

32 64 B7E15163 B7E15163 8AED2A6B 9E3779B9 9E3779B9 7F4A7C15 Valores em Hexadecimal

11.5 Algoritmos de Cifragem e Decifragem do RC5


Tanto na criptografia como na decriptografia este algoritmo supe que o computador armazena os bytes em modo little-endian, ou seja tanto o texto legvel como o ilegvel so armazenados da seguinte forma nas variveis A e B, para w=32: os primeiros quatro bytes do texto (i)legvel (x0, x1, x2, x3 ) so armazenados em A na seqncia (x3, x2, x1, x0) e os quatro bytes seguintes do texto (i)legvel (x4, x5, x6, x7) so armazenados em B na seqncia (x7, x6, x5, x4).
192

Algoritmo de Cifragem RC5 Entrada: Chave K de b bytes, texto legvel de 2w bits (A,B) Sada: texto ilegvel de 2w bits (A,B) 1. Calcular 2r+2 subchaves K0, K1,K2, K3....K2r+1 2. A A + K0i; B B K1i; 3. para j = 1,2,3r faa{ A ((A xor B) << B) + K2j; B ((B xor A) << A) + K2j+1; } 4. A sada o valor (A, B)

Algoritmo de Decifragem RC5 Entrada: chave K de b bytes, texto ilegvel de 2w bits (A,B) Sada: texto legvel de 2w bits (A,B) 1. Calcular 2r+2 subchaves K0, K1,K2, K3....K2r+1 2. para j = r, r-1, ....1 faa: B ((B - K2j+1) >> A) xor A; A ((A - K2j) >> B) xor B; 3. A sada o valor (A K0, B-K1)

11.6 O algoritmo RC5-64


O RC5 na sua verso de 64 bits, possui um bom nvel de segurana. Esta segurana foi testada atravs do desafio RC5-64 (RC5-64, 2003). O desafio RC5-64 uma dentre vrias competies, organizadas para determinar a dificuldade de se achar a chave de algoritmos codificados, por meio de tentativa e erro. Os desafios anteriores incluram DES, RC5-40 e RC5-56. Depois de quatro anos, em 2003, a equipe de cientistas, programadores e usurios conhecida como "Distributed.Net", solucionou o desafio da chave secreta RC5-64, do laboratrio RSA. O grupo formado por voluntrios ganhou um prmio de US$ 10 mil dolres.

193

O consrcio utilizou o momento inativo dos computadores distribudos por todo o mundo para procurar todas as possibilidades da chave de 64 bits do algoritmo RC5, da RSA Security. O objetivo do grupo era achar a chave secreta usada pela corporao, e com isso, decifrar a mensagem corretamente. Isso foi conseguido utilizando um total de 331.252 mquinas em vrias partes do mundo. O servidor, computador localizado em Tquio, retornou o resultado correto para o algoritmo. Criado em 1997, o desafio Chave Secreta dos laboratrios RSA visa verificar a fora de algoritmos simtricos, tais como DES e RC5, com tamanhos variados de chaves. Ao patrocinar a competio, os laboratrios RSA ajudam a indstria a confirmar as estimativas tericas, e com esta avaliao constante, os fabricantes so motivados a melhorar continuamente suas solues de segurana.

11.7 Estatsticas de Desempenho do RC5


O RC5 um algoritmo desenvolvido para ser veloz e seguro, ideal para ambientes onde o tempo de cifragem no pode ser o gargalo do processamento principal. Observando as estatsticas de temporizao da nossa implementao em C (ver tabela 11.2) nota-se que a performance do RC5 pode ser considerada muito boa quando comparada a outros algoritmos como o DES e o AES.
Tabela 11.2 Estatsticas de desempenho temporal do RC5 em C

Tamanho em Megabytes 1 Mb 5 Mb 10 Mb

Tempo RC5 0,141 s 0,703 s 1,403 s

Tempo DES 0,94 s 3,90 s 7,09 s

Tempo AES 0,88 s 3,35 s 5,77 s

Por ser veloz, o RC5 utilizado em aplicaes de transaes on-line (OLTP On Line Transactions Processing) onde o tempo um fator crtico para se avaliar o desempenho. O RC5 pode ser encontrado nos protocolos para a segurana de correio eletrnico como PGP - Pretty Good Privacy (PGP) (BROWN, 2000) e S/MIME Secure Multipurpose Internet Mail Extension. Na tabela 11.3 apresentam-se as estatsticas de desempenho da nossa implementao em hardware (FPGA). interessante notar que o mesmo bom desempenho observado na verso em software no confirmado na nossa implementao em hardware. Nesta verso do RC5 a gerao de subchaves e o processamento principal (iteraes) so executados em paralelo. O hardware consumido para a implementao deste paralelismo foi de cerca de 236 CLBs e 54 Flip-Flops do FPGA XCV812EFG900, para nossa implementao RC5/32/16/64, que indica os parmetros w=32, r=16 e b=64.
Tabela 11.3 Estatsticas de desempenho do RC5 em FPGAs

194

Tempo de Propagao Freqncia Mxima 21,05 ns 47,50 MHz Taxa de Ocupao do FPGA CLBs FLIP-FLOPs LUTs N de componentes utilizados 234 54 18.816 0,28% 456 18.816 2,42%

N de componentes disponveis 9.408 Porcentagem de ocupao 2,48%

O tempo de propagao do RC5 implementado foi de 21,05ns cifrando um total de aproximadamente 19 Mbytes/s. Desta forma, a implementao em hardware no obteve a superioridade observada na verso em software, quando comparada com as implementaes dos algoritmos DES e AES. Na figura 11.1 apresenta-se o algoritmo RC5 mapeado em um FPGA Virtex XCV812EFG900.

Figura 11.1 Algoritmo RC5 mapeado em um FPGA Virtex

195

Captulo 12
AES - Outros Candidatos

Este captulo apresenta alguns critrios de projeto relativos ao concurso realizado para selecionar o novo padro de criptografia simtrico mundial (AES). So apresentados tambm dados comparativos sobre os outros candidatos concorrentes do Rijndael.

12.1 Motivao Para um Novo Padro de Criptografia Simtrica


O plano do NIST foi formalmente anunciado em 2 de janeiro de 1997, quando o rgo convidou qualquer pessoa a submeter um algoritmo como o novo padro, que seria conhecido como AES. Como uma condio para entrar no processo do AES, os desenvolvedores tinham de abrir mo de quaisquer direitos quanto propriedade intelectual do algoritmo selecionado. Vrias pessoas e empresas responderam e, em 20 de agosto de 1998, o NIST nomeou 15 candidatos (BIHAM, 1999). O passo seguinte era fazer com que os algoritmos fossem analisados mundialmente, O critrio era a segurana (sem nenhuma fraqueza algortmica), desempenho (teria de ser rpido em vrias plataformas) e tamanho (no poderia ocupar muito espao nem utilizar muita memria). Vrios dos 15 algoritmos originais no duraram muito tempo. Fraquezas foram descobertas e alguns simplesmente se mostraram muito grandes ou muito lentos. Em agosto de 1999, o NIST reduziu a lista a cinco candidatos: o Rijndael, Serpent, Twofish, MARS e RC6. No ano seguinte, pesquisadores, analistas de criptografia e fornecedores de hardware e de software para computadores testaram os cinco algoritmos finalistas para decidir qual deles era o preferido. Vrios artigos foram publicados e nmeros estatsticos eram distribudos comparando esses cinco algoritmos finalistas. Cada um tinha suas foras e suas fraquezas. Finalmente, em 2 outubro de 2000, o NIST anunciou o vencedor: um algoritmo chamado de Rijndael inventado por dois pesquisadores belgas: Vincent Rijmen e Joan Daemen. A partir desse momento, o algoritmo de AES est livremente disponvel para qualquer pessoa desenvolver, utilizar ou vender. Como o DES, esperado que o
196

AES torne-se um padro mundial. Pode-se esperar que isso acontea em um curto perodo de tempo. Apesar do algoritmo Rijndael ter sido o ganhador do concurso e se tornar o algoritmo AES, os outros algoritmos finalistas que tambm participaram e foram pr-selecionados merecem destaque. As prximas sees apresentam detalhes sobre os critrios utilizados no projeto AES apresentando tambm algumas caractersticas sobre os demais concorrentes.

12.2 Critrios para o Projeto AES


Para poder definir o novo padro para a criptografia simtrica foram estabelecidos um conjunto de critrios, a fim de permitir a seleo e classificao dos algoritmos concorrentes ao AES (REQUEST AES,1997).

12.2.1 reas de Aplicao


Um algoritmo padro de criptografia deve ser satisfatrio para diferentes aplicaes como: Criptografia do tipo Bulk: O algoritmo deve ser eficiente na codificao de dados de arquivos ou de fluxo contnuo de dados. Gerador de bit aleatrio: O algoritmo deveria ser eficiente na gerao de bits aleatrios. Criptografia de pacote: O algoritmo deveria ser eficiente na codificao de dados do tamanho do pacote. Por exemplo, um pacote de um Banco 24 Horas tem um campo de dados de 48 bytes, deveria tornar fcil a implementao em uma aplicao onde pacotes sucessivos podem ser cifrado ou decifrados com chaves diferentes. Hash : O algoritmo deveria ser eficiente quando convertido a uma funo hash nica.

12.2.2 Plataformas
Um algoritmo de criptografia padro deve ser fcil de implementar em uma variedade de plataformas diferentes, cada um com as suas prprias exigncias. Isso inclui: Hardware especial: O algoritmo deveria ser eficientemente implementado em hardware VLSI padro. Processadores de grande porte: Enquanto hardware dedicado sempre ser usado para as aplicaes mais rpidas, implementaes de software so mais comuns. O algoritmo deveria ser eficiente em microprocessadores de 32-bits com 4 Kbytes de programa e cache de dados.

197

Processadores de mdio porte: O algoritmo deveria funcionar microcontroladores e outros processadores de mdio porte, como os 68HC11.

em

Processadores de pequeno porte: Deveria ser possvel implementar o algoritmo em cartes inteligentes (smartcards), mesmo que no fosse eficiente. As exigncias para processadores pequenos so os mais difceis. Limitaes de memria RAM e ROM so severas para esta plataforma. Tambm, eficientemente, so mais importantes nessas mquinas pequenas que comeam a ganhar cada vez mais popularidade. Enquanto Workstations dobram sua capacidade quase que anualmente, pequenos sistemas embarcados (embedded systems) precisam otimizar os recursos que possuem e comeam a ser grandemente usados em empresas de diferentes portes, de grandes, mdias e at pequenas.

12.2.3 Exigncias Adicionais


Com estas exigncias adicionais deveria, se possvel, ser criado um algoritmo de criptografia padro. O algoritmo deveria ser simples para implementar tambm. Experincias com o DES mostram que os programadores freqentemente cometem erros de implementao caso o algoritmo seja complicado. Se possvel, o algoritmo deveria ser robusto contra estes erros. O algoritmo deveria ter um grande espao de chaves (keyspace), permitindo que qualquer conjunto de bits aleatrios do tamanho desejado possa ser uma chave possvel. No deveria haver nenhuma chave fraca. O algoritmo deveria facilitar a administrao da chave para a implementao de software. Implementaes de software, como por exemplo a do DES, geralmente usam tcnicas de controle de chave fracas. Em particular, em algumas aplicaes, a senha que o usurio digita torna-se a chave. Isso significa que mesmo que o DES tenha um espao para as chaves, teoricamente de 256, o espao real limitado a chaves construdas com os 95 caracteres que podem ser entrados diretamente pelo teclado. O algoritmo deveria ser facilmente modificado para diferentes nveis de segurana, com ambas necessidades, mnima e mxima. Todas as operaes deveriam manipular dados em blocos de tamanho do byte. Onde possvel, operaes deveriam manipular dados em blocos de 32-bits.

12.2.4 Decises de Projeto


Baseado nos parmetros acima, foram criadas essas decises de projeto. algoritmo deveria: O

Manipular dados em grandes blocos, preferencialmente 32 bits (e no em nvel de bits, tal como o DES). Ter um bloco de 64 ou 128 bits. Ter uma chave escalvel, de 32 a pelo menos 256 bits.
198

Utilizar operaes simples que sejam eficientes em microprocessadores: tipo OU-exclusivo, adio, substituies baseadas em procura de tabelas (table lookup) e etc. No deveria utilizar mudanas de cumprimento varivel ou permutaes bit-wise, ou saltos condicionais. Ser possvel de implementar em um processador de 8 bits com no mnimo 24 bytes de RAM (e que a RAM armazene a chave) e 1 Kbyte de ROM. Utilizar subchaves pr-computveis. Em sistemas com grande memria, essas subchaves podem ser pr-calculadas para uma operao mais rpida. No pr-calcular estas chaves resultar em uma operao mais lenta, mas ainda deveria ser possvel cifrar dados sem qualquer pr-computao ou pr-clculo. Consistir de um nmero varivel de iteraes. Para aplicaes com chaves pequenas, a troca entre a complexidade de um ataque de fora bruta e um ataque diferencial torna um grande nmero de iteraes suprfluo. E deveria ser possvel reduzir o nmero de iteraes sem a perda de segurana (alm da causada pelo tamanho reduzido da chave). Se possvel, no ter nenhuma chave fraca. A proporo de chaves fracas deveria ser pequena o bastante para ser improvvel a escolha de uma ao acaso. Tambm, qualquer chave fraca deveria ser conhecida explicitamente, e assim elas podem ser retiradas durante o processo de gerao da chave. Utilizar subchaves que sejam uma hash nica da chave. Isso permitiria a utilizao de longas frases como chave sem comprometer a segurana. No ter nenhuma estrutura linear (por exemplo, a propriedade de complementao do DES), uma vez que, as estruturas lineares reduzem a complexidade de procura exaustiva. Utilizar um projeto que seja simples de entender. Isto facilitaria a anlise e aumentaria a confiana no algoritmo.

12.2.5 Processamento de Blocos


Existem vrias maneiras de construir blocos e produzir cifras fortes. Muitas dessas podem ser implementadas eficientemente em microprocessadores de 32 bits. Grandes S-boxes: S-boxes maiores so mais resistentes criptoanlise diferencial. Um algoritmo com uma palavra de 32 bits pode utilizar S-boxes de 32 bits. S-boxes dependentes de chaves: Enquanto S-boxes fixos devem ser desenvolvidos para serem resistentes criptoanlise diferencial e linear, S-boxes dependentes de chaves so muito mais resistentes a esses ataques.
199

Combinao de operaes de grupos algbricos diferentes: O processo de cifragem no algoritmo IDEA introduziu esse conceito, combinando o XOR mod 216, adio mod 216, e multiplicao mod 216+1. Outra operao importante a realizao de permutaes dependentes de chaves, similar ao realizado pelo algoritmo DES.

12.3 Comparao dos Candidatos ao AES


Como descrito anteriormente, na primeira conferncia sobre o AES foram selecionados quinze candidatos. Os concorrentes foram provenientes de vrios grupos de pesquisas, incluindo universidades e empresas ligadas rea de segurana. A tabela 12.1 apresenta os algoritmos selecionados e seus respectivos pases e autores.
Tabela 12.1 Sumrio dos algoritmos concorrentes ao AES (BIHAM, 1999)

Algoritmo LOKI97 RIJNDAEL CAST-256 DEAL FROG DFC MAGENTA E2 CRYPTON HPC MARS RC6 SAFER+ TWOFISH
SERPENT

Pas Australia Belgica Canada Canada Costa Rica Frana Alemanha Japo Coria EUA EUA EUA EUA EUA

Autores Lawrie Brown, Josef Pieprzyk, Jennifer Seberry Joan Daemen, Vincent Rijmen Entrust Technologies, Inc. Outerbridge, Knudsen TecApro Internacional S.A. Centre National pour la Recherche Scientifique (CNRS) Deutsche Telekom AG Nippon Telegraph and Telephone Corporation (NTT) Future Systems, Inc. Rich Schroeppel IBM RSA Laboratories Cylink Corporation Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, Niels Ferguson Inglaterra, Ross Anderson, Eli Biham, Lars Knudsen Israel, Noruega

Tabela 12.2 Caractersticas gerais dos concorrentes ao AES (BIHAM, 1999)

200

Algoritmo LOKI97 RIJNDAEL CAST-256 DEAL FROG DFC MAGENTA E2 CRYPTON HPC MARS RC6 SAFER+ TWOFISH SERPENT

Estrutura Feistel Square Feistel Estendido Feistel Especial Feistel Feistel Feistel Square Omni Feistel Estendido Feistel SP Network Feistel SP Network

Iteraes 16 10,12,14 48 6,8 8 8 6,8 12 12 8 32 20 8,12,16 16 32

A tabela 12.2 apresenta as estruturas utilizadas pelos algoritmos concorrentes do AES. Nela pode-se perceber a grande influncia causada por Feistel, uma vez que, grande parte dos algoritmos utilizam a estrutura proposta por este pesquisador. Segundo um trabalho apresentado por Biham (1999), a tabela 12.3 apresenta os dados de desempenho estimados para o algoritmo do AES. Neste mesmo trabalho, Biham destacou os critrios para obteno das medidas de desempenho como sendo: Alguns algoritmos podem avaliados utilizando uma API disponibilizada pelo NIST (NIST API) (NISTAPI, 1999); Alguns algoritmos utilizam procedimentos em linguagem nativa para a avaliao de desempenho o que normalmente permite um desempenho entre 10% e 20% superior do que os utilizando a NIST API; Alguns algoritmos utlizam algumas otimizaes de cdigo as quais no so compatveis com a NIST API. Estas otimizaes incluem o uso de vetores estticos para armazenamento das subchaves ou incluindo as subchaves em cdigo assembly. Isto proporciona uma velocidade adicional de 20%.

Importante ressaltar que a tabela 12.3 apresenta dados de desempenho relativos a cdigos compilados com o GCC-2.7.2.2 utilizando Linux em um computador Pentium 133Mhz MMX (BIHAM, 1999). Nela pode-se perceber que os algoritmos esto ordenados pelo nmero de ciclos na encriptao. Isto significa que o algoritmo Twofish utiliza um menor nmero de ciclos para realizar a encriptao, lembrando que para se avaliar um melhor algoritmo a velocidade apenas um dos critrios, sendo importante tambm a segurana do algoritmo entre outros parmetros. Desta forma, Biham (BIHAM, 1999) realiza uma comparao onde destacado tambm o
201

nmero mnimo de iteraes para tornar um algoritmo seguro contra criptoanlise. Com isto, cada algoritmo foi avaliado para determinar este nmero mnimo de iteraes e uma nova anlise de desempenho considerando este nmero de iteraes foi realizada. Os dados desta anlise so apresentados na tabela 12.4.
Tabela 12.3 Comparao de desempenho dos concorrentes ao AES (BIHAM, 1999)

Algoritmo TWOFISH RIJNDAEL CRYPTON RC6 MARS SERPENT E2


CAST-256 FROG HPC SAFER+ DFC LOKI97 DEAL MAGENTA

Encriptao (ciclos) 1254 1276 1282 1436 1600 1800 1808


2088 2182 2602 4424 5874 6376 8950 23186

Decriptao (ciclos) 1162 1276 1286 1406 1580 2102 1854 Com NIST API 2080 2668 2962 4620 5586 6118 8910 23230

Gerao de Subchaves Encriptao Decriptao 18846 18634 17742 18886 758 824 5186 5148 1408 5548 13154 12648 7980 7780
11412 3857000 234346 4708 23914 22756 108396 1490 11478 3817100 248444 4668 25616 22490 107996 1622

Observa-se nas tabelas 12.3 e 12.4 que os algoritmos que foram selecionados para a fase final do AES (Rijndael, Serpent, Twofish, MARS e RC6) esto sempre bem colocados nas avaliaes. Outros parmetros como desempenho em hardware, em smartcards, entre outros, tambm foram considerados na avaliao que definiu os algoritmos finalistas em 1999 (REQUEST AES,1997). Finalmente, em outubro de 2000 o algoritmo Rijndael foi selecionado para ser adotado como o novo padro AES. Entretanto, foi destacado que os demais finalistas tambm obtiveram excelentes resultados durante a avaliao, sendo tambm recomendados para o uso em diversas aplicaes AESWINNER, 2003).

202

Tabela 12.4 Nmero mnimo de iteraes por algoritmo e desempenho(BIHAM, 1999)

Algoritmo TWOFISH SERPENT MARS RIJNDAEL CRYPTON E2 RC6 CAST-256 SAFER+ DFC DEAL LOKI97 MAGENTA FROG HPC

Original Ciclos Iteraes 1254 16 1800 32 1600 32 1276 10 1282 12 1808 12 1436 20 2088 48 4424 8 5874 8 8950 6 6376 16 23186 6 2182 8 2602 8

Valores para segurana mnima Iteraes Ciclos 10 784 17 956 20 1000 8 1021 11 1175 10 1507 21 1508 40 1740 7 3871 9 6608 10 14917 38 15143 11 42508 -----

203

Parte IV
Ferramentas e Dispositivos Modernos de Segurana

Os captulos 13 a 16, da parte IV, apresentam conceitos e dados que permitem ao leitor o aprendizado de mecanismos avanados de segurana, tais como bibliotecas (compostas por um conjunto de algoritmos e protocolos de criptografia), dispositivos em hardware que aceleram as operaes de criptografia e aumentam o nvel de segurana das solues implementadas. Nestes captulos se apresentam conceitos e uma breve descrio das bibliotecas CryptoAPI, OpenSLL e JCA; e de alguns dispositivos tais como Smart Cards, HSM, e alguns processadores criptogrficos. Assim, esta parte do livro visa explicar o impacto que alguns parmetros de arquitetura possuem no desempenho dos algoritmos estudados anteriormente. Tambm se discute qual o impacto de usar plataformas com diferentes sistemas operacionais e mudanas nos parmetros dos arquivos sendo cifrados e/ou decifrados. Apresenta-se tambm o projeto de um processador criptogrfico com arquitetura VLIW mapeado e analisado em FPGAs, ver captulo 15. Os algoritmos RC5 e DES so executados nele, e dados de desempenho so discutidos no captulo 16. O captulo 17, ltimo captulo do livro, apresenta uma ferramenta criada pelos autores, acessvel via internet no site www.novateceditora.com.br/downloads.php. Atravs dessa ferramenta os leitores podem executar alguns exemplos selecionando os algoritmos e os parmetros, e visualizar, de forma didtica, o impacto em usar um outro algoritmo criptogrfico. Assim, a ferramenta oferece possibilidade de visualizao, para que os usurios vejam o desempenho e as caractersticas de execuo de um determinado algoritmo implementado.

204

Captulo 13
Bibliotecas Criptogrficas em Software

De maneira breve, este captulo apresenta as bibliotecas criptogrficas CryptoAPI, JCA, e OpenSSL. Para exemplificar o desempenho dessas bibliotecas implementaram-se o algoritmo DES, Blowfish e mini-blowfish, analisando o impacto de mudar o sistema operacional, processador e tipos de arquivos. Alm disso, apresenta-se resumidamente conceitos e aplicaes de HSM (Hardware Security Module), Smartcards e de processadores especficos para realizar operaes de criptografia.

13.1 Motivao
bom lembrar que o ciframento de uma mensagem baseia-se em dois componentes: o algoritmo e a chave. O algoritmo uma transformao matemtica que combinada com uma chave converte uma mensagem clara em uma mensagem cifrada e viceversa. Na figura 13.1 tem-se a representao do funcionamento geral da criptografia. Dentro da modelagem criptogrfica atual pode-se classificar os sistemas criptogrficos em sistemas simtricos e assimtricos.

Figura 13.1 Funcionamento geral da criptografia

Como descrito anteriormente, a criptografia simtrica caracteriza-se por utilizar a mesma chave tanto para a cifragem como para a decifragem dos dados, esse mtodo funciona em aplicaes limitadas, onde o emissor e o receptor podem se preparar antecipadamente para trocar a chave. Os algoritmos mais conhecidos so o DES, 3DES, AES, RC4, RC5, RC6, Blowfish, entre outros.

205

Os sistemas assimtricos utilizam um par de chaves, uma chave pblica e uma chave privada. As mensagens criptografadas com uma das chaves do par s podem ser decriptografadas com a outra chave correspondente. Alguns algoritmos que seguem o modelo assimtrico so: RSA, ElGamal, Diffie-Hellman, algoritmos baseados em curvas elpticas entre outros. Desta forma existem diversos algoritmos, sendo que cada algoritmo possui suas caractersticas prprias de implementao. Para facilitar a utilizao destes algoritmos, existem algumas bibliotecas criptogrficas que implementam tais algoritmos e fornecem uma base para a utilizao em diversas aplicaes.

13.2 Bibliotecas Modernas de Criptografia


Existem hoje vrias bibliotecas de criptografia como CryptoAPI, JCA, e OpenSSL, sendo que cada uma delas para um uso especfico. Algumas empresas desenvolvem bibliotecas especficas para cada tipo de aplicao atendendo seus mais variados clientes, para isso, so utilizadas bibliotecas especficas que facilitam a implementao de aplicaes e ambientes seguros . Implementar segurana complexo e difcil. Neste contexto, a utilizao de bibliotecas criptogrficas pode reduzir a complexidade e o tempo de desenvolvimento de projetos nesta rea. Desta forma apresenta-se uma comparao das bibliotecas CryptoAPI e OpenSSL, atravs de dois algoritmos bsicos e bem conhecidos: o DES e o Blowfish, apresentando alguns dados de desempenho das bibliotecas selecionadas em diferentes plataformas. Apresenta-se tambm os fundamentos da biblioteca JCA em Java.

13.2.1 Biblioteca OpenSSL


O projeto OpenSSL composto por uma equipe de desenvolvimento, que consiste dos colaboradores ativos atuais e outros contribuintes principais. Adicionalmente um subconjunto dos colaboradores d forma equipe do ncleo de OpenSSL que controla o projeto global de OpenSSL. Qualquer um que queira se juntar ao esforo do desenvolvimento poder faz-lo desde que se inscreva na lista onde esto os colaboradores que se encontra no endereo virtual: openssl-dev@openssl.org, onde todos os esforos do desenvolvimento so coordenados (YOUNG, 2003). OpenSSL baseado na biblioteca SSLeay, desenvolvida por Eric A. Young e Tim J. Hudson, e pode ser usada livremente (TESCARO, 2003), (MENDES, 2003). OpenSSL uma verso aberta ao pblico mas eficaz de SSL/TLS, o protocolo mais extensamente usado como fonte para comunicaes seguras da rede. Criado pela Netscape, o SSL propicia transaes seguras mediante a criptografia dos dados que trafegam entre a mquina do usurio e o servidor ao qual est conectado (YOUNG, 2003).

206

O projeto OpenSSL disponibiliza um toolkit em cdigo livre (STEVENS, 2001), que implementa o protocolo SSL e vrios algoritmos e primitivas criptogrficas de uso comum, incluindo algoritmos de troca de chaves, funes de hash, algoritmos simtricos e assimtricos. O toolkit se apresenta na forma de duas bibliotecas e um conjunto de programas que implementam as rotinas por elas disponibilizadas. Os mecanismos do SSL esto implementadas na libssl, e os outros algoritmos esto implementados na libcrypto (PUTINI, 2004), (REGULY, 2001). A parte que trata da criptografia dentro do projeto OpenSSL, chama-se de biblioteca CRYPTO OpenSSL. Esta biblioteca implementa uma ampla variedade de algoritmos criptogrficos, os quais so usados em vrios padres da internet. Assim, os servios fornecidos pela biblioteca so usados por implementaes OpenSSL de padres tais como o SSL (Secure Sockets Layer), TLS (Transport Layer Security) e S/MIME (Secure Multipurpose Internet Mail Extensions); os quais tambm tm sido usados para implementar padres criptogrficos tais como SSH, OpenPGP e outros (BROWN, 2000). O nome dessa biblioteca denominada de libcrypto, e consiste de um nmero de sub-bibliotecas que implementam os algoritmos criptogrficos de forma individual, conforme foi visto nos captulos anteriores. As funcionalidades incluem cifragem simtrica, criptografia de chave pblica, autenticao de chaves, gerenciamento de certificados, funes de hashing, e gerador de nmeros pseudo-aleatrios usados em aplicaes de criptografia. Uma descrio dos algoritmos que esta biblioteca implementa so: Algoritmos Simtricos: Blowfish, Cast, DES, IDEA, RC2, RC4 e RC5 Criptografia de chave Pblica e Certificao de Chaves: DSA, DH, RSA. Certificados Digitais: X509, X509v3 Cdigos de Autenticao e Funes Hashing: HMAC, MD2, MD4, MD5, MDC2, RipeMD, SHA.

Usando as bibliotecas OpenSSL: A biblioteca OpenSSL escrita na linguagem C, e suporta uma vasta gama de algoritmos de criptografia, utilizados em vrios padres da Internet. Como SSL uma camada, ela no implementa sockets, ento o programador deve cuidar desta etapa. O suporte SSL se d na seguinte maneira (mas no necessariamente nesta ordem): a biblioteca iniciada com uma chamada para a funo SSL_library_init() um contexto SSL criado (SSL_CTX_new()) um socket criado um objeto SSL deve ser criado (SSL_new()) socket associado a um objeto SSL (SSL_set_fd() ou SSL_set_bio())
207

handshake entre o cliente e o servidor feito (SSL_accept() ou SSL_connect()) cliente e o servidor trocam dados pela conexo SSL (SSL_read() ou SSL_write()) e ento a funo SSL_shutdown chamada para terminar a sesso socket fechado para terminar a conexo objeto SSL liberado (SSL_free()) contexto SSL liberado (SSL_CTX_free())

13.2.2 Biblioteca CryptoAPI


Conhecendo que a preocupao com a segurana em rede aumenta com o crescimento do nmero de usurios que a utilizam, h vrias tecnologias emergentes para oferecer suporte a segurana de dados. Atualmente no existe mais barreira para a interconexo e comunicao entre equipamentos e software de diferentes plataformas, viabilizando os ataques (invaso, destruio, roubo, espionagem, alterao, vrus etc.) a qualquer mquina conectada em uma rede. A preocupao existe h muito tempo e as tcnicas para tentar garantir a segurana em rede tm evoludo de acordo com a necessidade. Hoje, a maioria dessas tecnologias so baseadas no conceito de conjunto de servios dispostos em camadas que oferece servios de segurana para aplicaes. A camada mais baixa oferece componentes fundamentais como algoritmos de criptografia, por exemplo. As camadas mais altas oferecem certificados digitais, mecanismos de gerenciamento de chaves e protocolos para transaes seguras. A biblioteca CryptoAPI baseada nesse conceito de camadas de servios. CryptoAPI uma API desenvolvida pela Microsoft fornecendo algumas aplicaes, no apenas programas baseados na Web, com caractersticas de segurana de fcil implementao. Uma tecnologia fornecida como parte do Windows 95, 98, Windows NT e Windows 2000 e, recentemente pelas novas verses XP, Millenium. A biblioteca fornece uma forma padro para que os aplicativos obtenham servios criptogrficos, em especial cifragem/decifragem de dados, autenticao e assinatura digital, entre outras (MASCARIN,2003). Nas plataformas base, no ambiente de Windows, h um conjunto de funes que traduzem este modelo terico em chamadas de programao e formam a biblioteca CryptoAPI. Ela implementada pelas funes definidas no arquivo de cabealho wincrypt.h implementado em advapi32.dll. Estas funes lhe permitem codificar e decifrar arquivos como tambm armazenar e verificar certificados digitais de documentos, atravs do creating/parsing na crypt32.dll.

208

importante salientar que uma API (Application Programming Interface) um conjunto de rotinas que um aplicativo utiliza para solicitar e conduzir servios executados por um sistema operacional. A biblioteca CryptoAPI fornece interfaces de funes para assinatura digital para utilizao em aplicaes Windows de 32 bits. A potencialidade desta API est na forma como foi implementada. So DLLs conhecidas como CSPs (Cryptographic Service Providers). Mudanas podem ser feitas nas DLLs sem ter que mudar a interface das funes. A CryptoAPI da Microsoft oferece seis funes (CRYPTOAPI, 1998): 1. short DSPrepCrypEnv(void) Carrega dinamicamente as DLLs da CryptoAPI. 2. void DSFreeCryptEnv(void) Limpa a estrutura CryptFuncEnv. 3. short DSSignMessage(charP msg, long msgLen, charP csp, charP hashAlg, charP signer, charP *pSignature, long *pSignatureLen) Captura um bloco de dados e verifica a identidade do assinante, gerando uma assinatura. 4. short DSVerifySignature(charP msg, long msgLen, charP csp, charP signature, long signatureLen, charP *pSigner, charP * pCertInfo, charP *pCertChain, short *pVerifyStatus) Captura um bloco de dados e uma assinatura e, executa testes (Ex: compara o valor de hash). 5. short DSGetIdentityList(charP csp, charP subString, short OnlyValidCerts, charP **listPtr, short * listSizePtr) Captura uma string que identifique o usurio (Ex: e-mail address) e gera uma lista identidades do assinante. 6. short DSGetCertList(charP csp, charP certStoreName, short wholeSubject, charP *theCertificatePtr) Lista os certificados digitais armazenados.

Assim, a CryptoAPI oferece vrios servios criptogrficos como: algoritmo RSA com chave de 512 bits, algoritmos RC2 e RC4 com chaves de 40 bits, e as funes de hashing MD5 e SHA-1. Os leitores interesssados em se aprofundar em detalhes de funcionamento desta biblioteca, podem encontrar informaes atualizadas em www.cryptoapi.com e (ESPOSITO, 2004).

13.2.3 Biblioteca JCA


A biblioteca JCA (Java Cryptography Architecture) pode ser entendida como um framework que facilita a incorporao de funcionalidades criptogrficas em aplicaes Java. Uma framework orientada por objetos um conjunto de classes que interagem entre si para disponibilizar uma soluo total ou parcial para um problema. As frameworks permitem criar aplicaes com maior facilidade, sem exigir um grande conhecimento do domnio em que se aplicam, quando fornecem uma soluo parcial para um problema permitem reduzir o esforo de desenvolvimento, pois apenas
209

necessrio acrescentar o cdigo correspondente s particularidades da aplicao (JCA, 1999), (BURNETT, 2000), (JAVAROME, 2003).
13.2.3.1 Vantagens e Desvantagens da JCA

Existem vrias vantagens em se utilizar a JCA, como: independncia das implementaes especficas e dos algoritmos, compatibilidade entre as implementaes e possibilidade de extenso. A JCA definida como uma API base do Java, como tal, permite escrever aplicaes com tcnicas criptogrficas com todas as vantagens inerentes a esta linguagem, por exemplo, a independncia da plataforma. Sendo uma framework, permite disponibilizar novas tcnicas criptogrficas com o mnimo de esforo (JCA, 1999). Algumas empresas de renome na rea de segurana da informao (exemplo a RSA Data Security Inc.) j comeam a desenvolver providers compatveis com a JCA. Existem outras frameworks escritas em Java com aplicao em domnios de interesse para a criptografia. Apesar das vantagens em se usar a JCA, esta biblioteca tambm possui algumas desvantagens, como: Pouco eficiente pois, inicialmente, as extenses contendo os mecanismos de cifragem/decifragem de dados no eram exportveis para fora dos USA e Canad. Hoje em dia estas restries j no so to severas (JCA, 1999), mas a integrao de implementaes na JCA passou a ser restrita aquelas que apresentam uma certificao da empresa Sun.
13.2.3.2 Objetivos da JCA

A biblioteca JCA foi criada com base em trs objetivos: (i) Independncia das implementaes especficas de tcnicas criptogrficas: Implica que as aplicaes possam usar um determinado algoritmo criptogrfico sem se preocupar com as especificidades das suas vrias implementaes. Na JCA esta independncia obtida atravs do conceito de provider, que permite a co-existncia de diversas implementaes de subconjuntos da API num sistema, sendo isto transparente (at certo ponto) para a aplicao, dado que a JCA normaliza a forma de nomear os diversos algoritmos criptogrficos. Quando uma aplicao requisita um determinado algoritmo ao framework, instanciase uma implementao de qualquer um dos providers instalados, desta forma, se a mesma aplicao for executada em plataformas com diferentes providers instalados, desde que estes implementem o mesmo algoritmo, no existe qualquer problema. Esta independncia tambm permite que os providers possam ser atualizados transparentemente. Por questes de segurana, pode ser desejvel no desenvolver aplicaes independentes das implementaes especficas. Ao requisitar um algoritmo pode-se, opcionalmente, indicar qual o provider a que a implementao deve pertencer.
210

(ii) Independncia dos algoritmos: A independncia dos algoritmos significa que os usurios podem utilizar as diversas tcnicas criptogrficas independentemente do algoritmo que as implementa. Esta independncia conseguida custa de classes abstratas que especificam cada uma das tcnicas criptogrficas (e.g. mecanismos de hash, cifras ou assinaturas digitais), estas classes so denominadas engine classes. As implementaes concretas disponibilizadas nos providers devem respeitar a interface definida na engine class que especifica a tcnica criptogrfica do algoritmo implementado. (iii) Compatibilidade entre implementaes e possibilidade de extenso A compatibilidade entre as implementaes permite que, por exemplo, para o mesmo algoritmo, as chaves geradas por um provider possam ser utilizadas por outro; ou que as assinaturas geradas por um provider possam ser verificadas por outro. Isto conseguido custa de classes que especificam os diversos componentes dos algoritmos criptogrficos. A possibilidade de extenso significa que novos providers podem ser acrescentados ao framework. Estes providers devem disponibilizar implementaes das engine classes j especificadas.
13.2.3.3 Arquitetura da JCA

Providers Criptogrficos: A JCA introduz o conceito de Provider Criptogrfico: um pacote (ou conjunto de pacotes) que fornecem uma implementao concreta de um subconjunto dos servios definidos na API. No JDK 1.1 (PALOS, 2004) um provider podia conter uma implementao de um ou mais algoritmos de assinatura digital, algoritmos de hash e algoritmos de gerao de chaves. No Java 2 apareceram cinco tipos adicionais de servios: fbrica de chaves (keyfactory), criao e gesto de armazenamento de chaves (keystores), gerao e gesto de parmetros de algoritmos e fbrica de certificados (certificatefactory), aparece tambm a possibilidade de implementar algoritmos de gerao de nmeros pseudo-aleatrios.

O provider SUN (PALOS, 2004) O JDK inclui no seu pacote Java.security a implementao de um provider mnimo com o nome SUN, este provider inclui implementaes de: Digital Signature Algorithm (DSA) ou algoritmos de assinatura digital. Algoritmos de hash MD5 e SHA-1. Gerador de pares de chaves para DSA. Gerao e gesto de parmetros para DSA.
211

Key factory capaz de instanciar objetos com chaves DSA. Gerador de nmeros pseudo-aleatrios "SHA1PRNG". Certificate factory capaz de lidar com certificados X.509. Keystore do tipo "JKS". Outros providers Todos os providers implementam uma classe derivada da classe Provider especificada no pacote Java.security, o construtor desta classe encarrega-se de registrar na JCA todas as implementaes suportadas pelo pacote correspondente. Isto permite a JCA reconhecer quais so os servios e as implementaes que esto disponveis no sistema, e quais as bibliotecas a que pertencem, de modo a poder instanciar os objetos correspondentes, quando necessrio. A instalao de um novo provider consiste em tornar visvel esta classe framework.
13.2.3.4 Classes da JCA

Seguindo a linguagem Java, a JCA est baseada na utilizao de classes. Destacamse a classe de segurana (security) e as vrias classes que fazem as operaes desejadas pelo usurio, chamadas de classes engines (ALVES, 2003). A classe security efetua a gesto dos providers instalados e as propriedades de segurana do sistema. Esta classe tem apenas mtodos estticos e como no instanciada, pode ser utilizada para obter uma lista dos providers instalados. O mtodo getProviders retorna um array com todas as sub-classes provider existentes no sistema, por ordem de preferncia. O mtodo getProviders permite obter um provider especfico atravs do seu nome e as propriedades de segurana, esta classe mantm uma lista destas propriedades, lista esta que est acessvel atravs dos mtodos getProperty e setProperty. As classes engine definem os tipos de servios criptogrficos de uma forma abstrata, independente do algoritmo e da implementao e define uma API para esses servios. Um servio est associado a uma operao ou a um tipo particular e pode efetuar operaes criptogrficas como a assinatura digital ou o hashing; gerar material criptogrfico (chaves ou parmetros) necessrio para efetuar operaes criptogrficas; gerar objetos de dados (keystores ou certificados) que encapsulam chaves criptogrficas de uma forma segura. Associadas s Engine Classes existem as SPI - Service Provider Interfaces que so classes abstratas que definem mtodos e as respectivas implementaes desses servios. O nome de uma classe SPI o mesmo da Engine Class correspondente seguido de Spi Signature/SignatureSpi. Na implementao de um provider em que se pretenda fornecer um determinado servio necessrio definir uma sub-classe da classe SPI correspondente e implementar todos os mtodos virtuais. Ao contrrio das Engine Classes, as classes SPI esto relacionadas com algoritmos especficos. Esta informao essencial e est acessvel atravs da API da Engine
212

Class. Compete classe principal do provider registrar as implementaes que disponibiliza, de modo a que a engine.class correspondente as consiga invocar. No que diz respeito s engine classes que efetuam a instanciao de objetos com material criptogrfico, existem dois tipos: Factories Instanciam objetos com base em informao j existente num formato qualquer. Generators Criam novas unidades de informao criptogrfica, por exemplo as chaves criptogrficas. Alguns exemplos de Engine Classes da JCA so as seguintes: MessageDigest Utilizada para calcular o hash (message digest) dos dados que lhe so transferidos. Signature Utilizada para assinar dados e verificar assinaturas. KeyPairGenerator Utilizada para gerar pares de chaves pblicas e privadas compatveis com um algoritmo de cifra especfico. KeyFactory Utilizada para converter chaves criptogrficas genricas do tipo Key, em representaes transparentes das mesmas chaves e vice-versa. CertificateFactory Utilizada para lidar com certificados de chave pblica e CRLs - Certificate Revocation Lists. KeyStore Utilizada para gerar e gerenciar uma keystore. Uma keystore uma base de dados de chaves. As chaves privadas so associadas com uma cadeia de certificados que autentica a chave pblica associada. Uma keystore tambm contm certificados emitidos por entidades de confiana. AlgorithmParameters Utilizada para gerar parmetros de um determinado algoritmo (incluindo codificao e decodificao). AlgorithmParameterGenerator Utilizada para gerar um conjunto de parmetros compatveis com um determinado algoritmo. SecureRandom Utilizada para gerar nmeros aleatrios ou pseudoaleatrios. A tabela 13.1 mostra os alguns dos algoritmos criptogrficos e o respectivo provider usado pela JCA.

213

Tabela 13.1 Alguns Algoritmos Disponibilizados na biblioteca JCA (CUNHA, 1999).


Provider SunJCE, Crypto-J, IAIK,ABA Cryptix, Entrust DESede, 3DES SunJCE, Crypto-J, IAIK, ABA Cryptix, Entrust RC2 Crypto-J, IAIK, Cryptix, Entrust RC4 Crypto-J, IAIK, ABA, Cryptix, Entrust RC5 Crypto-J, IAIK, RSA Crypto-J, IAIK, ABA, Cryptix ElGamal Cryptix RPK Cryptix IDEA IAIK, ABA, Cryptix Blowfish IAIK, Cryptix Twofish ABA GOST IAIK CAST128 IAIK, Entrust CAST5, LOK191, SAFER Cryptix SPEED, Square Cryptix PBEWithMD5AndDES IAIK, ABA PbeWithSHAAnd40BitRC2 IAIK PBEWithSHA1And128Bit ABA RC4 DES Algoritmo

13.2.3.5 JCE Java Cryptography Extension

O JCE (Java Cryptography Extension) oferece extenses ao JCA. Este pacote (javax.crypto) estende a funcionalidade do Pacote Java.security. O JCE foi criado separadamente devido s restries de exportao de tecnologias criptogrficas em pases como EUA e Canad. Todas as tecnologias abrangidas por esta restrio so implementadas apenas neste pacote. Tecnologias da JCE: As tecnologias que so implementadas na JCE so as seguintes: Algoritmos de cifra simtrica como o RC4. Algoritmos de cifra simtrica por blocos como o DES, o RC2 e o IDEA. Algoritmos de cifra assimtrica como o RSA. Algoritmos de cifra baseados em passwords (password-based encryption PBE). Message Authentication Codes (MAC). Key Agreement (acordo de chaves).

214

Mais informaes podem ser obtidas em www.jca.com O leitor poder facilmente entender todas essas facilidades oferecidas por estas bibliotercas, uma vez que a maioria dos algoritmos foram estudados e apresentados nos captulos anteriores.

13.3 Alguns dados de Desempenho


Para testar e avaliar as bibliotecas OpenSSL e CryptoAPI foram implementados os algoritmo criptogrficos Blowfish e DES (GATTI, 2003), (LAINO, 2003). Esses algoritmos foram implementados em linguagem C seguindo as especificaes das bibliotecas CriptoAPI e OpenSSL, para que os testes pudessem ser executados e as comparaes feitas.

13.3.1 Ambiente de Teste


Na realizao dos testes de alguns algoritmos pertencentes s bibliotecas OpenSSL e CryptoAPI, foi criado um sistema que facilitou a obteno de dados e visualizao do desempenho de alguns desses algoritmos. Assim, nesse sistema foram definidas vrias classes (GATTI, 2003). A classe cryptoFrame, responsvel pela interface grfica do programa. Existe tambm uma classe chamada CifradorDes/Blowfish, que a classe que chamada para cifrar e decifrar os arquivos selecionados. Esta classe funciona de acordo com as opes selecionadas na execuo do programa, ou seja ela cifrar ou decifra o arquivo selecionado na opo abrir e utilizar o algoritmo escolhido pelo usurio no momento da execuo do programa. Quando um arquivo cifrado, alm de sua extenso normal a ele, adicionada uma outra extenso .crypt que significa que o arquivo foi cifrado. Se na hora da escolha do arquivo, este j possuir a extenso .crypt o programa automaticamente far o processo inverso, decifrando assim o arquivo e adicionando a extenso .decrypt. Aps qualquer um dos processos, seja cifrar ou decifrar, o tempo de execuo mostrado na tela. O tempo dado em milisegundos (ms). Para cifrar ou decifrar utilizando ambos algoritmos necessrio uma chave, esta chave tambm est especificada nesta classe. Inicialmente, foi feita a escolha por uma chave fixa, pois apenas um dos testes executados leva em conta o tamanho da chave. Caso seja necessria a mudana da chave, ser necessrio somente a edio de duas linhas de cdigo desta classe. O sistema criado pelos autores tambm oferece informaes dos arquivos que sero cifrados e/ou decifrados. Estas classes fazem parte da ferramenta JBCRI (GATTI, 2005). Uma outra ferramenta, que contm mais opes de teste apresentada no captulo 17 deste livro, onde se mostra como usar a ferramenta On-Line, chamada de WEBCRY. Existe tambm a classe DialogError que responsvel pelo tratamento das excees, ou seja ela chamada toda vez que os campos necessrios no forem
215

preenchidos corretamente. Por exemplo selecionar o algoritmo para cifrar e/ou decifrar, mas no abrir o arquivo, ou abrir o arquivo e no selecionar o algoritmo a ser utilizado. A classe principal ou classe que contm o mtodo main chamada de CryptoManager. A classe CryptoManager responsvel pela validao dos frames. Ela tambm define a interface, a qual possui o tom de cinza escuro e azul para as janelas, e tambm faz a chamada para os outros mtodos (GATTI, 2005).

13.3.2 Testes Preliminares


Foram consideradas diferentes arquiteturas, (hardware disponvel, quantidade de memria, e processadores), assim como sistemas operacionais modernos: Windows e Linux, considerando diferentes tipos e tamanho de arquivos para cifrar e decifrar. Para realizar o teste foram utilizados trs arquivos de tipos diferentes, porm com o mesmo tamanho, 1.56 Mbytes. Os arquivos utilizados foram: Arquivo de vdeo, extenso AVI; Arquivo de texto do Microsoft Word, com extenso DOC e Arquivo de udio, extenso mp3.

Na maioria dos testes, o computador utilizado foi um AMD Athlon 900Mhz, com 512 Mbytes de RAM, utilizando o sistema operacional Windows XP Professional Edition. Foi utilizada uma chave de 64 bits na criptografia dos arquivos. O primeiro teste teve como objetivo a comparao dos mesmos algoritmos, porm derivados de bibliotecas diferentes. As comparaes foram feitas baseadas no tempo de execuo (cifrar e decifrar os arquivos), dado em milisegundos (ms). A figura 13.2 e 13.3 mostram os resultados de cifragem e decifragem dos algoritmos DES e Blowfish, respectivamente, para as especificaes das duas bibliotecas em anlise: CryptoAPI e OpenSSL. Percebe-se que no h muita diferena entre as bibliotecas, para o caso do DES. J para o Blowfish h um tempo maior para o OpenSSL. Outro aspecto, que diferentes arquivos, ainda que do mesmo tamanho, podem ter tempo de cifrar e decifrar diferentes, o qual pode ser explicado pela diferente entropia em cada um deles, alm da diferente estrutura dos algoritmos, entre outros. Percebe-se que quando comparadas as duas verses do algoritmo DES provenientes de bibliotecas diferentes, a diferena entre eles pouca.

216

Figura 13.2. Tempo CryptoAPI e OpenSSL Algoritmo DES

Figura 13.3. Tempo CryptoAPI e OpenSSL Algoritmo Blowfish

Impacto do Sistema Operacional: pode ser observado nas figura 13.4 e 13.5. As seguintes observaes so possveis: O tempo de de cifrar e decifrar tambm foi diferente; O Linux, mostrou ser um bom sistema, pois geralmente foi possui tempos de processamentos similares aos obtidos em outros S.O do tipo Windows. Ainda que as diferenas em nvel de sistema operacional existam, elas refletem-se nos diferentes tempos de processamento obtidos para o algoritmo DES, elas no so significativas, como possvel observar nas figuras 13.4 e 13.5.

217

Figura 13.4. Impacto do Sistema Operacional nas bibliotecas CryptoAPI e OpenSSL Tempo de Cifragem no algoritmo DES -

Figura 13.5. Impacto do Sistema Operacional nas bibliotecas CryptoAPI e OpenSSL Tempo de Decifragem no algoritmo DES -

Impacto do Processador: Como esperado, os resultados da figura 13.6 mostram que a velocidade de processamento dos algoritmos criptogrficos pode ser influenciada tanto pelo sistema operacional quanto pela plataforma da mquina (processador).

218

Figura 13.6 Impacto do Processador no DES e Blowfish

Observa-se no grfico que os arquivos que foram cifrados no computador com o processador AMD Athlon XP 1800++ foram mais do que duas vezes mais rpidos tanto na criptografia quanto na decriptografia de arquivos. Lembrar que a velocidade no somente depende da relao entre as velocidades dos processsadores, pois h mais fatores que influcenciam tais como tamanhos das memrias, velocidades de acesso s memrias, arquitetura do processador e do sistema PC, entre outros. Impacto de Simplificaes dos Algoritmos: A figura 13.7 mostra a comparao entre o algoritmo Blowfish e a implementao sugerida para melhorar a velocidade do algoritmo, chamada de MiniBlowfish que aproveita o funcionamento do Blowfih e faz as trs seguintes simplificaes: (i) Menos e menores S-boxes. Pode ser possvel reduzir o nmero de S-box de quatro para um. Adicionalmente, pode ser possvel sobrepor entradas em um nico S-box: entrada 0 consistiria de bytes 0 a 3, entrada 1 consistiria em bytes 1 a 4 e etc. A simplificao anterior reduz as exigncias de memria para os quatro S-boxes de 4096 para 1024 bytes, o ltimo reduz as exigncias para um nico S-box de 1024 bytes para 259 bytes. Assim, podem ser exigidos passos adicionais para eliminar as simetrias que estas simplificaes criam. ii) Menos iteraes. seguro reduzir o nmero de repeties de 16 para 8. O nmero de repeties necessrias para segurana pode depender do comprimento da chave. (iii) Clculo rpido de sub-chaves. O mtodo atual de clculo de sub-chaves exige calcular todas as sub-chaves antes de qualquer processo de cifrar dados. Uma alternativa calcular cada sub-chave independente de cada outra.

219

Figura 13.7 Tempo no Blowfish e MiniBlowfish

Os testes mostram apenas o que j era esperado, com a implementao do MiniBlowfish o tempo foi diminudo drasticamente. No obstante, esta implementao no deve ser utilizada comercialmente pois com as mudanas feitas para se obter um melhor desempenho quanto velocidade do algoritmo diminui-se a sua segurana. Lembrar que em alguns algoritmos, o nvel de segurana depende tanto do tamanho da chave quanto do nmero de iteraes (ou rotaes) realizadas.

Figura 13.8 Impacto do Tamanho de Chaves Algoritmo Blowfish

Impacto do Tamanho das Chaves: De acordo com os testes realizados, alterando o tamanho das chaves, foi possvel verificar, conforme esperado, que o algoritmo Blowfish implementado sofre algumas pequenas alteraes no tempo de processamento (ver figura 3.8). No obstante, esse aumento no tempo de processamento quando se aumenta a chave, no foi significativo. Apesar disso, bom lembrar, o forte impacto que o tamanho da chave possui no nvel de segurana e no tempo de processamento.

220

13.4 Consideraes Finais do Captulo


Aps diferentes testes realizados possvel destacar algumas observaes. O tempo gasto pelos algoritmos no processo de cifrar e decifrar arquivos, est ligado a vrios fatores, entre eles, tipo de arquivo, quantidade de memria disponvel na mquina onde se realizam os testes, processos rodando na mquina com maiores prioridades e tambm linguagem em que o algoritmo foi implementado. Ao oposto de que se tinha imaginado, os testes tambm mostraram que em alguns algoritmos didticos, o aumento da chave no influencia significativamente no tempo gasto na criptografia, mas importante lembrar que uma chave pequena pode comprometer a segurana do sistema onde esse algoritmo esteja sendo usado. Ficou estabelecido tambm que na tomada de tempo necessrio avaliar os processos que esto sendo executados na mquina e as suas prioridades e se no for possvel desativar tais processos, necessrio que se aumente a prioridade do algoritmo ou se diminua a prioridade dos outros processos em execuo na mquina.

221

Captulo 14
Hardware Especializado para Segurana

Este captulo apresenta alguns dispositivos especficos para segurana que vm sendo muito usados nos ltimos anos, e que cada dia ganham mais popularidade, como so os HSM, Smartcards e recentemente, processadores especficos para segurana conhecidos como criptoprocessadores.

14.1 Criptoprocessadores
Existem vrias aplicaes onde os criptoprocessadores podem ser utilizados, entre elas roteadores com suporte a VPN, servidores de acesso remoto, bridges e outros dispositivos de redes que necessitem de algum tipo de criptografia. Os criptoprocessadores podem ser utilizados para ampliar a velocidade dos sistemas que utilizam criptografia livrando o processador principal desta tarefa. O processdor principal aquele que executa o programa principal de uma aplicao ou de um usurio e que solicitou realizar as operaes criptogrficas. Deste modo, enquanto os criptoprocessadores executam operaes de criptografia e decriptografia o processador principal pode continuar seu processamento normal. Esta seo apresenta dois criptoprocessadores que foram projetados utilizando abordagens diferentes. Os processadores da famlia S1 da Motorola realizam bem esta funo, podendo at utilizar acessos diretos memria para realizar as operaes de criptografia. Existem tambm aplicaes onde, alm de desempenho, necessrio um baixo consumo de energia. Estas aplicaes so telefones celulares, dispositivos para redes wireless e computao mvel. Desta forma, uma das principais preocupaes no desenvolvimento do criptoprocessador DSRCP foi o consumo de energia, o que fez com que este processador apresentasse o menor consumo de energia entre os processadores estudados. O primeiro processador discutido o DSRCP proposto por Goodman e Chandrakasan (GOODMAN, 2001) onde a arquitetura proposta contm um conjunto de instrues que permite a implementao de vrios algoritmos de criptografia assimtricos.

222

O segundo criptoprocessador discutido o MPC185 da famlia S1 da Motorola (MPC185TS, 2003). Este processador, bem como os outros processadores desta famlia, no possu um conjunto de instrues. Eles possuem em suas arquiteturas implementaes dedicadas dos algoritmos de criptografia mais comuns (tanto simtricos quanto assimtricos), tais como aqueles discutidos nos captulos anteriores, e sua programao feita por meio de gravaes em seus registradores internos.

14.1.1 O Criptoprocessador DSRCP


O criptoprocessador DSRCP (Domain-specific Reconfigurable Cryptography Processor) um processador de domnio especfico para a execuo de algoritmos criptogrficos assimtricos. Ele foi proposto por James Goodman e Anantha Chandrakansan (GOODMAN, 2001) para prover segurana a sistemas portteis que devem funcionar com um baixo consumo de energia. Como o nmero de operaes necessrias para a implementao dos algoritmos criptogrficos assimtricos pequena, o processador pde ser projetado com hardware reconfigurvel de modo que a sobrecarga que ocorre com dispositivos programveis e reconfigurveis genricos fosse minimizado. O conjunto de instrues do DSRCP foi definido de acordo com o padro IEEE 1363 (IEEE 1363, 1999) que realiza a especificao de tcnicas para a criptografia de chave pblica e os parmetros relacionados a este tipo de criptografia. Com isto, as funes aritmticas foram implementadas de acordo com as primitivas definidas no padro. O conjunto de instrues deste processador possu 24 instrues divididas em 6 grupos de operao: Aritmtica convencional, Aritmtica modular, Aritmtica GF(2n), Aritmtica de curvas elpticas sobre GF(2n), Manipulao de registradores e Configurao do processador. Estas instrues so particionadas em trs nveis hierrquicos. O primeiro nvel corresponde s instrues que so executadas diretamente pelo hardware. O segundo nvel composto por instrues microprogramadas que so compostas por seqncias de instrues correspondentes ao primeiro nvel. Da mesma forma, o terceiro nvel composto por seqncias de instrues correspondentes ao primeiro e segundo nvel. O DSRCP possu como elementos bsicos de sua arquitetura um controlador global, uma unidade de microprograma (ROMs de -programa), um controlador para desligamento de parte do sistema para economia de energia (Controlador de Desligamento) e uma interface de entrada e sada (Interface de E/S) como mostra a figura 14.1 (GOODMAN, 2001).

223

Figura 14.1. Arquitetura do DSRCP (GOODMAN, 2001)

A funo do Controlador Global realizar um controle de alto nvel dentro do DSRCP. Ele utiliza trs filas de controle que so necessrias para implementar os trs nveis de instrues presentes no DSRCP. A utilizao de ROMs de -programa permite uma maior simplicidade e flexibilidade para que alteraes no conjunto de instrues possam ser realizadas com o mnimo esforo. Como o DSRCP foi desenvolvido para funcionar em ambientes portteis, um elemento importante de sua arquitetura o controlador de desligamento, que responsvel por desabilitar partes no utilizadas do datapath para reduzir o consumo de energia. A interface de entrada e sada utiliza um barramento de 32 bits. Isto permite um bom mapeamento com os sistemas existentes alm de permitir rpidas operaes de entrada e sada que consomem no mximo 32 ciclos para o maior operando possvel composto de 1024 bits (GOODMAN, 2001). O principal componente do DSRCP o Datapath Reconfigurvel que composto por quatro blocos funcionais: um register file de oito palavras, um somador, um comparador e a unidade lgica reconfigurvel. O tamanho do register file foi definido como oito palavras, uma vez que este o tamanho mnimo necessrio para implementar todas as funes do DSRCP. Ele foi implementado utilizando registradores do tipo TSPC (True-Single-Phase-Clock) (YUAN, 1989). O somador capaz de realizar somas e subtraes entre dois operandos de n bits, onde: 8 n 1024. Estas operaes podem ser realizadas em at trs ciclos. A unidade comparador capaz de realizar comparaes em um nico ciclo executando um XOR entre os dois operandos. Ao realizar a comparao, dois flags (gt e eq) so gerados de forma a decodificar todas as relaes possveis.

224

A unidade lgica reconfigurvel contm seis registradores (Pc, Ps, A, B, Exp e N) e um bloco de lgica reconfigurvel capaz de implementar todas as operaes do datapath. O datapath possui trs barramentos separados para a distribuio dos dados entre suas unidades funcionais. Nem todos os registradores e barramentos so conectados, uma vez que foi observado por meio de uma anlise que haviam conexes desnecessrias e estas foram removidas (GOODMAN, 2001). A figura 14.2 apresenta o diagrama em blocos do datapth recofigurvel do DSRCP onde podem ser visualizados suas unidades funcionais.

Figura 14.2. Diagrama em blocos do Datapath Reconfigurvel (GOODMAN, 2001)

14.1.2 Processadores de Segurana da Motorola


A famlia S1 da Motorola disponibiliza uma srie de processadores voltados para a segurana, chamados geralmente, de Motorola Security Processor. So eles: MPC180, MPC190, MPC185 e MPC184 (MPC180TS, 2003), (MPC184TS, 2003), (MPC185TS, 2003), (MPC190TS, 2003). Esta famlia de processadores no possui um conjunto de instrues, mas sim implementaes dedicadas de algoritmos criptogrficos. Alguns processadores desta famlia como o MPC184 e o MPC185 residem no espao de endereamento do processador. Desta forma quando uma aplicao requer funes criptogrficas, ela simplesmente cria descritores para o criptoprocessador definindo qual funo deve ser executada e a localizao dos dados. Estes processadores tambm disponibilizam o funcionamento Master/Slave permitindo, desta forma, que o processador principal defina qual a operao a ser realizada escrevendo em alguns registradores do criptoprocessador e, desta forma, o criptoprocessador realiza as leituras e escritas diretamente na memria do sistema
225

para completar a tarefa requisitada. Outra maneira de realizar a comunicao entre o criptoprocessador e o processador principal atravs do protocolo PCI. Os processadores desta famlia possuem cinco blocos funcionais em suas arquiteturas: um mdulo de interface do chip com o sistema (Master/Slave Interface), canais de criptografia (Crypto-channel), um mdulo de controle (Control), unidades de execuo e um gerador de nmeros aleatrios. Os processadores MPC184 e MPC185 possuem ainda um mdulo de memria RAM de 8 e 32 Kbytes respectivamente (MPC180TS, 2003), (MPC184TS, 2003), (MPC185TS, 2003), (MPC190TS, 2003). Para exemplificar a arquitetura de um processador desta famlia ser tomado como exemplo o diagrama de blocos funcionais do processador MPC185 apresentado na figura 14.3. O processador MPC185 foi escolhido como exemplo por ser o processador mais completo da famlia. Desta forma, todos os blocos funcionais discutidos a seguir fazem parte do processador MPC185 (MPC180TS, 2003), (MPC184TS, 2003), (MPC185TS, 2003), (MPC190TS, 2003).

Figura 14.3. MPC185 Blocos Funcionais (MPC185TS, 2003)

Como descrito anteriormente, o criptoprocessador pode se comunicar com o sistema de duas maneiras: por meio do protocolo PCI ou pelo espao de endereamento do sistema. Desta forma o mdulo Master/Slave Interface o responsvel por esta comunicao. O mdulo de controle responsvel por gerenciar os recursos do chip. O controlador recebe as requisies de servio por meio do barramento e dos canais de criptografia e realiza o escalonamento das atividades. Os canais de criptografia so responsveis por analisar os cabealhos dos pacotes e requisitar ao controlador os servios criptogrficos. Os servios criptogrficos requeridos so processados pelas unidades de execuo (Execution Units EUs) que so blocos funcionais que realizam o processamento
226

dos algoritmos de criptografia. As unidades de execuo apresentadas na figura 14.3 so: PKEU (Public Key Execution Unit) que responsvel pela execuo dos algoritmos de chave pblica; DEU (DES Execution Unit) que responsvel pela execuo do algoritmo DES; AESU (AES Execution Unit) responsvel pela execuo do algoritmo AES; MDEU (Message Digest Execution Unit) responsvel pela execuo dos algoritmos do tipo Message Digest (MENEZES, 1997); importantes para realizar assinaturas digitais, motivo pelo qual usanm funes de hashing; AFEU (Arc Four Execution Unit) realiza a criptografia utilizando um algoritmo do tipo Stream (MENEZES, 1997) e; KEU (Kasumi Execution Unit) responsvel pela execuo de dois algoritmos criptogrficos baseados no algoritmo de Kasumi. Por meio da figura 14.3 pode-se observar que as unidades de execuo PKEU, DEU, AESU e MDEU foram duplicados, uma vez que estas unidades so pelos algoritmos de criptografia mais utilizados e provavelmente devero processar uma grande quantidade de dados (MPC185TS, 2003). O mdulo gerador de nmeros aleatrios (Random Number Generator RNG) responsvel por gerar nmeros aleatrios de 32 bits, uma vez que vrios algoritmos criptogrficos necessitam de nmeros aleatrios para a criao das chaves, conforme explicado no captulo 1. O mdulo de memria RAM (General Purpose RAM gpRAM) utilizado para o armazenamento das chaves e dos dados.

14.1.3 Caractersticas das Arquiteturas e Desempenho


Nesta seo so apresentadas algumas principais caractersticas das arquiteturas, bem como, suas vantagens e desvantagens. Ao mesmo tempo ser realizada uma anlise de desempenho dos criptoprocessadores, vistos nas duas sees anteriores. A principal diferena entre as arquiteturas apresentadas o fato de possuir ou um conjunto de instrues para a implementao dos algoritmos, ou implementaes dedicadas dos algoritmos em hardware. Esta escolha influencia as caractersticas finais dos criptoprocessadores como a facilidade para o acrscimo de novos algoritmos e o desempenho final do sistema. Como o DSRCP um processador de domnio especfico para execuo de algoritmos assimtricos foi possvel definir um conjunto de instrues comuns para a execuo dos algoritmos desta classe. Isto conferiu ao DSRCP uma grande flexibilidade para o acrscimo de novos algoritmos assimtricos. Por outro lado, este
227

tipo de opo apresenta um desempenho inferior ao desempenho de uma implementao dedicada. A tabela 14.1 mostra as estatsticas de desempenho de algumas implementaes do algoritmo de exponenciao modular que muito utilizado em sistemas de criptografia assimtricos. Pode-se observar que a implementao proposta por Shand (SHAND, 1993), que uma implementao dedicada, possui um desempenho significativamente melhor que a implementao utilizando o DSRCP. No entanto, importante ressaltar que o DSRCP foi projetado para ambientes de baixo consumo de energia o que tambm influencia negativamente o seu desempenho.
Tabela 14.1. Estatsticas de desempenho Exponenciao Modular (GOODMAN, 2001)
Criptoprocessador Shand MPC180 DSRCP Consumo (W) 0,6 <0,075 Tamanho do operando (bits) 1024/512 1024 1024/512 Tempo por operao (ms) 6/0,85 32 32,1/8,2 Ciclos por operao (ciclos/bit2) 0,32/0,13 2,01 1,53/1,56 Clock Energia por (MHz) operao (mJ/op) 40 66 19,2 50 2,41/0,37

O criptoprocessador MPC185 foi projetado para executar tanto algoritmos simtricos quanto algoritmos assimtricos (MPC185TS, 2003). Desta forma existe a necessidade de implementaes dedicadas uma vez que o estudo de um conjunto de instrues para atender tanto algoritmos simtricos quanto assimtricos mostra-se complexo devido ao grande nmero e a diferena na natureza das operaes (lembrar que as operaes realizadas por algoritmos simtricos so geralmente permutaes, rotaes, ou-exclusivo, etc. enquanto que as operaes realizadas por algoritmos assimtricos envolvem algoritmos matemticos complexos como exponenciao modular, operaes sobre curvas elpticas, etc.) (MENEZES, 1997).
Tabela 14.2. esempenho dos processadores da famlia S1 Motorola (Mbps) (MPC184TS, 2003), (MPC185TS, 2003), (MPC190TS, 2003)
Algoritmo Processador MPC184 MPC185 MPC190 DES CBC 43 204 191 3DES CBC 36 168 180 ARC4 43 102 107 MD5 38 177 191 SHA-1 34 162 175

Com isto, os processadores da famlia S1 da Motorola apresentaram bons resultados com a execuo de alguns algoritmos. A tabela 14.2 apresenta as estatsticas de desempenho dos processadores da famlia S1 da Motorola. Nesta tabela pode ser observado que o algoritmo DES implementado no MPC185 realiza a criptografia em at 204 Mbps (Mega Bits por segundo), que equivale aproximadamente a 25 Mbytes/s.

14.2 Processadores de Rede com Segurana


228

14.2.1 Conceitos de NPs


Os processadores podem ter aplicaes diferentes, desde a CPU da placa-me de um computador, at os sistemas embarcados, passando por placas de vdeo 3D, som, placas de rede at roteadores. A demanda cada vez maior por poder de processamento e o surgimento de novas aplicaes promovem uma constante busca por alternativas e arquiteturas que visem melhorar a performance dos computadores, especialmente em aplicaes de tempo real. Dentre os processadores existentes destacam-se os GPPs (General Purpose Processor), onde uma das preocupaes bsicas do projeto com relao sua performance genrica, no se importando com aplicaes especficas, e os PDEs processadores especializados, que podem ser dedicados ou programveis como por exemplo microcontroladores e os DSPs (Digital Signal Processor) (CROWLEY,2000), (LAPSLEY, 1997), (VILLASENOR, 1997 ), (PRADO, 2004). Com relao aos projetos nota-se a produo de ASICs (Application Specific Integrated Circuit), circuitos integrados que se destinam a um nico propsito dentro de alguma aplicao. Estes circuitos sob medida demandam muito tempo para sua produo, meses, at anos, e possuem custos elevados e manuteno onerosa. Ou ainda a implementao em FPGAs, os quais podem ser encontrados como unidades funcionais, co-processadores, unidades de processamento acoplado ao processador ou unidades de processamento isoladas. Um Processador de Rede (NP - Network Processor) um conjunto altamente integrado de micro-cdigo ou mecanismos aceleradores embarcados, subsistema de memria, alta velocidade interconectada e interfaces para enfrentar o processamento de pacotes da rede. Pode fazer uso de pipeline, paralelismo e multi-threading para esconder a latncia, tem um bom gerenciamento de fluxo de dados e suporta comunicaes internas de alta velocidade (CROWLEY, 2000), (EZCHIP, 1999) (FREITAS, 2002), (FREITAS, 2001),(FREITAS, 2000). Como um processador para PC, espera-se de um NP funes como criptografia e segurana, manipulao de pacotes IP, reenvio de informaes, armazenamento e capacidade de "auto aprendizado". A Internet est no dia a dia das pessoas, empresas e instituies de ensino. Seu uso tem acarretado um congestionamento dos links de transmisso. Os principais responsveis so os gateways (roteadores), Os quais confinam o trfego entre redes. Os processadores de rede esto sendo objeto de estudo nas universidades e empresas. Estes processadores surgiram para melhorar a qualidade de servios (QoS: Quality of Services) (TANENBAUM, 1997). O tempo de processamento dos pacotes de rede mais rpido usando os processadores de rede (TABEMBAUM, 1997). necessrio aumentar a capacidade de processamento dos pacotes para que no haja congestionamento e excessiva utilizao da largura de banda. A segurana da informao importante para que os pacotes no possam ser lidos por pessoas no
229

autorizadas. Assim, torna-se necessria a criao de mecanismos que possam impedir que o pacote seja lido. Existem padres e normas de criptografia que podem ser implementadas em processadores de rede. Os processadores geralmente foram baseados em sistemas de propsito geral e sua arquitetura parecida com a dos computadores pessoais. Ao invs disso, os processadores de rede geralmente so projetados utilizando modelos de arquiteturas (PATTERSON, 1997), sendo o modelo mais utilizado o ASIP (Appplication Specific Instruction Set Processor) e o SoC (System-on-Chip) para agregar tcnicas de projeto RISC (Reduced Instruction Set Computing) e ter um desempenho computacional maior. Na figura 14.4 h uma comparao entre a velocidade da rede e das CPUs e se observa um aumento considervel na velocidade da Internet comparando com a velocidade das CPUs.

Figura 14.4 Velocidade da Internet x das CPUs (SHAH, 2001)

A expectativa em relao aos processadores de rede, que os mesmos se tornem o principal componente para redes, da mesma forma que as CPUs so importantes para os PCs. Os Processadores de rede tm fundamental importncia para a comunicao de dados, j que a velocidade de transmisso tem aumentado consideravelmente. O uso da Internet em grande escala e o roteamento de pacotes e o surgimento de novos protocolos e diferentes tipos de redes de dados, tm aumentado o custo para aquisio de novos equipamentos e tambm o custo de atualizao.
230

Assim, processadores de rede so parte de uma classe emergente de circuitos integrados programveis baseados na tecnologia SOC (System On Chip), classificao essa por possuir vrios blocos como memria, portas e interface de comunicao, que executam funes especficas de comunicao de forma mais eficiente que os GPPs (processadores de propsito geral) (CROWLEY, 2000). H uma tendncia em relao aos processadores de rede, que os mesmos se tornem o principal componente para redes, da mesma forma que as CPUs so importantes para os PCs. Com o processador de rede poder se eliminar o gargalo existente na rede hoje. As caractersticas tpicas oferecidas por um NP so: o processamento em tempo real, segurana, store and forward, manipulao de pacotes IP devido camada de rede no modelo OSI ser equivalente camada inter-rede e rodar o protocolo IP (TANENBAUM, 1997). Nessa camada tambm que se encontram os roteadores, outra aplicao dos NPs, que por sua flexibilidade e escalabilidade, permitem a troca de pacotes de tamanhos diferentes em redes com diferentes protocolos e topologias, e tambm a capacidade de aprendizado, como mostra a tabela 14.3.
Tabela 14.3 Representao de aplicaes especficas de processamento de pacotes (CROWLEY, 2000)
Aplicao Especificao

Classificao de pacotes Decises, envio, estatsticas, proteo por firewall. e filtragem Reenvio de Pacotes IP Envio de pacotes IPs baseado em informao de roteamento Network Address Traduo entre roteamento global e pacotes IP privados, mascaramento Translation (NAT) de IP, servidores web, etc. Administrao de fluxo Reduzir congestionamento, gargalos, forar a distribuio da banda (pacotes). TCP/IP Descarregar processamento TCP/IP dos webservers para as interfaces da rede Web Switching Balanceamento de servios web e monitoramento do cache do proxy. Virtual Private Network Criptografia (3DES) e autenticao (MD5). IP Security (IPSec) Transcodificao de Converso de dados de multimdia por demanda de um formato para dados outro dentro da rede Supresso de dados Reduz transmisso redundante de dados que gera custo alto na duplicados transmisso da rede.

Com o avano da tecnologia, algumas empresas desenvolveram processadores de rede dedicados, capazes de serem mais velozes e com maior desempenho do que processadores de propsito geral. Esses processadores vieram para reduzir o gargalo das comunicaes causado muitas vezes pelos roteadores, switches e hubs. A tabela 14.4 mostra os principais processadores de rede existentes hoje na comunidade, e destaca as principais funcionalidades e caractersticas que eles possuem, em especial, a sua funcionalidade especfica na viso de aplicaoes de rede.
231

Algumas empresas j desenvolveram processadores de redes, entre elas pode-se citar a Lucent e Agere, Motorola (MOTOROLA, 1999),(MOTOROLA, 2003), Intel (INTEL, 2000), Ezchip (EZCHIP, 1999), IBM (IBM, 1999).
Tabela 14.4. Processadores de Redes Comerciais (CROWLEY, 2000),(PRADO, 2004)

NPs Comerciais

Caractersticas mais Importantes

Motorola PowerQUICC Aplicaes em roteadores e switches de LAN/WAN, dispositivos Family de integrao de redes, concentradores de rede, gateways, DSL/cable modems e sistemas de voz sobre IP. Motorola/C-Port C5Prioriza os critrios de QoS (qualidade de Servio) Family Intel IXP1200 Sete processadores RISC , responsvel pelo processamento mais complexo, tal como construo e manuteno de tabelas e gerenciamento da rede. IBM PowerNP NP4GS3 Encaminhar e filtrar pacotes analisando campos do protocolo IP, Controlar protocolos de roteamento tal como: RIP, OSPF e BGP, Gerenciar, configurar, diagnosticar e suportar agentes SNMP. Lucent / Agere Aplicaes para este processador so: Roteadores e switches, FPP/ASI/RSP Firewalls, gerenciamento e monitoramento de redes, Segmentao ATM e Frame Relay, Processamento de lista e controle de acesso. EZCHIP NP 1 Aplicaes em roteadores, switches e gateways, Balanceamento de carga, Analisadores e testadores de rede, Firewalls e VPNs. Sitera/Vitesse Prism Processamento dos pacotes, classificao, lookups e anlise de QoS IQ2000 Family (Quality of Service) e Cs (Class of Service). O IQ2000 trabalha na camada 2 e 3 em equipamentos como switches e roteadores e suporta pacotes com taxas de 2.5Gbps. Chameleon CS2000 Family Aplicaes em estaes base sem fio de 2G e 3G, Wireless Voz sobre IP e alto desempenho DSL. processador reconfigurvel. Intel IXP2800 Mdulo de segurana no qual realiza criptografia e flexibilidade da execuo dos protocolos, otimizao dos protocolos para determinadas aplicaes, e execuo de aplicaes diferentes.

14.2.2 Arquitetura dos Sistemas de Segurana com NPs


Em termo gerais, em hardware, h trs maneiras que permitem adicionar funes de segurana a um determinado equipamento de networking, aquele que est sempre facilitando a comunicao entre vrios usurios. Primeiro o mtodo de usar um co-processador acoplado a um processador de rede ou a um processador de propsito geral. Este mtodo torna-se menos prtico porque o pacote (conjunto de dados sendo transmitidos em uma determinada comunicao) deve atravessar recursos compartilhados tais como barramentos ou memria de dados, pertencentes aos equipamentos de outros usurios que esto na rota de comunicao. O segundo mtodo consiste em adicionar um processador de segurana com um processador de rede, o que possibilita elevadas taxas de transferncia de dados. O processador de segurana pode executar funes obrigatrias de um determinado processador de rede, tendo assim que remontar o pacote, o que aumenta (geralmente
232

duplica) a rea de trabalho do sistema, isto , aumenta a necessidade de recursos de armazenamento (memria e etc.) no sistema de comunicao. O terceiro mtodo deve adicionar a funcionalidade da segurana no mesmo processador que se encarrega das funes de comunicao na rede, assim adiciona a funcionalidade de segurana no processador de rede, o que mantm ou aumenta a taxa de comunicao da rede e minimiza os recursos de hardware no sistema. Com base nessas trs possibilidades explicadas acima, os processadores atuais que contm mecanismos e funes de segurana requerem que um determinado pacote este disponvel de forma inteira na memria antes de ser processado, sendo assim o pacote estar inteiro na memria antes de ser transmitido, o que aumenta a velocidade de comunicao em um sistema interconectado via rede, tipo internet, por exemplo.

Arquitetura Look-aside: Como se pode observar na figura 14.5, entre um processador de rede e um processador de segurana na configurao look-aside, os dados do pacote devem tipicamente atravessar a memria quatro vezes, ao contrrio de duas vezes, e o barramento entre o processador de rede e o processador de segurana deve ser capaz de fazer ao menos duas vezes a taxa desejada.

Figura 14.5 - Arquitetura look-aside

Arquitetura Flow-through: A arquitetura Flow-through resolve os problemas de desempenho da arquitetura look-aside, mas requer que o processador de segurana seja capaz de fazer muitas das funes que o processador de rede precisaria e deveria fazer. Algumas destas tarefas incluem a remontagem dos pacotes, implementar o protocolo que processa os pacotes sendo transmitidos em uma comunicao, e a respectiva manipulao de exceo para evitar erros de comunicao. desejvel poder usar a mesma arquitetura subjacente para mltiplas aplicaes. Isto seria possvel se a funcionalidade de segurana fosse adicionada ao processador de rede, responsvel pela comunicao entre vrios usurios interconectados.

233

Na Figura 14.6 pode-se observar o mecanimo da arquitetura Flow-through. Algumas aplicaes requerem que o processador de rede esteja colocado antes do processador de segurana, outros requerem que o processador de segurana esteja colocado antes do processador de rede, e outros requerem um processador de rede antes e depois do processador de segurana. Por exemplo, uma aplicao do proxy do SSL requer a terminao de uma conexo do TCP, do SSL que processam, e ento do estabelecimento de uma conexo nova do TCP (INTEL, 2000).

Figura 14.6 - Arquitetura Flow-through

Em um ambiente com segurana, necessrio que o processador de rede com segurana realize as operaes de processamento normal a uma comunicao e processe tambm as aes e funes relacionadas com segurana, por exemplo execuo de algoritmos criptogrficos, e etc. O processamento do protocolo inclui encapsular protocolo de segurana (ESP), encabeamento de autenticao (AH), fixa a camada dos sockets (SSL), a segurana da camada de transporte (TLS), e realize as operaes normais de outros protocolos que no contem aes de segurana tais como o Transmission Control Protocol (TCP) e processamento do Internet Protocol (IP). O algoritmo de criptografia inclui a manipulao de dados que necessita ser feita na totalidade dos pacotes, mantendo a confiabilidade e a integridade. A arquitetura Flow-through requer de um processador de segurana que dever executar funes similares s funes de um processador de rede, o qual alm de processar informaes atende tambm s necessidades dos protocolos de comunicao. Isto pode ser feito com um processador dedicado ou talvez com vrios processadores que integram e executam de forma integrada as funes de um processador de segurana. Uma pergunta interessante levantada: melhor adicionar as funes necessrias a um processador de rede para permit-lo que faa e processe aes de segurana ou adicionar um processador especial que realize essas funes e trabalhe em conjunto com o processador de rede ? Tentando resolver essa questo, vrias processadores modernos de rede esto integrando aes e funes criptogrficas e de segurana nos prprios processadores de rede. Um deles, e que na viso dos autores, merece destaque o processador de rede da Intel, o IXP2800 (IXP2800, 2005). foi adicionado a funcionalidade e a flexibilidade extensivas do processador de rede e adicionado os algoritmos criptografia necessrios.

234

14.2.3 Processador IXP 2800


Existem diversos tipos de equipamento em hardware, que oferecem funes e servios de criptografia e segurana, tais como: Processadores de Rede comerciais de diversos fabricantes, processadores especializados para segurana (Ex. o processador IXP 2800 visto na seo anterior) e coprocessadores (Ex. o IBM 4758).
Tabela 14.5. Processadores de Redes Comerciais
Processadores de Caractersticas mais Importantes Rede Comerciais Motorola Aplicaes em roteadores e switches de LAN/WAN, PowerQUICC dispositivos de integrao de redes, concentradores de Family rede, gateways, DSL/cable modems e sistemas de voz sobre IP. Motorola/C-Port Prioriza os critrios de QoS (qualidade de Servio) C5 Family Intel IXP1200 Sete processadores RISC , responsvel pelo processamento mais complexo, tal como construo e manuteno de tabelas e gerenciamento da rede. IBM PowerNP Encaminhar e filtrar pacotes analisando campos do NP4GS3 protocolo IP, Controlar protocolos de roteamento tal como: RIP, OSPF e BGP, Gerenciar, configurar, diagnosticar e suportar agentes SNMP. Lucent / Agere Aplicaes para este processador so: Roteadores e FPP/ASI/RSP switches, Firewalls, gerenciamento e monitoramento de redes, Segmentao ATM e Frame Relay, Processamento de lista e controle de acesso. EZCHIP NP 1 Aplicaes em roteadores, switches e gateways, Balanceamento de carga, Analisadores e testadores de rede, Firewalls e VPNs. Sitera/Vitesse Processamento dos pacotes, classificao, lookups e Prism IQ2000 anlise de QoS (Quality of Service) e Cs (Class of Family Service). O IQ2000 trabalha na camada 2 e 3 em equipamentos como switches e roteadores e suporta pacotes com taxas de 2.5Gbps. Chameleon Aplicaes em estaes base sem fio de 2G e 3G, Wireless CS2000 Family Voz sobre IP e alto desempenho DSL. processador reconfigurvel. Intel IXP2800 Mdulo de segurana no qual realiza criptografia e flexibilidade da execuo dos protocolos, otimizao dos protocolos para determinadas aplicaes, e execuo de aplicaes diferentes. Segurana No

No No No

No

No No

No Sim

Na tabela 14.5 pode-se observar que alguns fabricantes de processadores de redes modernos, comerciais, j comeam a inserir servios criprogrficos. Exemplo disso, o processador IXP2800(IXP2800, 2005). Os projetos precedentes adicionaram funes e aes de segurana rede atravs de um co-processador ou de um processador especfico de segurana. Considerando as altas e crescentes necessidades de transferncia de dados, essas duas possibildiades ainda que viveis, em muitas aplicaes no so viveis.

235

Os processadores online da segurana podem realmente escalar a taxas de dados mais elevadas mas devem executar muitas das mesmas funes que o processador de rede faz para conseguir a taxa de dados elevada. A integrao de funes de segurana no IXP2800 torna possvel uma velocidade em rede de at 10 Gigabits/s. Isto permite que o projeto oferea as funcionalidades de segurana no equipamento da rede desde o comeo de uma comunicao, providenciando tambm um sistema total de baixo custo nos termos do consumo de potncia, e do investimento. No IXP2800 adicionaram-se funcionalidades extensivas ao processador de rede atravs da insero de uma unidade especial de segurana, chamada de unidade CRYPTO, a qual pode ser observada nos detalhes da sua arquitetura descritos na figura 14.7. A unidade CRYPTO possibilita a execuo dos algoritmos 3DES, AES, e SHA-1, e oferece tambm suporte para vrios protocolos, tais como IPSec, SSL/TLS, ATM.

Figura 14.7 Arquitetura do IXP2800 (IXP2800, 2005)

236

A figura 14.8 permite observar que possvel executar de forma paralela, aes de segurana em vrios pacotes independentes. Atravs da figura, possvel executar at 5 operaes em paralelo: uma para um pacote com aes do algoritmo 3DES, outra similar 3DES mas para outro pacote, um pacote pode ser tratado seguindo o algortimo AES. De forma similar, pode-se fazer tratamento de assinatura digital, usando o algoritmo hash SHA-1 para dois diferentes pacotes, os quais podem ser diferentes ou provenientes das unidades criptogrficas 3DES ou AES. Os algoritmos criptografia que so executados no chip IXP28xx faz com que seja possvel conseguir taxas de dados seguras at de 10 Gigabits/s. Conseguir as exigncias processando segurana em um processador de rede faz possvel fornecer no somente uma velocidade elevada fixa a conexo mas tambm uma que realziada em um custo relativamente baixo. Devido natureza flexvel do processador de rede de IXP28xx, as geraes futuras integraro mais funcionalidade da segurana. Estas funes podero incluir a gerao da chave pblica, a gerao do nmero aleatrio, e at deteo de intruso.

Figura 14.8 - Vista geral da unidade de criptografia do IXP 2800

14.3 Coprocessador IBM 4758


O coprocessador criptogrfico 4758 da IBM um subsistema seguro e avanado que pode ser instalado em sistemas de usurio para executar o DES e a criptografia de chave pblica (IBM 4758, 2005). Um coprocessador seguro um ambiente computacional com um processador de propsito geral com suporte a ataques fsicos e ataques lgicos. O dispositivo deve funcionar para os programas que se supe serem programas de ataque. Um usurio deve poder (remotamente) distinguir entre o dispositivo real e a aplicao, e um verificador inteligente. O coprocessador deve manter a segurana mesmo se os adversrios realizarem uma anlise destrutiva de um ou mais dispositivos. Muitos usurios costumam trabalhar nos ambientes distribudos onde difcil ou impossvel fornecer a segurana fsica completa para processamento. E, em algumas
237

aplicaes, o adversrio o usurio da outra extremidade. Portanto, se torna necessrio um dispositivo em que se possa confiar mesmo que no possa controlar o ambiente. O coprocessador IBM est qualificado para detectar tentativas de ataques , e para executar e processar com segurana, incluindo execuo corretas de diversos algoritmos comercialmente significativos (IBM 4758, 2005). Suas aplicaes podem obter servios de criptografia atravs do PKCS#11 que caracteriza a sustentao do DES, do triplo-DES (com chaves do triplocomprimento), do RSA e do DSA, Sha-1, MD2, e servios do hashing de MD5. Pode-se empregar mltiplos co-processadores, cada um que opere como unidade independente de PKCS #11. As aplicaes so projetadas para suportar o mltiplo gerenciamento de chave, melhorando o throughput e/ou a disponibilidade com um co-processador adicional. A arquitetura do co-processador IBM 4758 ilustrada na figura 14.9.

Figura 14.9 Arquitetura do Coprocessador IBM 4758 (IBM 4758, 2005)

14.4 Smart Cards


Smartcards so cartes especiais que possuem processadores embutidos, similares queles apresentados na seo anterior, s que so projetados diferentemente, de modo a terem capacidade de processamento especfica para a funo qu esto realizando. De certa maneira, eles so muito mais simples do que aqules j discutidos, e so projetados em uma tecnologia diferente que oferece possibilidades de menor tamanho e relativo bom desempenho. Atualmente h dois tipos de smart cards, aqueles chamados de carto de memria e de microprocessador.
238

Carto de Memria: armazenam informaes e dependendo da tecnologia aplicada, podem ser descartveis ou reutilizveis. Nenhum processamento ocorre no carto, toda a lgica do sistema est contida nas leitoras; Carto Microprocessador: tipo de carto que realmente pode ser chamado de Smart ou inteligente. Cartes inteligentes possuem CPU com capacidade de executar comandos e reas de memria para armazenar informaes

Em termos gerais, os smart cards oferecem as seguinte vantagem: Armazenamento das chaves fora do servidor de criptografia. No obstante, h uma desvantagem: Baixo poder computacional. Maiores informaes em (PETRI, 2004).

14.4 HSM
So equipamentos externos a um determinado servidor, e so dedicados exclusivamente a funes de criptografia e armazenamento de informaes confidenciais. O acesso lgico ao equipamento pode ser realizado por meio de: Rede Ethernet 10/100 Mbps - TCP/P ou de Interfaces proprietrias. Eles possuem uma srie de servios, os quais so implementados em dependncia da necessidade dos usurios. Por exemplo (GUELFI, 2002): (1) Segmentao de funes, atravs da diferenciao de usurios: Em nvel de Operador, pode oferecer funes tais como Configurao de parmetros de rede (End. IP, Mscara, Gateway) e alguns mecanismos de Autenticao atravs de Chave fsicas (implementadas em hardware).

(2) Segmentao de funes, atravs da diferenciao de usurios: Em nvel de Security Officer, pode oferecer funes do tipo Ativao/Desativao das funes criptogrficas, Backup/Restore das chaves e informaes confidenciais. Assim como Mecanismo de Autenticao atravs de Smartcard + senha.

14.5 Consideraes Finais do Captulo


Foram apresentados alguns conceitos relacionados arquitetura de criptoprocessadores. Por meio destes conceitos foi possvel realizar uma anlise referente as diferentes abordagens utilizadas para o projeto de criptoprocessadores. Desta maneira foi possvel observar que implementaes dedicadas, apesar de obter um bom desempenho prejudicam a flexibilidade para o acrscimo de novos
239

algoritmos. Do mesmo modo, projetar criptoprocessadores que contenham conjuntos de instrues aumenta a flexibilidade e reduz o desempenho. Outra linha de atuao que comea a se destacar o projeto customizado de hardware para segunrana, atravs da utilizao de uma nova tecnologia de prototipao de sistemas digitais, conhecida como FPGAs, a qual ser alvo dos prximos captulos.

240

Captulo 15
Arquitetura e Implementao de um Criptoprocessador VLIW em FPGAs:

Este captulo apresenta detalhes de projeto de um criptoprocessador que um processador especfico para criptografia, em especial, para algoritmos simtricos, prototipado em um FPGA seguindo o modelo e arquitetura VLIW (Very Long Instructions Word).

15.1 Introduo
Neste captulo apresenta-se a proposta e detalhes de implementao de um criptoprocessador VLIW, discutindo detalhes da arquitetura e especificando o seu conjunto de instrues. O criptoprocessador foi projetado para executar preferencialmente algoritmos de criptografia simtricos e para isso, foram descritos mdulos especiais para aumentar a performance do Criptoprocessador e macroinstrues para auxiliar o programador. O criptoprocessador foi descrito utilizando a linguagem VHDL. Posteriormente sua descrio foi sintetizada e implementada para um FPGA Virtex II Pro gerando dados estatsticos de ocupao e desempenho temporal, apresentados e discutidos neste captulo. Este criptoprocessador suporta uma srie de algoritmos simtricos, inclusive algoritmos atuais, que utilizam chaves de 128 bits ou at maiores. importante salientar que os mdulos especiais, que diferenciam este criptoprocessador, no so especficos para um determinado algoritmo de criptografia. Estes foram projetados de forma a serem pr-configurados de acordo com as caractersticas do algoritmo que ser executado. Esta caracterstica ressalta uma das qualidades do criptoprocessador, a quantidade de algoritmos suportados. A flexibilidade oferecida pelas instrues do Criptoprocessador VLIW permite que o usurio da rea de segurana descreva algoritmos simtricos com relativa facilidade. Macro-instrues que realizam operaes prprias de algoritmos de criptografia simtricos, como a permutao e substituio de bits, fazem uso destes mdulos especiais.

241

A arquitetura VLIW proposta para o criptoprocessador pode ser definida a partir de dois conceitos: (i) o micro cdigo horizontal e (ii) o processamento superescalar. Uma mquina VLIW tpica tem palavras com centenas de bits (STALLINGS, 2002). Neste caso, o Criptoprocessador VLIW proposto tem 160 bits por palavra. Todas as unidades funcionais compartilham um grande banco de registradores comuns e as operaes a serem executadas simultaneamente so armazenadas em uma palavra VLIW. O micro cdigo horizontal de cada palavra VLIW formado por opcodes e dados que especificam as operaes a serem executadas em diferentes unidades funcionais (PEREIRA, 2004). As tcnicas superescalares e os processadores superpipeline exploram o paralelismo de instruo de forma a reduzir o nmero mdio de ciclos por instruo e o tempo de ciclo, respectivamente. Em contrapartida, os processadores VLIW exploram o paralelismo em nvel de instruo para reduzir o nmero de instrues e assim reduzir o tempo total de processamento. Apesar dessa sutil diferena, em funo das trs abordagens explorarem o mesmo tipo de paralelismo, elas compartilham algumas caractersticas e tcnicas comuns que podem ser aplicadas para melhor explorar o paralelismo de instrues (STALLINGS, 2002). A arquitetura VLIW busca uma palavra em um nico endereo de memria e cada unidade funcional (UF) executa uma das diferentes operaes contidas na palavra VLIW. Para tirar proveito dos recursos do processador necessrio um compilador eficiente para escalonar estaticamente as instrues independentes para no gerar conflitos estruturais e manter a semntica do programa durante a execuo, em detrimento das dependncias de dados existentes. As principais caracterticas de uma arquitetura VLIW so: Arquitetura altamente regular e exposta ao compilador. Portanto, h pouca restrio no acesso aos recursos do processador, permitindo o escalonamento de instruo com elevado grau de liberdade para explorar um vasto conjunto de possveis otimizaes; O compilador tem conhecimento prvio de todos os efeitos das operaes sobre a arquitetura, como por exemplo, a latncia de cada unidade funcional. Como a execuo regida por um clock global, o compilador est apto a resolver conflitos estruturais e de dados em tempo de compilao, dispensando mecanismos de sincronizao em tempo de execuo; Capacidade de despacho de mltiplas operaes; Mantm o hardware de controle simples, permitindo teoricamente um ciclo de clock menor.

Essas so as principais caractersticas desta arquitetura. O fato de escalonar as instrues em nvel de compilao torna esta arquitetura simples, pois o paralelismo das instrues no definido em hardware (em tempo de execuo). A simplificao da arquitetura, teoricamente, diminui o tempo do ciclo de clock, otimizando o processamento como um todo.
242

Duas das principais desvantagens do modelo VLIW so: A previso incorreta do caminho tomado em desvios condicionais pode afetar consideravelmente sua performance. Como a previso feita estaticamente, informaes importantes disponveis em tempo de execuo so completamente negligenciadas. Importante salientar que no caso do nosso processador, que focaliza o impacto da carga de trabalho dos algoritmos criptogrficos, esta desvantagem no afeta o desempenho, pois os algoritmos so cdigos altamente estticos e no so facilmente alterados em tempo de execuo. Ineficincia em programas onde a dependncia de dados grande. Neste caso, grande parte das instrues no poder executar em paralelo, prejudicando o desempenho do sistema. Uma maneira de identificar quando h muita dependncia de dados verificando a ocorrncia de muitos NOPs no programa. Esta desvantagem influncia no desempenho do criptoprocesador de forma significativa. A dependncia de dados nos algoritmos de criptografia pode ser classificada como mdia, sendo significativa, mas no predominante. Para otimizar a execuo dos algoritmos criptogrficos algumas tcnicas foram estudas, uma delas a tcnica de looping pipeline destacada na seo 2 do captulo 16. A escolha do modelo de arquitetura VLIW justifica-se pela necessidade de atingir um desempenho diferenciado com um hardware composto por mdulos independentes que em conjunto podem ser facilmente controlados e coordenados para a execuo paralela de instrues. Diferente de outras arquiteturas que promovem estas caractersticas, a arquitetura VLIW no necessita de um hardware sofisticado para o controle do fluxo de informaes, gerando um hardware relativamente enxuto quando comparado com outras arquiteturas como superescalar e superpipeline. Soma-se a isso o fato de considerar as possibilidades de usar circuitos programveis (FPGAs), onde deve-se otimizar os recursos espaciais existentes. O fato de que os algoritmos criptogrficos simtricos so compostos por uma seqncia de operaes estticas, faz com que diminua de forma significativa a ocorrncia de eventos aleatrios em tempo de execuo que possam prejudicar o desempenho do Criptoprocessador, que no est preparado para tratar este tipo de exceo. Isto no quer dizer que ocorrer um erro, mas apenas prejudicar o desempenho da execuo. A seguir destacam-se algumas das caractersticas deste criptoprocessador, que so discutidas no decorrer deste captulo: Arquitetura VLIW composta modelo Harvard+Pipeline como um conjunto RISC de instrues. Palavra VLIW de 160 Bits
243

Cache de dados e instruo (Harvard) 8 Unidades Funcionais de 128 Bits (UFs) 2 ULAs Deslocador de 1,2,4, 8 e 32 Bits (Logical Shifter) Rotacionador de 1,2,4, 8 e 32 Bits Permutao (P-BOX) Substituio (S-BOX) LOAD/STORE MOV/DESVIOS Paralelismo de Instrues (Esttico) At 4 instrues executando em um nico ciclo 16 Permutaes por ciclo Pipeline de 3 estgios globais 25 Instrues 24 Registradores

Estas caractersticas foram estabelecidas aps realizar um breve estudo dos seguintes algoritmos criptogrficos: RC6 (RIVEST, 2000), Serpent (ROSS, 1998), Cast-128 (CARLISLE, 1997), MARS (BURWICK, 1999), Twofish (SCHNEIER, 1998), Magenta (JACOBSON, 1998), Frog (GEORGOUDIS, 1998), BlowFish (SCHNEIER, 1994) e IDEA (LAI, 1990) com destaque para os algoritmos DES (FIPS46-3, 1999), AES (FIPS197, 2001) e RC5 (RIVEST, 1995), descritos nos capitulos 6, 10 e 11 respectivamente. A palavra VLIW de 160 bits armazena at 4 instrues de 40 bits cada, que sero executadas em paralelo. O paralelismo acima de 4 instrues torna o hardware mais complexo, aumentando o tempo do ciclo de mquina. Alm disso, a ocorrncia de mais de 4 instrues sendo executadas em paralelo no seria comum, j que a dependncia de dados inibiria esta possibilidade, prejudicando o desempenho geral do criptoprocessador, subutilizando suas unidades funcionais. A ocorrncia maior de algumas instrues como, deslocamento, rotao, permutao e substituio de bits torna importante a criao de mdulos dedicados e diferenciados para atingir uma melhor performance. Os mdulos de deslocamento e rotao de bits podem atuar tanto em um nico bit quanto em blocos de at 32 bits. Esta propriedade diminui o nmero de instrues necessrias para execuo destas operaes.

244

As unidades funcionais de permutao e substituio foram projetadas para atingir um desempenho satisfatrio e suportar o maior nmero de algoritmos criptogrficos simtricos possveis. A criao de mdulos independentes de LOAD/STORE e de movimentao entre registradores e desvios (MOV/DESVIOS) so importantes, principalmente em processadores que adotam o modelo Harvard, que possui memrias distintas para instrues e dados.

15.2 Arquitetura do Criptoprocessador VLIW


Nesta seo apresenta-se uma viso geral da arquitetura do criptoprocessador e detalhes de cada unidade funcional. A figura 15.1 ilustra a arquitetura top-level do criptoprocessador VLIW. O criptoprocessador formado por quatro partes: 1) despachador de instrues; 2) as unidades funcionais; 3) banco de registradores e; 4) a unidade de controle. Observa-se na figura 15.1 a presena de duas memrias Caches, uma de instrues (I-CACHE) e outra de dados (D-CACHE). Na cache de instrues devem estar armazenados os algoritmos de criptografia descritos em assembly do criptoprocessador. Na cache de dados so armazenadas informaes como o contedo das S-BOXES de um determinado algoritmo, o texto claro e os resultados de operaes realizadas. A presena de duas memrias distintas, uma para instrues e outra para dados, caracteriza o modelo de arquitetura Harvard. Estas memrias tm endereamento individual, isto permite a leitura e a escrita simultneas em memrias distintas, diminuindo o nmero de ciclos nos estgios de busca e escrita de resultados. A dimenso da I-CACHE de 16x160 armazenando um total de 1.310.720 bytes, possibilitando o armazenamento de vrios algoritmos criptogrficos. A D-CACHE de 16x128 armazenando um total de 1.048.576 bytes. Nesta memria so armazenados dados como o texto claro, o texto cifrado, resultados de operaes e as S-BOXES. Na figura 15.1 destacam-se as memrias como parte externa do criptoprocessador. Isto porque, neste prottipo as memrias no foram implementadas em FPGA. Visto que, seria pouco vivel a descrio de memrias destas dimenses em dispositivos FPGAs.

245

Figura 15.1 Arquitetura top-level do Criptoprocessador VLIW

O mdulo despachador de instrues responsvel pelo direcionamento de cada instruo contida em uma palavra VLIW para a respectiva execuo. A princpio, esta funo exigiria um hardware sofisticado para tomar decises, mas na arquitetura VLIW o despachador no engloba funes de deciso em tempo de execuo. Isto , a definio de qual instruo ser executada e qual ser a unidade funcional selecionada de responsabilidade do compilador, simplificando o hardware e aumentando a velocidade de execuo. Na figura 15.1, mostra-se de forma simplificada as unidades funcionais presentes no sistema. No total so oito unidades funcionais. Estas podem executar um conjunto de operaes selecionas pelo opcode da instruo. As unidades funcionais so: UF1 e UF2 - ULA, realiza operaes lgicas e aritmticas bsicas. UF3 - Deslocador de 1,2,4, 8 e 32 Bits UF4 - Rotacionador de 1,2,4,8 e 32 Bits UF5 - Permutao (P-BOX) UF6 - Substituio (S-BOX) UF7 - Load/Store, responsvel pela busca e escrita em memria. UF8 - MOV/DESVIOS

As unidades funcionais (UFs) so responsveis pela execuo das instrues direcionadas pelo mdulo despachador. Cada UF possui um registrador de instrues (RI). Assim, tem-se um total de oito registradores de instrues. Estes registradores armazenam a instruo que ser executada. Cada UF pode decodificar a instruo que ir executar. A execuo entre as unidades funcionais pode ser realizada de forma paralela. Em um determinado ciclo
246

de execuo at quatro unidades funcionais podero estar em execuo, j que o nmero mximo de instrues em uma palavra VLIW de 4 instrues. A tabela 15.1 apresenta as unidades funcionais e os principais registradores que estas utilizam.
Tabela 15.1 Principais Registradores utilizados pelas unidades funcionais

Unidade Funcional ULA 1 ULA 2 Deslocador Rotacionador Permutao (P-BOX) Substituio (S-BOX) Load/Store MOV/DESVIOS

Principais Registradores A1 e B1 A2 e B2 A3 A4 A5, B5, X A6, B6, SPC DPC, IPC --

Os registradores A, B e X so de 128 bits, e armazenam operandos e resultados das unidades funcionais. Registradores e operaes de 128 bits facilitam a descrio de algoritmos atuais que operam com chaves e blocos de texto de 128 bits ou mais. Os registradores contadores (SPC, DPC e IPC) so de 16 bits, responsveis por enderear as memrias D-CACHE (16x128) e I-CACHE (16x160). Para todas as operaes, o resultado ser armazenado no registrador A. A tabela 15.2 mostra todos os registradores organizados por funo.
Tabela 15.2 Registradores organizados por funo

Funo Registradores de operandos e resultados Registradores contadores Registradores de configurao

Registradores X, A1, B1, A2, B2, A3, A4, A5, B5, A6, B6 PERAC, AC1, AC2, SPC, DPC, IPC SBOXEND, SBOXCOL, SBOXQ, TBO, TBD, B

Observa-se na tabela 15.2 que o banco de registradores totaliza 24 registradores, cada unidade funcional utiliza um ou mais registradores distintos. Os registradores de configurao variam de 1 a 32 bits. Toda a arquitetura gerenciada pela unidade de controle, que organiza o fluxo de execuo, inclusive o pipeline de trs estgios. Detalhes de cada registrador e da arquitetura em geral so apresentados nas sees seguintes

247

15.3 Conjunto de instrues


O conjunto de instrues do criptoprocessador segue o modelo RISC. Onde com apenas 25 instrues possvel descrever a maioria dos algoritmos de criptografia simtrica. As instrues podem ser divididas em quatro classes: Lgicas e Aritmticas (128 bits): AND,OR, XOR, ADD, SUB, SHL, SHR, ROL, ROR, INC, DEC, NOT, CLR e NOP. Movimentao: LOAD, STORE e MOV. Desvios: JMP, JZ, JL e JG. Especiais: PERINIC, PERBIT, SBOXINIC e SBOX.

As instrues especiais fazem acesso aos mdulos especiais do criptoprocessador. Cada grupo de instrues executado por uma unidade funcional especifica. Importante salientar, que das 8 unidades funcionais, h duas para execuo de instrues especiais, tais como a permutao e a substituio. Tambm existem unidades funcionais prprias para instrues que merecem destaque do projeto do criptoprocessador relacionada a operaes como o deslocamento e a rotao de bits, comuns em algoritmos de criptografia simtricos. A relao unidade funcional e instrues est descrita na tabela 15.3.
Tabela 15.3 Instrues por unidades funcionais

Unidade Funcional ULA 1 e 2 Deslocador Rotacionador Permutao (P-BOX) Substituio (S-BOX) Load/Store MOV/DESVIO

Instrues AND,OR, XOR, ADD, SUB, INC, DEC, NOT E CLR SHL E SHR ROR E ROL PERINIC E PERBIT SBOXINIC, SBOX LOAD, STORE MOV, JMP, JZ , JG, JL

Cada instruo possui um opcode diferente. Na tabela 15.4 tem-se uma descrio detalhada de cada instruo, apresentando seus opcodes e operando de cada uma das 25 instrues.

Tabela 15.4 Descrio do conjunto de instrues do Criptoprocessador 248

Operao AND A1,B1 ou A2,B2 OR A1,B1 ou A2,B2 XOR A1,B1 ou A2,B2 ADD A1,B1 ou A2,B2 SUB A1,B1 ou A2,B2 INC A1 ou A2 DEC A1 ou A2 NOT A1 ou A2 CLR A1 ou A2 SHL 1, 2, 4 ou 8 SHR 1, 2, 4 ou 8 ROL 1, 2, 4 ou 8 ROR 1, 2, 4 ou 8 PERINIC PERBIT END1 ...END16 SBOXINIC SBOX NSBOX LOAD Ax ou Bx, [END] STORE [END],Ax MOV Ax,Bx JMP [END] JZ Ax,[END] JG Ax,[END] JL Ax,[END] NOP

Opcode 00001 00010 00011 00100 00101 00110 00111 01000 01001 01010 01011 01100 01101 01110 01111 10000 10001 10010 10011 10100 10101 10110 10111 11000 00000

Descrio Ax <= Ax and Bx, de 127 bits Ax <= Ax or Bx, de 127 bits Ax <= Ax xor Bx, de 127 bits Ax <= Ax + Bx, de 127 bits (sem Carry) Ax <= Ax - Bx, de 127 bits (sem Carry) Ax <= Ax +1, de 127 bits Ax <= Ax -1, de 127 bits Ax <= complemento de Ax1, de 127 bits Ax <= 0 (zero) A3 <= desloca A3 esquerda em 1, 2, 4 ou 8 bits A3 <= desloca A3 direita em 1, 2, 4 ou 8 bits A3 <= rotaciona A3 esquerda em 1, 2, 4 ou 8 bits A3 <= rotaciona A3 direita em 1, 2, 4 ou 8 bits PERAC <= 0 (zero) A5 <= B5(X), X igual END1...END16 Inicializa os registradores de configurao: SBOXEND, SBOXCOL, SBOXQ, TBO, TBD, LIN, COL, B Realiza a troca de bits, resultado em A6 Qualquer A ou B <= contedo do endereo [END] Endereo [END] <= Ax Movimenta dados entre qualquer registrador principal Salto incondicional para o endereo [END] Salta para [END] se Ax igual a zero Salta para [END] se Ax maior que zero Salta para [END] se Ax menor que zero No realiza nenhuma operao (Not Operation)

15.3.1 Formato das instrues


De forma geral cada palavra VLIW armazenada em uma nica posio de memria, isto , para acessar uma palavra necessrio apenas um endereo de memria. Neste criptoprocessador cada palavra tem 160 bits. A palavra VLIW contm quatro instrues, de 40 bits cada, que podem ser executadas simultaneamente. Algumas instrues ocupam toda palavra VLIW, como o caso da SBOXINIC e a PERBIT. Desta forma, poder ser executada apenas uma destas instrues por ciclo. Caso no seja possvel utilizar ou no seja necessrio o paralelismo de quatro instrues, as demais posies da palavra VLIW devem ser ocupadas com a instruo NOP (Not Operation No operao). A princpio um compilador poder classificar as instrues paralelas e montar as palavras VLIW que formam o
249

programa. Assim, esse compilador ser responsvel por atribuir os NOPs necessrios conforme a dependncia de dados ou a lgica imposta pelo programador. Na figura 15.2 tem-se o formato da palavra VLIW.

Figura 15.2 Formato da palavra VLIW

As instrues podem ser classificadas em dois tipos: instrues de 160 bits e de 40 bits. As instrues de 160 bits ocupam toda palavra VLIW e tem apenas um opcode. Neste caso, no possvel executar outras instrues em paralelo. As instrues de 160 bits so: PERBIT - executa 16 permutaes por ciclo; SBOXINIC inicializao da S-BOX.

As demais instrues so de 40 bits e podem ser executadas em paralelo, atingindo at quatro instrues por ciclo. Algumas instrues de 40 bits so exclusivas, isto , no podem ocorrer na mesma palavra VLIW. A seguir mais detalhes dessas instrues exclusivas.

15.3.2 Instrues Exclusivas


Estas instrues acessam a Cache de dados e registradores de dados. Para manter a coerncia e integridade do acesso a esses dispositivos, no possvel a execuo de mais de uma instruo exclusiva na mesma palavra VLIW. Estas instrues so: LOAD Carrega dado de um determinado endereo de memria (DCACHE) STORE - Armazena dados na memria (D-CACHE) SBOX - Substitui n bits de bloco de entrada, por um valor localizado em uma tabela esttica de substituies (D-CACHE).

Estas instrues so exclusivas, pois neste caso, fisicamente no possvel o acesso simultneo mesma memria (D-CACHE). Caso especial: a instruo MOV movimenta dados entre registradores em um nico ciclo. Dependendo do contexto, esta instruo pode gerar uma incoerncia, prejudicando a integridade dos dados e do fluxo de execuo. Assim, a instruo MOV pode ser considerada exclusiva em alguns casos, a seguir quatro exemplos:
250

Exemplo 1: Palavra VLIW [ADD A1, B1 | INC A2 | MOV A1,A3 | NOP ] Esta palavra contm quatro instrues (ADD, INC, MOV e NOP) que so executadas simultaneamente em um nico ciclo. Neste caso, existe uma incoerncia, j que o valor de A1, aps a execuo, pode no ser o desejado. Isso acontece pois, tanto a instruo de ADD como a instruo de MOV, modificam o contedo de A1, sendo que, a predominncia neste caso da instruo de movimentao (MOV). Portanto A1, no final da execuo armazenar o valor contido em A3 (MOV A1, A3). Neste contexto, a instruo MOV pode ser considerada exclusiva. Sendo indicada sua execuo em um ciclo anterior ou posterior instruo de ADD, conforme o resultado que se deseja obter.

Exemplo 2: Palavra VLIW [ ADD A1,B1 | INC A2 | MOV A5,A3 | NOP ] Neste caso, a instruo MOV no exclusiva j que as operaes ocorrem entre registradores que no esto sendo operados na mesma palavra VLIW.

Exemplo 3: Palavra VLIW [ ADD A1,B1 | INC A2 | MOV A5,A3 | LOAD A5,[1000] ] Neste caso, ocorre uma instruo MOV e um LOAD que modificam o mesmo registrador (A5). Assim, da mesma forma como verificado no exemplo 1 pode existir uma incoerncia. Quem estabelece a ordem de predominncia o projetista do sistema, neste caso, considera-se que a execuo das instrues segue a seguinte ordem de predominncia: 1 LOAD/STORE 2 MOV 3 Operaes lgicas e aritmticas

Esta ordem foi estabelecida no projeto do criptoprocessador VLIW, para assegurar a integridade e coerncia do valor armazenado em um determinado registrador, aps a execuo simultnea de instrues que modificam o mesmo registrador. Assim, a instruo LOAD predomina sobre a instruo MOV. Portanto A5 armazenar o valor contido no endereo [1000] de memria (D-CACHE), e no o valor de A3 (instruo MOV A5,A3).

251

Exemplo 4: Palavra VLIW [ ADD A1,B1 | INC A2 | MOV A5,A3 | LOAD A6,[1000] ] Neste caso, a instruo MOV no exclusiva j que as operaes ocorrem entre registradores distintos. Observa-se que mesmo com a presena de uma instruo exclusiva, o LOAD, possvel a execuo paralela.

15.3.3 Instrues de Propsito Geral


Instrues de propsito geral so comuns em processadores de propsito geral (PPGs), ou seja, processadores implementados para suportar programas com caractersticas distintas. Estas realizam operaes bsicas como desvios, movimentaes de dados, operaes lgicas e aritmticas. O Criptoprocessador proposto e implementado no um PPG, pois suporta apenas uma classe especfica de programas, os algoritmos de criptografia simtricos. Suas instrues consideradas de propsito geral possuem algumas caractersticas diferenciadas como: Operaes lgicas e aritmticas de 128 bits Operaes de deslocamento e rotao de 1,2,4, 8 2 32 bits em um nico ciclo. Movimentao entre registradores em um nico ciclo. Toda instruo de propsito geral tem 40 bits de opcode.

15.3.4 Instrues Especiais


As instrues especiais atendem as caractersticas prprias de algoritmos de criptografia simtricos como a permutao e substituio de bits. Estas so especiais por estarem presentes na maioria dos algoritmos criptogrficos e possuir unidades funcionais dedicadas para execut-las no criptoprocessador VLIW. Alm de no estarem presentes em processadores de propsito geral. Para suportar o maior nmero de algoritmos possvel foi necessrio definir parmetros de inicializao que configuram o modo de execuo das instrues especiais. A seguir as instrues especiais: Instrues de permutao PERINIC - Inicializao da instruo de permutao PERBIT* - Permutao de bits. (16 permutaes por ciclo) Instrues de substituio SBOXINIC* - Inicializao da instruo de substituio SBOX Substituio de bits.

* as instrues de SBOXINIC e PERBIT so de 160 bits.


252

Cada instruo especial pode ser considerada como uma macro-instruo, ou seja, elas so simples de serem utilizadas, mas executam uma tarefa complexa, composta por vrias operaes, tudo em um nico ciclo de mquina. A implementao de macro-instrues no projeto do Criptoprocessador VLIW e no de vrias instrues menos complexas pode ser justificada pela preocupao em facilitar a descrio destas operaes. Nas sees 15.3.4.1 e 15.3.4.2 estas instrues so descritas em detalhes.
15.3.4.1 Operao de Permutao (PERBIT)

A operao de permutao realiza a troca de bits predefinidos em uma tabela de permutao esttica. Esta operao realizada por uma unidade funcional especfica (UF5). A permutao utiliza quatro registradores A5, B5, X e PERAC. A5 Armazena resultado da permutao (128 bits) B5 Armazena os bits que sero permutados (128 bits) X Armazena 16 endereos de permutao, de 8 bits cada. Estes endereos so oriundos da tabela de permutao esttica do algoritmo em questo. PERAC um acumulador que aponta para os bits de A3 que sero alterados. A cada instruo de PERBIT, o acumulador PERAC incrementado em 16 unidades inteiras, apontando para os prximos 16 bits que sero permutados.

Antes de iniciar um processo de permutao necessrio zerar o valor do acumulador PERAC, para este apontar para o bit inicial de A5. Para isso, utiliza-se a operao PERINIC. Na figura 15.3 tem-se a ilustrao da instruo PERBIT e a seguir os passos para realizar esta operao:

253

Figura 15.3 Operao de permutao (PERBIT)

Inicializar registradores o Inicializar PERAC, este ir apontar para o Bit inicial de A5. o Carregar em B5 o vetor de bits que sero permutados. o Carregar em X os endereos para onde os bits de B5 sero permutados. Cada endereo ocupa 8 bits, possibilitando o acesso a qualquer bit dentro de um vetor de 128 bits. o Estes endereos de X representam qual bit de B5 ser permutado para uma posio em A5 indexada por PERAC.

Realizar permutao o Observando a figura 15.3, deseja-se realizar a primeira permutao: Assim, PERAC aponta para o Bit 1 de A5. o Em X tem-se os endereos de permutao definidos pela tabela de permutao esttica de cada algoritmo, neste exemplo o primeiro endereo 57, o segundo 49, num total de 16 endereos de 8 bits cada. o B5 contm o vetor de dados que ser permutado. o O primeiro endereo de X aponta para posio 57 de B5.
254

o O contedo da posio 57, neste exemplo 1, permutado para o bit de A5 apontado por PERAC, neste caso o bit 1. o A segunda permutao ocorre da mesma forma, mas utiliza-se o prximo endereo de X, neste exemplo o valor 49. O dado contido no endereo 49 de B5 ser permutado para o Bit 2 de A5. o Este processo se repete at que sejam realizadas as 16 permutaes indicadas pelos endereos armazenados em X . Exemplo: No algoritmo de criptografia DES (Data Encryption Standard) realizada uma permutao inicial descrita pela tabela 15.5. Aps realizar a permutao, o Bit 57 do vetor original ser o Bit 1 do vetor permutado. O Bit 49 do vetor original ser permutado para o Bit 2 e assim por diante.
Tabela 15.5 Permutao inicial do algoritmo DES

57 49 41 33 25 17 09 01 59 51 43 35 27 19 11 03 61 53 45 37 29 21 13 05 63 55 47 39 31 23 17 07 56 48 40 32 24 16 08 00 58 50 42 34 26 18 10 02 60 52 44 36 28 20 12 04 62 54 46 38 30 22 14 06

O cdigo assembly a seguir descreve uma forma de implementar a permutao inicial do algoritmo DES utilizando as instrues do criptoprocessador.
PERINIC PERBIT 57,49,41,33,25,17,09,01, 59,51,43,35,27,19,11,03 // inicializa permutao (PERAC=0) // inicio da execuo da permutao //PERAC=0

PERBIT

61,53,45,37,29,21,13,05, 63,55,47,39,31,23,15,07

//PERAC=16

PERBIT

56,48,40,32,24,16,08,00 58,50,42,34,26,18,10,02

//PERAC=32

PERBIT

60,52,44,36,28,20,12,04, 62,54,46,38,30,22,14,06

//PERAC=48 // fim da execuo da permutao // resultado da per. em a5

255

15.3.4.2 Operao de Substituio (SBOX)

A S-BOX ou caixa de substituio um conjunto de dados que forma um vetor ou uma matriz bidimensional. Toda S-BOX composta por uma entrada de bits (Input S-BOX), que determina a localizao do dado de substituio, e uma sada de bits (Output S-BOX), que retorna o valor do dado de substituio. O dado de substituio ir sobrescrever os bits utilizados na entrada da S-BOX. A instruo SBOX realiza a substituio de bits predeterminados. Atravs de uma busca por linha e coluna, identifica-se o endereo onde est armazenado o dado de substituio. Este dado recuperado e armazenado na posio adequada dentro do registrador resultante, realizando a substituio. Este processo executado baseado em alguns parmetros configurveis. Estes parmetros so necessrios para calcular o endereo de memria onde est localizado o dado de substituio. Alguns parmetros podem variar conforme o algoritmo criptogrfico que est sendo descrito, por isso a necessidade de parmetros configurveis. Na tabela 15.6 tem-se o resultado de um estudo realizado que demonstra como as S-BOXs podem variar de algoritmo para algoritmo (PEREIRA, 2004). Aps um estudo preliminar realizado, os seguintes parmetros foram considerados necessrios para implementar qualquer S-BOX de algoritmos criptogrficos simtricos: O nmero de SBOXES de um determinado algoritmo O nmero de bits de entrada da S-BOX O nmero de bits de sada da S-BOX Os bits que determinam a linha e bits que determinam a coluna da SBOX.

Observando a tabela 15.6 nota-se algumas caractersticas que diferenciam as SBOXES apresentadas, como por exemplo: Alguns algoritmos no utilizam S-BOXES como o RC5, RC6 e IDEA. Em algoritmos como o DES e o AES, as S-BOXES so matrizes, portanto so endereadas pelo par linha/coluna. Em algoritmos como Serpent, Mars, Magenta entre outros, as S-BOXES so vetores. Isto , a busca feita apenas por coluna. Observa-se na tabela 15.6 que no h bits que determinam a linha, apenas a coluna. Existem algoritmos com uma nica S-BOX (como o caso do algoritmo AES) e algoritmos com at oito S-BOXES (Exemplo, o algoritmo DES). As sadas das S-BOXES variam de 4 a 32 bits. As entradas das S-BOXES variam de 4 a 8 bits.
256

Tabela 15.6 Comparao das SBOXES de diferentes algoritmos de criptografia

Algoritmo DES AES Serpent Cast-128 MARS Twofish Magenta Frog BlowFish RC5 RC6 IDEA

N de N de bits de N de bits de S-BOX(ES) entrada da sada da SBOX SBOX 8 6 4 1 8 8 8 4 4 4 8 32 2 8 32 8 4 4 1 8 8 1 8 8 4 8 32 ----------

Bits que determinam a linha 1e6 1,2,3,4 -----------

Bits que determinam a coluna 2,3,4,5 5,6,7,8 1,2,3,4 1a8 1a8 1a4 1a8 1a8 1a8 ----

O algoritmo LOKI97 (BROWN, 1998) tambm foi avaliado, este composto por duas SBOXES vetoriais de tamanhos fsicos distintos. Desta forma, a S-BOX1 tem 14 bits de entrada e 8 bits de sada e 14 bits que determinam a coluna. A SBOX2 do LOKI97 tem 12 bits de entrada e 8 bits de sada e 12 bits que determinam a coluna. Esta diversificao quanto ao tamanho das SBOXES, dos bits de entrada e sada e da quantidade de S-BOXES tornam o projeto do hardware relativamente complexo. Um hardware dedicado para cada S-BOX descrita na tabela 15.6 pode tornar o circuito veloz, mas necessita de um elevado nmero de componentes para implement-lo. Desenvolver uma nica S-BOX genrica que seja veloz e que atenda a maioria dos algoritmos simtricos pode ser considerado um desafio. Assim, no projeto e implementao do criptoprocessador foi proposto uma soluo atravs de parmetros de configurao por software (PEREIRA, 2004). Isto , atravs de uma instruo, o programador poder configurar o tamanho da S-BOX, bits de entrada e sada, bits que determinam linha e coluna e outros parmetros necessrios para configurar a S-BOX desejada. Uma soluo futura poderia ser atravs de reconfigurao, onde o hardware decide a necessidade de uma nova S-BOX e esta reconfigurada em tempo de execuo (RTR Run Time Reconfiguration) (PAAR, 2004), (PAAR, 2000). Os parmetros de configurao so implementados atravs da instruo SBOXINIC. A seguir os parmetros necessrios e suas descries: SBOXEND - Endereo de memria onde est localizada a S-BOX. Os dados da S-BOX esto armazenados na memria D-CACHE. Deve-se apenas indicar a partir de qual endereo inicia a S-BOX, independente do nmero de S-BOX que o algoritmo utiliza.
257

SBOXCOL - Nmero de colunas de uma SBOX. SBOXQ Quantidade de elementos de uma S-BOX. TBO - Tamanho do bloco origem, representa a quantidade em bits do bloco que ser substitudo. O bloco origem alimenta a entrada SBOX gerando o endereo do dado de substituio. TBD - Tamanho do bloco destino, representa a quantidade em bits do bloco de substituio. Ao final, o bloco origem ser substitudo pelo bloco destino, mesmo que forem de tamanhos diferentes. O bloco destino armazenar o resultado da substituio. LIN Bits ou Bytes do bloco origem que determinam a linha de endereamento da SBOX. Cada algoritmo tem uma forma especfica para determinar qual os bits ou bytes que determinaram a linha e a coluna de uma S-BOX, onde est localizado o dado de substituio. Este parmetro determina estes bits ou bytes para a linha. COL - Bits ou Bytes do bloco destino que determinam a coluna de endereamento da SBOX, de forma similar ao LIN. B Tipo Bit ou Byte, quando B=0 (zero) os valores de LIN e COL so considerados bits. Quando B=1 os valores de LIN e COL so considerados Bytes.

Todos os parmetros so armazenados em registradores dedicados, assim h um limite fsico de bits para a representao de cada parmetro, os quais determinam os algoritmos suportados pelo criptoprocessador. Na tabela 15.7 tem-se a representao mxima de cada parmetro.
Tabela 15.7 Limites de representao dos parmetros da operao de substituio

Parmetro SBOXEND SBOXCOL SBOXQ TBO TBD LIN

N de Bits 16 16 16 6 6 32

COL

32

Descrio Enderea at 65535 posies de memria (D-CACHE) Configura S-BOXES at 65535 colunas Configura S-BOXES at 65535 elementos Configura blocos origem com at 64 elementos Configura blocos destino com at 64 elementos Configura 8 bits para linha em modo bit (B=0); Configura at 2 bytes em modo byte (B=1); Configura 8 bits para coluna em modo bit (B=0); Configura at 2 bytes em modo byte (B=1);

Alguns parmetros podem representar um limite maior dos que os encontrados em algoritmos de criptografia simtricos atuais. Mas com o objetivo de adaptao a novos algoritmos, estes limites tambm foram propostos para suportar futuros algoritmos com S-BOXES diferenciadas.
258

A definio do nmero de bits de cada parmetro foi baseada na tabela 15.6, onde se pode identificar e quantificar os bits necessrios para representar o nmero mximo de colunas de uma S-BOX, o tamanho mximo do bloco origem e destino e outros parmetros. Por exemplo, os bits de sada definem o tamanho do bloco destino (TBD) de uma SBOX, este tamanho varia de 4 a 32 bits (ver tabela 15.6), para representar este valor necessitaria de 5 bits (25 = 32), mas para atender futuros algoritmos, este registrador foi definido com 6 bits, podendo identificar um bloco destino de at 64 bits. Desta mesma forma, os demais parmetros foram definidos. A sintaxe da instruo de inicializao e configurao da S-BOX : SBOXINIC SBOXEND, SBOXCOL, SBOXQ, TBO, TBD, LIN, COL, B

Exemplo: Este exemplo mostra a configurao da SBOX do algoritmo de criptografia DES. Detalhes desta S-BOX podem ser visualizados na tabela 15.6.
Define SBOXEND = 001Fh Define SBOXCOL = Fh Define SBOXQ = 3Fh Define TBO = 6h Define TBD = 4h Define LIN = BIT6, BIT1 // endereo de inicio da S-BOX (D-CACHE) // 16 colunas // 64 elementos // tamanho do bloco origem (bloco que ser substitudo) // tamanho do bloco destino (bloco de substituio) // bits do bloco origem que definem a linha

Define COL = BIT5, BIT4, BIT3, BIT2 // bits do bloco origem que definem a coluna Define B = 0 SBOXINIC // modo bit de representao

SBOXEND, SBOXCOL, SBOXQ, TBO, TBD, LIN, COL, B

Aps a inicializao e configurao atravs da instruo SBOXINIC pode ser realizada a operao de substituio propriamente dita. A instruo SBOX realiza os clculos necessrios para localizar o dado de substituio armazenado na memria D-CACHE, baseando-se nos parmetros configurveis. A instruo SBOX utiliza o parmetro NSBOX que identifica qual S-BOX deve ser utilizada na substituio. Quando o algoritmo de criptografia utiliza-se de apenas uma S-BOX, o valor de NSBOX zero. Para identificar um elemento dentro da memria, foi desenvolvida uma frmula matemtica que atravs de alguns dos parmetros configurveis pode identificar o endereo desejado, ver figura 15.4.

Figura 15.4 Frmula de endereamento do dado de substituio 259

A memria um vetor de N posies, em alguns algoritmos as S-BOXES so representadas por matrizes, como no DES e no AES. Em outros algoritmos por vetores, como no Serpent, Magenta e outros. Para identificar a posio de memria correspondente, independente do tipo de S-BOX, deve-se utilizar a frmula da figura 15.4.

Figura 15.5 Exemplo de funcionamento da operao de substituio

O valor contido em END aps execuo representa o endereo de memria onde est armazenado o dado de substituio. Na figura 15.5 tem-se a ilustrao da operao de substituio, onde possvel verificar a utilizao dos parmetros configurveis na operao de substituio. A operao de substituio SBOX utiliza os seguintes registradores: A6 armazena resultado final da substituio B6 armazena bits que sero substitudos Registradores dos parmetros configurveis: SBOXEND, SBOXCOL, SBOXQ, TBO,TBD,LIN,COL. AC1 Acumulador 1, aponta para o bloco origem que ser substitudo AC2 - Acumulador 2, aponta para o bloco destino de substituio

A cada substituio, o AC1 incrementado com o valor do registrador TBO (Tamanho do Bloco Origem), apontando assim para o prximo bloco origem que ser substitudo. O mesmo acontece com AC2, mas este ser incrementado com o valor de TBD (Tamanho do Bloco Destino), apontando para o prximo bloco destino de substituio. A instruo de inicializao e configurao da SBOX zera o valor de AC1 e AC2. A figura 15.5 ilustra a instruo SBOX sendo executada. Uma seqncia de passos executada at que a instruo finalize, estes passos esto indicados na figura 15.5 e descritos a seguir: 1 Passo determinar os bits de entrada da S-BOX, (BO1 Bloco Origem 1).
260

2 Passo determinar o valor da linha (LIN) e da coluna (COL) do dado de substituio desejado, (BO1 Bloco Origem 1). 3 passo Utilizando a formula da figura 15.4, gerar o endereo fsico do dado de substituio, (D-CACHE). 4 passo Determinar o bloco de destino e realizar a substituio, (BD1 Bloco Destino 1).

15.4 Pipeline do Criptoprocessador VLIW)


O criptoprocessador VLIW foi projetado para ter um pipeline de 3 estgios globais. Cada estgio executado em um nico ciclo de mquina, inclusive o estgio de execuo de instrues. Os estgios so gerenciados por uma mquina finita de estados (unidade de controle) sincronizada pelo clock global. Os estgios so: Estgio 1: Busca e despacho de instrues. Busca uma palavra VLIW de 160 bits. Esta palavra recebida pelo despachador de instrues. O despachador realiza o direcionamento para as unidades funcionais predefinidas. Este estgio realizado em um nico ciclo de mquina. Estgio 2: Decodificao e execuo. Neste estgio as unidades funcionais decodificam as instrues que sero executadas e realizam-se as respectivas operaes desejadas. Estgio 3: Escrita em memria ou registradores. Os resultados so armazenados nos devidos registradores ou na memria D-CACHE. A arquitetura Harvard permite a leitura e escrita simultnea em memrias distintas. Desta maneira, em trs ciclos de mquina o pipeline est preenchido. Assim, a partir do terceiro ciclo podem ser executadas at 4 instrues por ciclo. Isto significa que o nmero de ciclos por instruo de ou 0,25 ciclos por instruo, ou seja um CPI =0.25, o qual menor que um, (CPI < 1), fazendo com que o processador seja considerado de alto desempenho. Lembrar que isso acontece em situao ideal, sem considerar dependncia de dados e problemas de hazards. O pipeline nunca interrompido para o tratamento de instrues especiais ou de qualquer outra instruo. O fato de todas as instrues serem executadas em um nico ciclo facilita a descrio do hardware que controla a transio entre estgios globais. Na tabela 15.8 mostram-se os estgios do pipeline. Considerando que cada palavra VLIW possui at 4 instrues paralelas, possvel observar na tabela 15.8 que a partir do 3 ciclo tem-se a cada ciclo uma execuo paralela de at quatro instrues. bom lembrar que o pipeline diminui o nmero de ciclos necessrios para executar uma instruo, mas aumenta de forma significativa a complexidade do hardware e o nmero de componentes utilizados para mape-lo em um FPGA.
Tabela 15.8 Pipeline do Criptoprocessador VLIW 261

Palavra VLIW 1 ciclo 1 BD 2 3 4 5

2 ciclo DE BD

3 ciclo E DE BD

4 ciclo E DE BD

5 ciclo E DE ...

6 ciclo

7 ciclo

E ...

...

BD Busca e Despacho de instrues DE Decodificao e Execuo E Escrita de resultados

Casos especiais: A execuo de uma palavra VLIW por ciclo facilita a descrio do hardware necessrio para o controle de estgios, mas pode tornar-se complexa quando se trata de instrues que no so possveis de serem executadas em um nico ciclo de mquina. Uma destas instrues o LOAD. O LOAD carrega um dado de 128 bits de uma posio de memria predefinida. Para realizar esta operao, primeiramente necessrio enderear a memria com a posio onde o dado desejado est armazenado, e apenas no prximo ciclo pode-se capturar o dado desejado. Isto , tem-se um ciclo para o endereamento e um ciclo para a captura, totalizando 2 ciclos para execuo completa da instruo LOAD. O mesmo acontece com a instruo STORE. Para resolver este problema foi descrita uma unidade funcional especifica para as operaes de LOAD/STORE. Observa-se que a decodificao e execuo ocorrem no 2 estgio do pipeline. Todas as instrues so decodificadas e executadas neste estgio. Se a instruo LOAD fosse executada da mesma forma, esta precisaria de um ciclo adicional para finalizar a sua execuo. A soluo proposta e implementada antecipa a decodificao do LOAD para estgio 1, iniciando a execuo da primeira parte da instruo neste estgio e finalizado no estgio seguinte, o estgio 2. Desta forma, o LOAD ou STORE terminam sua execuo no mesmo estgio de instruo de apenas um ciclo, como as instrues lgicas e aritmticas.

15.5 Estatsticas de Desempenho do Criptoprocessador VLIW


Nesta seo apresentam-se as estatsticas de desempenho do Criptoprocessador VLIW implementado em um FPGA Virtex XCV812EFG900. Estas estatsticas podem ser visualizadas na tabela 15.9.

Tabela 15.9 Estatsticas da implementao em FPGA do Criptoprocessador VLIW

262

Tempo de Propagao 8,166 ns

Freqncia Mxima 122 MHz

Taxa de Ocupao do FPGA CLBs FLIP-FLOPs LUTs N de componentes utilizados N de componentes disponveis Porcentagem de ocupao 1315 9.408 13,97% 669 18.816 3,55% 2484 18.816 13,20%

Como esperado o processador obteve um bom desempenho temporal, o tempo de propagao do circuito foi de 8,166ns (nanosegundos) atingindo uma freqncia mxima de 122 Mhz. O criptoprocessador mapeado no dispositivo FPGA, utilizou 1315 Slices e 669 Flip-Flops. Na tabela 15.10 tem-se a comparao com os processadores de propsito geral Pentium III e IV (P3 e P4) e K6, quando se executa o algoritmo DES. A descrio assembly do algoritmo DES pode ser visualizada no capitulo seguinte e os cdigos acessados no site www.novateceditora.com.br/downloads.php.
Tabela 15.10 Comparao do Criptoprocessador com Processadores de Propsito Geral

Proc. P4 P3 P3 P3 P3 K6 VLIW

Freqncia Memria Texto claro Tempo de cifragem 1.6 GHz 1.0 GHz 800 MHz 700 MHz 500 MHz 500 MHz 122 MHz 256 MB 256 MB 128 MB 128 MB 128 MB 64 MB -1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 0,99 s 1,05 s 1,19 s 1,26 s 1,75 s 2,15 s 0,038 s

Estas estatsticas de desempenho mostram que o criptoprocessador VLIW pode ser at 26 vezes mais rpido que um processador de propsito geral ao cifrar 1Mbyte de texto claro. Este desempenho alcanado satisfatrio. No captulo 16 mostra-se como a utilizao da tcnica de loop pipeling pode melhorar a performance do criptoprocessador executando o algoritmo DES e detalhes do desempenho do criptoprocessador. Apenas com a implementao do algoritmo DES no possvel fazer uma analogia completa e comparaes com outros processadores e criptoprocessadores. necessrio fazer uma descrio de outros algoritmos criptogrficos simtricos os quais podem ser apresentados num futuro prximo. Mas os dados obtidos atravs da implementao do DES e RC5 so suficientes para uma anlise inicial do potencial do criptoprocessador.
263

No prximo captulo apresenta-se a implementao dos algoritmos DES e RC5 utilizando o assembly do criptoprocessador VLIW. Assim como, uma anlise de desempenho e tcnicas para melhoria de desempenho. Destaca-se tambm a implementao de uma interface simplificada em hardware e o primeiro prottipo do simulador do criptoprocessador VLIW. Em (PEREIRA, 2004) e no site do livro www.novateceditora.com.br/downloads.php, apresenta-se detalhes da microarquitetura do Criptoprocessador VLIW.

264

Captulo 16
Desempenho do Criptoprocessador

Neste captulo apresenta-se a implementao dos algoritmos simtricos DES, RC5 e da S-BOX do algoritmo AES utilizando o assembly do Criptoprocessador VLIW, discutindo tcnicas para melhorar o desempenho. Tambm ser apresentada uma interface em hardware para realizao de testes fsicos com o Criptoprocessador VLIW. Por fim, apresenta-se a primeira verso do simulador e montador assembler do Criptoprocessador VLIW.

16.1 Implementao do Algoritmo DES


Nesta seo apresenta-se a implementao do algoritmo DES e o impacto da dependncia de dados na execuo deste algoritmo utilizando o Criptoprocessador VLIW. Diferente da programao seqencial, em processadores VLIW as instrues so representadas atravs de micro-cdigos horizontais. A seguir, apresenta-se um trecho de micro-cdigo horizontal segundo o assembly do criptoprocessador. Este cdigo esboa o problema da dependncia de dados. P1: LOAD A2,[10] | SHL A3,32 | NOP | NOP P2: XOR A2,B2 | MOV B1,A3 | NOP | NOP

P3: STORE [9],A2 | ADD A1,B1 | NOP | NOP Observa-se que existem trs palavras VLIW (P1, P2 e P3) que sero executadas em seqncia. Antes de realizar a operao de XOR foi necessrio carregar um determinado valor em A2 (LOAD). Assim como, antes de armazenar A2 (STORE) foi necessrio realizar a operao XOR. Desta forma, estas instrues devem estar em palavras VLIW diferentes, para que o fluxo de execuo seja lgico. Esta dependncia de dados impede que o programador aproveite todo o hardware disponvel, sub-utilizando o Criptoprocessador. Na tabela 16.1 tem-se a descrio completa do algoritmo de criptografia DES utilizando o assembly do criptoprocessador, onde foi necessrio observar e evitar as possveis dependncias de dados existentes, como aquelas mostradas anteriormente.
265

Tabela 16.1 Micro-cdigo horizontal do algoritmo DES


0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 Palavra VLIW UCP% Descrio LOAD 3,[TEXTO] PERINIC NOP NOP 50% PERBIT 57,49,41,33,25,17,09,01,59,51,43,35,27,19,11,03 100% Permutao Inicial PERBIT 61,53,45,37,29,21,13,05, 63,55,47,39,31,23,15,07 100% PERBIT 56,48,40,32,24,16,08,00,58,50,42,34,26,18,10,02 100% PERBIT 60,52,44,36,28,20,12,04, 62,54,46,38,30,22,14,06 100% STORE [L],A3 MOV A5,A3 NOP NOP 50% Gera R/L SHR 32 NOP NOP NOP 50% STORE [R],A5 NOP NOP NOP 25% Iteraes MOV B3,A5 PERINIC LOAD A2,15 NOP 75% PERBIT 31,00,01,02,03,04,03,04, 05,06,07,08,07,08,09,10 100% Permutao PERBIT 11,12,11,12,13,14,15,16,15,16,17,18,19,20,19,20 100% de Expanso PERBIT 21,22,23,24,23,24,25,26,27,28,27,28,29,30,31,00 100% MOV B1,A3 LOAD A1,[K1] XOR A1,B1 NOP 75% XOR com K SBOXINIC SBOXEND,SBOXCOL,SBOXQ,TBO,TBD,LIN,COL,B 100% SBOX SBOX 0 NOP NOP NOP 25% SBOX 1 NOP NOP NOP 25% SBOX 2 NOP NOP NOP 25% SBOX 3 NOP NOP NOP 25% SBOX 4 NOP NOP NOP 25% SBOX 5 NOP NOP NOP 25% SBOX 6 NOP NOP NOP 25% SBOX 7 NOP NOP NOP 25% MOV B3,A4 PERINIC NOP NOP 50% PBOX PERBIT 15,06,19,20,28,11,27,16, 00,14,22,25,04,17,30,09 100% PERBIT 01,07,23,13,31,28,02,08, 18,12,29,05,21,10,03,24 100% MOV B1,A3 LOAD A1,[L] NOP NOP 50% XOR com L XOR A1,B1 LOAD B1,[R] NOP NOP 50% STORE [L], B1 DEC A2 NOP NOP 50% L(i)<=R(i-1) Fim STORE [R], A1 JZ A2, FIM NOP NOP 50% iteraes JMP INICIO MOV A5,A1 NOP NOP 50% Concatena L e R SHL 32 NOP NOP NOP 25% MOV A1,A5 NOP NOP NOP 25% XOR A1, B1 NOP NOP NOP 25% MOV A3,A1 PERINIC NOP NOP 50% PERBIT 39,07,47,15,55,23,63,31,38,06,46,14,54,22,62,30 100% Permutao Final PERBIT 37,05,45,13,53,21,61,29,36,04,44,12,52,20,60,28 100% PERBIT 35,03,43,11,51,19,59,27,34,02,42,10,50,18,58,26 100% PERBIT 33,01,41,09,49,17,57,25,32,00,40,08,48,16,56,24 100%

Mdia de utilizao do Criptoprocessador VLIW

61,18%

Observando a tabela 16.1 possvel verificar que o algoritmo DES descrito em 38 linhas de cdigo, onde em cada uma delas possvel executar at 4 instrues, como visto no captulo anterior. Sendo que h algumas instrues que ocupam a palavra VLIW completa, tais como a palavra VLIW SBOXINIC e PERBIT. Alm disso, necessria a existncia de vrias instrues do tipo NOP (Not Operation), acumulando um total de 59 operaes deste tipo. O programa principal executado em um lao que inicia na linha 0 de cdigo e se estende at a linha 28. Este lao executado 16 vezes, conforme especificao do algoritmo DES visto no captulo 6. Ao final, basta concatenar L e R para obter o texto cifrado. Desta maneira, o DES executado em um total de 3,658 us (microsegundos), tempo este detalhado a seguir.
266

N total de ciclos = N de ciclo de uma iterao * N de iteraes Tempo total = N total de ciclos * Tempo de um Ciclo Se, N de ciclos de uma iterao =29 N de iteraes = 16 Tempo de um ciclo = 8,116 ns Ento, N total de ciclos = 16 * 29 = 464 Tempo total = 464*8,166= 3789 ns = 3,789 us Um dado muito importante e interessante o aproveitamento da capacidade de processamento do Criptoprocessador VLIW, que indica qual a porcentagem efetiva de utilizao de todo recurso de hardware disponvel por um determinado programa. Nota-se no cdigo apresentado que ocorrem vrios NOPs (Not Operation), isto aponta que o criptoprocessador est sendo sub-utilizado, pois outras operaes poderiam estar sendo executadas. Para calcular este valor, necessrio quantificar qual a porcentagem de aproveitamento de cada palavra VLIW do algoritmo descrito. Isto , se em uma palavra VLIW pode-se armazenar at 4 instrues que podem ser executadas em paralelo, o clculo consiste em quantificar quantas instrues por palavra VLIW esto sendo efetivamente executadas. Na linha 0 do cdigo da tabela 16.1 observa-se que das 4 possveis instrues que poderiam ser executadas, somente h duas que efetivamente sero executadas, as outras duas so instrues do tipo NOP. Assim, nesta linha de cdigo possvel obter apenas 50% da capacidade total de processamento. Fazendo isso em cada linha de cdigo, e dividindo o total da capacidade de processamento pelas 38 linhas de cdigo, chega-se que, o algoritmo DES teve um aproveitamento de 61,18% da capacidade total do criptoprocessador que pode ser considerado aceitvel, mas no ideal. O Ideal hipottico seria, de 100%. Mas sabe-se que no comum esta taxa de aproveitamento, devido aos hazards (PATTERSON, 1997) que sempre existem, sejam de tipo estrutural, controle ou dependncia de dados inerentes aos programas. O nmero de ciclos para a execuo dessa primeira implementao do DES foi de 464 ciclos de clock. Cada algoritmo de criptografia simtrico tem um aproveitamento diferente, assim como diferentes descries para o mesmo algoritmo tambm podem ter. A dependncia de dados foi o principal fator que influenciou no desempenho do algoritmo DES executado pelo criptoprocessador VLIW. Na seo 16.2 apresenta-se
267

Este valor foi obtido aps a implementao em FPGA do criptoprocessador VLIW. Mostrado no captulo 15.

como a tcnica de loop pipelining pode minimizar o impacto no desempenho causado pela dependncia de dados do algoritmo DES, uma vez que a aplicao desta tcnica pode aumentar o aproveitamento dos recursos disponveis na arquitetura do criptoprocessador VLIW. Na figura 16.1 tem-se uma fotografia do sistema funcionando em hardware, Onde, pode-se notar que o texto FABIO foi criptografado pelo criptoprocessador VLIW, gerando uma cifra representada nesta figura.

Figura 16.1 Cifrando um texto com o Criptoprocessador VLIW

16.2 Minimizao do Impacto da Dependncia de Dados do DES Loop Pipelining


Arquiteturas horizontais, como a VLIW, so caracterizadas pela possibilidade de controlar independente e diretamente as diversas unidades funcionais, geralmente atravs de um nico fluxo de controle. Assim, pode-se explorar apenas o paralelismo de grau mais fino, e dispor de um nmero elevado de unidades funcionais se torna intil quando existem dependncias de dados ou de controle. O nvel de desempenho pode ser maior, para um mesmo total de unidades funcionais, se estas forem divididas em grupos e existir tcnicas de paralelismo que tenham efeito sobre a arquitetura destino. Atravs do estudo prvio de vrios algoritmos simtricos, fica claro que a maioria desses algoritmos executa uma seqncia de operaes com um grau de dependncia elevado. Estas operaes, so chamadas de iterao. O nmero de iteraes varia de algoritmo para algoritmo, sendo que estas so geralmente executadas em um lao principal. No caso de algoritmos criptogrficos simtricos, as iteraes atuam sobre um bloco de texto de tamanho fixo, com o
268

objetivo de cifrar ou decifrar as informaes desejadas. O algoritmo DES, por exemplo, atua sobre blocos de 64 bits. Neste contexto, pode-se aplicar de forma eficiente a tcnica de Loop Pipelining (NEIL, 2000), onde operaes de diferentes iteraes podem ser executadas em um mesmo estado ou palavra VLIW. Assim, esta tcnica permite uma melhor utilizao dos recursos. Em uma primeira implementao do algoritmo DES, usou-se a seguinte seqncia de passos: (i) captura bloco de 64 bits, (ii) processa as 16 iteraes do DES, (iii) armazena texto cifrado. Este procedimento atingiu uma taxa de 61,18% de aproveitamento efetivo do hardware, conforme foi mostrado na seo 16.1. Com a utilizao da tcnica de loop pipelining, o fluxo de execuo torna-se mais complexo, mas o aproveitamento dos recursos de hardware disponveis maior e o desempenho geral da arquitetura otimizado. Na figura 16.2 apresenta-se como aplicar esta tcnica para atingir um paralelismo de gro mdio ou tambm conhecido como mesoparalelismo.

Figura 16.2 - Ilustrao da tcnica de loop pipelining

Observa-se na figura 16.2 que o algoritmo DES descrito pode atuar sobre quatro blocos de texto em paralelo. Utilizando o loop pipelining, operaes de diferentes iteraes e blocos de texto, podem ser executados em um mesmo estado. O inicio do processamento de cada bloco instanciado em tempos diferentes, indicados pelas setas da figura 16.2, evitando na maioria das vezes, a disputa entre duas ou mais instrues pela mesma unidade funcional. Na tabela 16.2 tem-se um trecho do algoritmo DES utilizando esta tcnica.
Tabela 16.2 Trecho de cdigo do algoritmo DES com loop pipelining

269

LOAD B5[TEXTO] PERINIC NOP NOP PERBIT B5, 57,49,41,33,25,17,09,01, 9,51,43,35,27,19,11,03 PERBIT B5, 61,53,45,37,29,21,13,05, 63,55,47,39,31,23,15,07 PERBIT B5, 56,48,40,32,24,16,08,00, 58,50,42,34,26,18,10,02 PERBIT B5, 60,52,44,36,28,20,12,04, 2,54,46,38,30,22,14,06 LOAD B5[TEXTO+1] PERINIC MOV A3,A5 NOP PERBIT B5, 57,49,41,33,25,17,09,01, 9,51,43,35,27,19,11,03 PERBIT B5, 61,53,45,37,29,21,13,05, 63,55,47,39,31,23,15,07 PERBIT B5, 56,48,40,32,24,16,08,00, 58,50,42,34,26,18,10,02 PERBIT B5, 60,52,44,36,28,20,12,04, 2,54,46,38,30,22,14,06 LOAD B5[TEXTO+2] PERINIC MOV A3,A5 SHL A3,3 PERBIT B5, 57,49,41,33,25,17,09,01, 9,51,43,35,27,19,11,03 PERBIT B5, 61,53,45,37,29,21,13,05, 63,55,47,39,31,23,15,07 PERBIT B5, 56,48,40,32,24,16,08,00, 58,50,42,34,26,18,10,02 PERBIT B5, 60,52,44,36,28,20,12,04, 2,54,46,38,30,22,14,06 LOAD B5[TEXTO+3] PERINIC MOV A3,A5 SHL A3,32 PERBIT B5, 57,49,41,33,25,17,09,01, 9,51,43,35,27,19,11,03 PERBIT B5, 61,53,45,37,29,21,13,05, 63,55,47,39,31,23,15,07 PERBIT B5, 56,48,40,32,24,16,08,00, 58,50,42,34,26,18,10,02 PERBIT B5, 60,52,44,36,28,20,12,04, 2,54,46,38,30,22,14,06 MOV A3,A5 SHL A3,3 STORE [L],A5 PERINIC SHL A3,32 STORE [L+1],A5 MOV B5,A3 NOP PERBIT B5, 31,00,01,02,03,04,03,04, 05,06,07,08,07,08,09,10 PERBIT B5, 11,12,11,12,13,14,15,16,15,16,17,18,19,20,19,20 PERBIT B5, 21,22,23,24,23,24,25,26,27,28,27,28,29,30,31,00 LOAD A1,[K1] MOV B5,A3 PERINIC NOP PERBIT B5, 31,00,01,02,03,04,03,04, 05,06,07,08,07,08,09,10 PERBIT B5, 11,12,11,12,13,14,15,16,15,16,17,18,19,20,19,20 PERBIT B5, 21,22,23,24,23,24,25,26,27,28,27,28,29,30,31,00 LOAD A1,[K1+1] MOV B5,A3 PERINIC NOP PERBIT B5, 31,00,01,02,03,04,03,04, 05,06,07,08,07,08,09,10 PERBIT B5, 11,12,11,12,13,14,15,16,15,16,17,18,19,20,19,20 PERBIT B5, 21,22,23,24,23,24,25,26,27,28,27,28,29,30,31,00 LOAD A2,15 MOV B5,A3 PERINIC NOP PERBIT B5, 31,00,01,02,03,04,03,04, 05,06,07,08,07,08,09,10 PERBIT B5, 11,12,11,12,13,14,15,16,15,16,17,18,19,20,19,20 PERBIT B5, 21,22,23,24,23,24,25,26,27,28,27,28,29,30,31,00 SBOXINIC SBOXEND, SBOXC, SBOXQ,TBO,TBD,B

50% 100% 100% 100% 100% 75% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 75% 100% 100% 100% 75% 100% 100% 100% 75% 100% 100% 100% 75% 100% 100% 100% 100%

Observa-se na tabela 16.2 que o trecho de cdigo descrito do algoritmo DES executa todas as permutaes iniciais e permutao de expanso de cada um dos 4 blocos de texto claro. Ainda neste trecho nota-se que a ocorrncia de NOPs diminuiu, mas no foi extinta. O aproveitamento do hardware foi de 95% neste trecho de cdigo. Uma iterao do DES executada em 76 ciclos. Este lao executado 16 vezes. Desta maneira, o DES executado em um total de 9,863 us (microsegundos), tempo este detalhado a seguir.
270

N total de ciclos = N de ciclos de uma iterao * N de iteraes Tempo total = N total de ciclos * Tempo de um Ciclo Se, N de ciclos de uma iterao =76 N de iteraes = 16 Tempo de um Ciclo = 8,116 ns Ento, N total de ciclos = 16 * 29 = 1216 Tempo total = 1216*8,166= 9863 ns = 9,863 us Aplicada a tcnica de loop pipelining foi refeita a contagem de aproveitamento e foi contabilizada uma taxa de aproveitamento do hardware de 82,75%. Este aumento considerado significativo e o impacto pode ser visto nos dados apresentados a seguir. A implementao sem loop pipelining, pode executar um bloco de 64 bits em 464 ciclos de clock, ento a relao de ciclos por bits cifrados de 7,25. J a implementao com loop pipelining pode executar at quatro blocos de 64, assim um total de 256 bits em 1216 ciclos, a taxa de ciclos por bits de 4,75 ciclos/bit, isto quer dizer que so necessrios menos ciclos para cifrar um bit em relao implementao anterior. O impacto dessa otimizao no desempenho do criptoprocessador, medido em quantidade de Mbytes de texto cifrado por segundo (Mbytes/s), foi significativo. Onde, anteriormente era cifrado no mximo 17,5 Mbytes/s agora cifrado 26 Mbytes/s. importante salientar que no houve alterao na arquitetura do criptoprocessador VLIW. Uma das caractersticas encontradas em algoritmos criptogrficos simtricos que levou a escolha da tcnica de loop pipelining para paralelizar instrues foi a presena freqente de um lao principal de execuo, chamado de iterao. A utilizao da tcnica de loop pipelining potencializou e otimizou a utilizao do criptoprocessador VLIW. O ganho obtido no estudo de caso foi significativo, da ordem de 34% na quantidade de Mbytes cifrados por segundo (Mbytes/s). Este estudo preliminar pode ser a base para o projeto de um compilador de alto nvel para o criptoprocessador VLIW, onde um dos parmetros crticos que pode ser tratado a paralelizao de laos atravs da tcnica de loop pipelining Este valor foi obtido aps a implementao em FPGA do criptoprocessador VLIW. Mostrado no captulo 15.

16.3 Implementao do algoritmo RC5


271

O algoritmo RC5 no possui na sua especificao operaes de substituio e permutao. O algoritmo RC5 implementado realiza 16 iteraes no processo de cifragem de um bloco de texto. O pseudocdigo apresentado a seguir mostra um trecho do cdigo assembler do processo de encriptao do RC5 utilizando as instrues do criptoprocessador VLIW.
LOAD A1,[TEXTO] LOAD B1,[CHAVE] ADD A1,B1 LOAD A2, [TEXTO +1] LOAD B2[CHAVE +1] ADD A2,B2 MOV B1,A2 XOR A1,B2 MOV A4,B1

ROT1 MOV A3,A1 JZ A4, [ROT2] ROL 1 SHR 1 JMP ROT1

ROT2

MOV A2,A1

ADD A2,B2 MOV A3,A2

ROT3 ROT 1 SHR 1

JZ B4, ROT4

JMP ROT3

ROT4

DEC B2

JZ B2,FIM JMP ROT1

FIM

Uma iterao do RC5 executada em 19 ciclos. Este lao executado 16 vezes. Desta maneira, o RC5 executado em um total de 1,829 us, tempo este detalhado a seguir. N total de ciclos = N de ciclos de uma iterao * N de iteraes Tempo total = N total de ciclos * Tempo de um Ciclo Se, N de ciclos de uma iterao =19 N de iteraes = 16 Tempo de um Ciclo = 8,116 ns

Este valor foi obtido aps a implementao em FPGA do criptoprocessador VLIW. Mostrado no captulo 15.
272

Ento, N total de ciclos = 16 * 19 = 304 Tempo total = 304*8,166= 2482 ns = 2,482 us Desta forma o RC5 executado pelo criptoprocessador pode cifrar aproximadamente 26 Mbytes/s. Como esperado o RC5 teve um desempenho superior ao DES, cofirmando os dados obtidos nos respectivos captulos dedicados a esses dois algoritmos, respectivamente, captulo 6 e 11. A tcnica de loop pipelining no foi aplicada para o RC5, a qual pode ser aplicada em trabalhos futuros, assim como, a implementao de outros algoritmos simtricos neste criptoprocessador.

16.4 Implementao da S-BOX do AES


Nesta seo apresenta-se a implementao da S-BOX do algoritmo AES utilizando o assembly do Criptoproecssador VLIW. O AES possui apenas uma S-BOX, de dimenso 16x16, onde cada palavra de substituio de 8 bits. Portanto, a S-BOX do AES ocupa um total de 2048 (16x16x8) bits de memria de dado (D-CACHE). Para implementar a S-BOX do AES deve-se primeiramente configurar o Criptoprocessador VLIW. Para isso, utiliza-se a instruo S-BOXINIC. A SBOX do AES possui as seguintes caractersticas (detalhes no captulo 10): 8 bits de entrada, dos quais, os 4 mais significativos endeream a linha da SBOX e os 4 menos significativos endeream a coluna da SBOX. 8 bits de sada. Estes iro substituir os 8 bits de entrada utilizados para enderear a S-BOX. Existe apenas uma S-BOX de dimenso 16x16. vetor de entrada que alimenta a S-BOX de 128 bits, portanto so necessrias 16 substituies (16 * 8 = 128 bits). Neste exemplo a S-BOX est armazenada a partir do endereo 1F de memria. Na figura 16.3 ilustra-se a instruo de substituio. Cada Sr,c de 8 bits. Estes 8 bits endeream a S-BOX, localizando o valor de substituio. O valor de substituio (Sr,c) sobreescreve o valor de endereamento (Sr,c) realizando a operao de substituio. Esta operao repetida at que toda a matriz S seja substituda por S atravs da S-BOX.

273

Figura 16.3 Operao de substituio do AES

Extraindo estas caractersticas possvel descrever com facilidade a S-BOX do AES utilizando a instruo SBOXINIC e SBOX, como se nota no cdigo assembly a seguir:
Define SBOXEND = 001Fh // endereo de inicio da S-BOX (D-CACHE)

Define SBOXCOL = Fh // 16 colunas (dimenso) Define SBOXQ = FFh Define TBO = 8h Define TBD = 8h // 256 elementos (16x16) // tamanho do bloco origem (bloco que ser substitudo) // tamanho do bloco destino (bloco de substituio) // bits do bloco origem que definem a linha

Define COL = BIT4, BIT3, BIT2, BIT1 Define LIN

= BIT8, BIT7 BIT6, BIT5 // bits do bloco origem que definem a coluna // modo bit de representao

Define B = 0 SBOXINIC SBOX 0, SBOX 0, SBOX 0, SBOX 0,

SBOXEND, SBOXCOL, SBOXQ, TBO, TBD, LIN, COL, B SBOX 0, SBOX 0, SBOX 0, SBOX 0, SBOX 0, SBOX 0, SBOX 0, SBOX 0, SBOX 0 SBOX 0 SBOX 0 SBOX 0

//Aps executar a primeira instruo SBOX 0 automaticamente o criptoprocessador //aponta para os prximos 8 bits que sero substitudos. Assim a ltima instruo SBOX 0 // estar realizando a substituio do ltimo byte do vetor de entrada 128 bits.

16.5 - Interface em Hardware para Teste do Criptoprocessador VLIW)


O Criptoprocessador VLIW e os algoritmos DES, AES e RC5 descritos em assembly foram validados via simulao. Para realizar alguns testes fsicos do criptoprocessador mapeado em um FPGA foi necessria a implementao de uma interface simplificada para ter uma entrada e sada bsica, onde, atravs de comandos inseridos por um usurio o criptoprocessador realizar as operaes de
274

cifragem, decifragem e troca de chave. Esta interface pode ser visualizada na figura 16.4. A interface composta por trs elementos principais: teclado, onde o usurio pode entrar com dados no sistema. Estes dados podem ser do tipo: texto, cifra, chave ou um comando para criptoprocessador. A placa de prototipao D2E da digelent (http://www.digilentinc.com) possui um FPGA Spartan200E, onde est mapeado o sistema principal, composto pelo Criptoprocessador VLIW e A interface de controle do teclado e do display LCD (16X2). A placa de prototipao DIO2 da digilent (http://www.digilentinc.com) foi utilizada para fazer a interface fsica do teclado com o Criptoprocessador e do Criptoprocessador com o Display LCD.

Figura 16.4 Interface em hardware do Criptoprocessador VLIW

Est uma interface limitada, mas atravs dela possvel visualizar o funcionamento fsico do criptoprocessador VLIW em um FPGA real. Como exemplo, apenas o algoritmo de criptografia DES est mapeado na memria do criptoprocessador VLIW. Atravs desta interface pode-se cifrar/decifrar apenas um bloco de 64 bits (8 caracteres) por vez. A seguir a seqncia de passos para utilizar este sistema: 1 Conectar o teclado na porta PS/2 2 Mapear o Criptoprocessador e a interface no FPGA Spartan200E (D2E). 3 Digitar 8 caracteres (texto, cifra ou chave).
275

4Digitar o operador =. 5Digitar o comando (E=Encriptar, D=Decriptar, K=Chave).

Nem todas as teclas do teclado PS/2 foram decodificadas. A princpio o teclado alfanumrico foi decodificado. As teclas no decodificadas geram o caracter ? no LCD quando pressionadas. Algumas teclas tm funo especial como: ESC Limpa todo o LCD e posiciona o cursor na linha 1 coluna 1. F1 Copia a linha de resposta, onde aparece o texto cifrado ou decifrado para a linha comando e posiciona o cursor para espera de um novo comando. Backspace Apaga caracter digitado. A figura 16.5 apresenta fotos do sistema real implementado e testado no Laboratrio de Arquitetura e Sistemas Computacionais do UNIVEM Centro Universitrio Eurpides de Marlia http://www.fundanet.br.

Figura 16.5 Fotos do Criptoprocessador integrado a interface em hardware.

importante salientar que no foi utilizado nenhum componente eletrnico para o controle de teclado ou LCD. Toda a lgica necessria foi implementada utilizando a linguagem VHDL e integrada ao criptoprocessador VLIW. O sistema completo (Criptoprocessador + Interface) ocupa 89% do FPGA Spartan200E. Assim, os autores gostariam de salientar que os leitores podem usar os cdigos do livro, em especial, aqueles das implementaes em hardware, da maioria dos algoritmos descritos no livro, assim como do projeto do criptoprocessador prototipado em FPGAs. Esses cdigos relacionados ao projeto do criptoprocessador especfico para realizar operaes criptogrficas implementado em FPGAs ressalta a importncia de se ter
276

hardware especializado para segurana, e o mais importante, que podem ser projetados no Brasil, com custo relativamente baixo.

277

Captulo 17
WebCry Uma Ferramenta Didtica de Criptografia na WEB

Este captulo apresenta uma ferramenta criada pelos autores, que facilita o entendimento e utilizao dos algoritmos apresentados e discutidos no livro. Esta ferramenta pode ser acessada pelos leitores de modo on-line atravs da internet ou executado diretamente aps download da ferramenta completa. Nessa ferramenta, os leitores podero selecionar um algoritmo desejado para anlise, assim como um arquivo que ser cifrado ou decifrado. A ferramenta mostra o tempo que a operao leva, e o arquivo aps a operao (cifrar/decifrar) desejada.

17.1 Motivao
Existem hoje em dia um grande nmero de algoritmos criptogrficos, sendo que eles se diferem em caractersticas como segurana, tipo (simtrico ou assimtrico) e performance. Com isto, o objetivo da ferramenta integrar vrios algoritmos, realizando uma distino de tipo e aplicao para facilitar o entendimento destes algoritmos e detectar caractersticas importantes que algumas vezes recebem pouca ateno, como por exemplo, o desempenho. Desta forma, os algoritmos especficos como os didticos, simtricos e assimtricos esto separados em categorias na ferramenta WebCry.

17.2 Apresentao da Ferramenta


A ferramenta WebCry uma ferramenta didtica para auxiliar o aprendizado de criptografia, sendo que nela so incorporados diversos algoritmos, dentre eles destacam-se alguns que tm finalidade didtica pela simplicidade na estrutura e a presena de falhas de segurana que podem ser exploradas pelo leitor para aprofundar os conhecimentos de como so realizados ataques em um algoritmo. A ferramenta WebCry composta por quatro partes bsicas. A primeira parte a parte de seleo de algoritmo, onde possvel escolher qual algoritmo ser utilizado. A segunda parte permite a escolha da chave a ser utilizada; na terceira parte possvel realizar a criptografia de arquivos e a quarta parte permite a criptografia de textos pequenos como mostra a figura 17.1.
278

Na figura 17.1 que representa a tela inicial da ferramenta pode-se notar que os diversos algoritmos esto separados em categorias para facilitar o entendimento: simtricos, didticos, sssimtricos e funes hash.

Figura 17.1 Tela inicial da Ferramenta WebCry

17.3 Guia para usurios e Leitores


A ferramenta WebCry est disponvel em duas verses: uma verso em applet que pode ser acessada diretamente via WEB; e uma verso de aplicativo Java. Ambas as verses necessitam do pacote Java Runtime Environment (JRE) verso 1.4 ou superior. Recomenda-se o uso do JRE verso 1.4.2. Para instalar o JRE necessrio fazer o download do programa de instalao atravs do site http://java.sun.com. Para executar a verso em applet basta acessar o link http://www.novateceditora.com.br/downloads.php. Neste link s clicar onde aparece a imagem do livro de criptografia. Localizando este site, acessar o link relacionado com a ferramenta WebCry.
279

Aparecer uma janela como a apresentada na figura 17.2. onde possvel realizar a criptografia de pequenas quantidades de texto utilizando os diversos algoritmos implementados. Importante ressaltar que a verso em applets uma verso simplificada da ferramenta e pos isto no apresenta a opo para a criptografia de arquivos. Caso deseje realizar a criptografia de arquivos (texto, msicas, imagens, vdeos, etc) necessrio fazer o download da verso de aplicativo Java. O download pode ser realizado a partir do link anterior na seo que indica o arquivo WebCry.jar.

Figura 17.2 Tela da Verso Applet da Ferramenta WebCry

Depois de realizado o download da ferramenta na verso aplicativo Java basta dar um clique duplo sobre o arquivo para execut-lo. No entanto, em algumas mquinas, devido configurao do JRE, pode ser que a execuo no se inicie com um clique duplo. Nestes casos ser necessrio realizar o download do arquivo WebCry.bat
280

(que um arquivo em lote com o comando necessrio para a execuo da ferramenta) e execut-lo.

17.4 Exemplo de Funcionamento


Para exemplificar o funcionamento da ferramenta inicialmente se apresenta a operao para criptografar e decriptografar um arquivo e posteriormente se apresenta um exemplo onde realizada a criptografia e decriptografia de textos entrados diretamente pelo usurio. O leitor pode seguir os seis seguintes passos: I. Inicializar a ferramenta.

II. Selecione um algoritmo de interesse, entre as opes existentes na ferramenta. Exemplo, o algoritmo utilizado neste exemplo o algoritmo didtico chamado de posicional. Para isto, ao iniciar a ferramenta selecione o algoritmo Posicional como mostra a etapa 1 da figura 17.3. III. Gerar uma chave. Aps a seleo do algoritmo necessrio gerar uma chave, para isto, selecione o tamanho da chave desejada (etapa 2 da figura 17.3) e clique em Gerar, a chave gerada aparecer em formato hexadecimal em uma caixa de texto. IV. Escolher arquivos. Aps a seleo da chave necessrio escolher os arquivos origem e destino que sero utilizados, para isto, clique em procurar e escolha o arquivo de origem e destino como mostra a etapa 3 da figura 17.3. Importante notar que caso j exista um arquivo destino com o mesmo nome que o selecionado, o arquivo escolhido para destino ser sobrescrito com o arquivo origem criptografado, portanto, ao escolher o arquivo destino no recomendvel a seleo de arquivos existentes, mas sim que o usurio digite um novo nome de arquivo. V. Selecionar Operao (cifrar/decifrar). Aps escolher os arquivos necessrio escolher a operao desejada. Por padro a operao selecionada a operao de criptografia, caso o usurio deseje decriptografar o arquivo necessrio escolher a opo Decriptografar como mostra a etapa 4 da figura 17.3. VI. Executar o algoritmo. Finalmente, depois de selecionados todos os dados necessrios basta clicar em Executar para que a ferramenta realize a operao desejada.

281

Figura 17.3 Etapas de Operao da Ferramenta

Outro exemplo considerado mostra como realizar a criptografia de textos entrados diretamente pelo usurio. Para isto necessrio escolher o algoritmo e a chave como descrito no exemplo anterior, no entanto, como o texto ser digitado diretamente pelo usurio necessrio selecionar o painel apropriado para isto. A etapa 1 da figura 17.4 mostra como selecionar o painel que permite a entrada do texto diretamente pelo usurio e como proceder para realizar a criptografia e sua decriptografia. Aps selecionar o painel, basta entrar com o texto na rea de texto Origem, como mostra a etapa 2 da figura 17.4 e clicar em cifrar. O cdigo cifrado aparecer na caixa de texto abaixo como mostra a figura 17.5. Para decifrar o texto, copie o contedo da caixa de texto Destino e cole na caixa de texto origem para posteriormente clicar em decifrar. Note que o texto original recuperado na caixa de texto Destino. Um outro teste possvel consiste em mudar a chave clicando em Gerar e tentar decifrar o texto, desta forma, pode-se notar que o texto original no recuperado, uma vez que a chave utilizada na decriptografia diferente da chave utilizada na criptografia.

282

Figura 17.4 Etapas para a criptografia de textos

Figura 17.5 Resultado da criptografia de um texto

283

17.5 Consideraes Finais


Com a ferramenta, o leitor pode melhor entender o funcionamento dos algoritmos explicados no livro, uma vez que pode visualizar os efeitos de sada aps realizar respectivo processamento relacionado com a cifragem ou decifragem de mensagens, alm de conseguir ter uma idia do tempo desse processamento. O leitor pode executar o processo de criptografia escolhendo o algoritmo, e verificando as respectivas sadas, e compar-las com as obtidas com outros algoritmos, o que lhe oferece recursos para decidir qual algoritmo deseja usar para uma determinada aplicao.

284

Apndice A
Referncias Bibliogrficas

AESWinner. National Institute of Standards and Technology,NIST. http://www.nist.gov/public_affairs/releases/g00-176.htm., Acesso em 2003. ALTERA, FPGA, CPLD & Structured ASIC Devices - http://www.altera.com/ Acesso em Julho de 2004. ALVES, E. S.., Biblioteca para Segurana de Dados: JCA Um Estudo de Caso. Monografia de Especializao em Engenharia de Software, UNIVEM Centro universitrio Eurpides de Marlia, Marlia, S.P., Brasil, 2003. BIHAM, E., A Note on Comparing the AES Candidates, Second AES conference. Technical report, Computer Science Department, Technion Israel Institute of Technlogy, 1999. www.cs.technion.ac.il/~biham. BROWN, I., BACK, A., LAURIE, B., Forward secrecy extentions for openPGP, internet-draft, 2000. BROWN, L., PIEPRZYK, J., Introducing the new Loki97 Block Cipher. In Proceedings from the First Advanced Encryption Standard Candidate Conference, National Institute of Standards and Technology (NIST), August 1998. BUCHMANN, Johannes A. Introduction to Cryptography, Springer Verlag,, EUA 2001. BURNETT, S., PAINE S. Criptografia e Segurana - O guia oficial RSA, Editora Campus, 2002 BURNETT, S. Using the Java TM Cryptographic Architecture and Java TM Cryptographic Extensions. Disponvel em http://servlet.java.sun.com/javaone/javaone2000/pdfs/TS-1334.pdf., 2000. BURWICK, C., COPPERSMITH, D., et al, MARS - a candidate cipher for AES, IBM Corporation, USA, 1999. CARLISLE, A., "The CAST-128 Encryption Algorithm,",RFC 2144, May 1997. CHIARAMONTE, R. B., MORENO, E.D. Criptografia Posicional em Hardware (VHDL e FPGAs)., Revista REIC-SBC, Dezembro, 2002.
285

CHIARAMONTE, R. B., MORENO, E.D. Criptografia Posicional Uma Soluo para Segurana de Dados. Revista REIC-SBC, Novembro, 2001. CROWLEY, P., et al. Characterizing processor architectures for programmable network interfaces. Proc. of International Conference on Supercomputing, Santa F, 2000. CRYPTOAPI, Digital Signatures with the Microsoft CryptoAPI - Dr.Dobbs Journal, 1998. CUADRA, Fernando de la, Criptografa explicada. http://www.baquia.com/com/20030317/art00014.print.html, Espanha, 2003. CUNHA, Manuel Alcino Pereira da., Java Cryptography Architecture., Material do Curso, DI Universidade do Minho, Portugal, 1999. CURTIN, M., DOLSKE, J., A Brute Force Search of DES Keyspace, the USENIX Association's journal, 1998. DESKEY. Cryptography Research, DES Key Search Machine. http://www.cryptography.com/resources/whitepapers/DES.html, Acesso em 2001. ESPOSITO, Dino. Supporting CryptoApi in Real-World Applications. Disponvel em http://www.microsoft.com/mind/0697/crypto.asp, 2004. EZCHIP, Network Processor Designs for Next-Generation Networking Equipment, 1999. FIPS46-3. Federal Information Processing Standards Publication 46-3, DATA ENCRYPTION STANDARD, Dezembro, 1999. FIPS197-2001. Federal Information Processing Standards Publication 197, ADVANCED ENCRYPTION STANDARD (AES), Novembro, 2001. FIPS180-1. Secure Hash Standard. National Institute of Standards and Technology (NIST-1995). http://www.itl.nist.gov/fipspubs/fip180-1.htm. FREITAS, H. C., C. A. P. S. Martins. R2NP: Processador de Rede RISC Reconfigurvel. Anais do WSCAD (Workshop de Sistemas Computacionais de Alto Desempenho), 2002. FREITAS, H. C., MARTINS, C. A. P. S., Projeto de Processador com Microarquitetura Dedicada para Roteamento em Sistemas de Comunicao de Dados. Anais do WSCAD (Workshop de Sistemas Computacionais de Alto Desempenho), 2000. FREITAS, H. C., MARTINS, C. A. P. S., Processador de Rede com Suporte a Multi-protocolo e Topologias Dinmicas. Anais do WSCAD (Workshop de Sistemas Computacionais de Alto Desempenho), 2001.

286

GATTI, Luis Fernando Ruivo; LAINO, Eduardo Elias; MORENO, E.D. JBCRI Uma ferramenta para Analisar Bibliotecas Criptogrficas. Proceedings of the GCETE/IEEE (Global Conference on Engineering and Technology for Education), Bertioga, S.P., Brasil, 2005. GATTI, Luis Fernando Ruivo. Estudo e Comparao de Bibliotecas de Criptografia. Trabalho de Concluso de Curso, Cincia da Computao, UNIVEM, Marlia, 2003. GEEK, Revista Geek, edio n 09, Artigo: A Escrita Oculta, p.23-31, Editora Digerati., www.geek.com.br, 2002. GEORGOUDIS, D., LEROUX, D., et al, Specification of the Algorithm THE "FROG" ENCRYPTION ALGORITHM,USA, 1998. GOODMAN, J., CHANDRAKASAN, A. P. An Energy-Efficient Re-configurable Public-Key Cryptography Processor, IEEE Journal of Solid-State Circuits, Vol. 36, No. 11, Nov. 2001. GUELFI, A. E.. Middleware de comunicao para prover o gerenciamento de servios multimdia flexveis e integrados em ambientes distribudos e heterogneos. 2002. Tese (Doutorado) - Escola Politcnica, Universidade de So Paulo, So Paulo, 2002. IBM 4758, Coprocessador IBM 4758 http://www-3.ibm.com/security/cryptocards/ Acesso em Janeiro de 2005. IBM, The Network Processor Enabling Technology for High-Performance Networking. 1999. IEEE 1363, Standard Specifications for Public Key CryptographyDraft 13, IEEE P1363, 1999. INTEL, Intel Corporation IXP 1200 Network Processor Datasheet, 2000. IXP2800, The Intel IXP2800 network processor http://www.intel.com/design/network/products/npfamily/ixp2800.htm - Acesso em Janeiro de 2005. JACOBSON, M.J., HUBERY, Algorithm,GERMANY, 1998. K., The MAGENTA Block Cipher

JCA, JavaTM Cryptography Architecture API Specification & Reference. Disponvel em http://www.wedgetail.com/jcsi/provider/. Acesso em novembro de 2004. JAVAROME. JCA. Disponvel em http://javarome.free.fr/net/JCA.html., 2003. KAHN, David., The Codebreakers. Macmillan, 1967. KERCKHOFFS, A., La cryptographie militaire, Journal des sciences militaires, 1883.
287

KOCHER, P. C., Breaking DES, The technical newsletter of rsa laboratories, volume4, number2, 1999. KO, C. K., RSA Hardware Implementation., RSA Laboratories, U.S.A, 1995. KO, C.K., High Speed RSA Implementation., RSA Laboratories, USA, Nov., 1994. KOREN, I. Computer Arithmetic Algorithms. Prentice Hall, 1993. KNUTH, Donald E. Knuth, The Art of Computer Programming - Seminumerical Algorithms, Addison-Wesley, 1997. LAI, X., MASSEY, J. L., A proposal for a new block encryption standard, 1990, apresentado no evento Eurocrypt 90, publicado pela Springer Verlag, 1991. LAINO, E. Estudo, Comparao e Desempenho de Bibliotecas Criptogrficas. Trabalho de Conculso de Curso,Cincia da Computao, UNIVEM, 2003. LAPSLEY, P. et al. DSP Processor Fundamentals: Architectures and Features. IEEE Press Series on Signal Processing, 1997. LIDL, R., NIEDERREITER, H., Introduction to Finite Fields and Their Applications, Cambridge University Press, Cambridge, 1994. MAIA, L. P., PAGLIUSI, P. S. Criptografia e Certificao Digital http://www.training.com.br/lpmaia/pub_seg_cripto.htm Acesso em: Dezembro de 1999. MASCARIN, V. P., Bibliotecas para segurana de dados- CryptoAPI Um estudo de caso. Monografia de Especializao em Engenharia de Software, UNIVEM Centro universitrio Eurpides de Marlia, Marlia, S.P., Brasil, 2003. MENDES, Hammurabi das Chagas. Usando OpenSSL - Uma implementao livre do protocolo SSL. Trabalho da Disciplina Segurana de Dados 1/03, Universidade de Braslia 13 de Julho de 2003 http://www.cic.unb.br/docentes/pedro/trabs/hammurabi.htm MENEZES, A., OORSCHOT, P.V., VANSTONE, S. Handbook of Applied Cryptography, CRC Press, New York, 1997. MESERVE, J., DES code cracked in record time Network World, 1999. MIERS, Charles Christian; CUSTODIO, Ricardo Felipe., Modelo Simplificado do Cifrador AES, UFSC, Florianpolis, 2002. MORENO, E. D., PEREIRA, F., PENTEADO, C., PERICINI, R. Projeto, Desempenho e Aplicaes de Sistemas Digitais em Circuitos Programveis (FPGAs), Bless Grfica e Editora, Marlia/SP, 2003. MOTOROLA, Motorola Specifications, 1999. MPC680 PowerQUICC Processor, Hardware

288

MOTOROLA, C-5 Network Processor, 2002. MPC180TS, MPC180 Security Processor Technical Summary, Motorola, 2003. MPC184TS, MPC184 Security Processor Technical Summary, Motorola, 2003. MPC185TS, MPC185 Security Processor Technical Summary, Motorola, 2003. MPC190TS, MPC190 Security Processor Technical Summary, Motorola, 2003. NISTAPI, National Institute of Standards and Technology, Advanced Encryption Standard (AES)-Development Effort, Cryptographic API Specifications and Reference Information, 1999. NEIL, T. W., EDWIN H.-M., Minimizing Inter-Iteration Dependencies for Loop Pipelining, ISCA International Conference, 2000. OPENCORES, OPENCORES.ORG - http://www.opencores.org/ - Acesso em Maro de 2004. PAAR,C. Cryptography and Data Security. Course Information. Electrical and Computer Engineering Department. Worcester Polytechnic Institute. http://ece.wpi.edu/People/faculty/cxp.html. http://ece.wpi.edu/~christof/578., 2004. PAAR,C. Reconfigurable Hardware in Modern Cryptography. Technical Report, ECC 2000, Cryptography and Information Security Group, Electrical and Computer Engineering Department. Worcester Polytechnic Institute. http://www.ece.wpi.edu/Research/crypt., 2000. PALOS, J. A., Seguridad en la Plataforma Java 2 JDK http://www.programacion.com/java/tutorial/security1dot2/7/, Acesso dezembro de 2004. 1.2. em

PATTERSON, D. A., HENNESSY J. L., Computer Organization and Design: The Hardware/Software Interface, Morgan Kaufmann Publisher, 1997. PEREIRA, F. D., Um Criptoprocessador VLIW para algoritmos Criptogrficos Simtricos: Projeto e Desempenho em FPGAs, Dissertao de mestrado em cincia da computao, UNIVEM, 2004. PEREIRA, F., MORENO, E.D. Otimizao em VHDL e Desempenho em FPGAs do Algoritmo de Criptografia DES. Quarto Workshop em Sistemas Computacionais de Alto Desempenho (WSCAD), So Paulo, Nov., 2003. PETRI, Steve. Na Introduction to Smart Card. www.sspsolutions.com. Acesso em 2004. PINTO, T. A. M.. Estudo e Comparao De Algoritmos De Funo Hashing. Trabalho de Concluso de Curso, Bacharelado em Cincia da Computao, UNIVEM (Centro Universitrio Eurpides de Marlia), Marlia, S.P., Brasil, 2004.

289

PRADO, R. P., Proposta de Implementao em FPGA de um Processador de rede Reconfigurvel, Dissertao de Mestrado, Cincia da Computao, UNIVEM, Brasil, 2004. PUTINI, R., S.,. Material do curso de Ps-Graduao sobre Segurana de Redes Departamento de Engenharia Eltrica, Universidade de Brasilia. Link: http://www.redes.unb.br/security, 2004. RC5-64, RSA Security Inc. The RSA Challenge Numbers (RC5-64), 2003. REGULY, A., OpenSSL. Trabalho de Redes de Computadores, Universidade Federal do Rio Grande so Sul, Porto Alegre, 2001. http://reguly.net/alvaro/linux/security/openssl/rautu/OpenSSL_RauTu REQUEST AES, National Institute of Standards and Technology, Announcing request for candidate algorithm nominations for the advanced encryption standard(aes), 1997. RFC1321, Rivest, R., RFC 1321 - The MD5 Message Digest Algorithm., 1992. RFC3174. RFC 3174 US Secure Hash Algorithm 1 (SHA-1). NSA 1994. RIJNDAEL, Daemen J., Rijmen, V., AES Proposal: Rijndael Block Cipher, 1999. RIVEST, R., RC6 Block Cipher, RSA Security Inc, USA, 2000. RIVEST, R., SHAMIR, A., ADLEMAN, L., A Method for Obtainig Digital Signatures and Public-Key Cryptosystems, Communications of the ACM, 1978. RIVEST, R., The RC5 encryption algorithm, Fast Software Encryption. 2nd. International Workshop, Lec. Note in Comp. Sci. 1008, pp 86-96, SpringerVerlag, 1995. ROSS, A., BIHAM, E., KNUDSEN, L., Serpent: A Proposal for the Advanced Encryption Standard., Cambridge University England, 1998. SCHNEIER, B. Applied Cryptography: Protocols, Algorithms and Source in C. 2nd Ed. John Wiley and Sons, New York, 1996. SCHNEIER, B. Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish), Fast Software Encryption, Cambridge Security Workshop Proceedings (December 1993), Springer-Verlag, 1994, pp. 191-204. SHAH, N., Understanding Network Processors. Dept. EECS, UC, Berkeley. 2001. SHAND, M., VUILLEMIN, J., Fast implementations of RSA cryptography. Proc. 11th IEEE Symp. Computer Arithmetic, pp. 252259,1993. SIMON, S., "The Code Book", Anchor Books, EUA,1999. SCHNEIER, B., Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish), USA, 1994.
290

SCHNEIER, B., KELSEY, J., et al Twofish: A 128-Bit Block Cipher,USA, 1998. STALLINGS, William. Cryptography and Network Security: Principles and Practice, 2002. STEVENS, R., An Introduction to OpenSSL Programming (Part I). UNIX Netork Programming, Vol. 1, 2a. Edio, 2001. TANENBAUM, A. S., Redes de Computadores. Editora Campus, 3a Edio 1997. TERADA, R., Segurana de Dados Criptografia em Redes de Computadores, Ed. Edgard Blcher, 1 Edio, 2000. TESCARO, E. L. V., BIBLIOTECA PARA SEGURANA DE DADOS: OPENSSL UM ESTUDO DE CASO. Monografia de Especializao em Engenharia de Software, UNIVEM Centro universitrio Eurpides de Marlia, Marlia, S.P., Brasil, 2003. TKOTZ, V., Criptologia Numaboa. link: http://www.numaboa. com/criptologia. Acesso em dezembro de 2003. VILLASENOR, J., MANGIONE, W. H.., Configurable Computing. Scientific American, June,1997. YOUNG, E. A., HUDSON, T. J., The OpenSSL Project. Pgina oficial do Projeto OpenSSL, Sua, http://www.openssl.org, 2003. YUAN, J., SVENSSON, C., High-speed CMOS circuit technique. IEEE J. SolidState Circuits, pp. 6270, Feb. 1989. WIKIPEDIA, Extended Euclidean algorithm - Wikipedia, the free encyclopedia. http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm Acesso em Outubro de 2004. XILINX, Xilinx: Programmable Logic Devices, FPGA http://www.xilinx.com/ - Acesso em Agosto de 2004. & CPLD -

XILINX Development Systems. Synthesis and Simulation Design Guide Designing FPGAs with HDL, 1998.

Bibliografia Recomendada
AES_ALTERA2003. AES Cryptoprocessor, Altera Inc. www.altera.com/products/ip/ampp/cast/cast.html,Site consultado em julho de 2003. BOK, Dong, LEE, Jong Su, PARK, Jong Sou, KIM, Sang Tae. The Simulation and Implementation of Next Generation Encryption Algorithm RIJNDAEL. In Proc. of MIC (Modelling Identification and Control), 2002.

291

BROWN, L. A Current Perspective on Encryption Algorithms. . Technical report, School of Computer Science, Australian Defense Force Academy, Canberra, Australia. www.adfa.oz.au/~lpb/papers. UniforumNZ99, May, 1999. Also, UUG98, Sept., 1998. BURKE J., MCDONALD, J., AUSTIN, T., Architectural Support for Fast Symmetric-Key Cryptography.. Advanced Computer Architecture Laboratory, Univ. of Michigan, U.S.A, In Proc. of ASPLOS IX, Cambridge, 2000. BURNETT, Steve; PAINE, Stephen Paine. RSA Security's Official Guide to Cryptography, McGraw-Hill, EUA, 2002. CHODOWIEC, P., GAJ, K. Implementations of the TWOFISH Cipher Using FPGA Devices. Technical Report, Electrical and Computer engineering, George Mason University, July, 1999. DAEMEN, J., RIJMEN, V. AES Proposal: Rijndael Block Cipher. . 03/09/99. DAHAB, R. Criptografia: Conceitos Bsicos e Aplicaes., UNICAMP. Palestra no Ibilce da UNESP, Ribeiro Preto, 2001. DEALY, S. Cryptanalysis Study of RC5 with Emphasis on Exhaustive Key Search. Technical report, 1997. http://security.ece.orst.edu/koc/ece575/97Project/Dealy.txt. DEHON, A. - Reconfigurable Architecture for General-Purpose Computing., Ph.D. thesis, Massachusetts Institute of Technology, 1996. DES Cryptoprocessor Core, Cast Inc., http://www.cast-inc.com/cores/des/cast_des.pdf, Site consultado em julho de 2003. DOUG, J. Architectural Synthesis from Behavioral Code to Implementation in a XILINX FPGA. , Business Development Manager, Forntier Design Inc. www.frontierd.com ELBIRT, A.J., PAAR, C. An FPGA Implementation and Performance Evaluation of the Serpent Block Cipher. . In Proc.of FPGAs 2000. GIS, M.C, A.; BEZERRA, H.M.A.; BARROS, P. G.; SANTOS, Andr. Tecnologia Java para Segurana de Sistemas. Revista REIC-SBC., Dezembro, 2003. GONALVES, Leandro Salenave; RIBEIRO, Vinicius Gadis. Um estudo comparativo entre algoritmos de criptografia DES e AES. Trabalho desenvolvido na Universidade Luterana do Brasil. Canoas/RS, 2000. HAUCK, S. The Roles of FPGAs in Reprogrammable Systems., Proceedings of the IEEE, Vol. 86, No. 4, pp.615-638, April, 1998. HOLSCHUH, Henrique. Homepage do PGP Internacional. UNICAMP., http://www.dca.fee.unicamp.br/pgp/ LEE, B. K., JOHN, L.K. Implications of Programmable General Purpose Processors for Compression/Encryption Applications. In Proc. Of the IEEE 13th Intl. Conf. on
292

Application Specific Systems, Architectures and Processors (ASAP), San Jose, CA, USA, July, 2002. MAARC: Models, Algorithms and Architectures for reconfigurable Computing. Technical report, University of Southern California - USC. http://maarc.usc.edu/ MARTINS, C.A.P.S.; MORENO, E. D.. Computao Reconfigurvel: Conceitos, tendncias e Aplicaes. Minicurso no evento CORE-2000, Marilia, SP., Brasil, Ago., 2000. MOREIRA, Andr. Documentos de Criptografia. Departamento de Engenharia Informtica, Instituto Superior de Engenharia do Porto, Instituto Politcnico do Porto, Portugal. http://www.dei.isep.ipp.pt/~andre/ NUMABOA. Criptografia. Criptologia. Criptoanlise. http://www.numaboa.com.br/criptologia/criptografia.php., 2003. Disponvel em

OPENSSL. Pgina Oficial do projeto OpenSSL: http://www.openssl.org. ORLANDO, G., Efficient Elliptic Curve Processor Architectures for Field Programmable Logic. Tese de Doutorado em Engenharia Eltrica, Worcester Polytechnic Institute, Worcester - USA, , 2002. PAAR, C.,CHETWYND, B., CONNOR, T., DENG, S. Y., MARCHANT, S., An Algorithm-Agile Cryptographic Coprocessor Based on FPGAs. ECE Department, Worcester Polytechnic Institute, Worcester, U.S.A, The SPIEs Symposium on Voice and Data Communications, Sep. 1999, Bosto, U.S.A PAAR,C. Implementations Options for Finite Field Arithmetic for Elliptic Curve Cryptosystems. Technical Report, ECC 99, Cryptography and Information Security Group, Electrical and Computer Engineering Department. Worcester Polytechnic Institute. http://www.ece.wpi.edu/Research/crypt. RAMALHO, D. G.. Estudo e desenvolvimento de uma plataforma Multi-FPGA para prototipao de Sistemas Digitais. Univ. Federal de Pernambuco - Centro de Informtica, 2000. ROSENSTIEL, W. Prototyping and Emulation, Hardware/Software Codesign: Principles and Practice. Kluwer Academic Publishers, pp. 75-112, 1997. RSA. Empresa RSA Security. http://www.rsa.com/ SHS. SHS Communications Security. http://www.cs.hut.fi/ssh/crypto/ SPILLMAN, R. Cryptographic Analysis Program CAP. . CAP - Software. Pacific Lutheran University. www.cs.plu.edu/pub/faculty/spillman/CAP/index.htm e www.plu.edu/~spillmrj/ SSH. Cryptography A-Z. Link: http://www.ssh.fi/support/cryptography/index.html, 2003.

293

SUN, Sun Microsystems Fornecedora de classes e produtos Java. Link: www.sun.com SUN-API. API Specification and Reference. Disponvel em Setembro de 2003, http://java.sun.com/products/jdk/1.2/docs/guide/security/CryptoSpec.html.. TERADA, R., Criptografia e Cripto-Anlises Diferencial e Linear., IME-USP, 1997. VLSI Implementation of Cryptographic Functions. http://security.ece.orst.edu/koc/ece575/98Project/Ozdag. Tecnhical Report 1998.

WOLLINGER, T. J., Wang, M., Guajardo, J., Paar,C. How Well Are High-End DSPs Suited for the AES Algorithms ? AES Algorithms on the TMS320C6x DSP. . The Third Advance Encryption Standard (AES3) Candidate Conference, April, 2000, New York, U.S.A WU, L., WEAVER, C., AUSTIN, T., CryptoManiac: A Fast Flexible Architecture for Secure Communication. Advanced Computer Architecture Laboratory, Univ. of Michigan, U.S.A, In Proc. of ISCA-2001 (Intl. Conf. On Computer Architecture), Goteborg, Sweden. XIE, H., ZHOU L., BHUYAN, L., An Architectural Analysis of Cryptographic Applications for Network Processors. . Department of Computer Science and Engineering, Univ. of California, Riverside. IEEE First Workshop on Network Processors, with HPCA-8, Bosto, U.S.A., Feb., 2002. YEOM, D. B., LEE, J. S., PARK, J. S., KIM, S. T., The Simulation and Implementation of Next Generation Encryption Algorithm RIJNDAEL. In Proc. of MIC-2002. ZHUO, M. A Comparative Study of New Block Ciphers. . Technical report 1999. http://security.ece.orst.edu/koc/ece575/99Project/Zhuo.html.

294