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.
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
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.
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
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).
que nica. Na figura 1.3 tem-se a ilustrao do esquema geral de cifragem utilizando 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
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.
20
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.
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.
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
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.
28
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.
A tabela 1.5, mostra detalhes dos algoritmos simtricos mais conhecidos pela comunidade da rea de segurana da informao e criptografia.
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).
31
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.
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.
35
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
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.
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.
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.
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.
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.
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.
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.
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
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.
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
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);
thigh
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
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;
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];
Ex.: COMPONENT inv PORT (e: IN bit; s: OUT bit); END COMPONENT; COMPONENT
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);
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
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);
Outros elementos podem ser declarados na configurao, mas no so discutidos neste livro.
49
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
Ex.: s <= 0
WHEN 1 X;
a>b WHEN
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
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).
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.
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.
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;
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;
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;
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;
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
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;
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.
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.
62
end mult2x1;
architecture arch_mult2x1 of mult2x1 is begin with sel select s <= e1 when '0', e2 when others; others end arch_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;
63
when others => s <= e2; end case; ; end process; ; end arch_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.
64
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.
66
"00100000" when "101", "01000000" when "110", "10000000" when "111", "ZZZZZZZZ" when others; ; end arch_dec3x8;
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 ;
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;
port (
and not(x(1)) (x(1)) and and not(x(1)) (x(1)) and and and x(1) x(1)
68
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.
69
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.
70
"011" when "00001000", "100" when "00010000", "00010000", "101" when "00100000", "110" when "01000000", "111" when "10000000", "ZZZ" when others; ; end arch_cod8x3;
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";
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;
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.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 de comparador com mltiplas comparaes usando o comando de execuo seqencial IF...THEN...ELSE:
Comparador com mltiplas comparaes 74
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;
75
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;
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;
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
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
78
-- 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);
-- 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;
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
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.
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.
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
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.
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
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
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
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
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.
f(x) = 123x5 + 423x4 + 573x3 + 567x2 + 234x1. A funo utilizada na figura 4.5 , portanto, de grau 5.
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.
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.
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
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
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.
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
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
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.
99
Resultado da expresso 157 441 1053 2131 392144541 396733113 401357341 406017363 3111996573 3130217401 3148509213 3166872147
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.
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
EFGH IJKL 112 113 69707172 73747576 10x3+20x2+30x1 13926060 14303520 14687740 79592828 84010692 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:
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.
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.
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.
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.
104
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.
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).
principal que inclui as 16 iteraes do algoritmo (ver figura 6.1). A seguir tem-se a descrio do funcionamento da gerao de subchaves.
109
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.
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
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
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
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
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
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
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
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
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
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
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
118
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.
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 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
"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
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).
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.
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%
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.
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
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.
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
0 25 50 75 100 125 22
16 41 66 91 116 13 38
96 121 18 43 68 93
112 9 34 59 84 109
(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
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
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);
//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 ,
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
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
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.
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.
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.
141
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.
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.
146
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
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 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
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
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.
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).
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.
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.
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.
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).
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);
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];
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);
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.
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
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
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.
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).
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
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.
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).
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
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
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
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.
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
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
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
. 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.
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.
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
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.
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
180
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.
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.
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:
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.
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
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
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
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
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.
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
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.
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).
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.
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.
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
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
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)
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.
Tamanho em Megabytes 1 Mb 5 Mb 10 Mb
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%
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.
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.
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.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.
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.
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.
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
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
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)
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
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.
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.
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())
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).
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
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.
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).
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
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
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
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.
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
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.
223
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.
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).
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.
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.
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.
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
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.
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.
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).
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
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.
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.
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.
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.
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.
245
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
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
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
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.
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)
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.
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.
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.
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
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
255
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
Algoritmo DES AES Serpent Cast-128 MARS Twofish Magenta Frog BlowFish RC5 RC6 IDEA
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
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
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.
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.
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).
2 ciclo DE BD
3 ciclo E DE BD
4 ciclo E DE BD
5 ciclo E DE ...
6 ciclo
7 ciclo
E ...
...
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.
262
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.
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
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.
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.
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.
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
ROT2
MOV A2,A1
JZ B4, ROT4
JMP ROT3
ROT4
DEC B2
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.
273
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
= BIT8, BIT7 BIT6, BIT5 // bits do bloco origem que definem a coluna // modo bit de representao
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.
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.
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
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.
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.
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.
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.
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.
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
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
283
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
Гораздо больше, чем просто документы.
Откройте для себя все, что может предложить Scribd, включая книги и аудиокниги от крупных издательств.
Отменить можно в любой момент.