You are on page 1of 108

UNIVERSIDADE FEDERAL DE ITAJUB PROGRAMA DE PS-GRADUAO EM ENGENHARIA ELTRICA

Algoritmo de Criptografia AES em Hardware, Utilizando Dispositivo de Lgica Programvel (FPGA) e Linguagem de Descrio de Hardware (VHDL).

Alessandro Augusto Nunes Campos

Dissertao submetida ao Programa de Ps-Graduao em Engenharia Eltrica como parte dos requisitos necessrios para a obteno de ttulo de Mestre em Cincias em Engenharia Eltrica.

JUNHO de 2008 Itajub - MG

ii

A minha esposa Daniela, filho Joo Matheus, aos meus pais, Alosio e Maria Roselisse, e irmos, Benedito, Carlo e Fausto.

iii

Os

pequenos

atos

que

se

executam so melhores que todos aqueles grandes que se planejam. George C. Marshall

iv

Agradecimentos

Inicialmente a Deus, que no meu caminhar sempre me orientou e me conduziu principalmente nas mais difceis decises.

Seguido de um agradecimento especial a minha esposa e ao meu filho que nestas ltimas etapas souberam suportar meu humor e minha ausncia alm de me ajudar com grande incentivo

Sem esquecer todos os meus familiares, especialmente os meus pais e irmos, por seu incondicional incentivo e aposta na minha conquista.

Uma referncia ao professor e orientador, Dr. Robson Luiz Moreno, pela disponibilidade e entusiasmo, pela confiana, amizade e pela ajuda sem medida na realizao desse trabalho.

Lembrando tambm dos amigos e colegas de trabalho do Instituto Nacional de Pesquisas Espaciais - INPE e ao professor Dr. Eurico Rodrigues de Paula, pelo apoio, incentivo e constante preocupao com o andamento deste trabalho.

Por fim aos amigos, pelo apoio e pelos momentos de descontrao, alm de importantes conselhos. Meus mais sinceros agradecimentos.

Resumo

A comunicao, das mais variadas formas e meios, sempre foi uma constante na existncia humana, sendo considerada, por muitos especialistas, como uma necessidade bsica do homem para a sua sobrevivncia e existncia. Com a evoluo da comunicao, da forma falada para a escrita e atualmente para os sistemas de telecomunicao e informtica, o homem sentiu a necessidade e a importncia do sigilo para a realizao de determinadas operaes de envio e recebimento de informao. Sendo assim, o processo de se comunicar ou enviar informaes consideradas sigilosas, passou a ter especial ateno por parte da humanidade. Visto que existem relatos de cifragem de informao escrita desde a poca dos faras e dos imperadores romanos, nos dias de hoje, com o advento das novas tecnologias, a criptografia se tornou ferramenta bsica para transferncia mais segura de informao eletrnica. Este trabalho apresenta o algoritmo de criptografia AES (Advanced Encryption Standard), denominado algoritmo de criptografia simtrica, que foi homologado e certificado pelo NIST (National Institute of Standards and Technology) rgo governamental dos Estados Unidos da Amrica, como novo padro de cifragem de informao, utilizado em operaes de comrcio, tecnologia da informao e segurana para dados eletrnicos. Este trabalho foi desenvolvido utilizando linguagem de descrio de hardware (VHDL) e aplicado em dispositivo de lgica programvel (FPGA) com o intuito de se obter um sistema de grande velocidade e capacidade de processamento de dados. Ser apresentado o seu funcionamento, alm de implementaes de alguns blocos funcionais do algoritmo, com os resultados obtidos em um dispositivo do fabricante ALTERA .

vi

Abstract

The communication, of the most varied forms and ways, was always constant in human existence, as thought by many specialists like a basic necessity for the survival and existence of man. With the evolution of the communication form, the spoken to the written way and at present, for the telecommunication systems and computers, man felt the necessity and the importance of secrecy, for the realization of determined operations of sending and receiving information. Being so the process of communicating or sending respected secret information started to have special attention by humanity. Seeing that encoded information reports exist from the time of the Pharaohs and the Roman emperors, nowadays, with the advent of the new technologies, the cryptography became a basic tool for transferring of electronic information safer.

This work presents the algorithm of cryptography AES (Advanced Encryption Standard), called algorithm of symmetrical cryptography, which was ratified and certified by the NIST (National Institute of Standards and Technology), government organ of the United States of America, like new standard of information encoding to be used in operations of commerce, technology of the information and security for electronic data. This work was developed using hardware description language (VHDL) and applied in device of programmable logic (FPGA) with the intention of obtaining a system of great speed and capacity of processing. His functioning will be presented, besides implementations of some functional blocks of the algorithm, with the obtained results in a device of the manufacturer ALTERA .

vii

ndice

Captulo 1 - Introduo............................................................................................................... 1 1.1. Origem e Justificativa............................................................................................ 2 1.2. Objetivos ............................................................................................................... 3 1.3. Estrutura do Trabalho............................................................................................ 4 Captulo 2 - Criptografia............................................................................................................. 6 2.1. Definio e Caractersticas.................................................................................... 7 2.2. Histrico ................................................................................................................ 8 2.3. Mtodos de Criptografia...................................................................................... 10 2.4. Uso Atual............................................................................................................. 12 Captulo 3 - Algoritmo AES (Rijndael)....................................................................................15 3.1. Especificao do Algoritmo ................................................................................ 17 3.1.1. Especificao Galois Field (GF 28).................................................... 18 3.2. O Cifrador............................................................................................................ 19 3.2.1. Transformao SubBytes().................................................................20 3.2.2. Transformao ShiftRows() ............................................................... 21 3.2.3. Transformao MixColumns()........................................................... 22 3.2.4. Transformao AddRoundKey()........................................................23 3.3. Gerao da Chave................................................................................................ 23 3.3.1. Expanso da Chave ............................................................................ 24 3.4. Decifrador............................................................................................................ 25 3.4.1. Transformao InvShiftRows().......................................................... 25 3.4.2. Transformao InvSubBytes() ........................................................... 26

viii 3.4.3. Transformao InvMixColumns() .....................................................26 3.4.4. Inverso da Transformao AddRoundKey() ...................................... 27 Captulo 4 - Dispositivo de Lgica Programvel (FPGA) ....................................................... 28 4.1. FPGAs - Viso Geral........................................................................................... 29 4.2. O Bloco Lgico ................................................................................................... 31 4.3. Negociao - Tamanho vs Desempenho ............................................................. 34 4.4. Tcnicas de Roteamento de FPGAs .................................................................... 34 4.5. Classificao Estrutural de FPGAs ..................................................................... 37 4.6. Metodologias de Programao ............................................................................ 39 4.7. FPGA Fluxo de Projeto ....................................................................................... 41 Captulo 5 - Linguagem Descrio de Hardware (VHDL)....................................................... 43 5.1. VHDL - Viso Geral ........................................................................................... 44 5.2. Conceitos Bsicos de VHDL...............................................................................45 5.2.1. Declarao de Entidade...................................................................... 46 5.2.2. Corpo de Arquitetura.......................................................................... 48 5.2.3. Interligao de Modelos com Sinais ..................................................53 Captulo 6 - Caracterizao, Modelagem e Resultados............................................................ 55 6.1. Caracterizao Funcional .................................................................................... 56 6.2. Parmetros do Trabalho....................................................................................... 60 6.3. Modelagem, Funcionamento e Resultados..........................................................61 6.3.1. Funo ByteSub ................................................................................. 61 6.3.2. Funo Rcon....................................................................................... 66 6.3.3. Funo RotWord ................................................................................ 71 Captulo 7 - Concluses e Trabalhos Futuros........................................................................... 77 7.1. Concluses de Desempenho................................................................................ 77 7.2. Sugestes e Trabalhos Futuros ............................................................................ 82 Referncias Bibliogrficas........................................................................................................ 84 Apndice A - Cdigos VHDL da Implementao.................................................................... 86

ix

Lista de Figuras

Figura 2.1 - Esquema geral para cifragem e decifragem de um texto ........................................ 7 Figura 2.2 - Modelos simtrico e assimtrico de criptografia. ................................................. 11 Figura 3.1 - Matriz de estado e matriz de chave para Nb = 6 e Nk = 4 . .................................. 16 Figura 3.2 - Tabela de combinaes......................................................................................... 17 Figura 3.3 - Diagrama detalhado da funo de processamento principal ................................ 18 Figura 3.4 - Pseudocdigo para o cifrador . ............................................................................. 19 Figura 3.5 - SubBytes() aplica a S_box para cada byte da matriz de estado. ........................... 20 Figura 3.6 - S_box: substituio de valores pelo byte xy (hexadecimal). ................................21 Figura 3.7 - Parmetros para a quantidade de bytes deslocados no ShiftRow .........................21 Figura 3.8 - Transformao ShiftRow() em uma matriz de estado. ......................................... 22 Figura 3.9 - MixColumns() opera a matriz de estado coluna por coluna. ................................23 Figura 3.10 - Transformao AddRoundKey. .......................................................................... 23 Figura 3.11 - Pseudocdigo de expanso da chave . ................................................................ 24 Figura 3.12 - Pseudocdigo para o decifrador ......................................................................... 25 Figura 3.13 - InvShiftRows() deslocamento cclico de linhas.................................................. 26 Figura 3.14 - S_box Inversa: substituio de valores pelo byte xy (hexadecimal) .................. 26 Figura 3.15 - InvMixColumns() opera a matriz de estado coluna por coluna.......................... 27 Figura 4.1 - Anlise comparativa ............................................................................................29 Figura 4.2 - Verso simplificada da arquitetura interna de um FPGA. .................................... 31 Figura 4.3 - Par de transistores em um FPGAs Cross-point. ................................................... 31 Figura 4.4 - Bloco lgico para FPGAs Plessey. ....................................................................... 32 Figura 4.5 - Bloco lgico para FPGAs Actel ........................................................................... 32

x Figura 4.6 - Bloco lgico para FPGAs Xilinx........................................................................... 33 Figura 4.7 - Arquitetura de roteamento da Xilinx..................................................................... 35 Figura 4.8 - Arquitetura de roteamento da Actel . .................................................................... 36 Figura 4.9 - Arquitetura de roteamento global da Altera. (MAX 5000) ................................. 36 Figura 4.10 - Arquitetura de roteamento local da Altera. (MAX 5000) .................................. 37 Figura 4.11 - FPGAs, de matrizes simtricas. ..........................................................................38 Figura 4.12 - FPGAs, arquitetura baseada em linhas . .............................................................38 Figura 4.13 - FPGAs, PLD hierrquico.................................................................................... 39 Figura 4.14 - FPGAs, programao SRAM . ........................................................................... 40 Figura 4.15 - FPGAs, programao de porta flutuante ............................................................ 41 Figura 5.1 - Evoluo do padro .............................................................................................. 44 Figura 5.2 - VHDL: Fluxo ASIC.............................................................................................. 45 Figura 5.3 - VHDL: declarao de entidade.............................................................................47 Figura 5.4 - VHDL: declarao de entidade com atribuio inicial.........................................47 Figura 5.5 - VHDL: declarao de arquitetura. ........................................................................48 Figura 5.6 - VHDL: arquitetura comportamental.....................................................................49 Figura 5.7 - VHDL: declarao da entidade flip-flop. ............................................................. 50 Figura 5.8 - VHDL: descrio de um registrador de 2 bits. ..................................................... 51 Figura 5.9 - VHDL:descrio de um registrador de 2 bits de forma mais clara....................... 51 Figura 5.10 - VHDL:descrio de um registrador de 8 bits. .................................................... 52 Figura 5.11 - VHDL:descrio de um registrador de 2 bits instanciando sinais. ..................... 53 Figura 5.12 - VHDL:descrio estrutural e comportamental . ................................................. 54 Figura 6.1 - Diagrama geral de funcionamento........................................................................56 Figura 6.2 - Diagrama detalhado da funo de expanso de chaves ....................................... 57 Figura 6.3 - Diagrama detalhado da funo de processamento principal ................................ 59 Figura 6.4 - Arquitetura da funo ByteSub. ............................................................................ 62 Figura 6.5 - Funo ByteSub, representao grfica. ............................................................... 63 Figura 6.6 - Descrio RTL da funo ByteSub e InvByteSub. ................................................ 64 Figura 6.7 - Funo ByteSub, grfico de forma de onda. ......................................................... 64 Figura 6.8 - Funo ByteSub, grfico de forma de onda (detalhes).......................................... 65 Figura 6.9 - Funo ByteSub, resultados da implementao ...................................................65 Figura 6.10 - Arquitetura da funo Rcon. ............................................................................... 67 Figura 6.11 - Funo Rcon, representao grfica. .................................................................. 68 Figura 6.12 - Descrio RTL da funo Rcon. ......................................................................... 69

xi Figura 6.13 - Funo Rcon, grfico de forma de onda. ............................................................ 69 Figura 6.14 - Funo Rcon, grfico de forma de onda (detalhes). ........................................... 70 Figura 6.15 - Funo Rcon, resultados da implementao ....................................................... 70 Figura 6.16 - Arquitetura da funo RotWord.......................................................................... 71 Figura 6.17 - Descrio RTL da funo RotWord.................................................................... 72 Figura 6.18 - Funo RotWord, representao grfica. ............................................................ 73 Figura 6.19 - Funo RotWord, grfico de forma de onda. ...................................................... 74 Figura 6.20 - Funo RotWord, grfico de forma de onda (detalhes). ..................................... 75 Figura 6.21 - Funo RotWord, resultados da implementao................................................. 75 Figura 7.1 - Representao grfica, funo principal de expanso de chaves..........................80 Figura 7.2 - Desenvolvimento do trabalho. ..............................................................................81

xii

Lista de Tabelas

Tabela 2.1 - Histrico de evoluo da criptografia. ................................................................... 9 Tabela 2.2 - Algoritmos por aplicao .....................................................................................11 Tabela 2.3 - Comparao entre algoritmos de chave simtrica e assimtrica. .........................12 Tabela 2.4 - Caractersticas dos algoritmos simtricos mais conhecidos ................................13 Tabela 2.5 - Caractersticas de algoritmos de hashing . ........................................................... 14 Tabela 6.1 - Recursos disponveis da famlia de FPGAs ACEX1K ........................................ 60 Tabela 7.1 - Resultados de desempenho expanso de chaves. ................................................. 80

xiii

Lista de Abreviaturas

AES IBM NBS NSA DES RSA ACM FBI RC3,4,5,6 PGP NIST SSL DH IDEA MD4,5 SHA RAM GF XOR ASICs FPGAs CAD

Advanced Encryption Standard Information Business Machine National Bureau of Standards National Security Agency Digital Encryption Standard Rivest-Shamir-Adleman Association for Computing Machinery Fedral Bureau if Investigation Rons Cipher Pretty Good Privacy National Institute of Standards and Technology Secure Socket Layer Diffie, Hellman International Data Encryption Algorithm Message Digest Secure Hash Algorithm Random access memory Galois Field Exclusive OR Application Specific Integrated Circuits Field Programmable Gate Arrays Computer Aid Design

xiv HPC CLB LUT SRAM LAB PLD EPROM EEPROM ROM PCB HDL VHDL RTL IEEE High Performance Computing Configurable Logics Blocks Look Up Table Static RAM Logic Array Block Programmable logic device Erasable Programmable Read-Only Memory Electrically-Erasable Programmable Read-Only Memory Read-Only Memory Printed Circuit Board Hardware Description Language Very High Speed Integrated Circuit HDL Register Transfer Level Institute of Electrical and Electronics Engineers, Inc

1. Captulo 1 Introduo

Captulo 1 -

Nos dias atuais, dificilmente algum se depara com a enorme quantidade de avanos tecnolgicos que o homem desenvolveu e consegue entender por completo o seu impacto na vida cotidiana. Talvez isto ocorra por falta de informao ou talvez por abstrao da tecnologia, mais uma coisa certa, ela est ai e nos auxilia diariamente em nossas tarefas das mais variadas, ainda que no a percebamos.

A capacidade da inventividade humana nunca parou de se desenvolver, e com isto temos atualmente maravilhas tecnolgicas improvveis e impensveis h pouco mais de 100 anos. A tecnologia me desses avanos , sem dvida, considerada por muitos, como sendo a descoberta da eletricidade e do magnetismo. Dito isto, podemos delimitar a histria tecnolgica da humanidade em sendo antes e depois destas descobertas. Com este conhecimento inicial, o homem deu seqncia ao desenvolvimento e pesquisa destas reas de estudos sendo que, atravs de mais descobertas, surgiram como uma das principais variantes posteriores, as comunicaes por fios e ondas de rdio [01][02].

O surgimento desta comunicao, agora denominada Telecomunicao, provocou um salto considervel no desenvolvimento de novas tecnologias e na sua prpria, causada principalmente pelo incremento de velocidade no envio e recebimento de novas informaes, agora disponveis a humanidade. Visto isto, e com o olhar no agora, o mundo

2 vislumbra um outro incremento da sua capacidade de desenvolvimento tecnolgico pois, mais recentemente com a criao e desenvolvimento dos computadores e da Internet, podemos realizar outro salto tecnolgico, como j visto no passado.

Agora podemos iniciar realmente a discusso de que prope este trabalho. Sua proposta no poderia deixar de englobar estes ltimos avanos da humanidade, no que diz respeito ao envio e recebimento de informao por computadores atravs de redes de telecomunicaes como a internet. Conforme ser apresentado a seguir, este trabalho ir tratar do uso mais seguro de envio e recebimento de dados usando-se uma tcnica consagrada a milhares de anos para tal fim denominado criptografia, que ser explicada, detalhada e com algumas de suas funes aplicadas em um dispositivo especialmente desenvolvido para este fim.

1.1. Origem e Justificativa


A busca por sistemas de criptografia mais seguros e rpidos tem sido uma constante no desenvolvimento tecnolgico atual, principalmente nos dispositivos que fazem uso de computadores e internet nos dias atuais. Assim a busca por um sistema com estas caractersticas sempre est evoluindo como ser visto no capitulo dois referente ao histrico da criptografia neste trabalho. facilmente comprovado hoje, pelos meios de comunicao e mdias diversas, que o investimento em tcnicas seguras e rpidas para envio de informao eletrnica crescente, sendo o sigilo o fator mais importante em determinadas reas de transferncia de dados como, por exemplo, a financeira, principalmente o comrcio eletrnico, de segurana e defesa, no que diz respeito a soberania e interesses estratgicos de alguns paises, alm de diversas outras [02][03].

Sendo assim, a origem e motivao deste trabalho surgiram com o interesse em colaborar e tentar ajudar a resolver as questes relacionadas a estes problemas tecnolgicos que insistem em desafiar os pesquisadores a cada dia. Como cada sistema de segurana criado diariamente provoca por um lado o interesse de alguns outros em decifr-lo e quebr-lo, a corrida por uma soluo plausvel atual e mais segura est longe de acabar. Assim o uso de tcnicas modernas de implementao de algoritmos de criptografia homologados, consagrados e indicados por rgos internacionais, aliados a inovaes em linguagens de

3 programao e dispositivos de lgica programvel so uma opo muito prxima do ideal para os dias de hoje. Assim consideramos que esta necessidade a justificativa principal do nosso trabalho.

1.2. Objetivos
Nos tempos atuais, temos no mercado diversas solues comerciais que hoje usam recursos especficos de hardware e software, para o provimento de dispositivos de criptografia para os mais variados fins. Assim sendo, apresenta-se neste trabalho, alguns mtodos de criptografia e discuti-se o funcionamento especfico da nossa opo. Como dito, a criptografia atual possui diversas tcnicas e implementaes e cada uma possui uma aplicao mais indicada, sendo que aps uma vasta pesquisa, podemos identificar que, em uma determinada rea de mercado h oportunidades de desenvolver inovaes com pouco investimento e bons resultados.

O objetivo principal dessa dissertao a apresentao e implementao parcial de blocos funcionais de um algoritmo de criptografia [1][2][3](j homologado e consagrado pelo uso) em dispositivos de baixo custo, capaz de prover um bom nvel de segurana para transao de grande quantidade de dados por uma rede de comunicao sem que seja necessrio utilizar solues proprietrias de alto custo.

Este trabalho tem em vista tambm, com a implementao deste algoritmo em circuito integrado, a reduo de trabalho de processamento e consumo de recursos computacionais compartilhados para a execuo de tarefas de cifragem e decifragem de dados. Com isto, pretende-se tirar vantagens dos recursos de uma estrutura especifica de criptografia, propiciando atingir o objetivo de uso em sistemas de telecomunicao de alto trfego de dados.

Com a demanda crescente por sistemas de criptografia para uso em sistemas de comunicao para uso na internet, a proposta de desenvolvimento vislumbra que no futuro este sistema possa ser implementado em um dispositivo de lgica programvel de baixo custo

4 e implantado em uma simples placa de comunicaes de rede Ethernet ou em sistemas mais robustos como roteadores e switches.

1.3. Estrutura do Trabalho


O trabalho est organizado em sete captulos, sendo um de introduo, um de concluso e os demais de desenvolvimento.

O Captulo 2 descreve um estudo detalhado sobre a criptografia, abordando desde a definio e mtodos desta rea do conhecimento at uma abordagem sobre as tcnicas que mais so utilizados nos dias de hoje. Neste captulo apresenta-se curiosidades das antigas formas de cifragem e tambm o poder que a computao atribuiu aos sistemas mais modernos usados nas transaes de telecomunicaes atuais.

O Captulo 3 apresenta o algoritmo de criptografia AES (Advanced Encryption Standard), que foi o escolhido nesta proposta como o que melhor pode cumprir as exigncias de segurana e desempenho definidas por este trabalho. Neste captulo poder ser encontrada uma descrio completa de funcionamento do algoritmo, abordando o histrico do algoritmo e uma descrio completa dos seus blocos funcionais de cifragem, decifragem e gerao de chaves de criptografia.

O Captulo 4 mostra uma descrio sobre dispositivos de lgica programvel. Poder ser visto como composto e funciona um dispositivo de lgica programvel, suas partes e detalhes construtivos, alm dos recursos de programao junto com as possibilidades de aplicao atualmente.

O Captulo 5 faz uma apresentao sobre linguagem de descrio de hardware. Ser possvel entender como a linguagem de descrio de hardware funciona e instancias os seus componentes alm de sua importncia atual na portabilidade e flexibilidade de desenvolvimento de projetos para vrias plataformas.

5 O Captulo 6 apresenta o trabalho propriamente dito. Com a caracterizao e organizao do funcionamento do algoritmo de criptografia, o detalhamento de algumas funes de criptografia utilizadas e o fluxo de funcionamento destas mesmas (modelagem). Desta forma poder se verificar a funcionalidade do projeto, dentro de tudo o que foi proposto, alm da validao e os resultados desta dissertao.

O Captulo 7 apresenta as concluses e as sugestes de trabalhos futuros que podero ser implementados, principalmente com verses completas do algoritmo de criptografia, alm de apontar possveis melhorias que poderiam ser feitas no algoritmo de criptografia para um possvel incremento no desempenho do sistema.

Tambm so encontrados neste trabalho de dissertao alguns anexos que tem por inteno contribuir com informaes complementares, a fim de auxiliar a compreenso do trabalho. Para finalizar este captulo vamos a seguir apresentar uma descrio mais profunda sobre criptografia.

2. Captulo 2 Criptografia

Captulo 2 -

A inteno principal deste captulo ser realizar uma apresentao sobre criptografia englobando todos os aspectos necessrios compreenso e avaliao de funcionamento de tcnicas antigas e atuais existentes.

Pensando em melhorar o entendimento, sero utilizados no transcorrer deste trabalho diversos termos formais cuja inteno atribuir certa atividade ou funo dentro do universo da criptografia sendo que, o processo que converte informaes sigilosas em algo sem sentido, costuma utilizar os termos (encripta, codifica, criptografa, cifra), e para tornar as informaes sigilosas cifradas em legveis novamente, utiliza-se os termos (decripta, decodifica, decriptografa, decifra). Vale como informao que, existem estudos especficos que tratam da quebra de sistemas de criptografia denominados como anlise criptogrfica e os profissionais que as estudam so denominados criptoanalistas [02][03].

Varias pessoas acreditam que a criptografia foi desenvolvida para uso militar durante a Primeira e a Segunda Grande Guerra, mas o que se sabe que a criptografia existe h milhares de anos. H evidncias de que ela j se encontrava presente no sistema de escrita hieroglfica dos egpcios com a inteno, dentre varias outras, de ajudar a preservar os tesouros e riquezas dos faras e em documentos de generais gregos e romanos que eventualmente eram enviados a frente de batalha com a inteno de impedir, em caso de

7 interceptao, a sua interpretao. Porm somente no incio dos anos 70 que a criptografia surgiu como rea de investigao acadmica de conhecimento generalizado e hoje com o uso da computao pode ser demonstrado todo o seu potencial [03].

2.1. Definio e Caractersticas


A criptografia formada a partir dos termos gregos kryptos (escondido, oculto) e graph (grafia, escrita) e a cincia que torna possvel a comunicao mais segura entre dois agentes, sobre um canal aberto, convertendo informao legvel em algo sem sentido, com a capacidade de ser recuperada ao estado original com o uso de processos inversos ou no.

Para Terada [01] a Criptografia pode ser descrita como: a cincia que estuda a transformao de dados de maneira a torn-los incompreensveis sem o conhecimento apropriado para a sua traduo, tornando os contedos secretos, evitando riscos internos e externos que venham a ocorrer durante o trajeto dos dados enviados, que so convertidos em um cdigo que s podero ser traduzidos por quem possuir a chave secreta, enquanto que a Criptoanlise executa o processo inverso, sendo a cincia que estuda a decifrao, tornando o cdigo compreensvel.

Figura 2.1 - Esquema geral para cifragem e decifragem de um texto

Conforme esquema apresentado pela figura 2.1, temos o fluxo de cifragem e decifragem de um texto. Existem basicamente dois meios de se criptografar informaes, um usando mtodos de cifras e outro com o uso de cdigos. As cifras protegem as informaes com o uso de substituio ou transposio de caracteres na mensagem original, sendo que apenas as pessoas que conhecem os processos de cifragem podem ter acesso s informaes

8 ali contidas. Porm caso consiga-se descobrir a cifra o algoritmo todo exposto.

J os cdigos, fazem uso de uma chave de criptografia que introduzida no algoritmo, sendo assim mais seguros no aspecto onde, mesmo que se conhea o algoritmo de cifragem, a informao ainda se manter segura, sendo que ainda necessrio que se conhea a chave de criptografia para se decifrar a informao. Visto isto, os algoritmos de cdigos so mais utilizados na atualidade e o desenvolvimento de cdigos est mais direcionado nos dias de hoje a procura de um algoritmo que possa gerar chaves mais seguras e difceis de se descobrir e no mais no cdigo ou cifras propriamente ditas.

2.2. Histrico
Conforme dito anteriormente, a criptografia no um recurso de segurana to novo assim, visto que j estava presente desde os tempos dos faras e romanos. Existem relatos que os romanos utilizavam cdigos secretos para enviar e receber informaes nas batalhas. Com o acontecimento das grandes guerras mundiais e a inveno do computador a criptografia se desenvolveu muito rpido introduzindo assim uma nova modalidade de estudos de estratgia, utilizando cada vs mais algoritmos com matemtica ainda mais complexa e por conseqncia potencialmente mais seguros [03].

O primeiro exemplo de documento de escrita cifrada tem como origem aproximada 1900 a.C., quando um escriba do fara egpcio Khnumhotep II realizou a substituio de algumas palavras e trechos de texto em um documento que informava o caminho aos tesouros, fazendo assim, caso o documento fosse roubado, com que o ladro ficasse perdido nas catacumbas da pirmide e assim morresse de fome [03].

Batizada com o nome do imperador romano que a desenvolveu e utilizou, a cifra de substituio de Csar datada de 50 a.C. um exemplo clssico das importantes e imprescindveis caractersticas que a criptografia possui para fins militares e de defesa. Para compor seu texto Csar alterava letras desviando-as em trs posies do alfabeto para que assim o texto se tornasse indecifrvel, ou seja, A se tornava D, B se tornava E, C se tornava F e assim consequentemente alm de reforar seu mtodo substituindo letras latinas

9 por gregas. O cdigo de Csar o nico que ainda utilizado at os dias de hoje com algumas alteraes.

Tabela 2.1 - Histrico de evoluo da criptografia. Ano 1943 1969 Descrio Mquina Colossus, projetada para quebrar cdigos. James Ellis desenvolve um sistema de chaves pblicas e privadas separadas Diffie-Hellman, algoritmo baseado no problema do logaritmo discreto criado e a IBM apresenta a cifra Lcifer ao NBS (National Bureau of Standards) que aps algumas modificaes a NSA (National Security Agency) adota a cifra como padro (FIPS 46-3, 1999) conhecido hoje como DES (Data Encryption Standard). Ronald L. Rivest, Adi Shamir e Leonard M. Adleman discutem como criar um algoritmo de chave pblica prtico e a partir disto desenvolvem um sistema baseado na dificuldade de fatorao de nmeros primos grandes como tcnica de criptografia, que futuramente seria denominado RSA, as iniciais de seus autores. O algoritmo RSA publicado na Association for Computing Machinery Phil Zimmermann torna pblica sua primeira verso do PGP (Pretty Good Privacy) em resposta as exigncias do FBI (Federal Bureau of Investigation) de acessar qualquer texto claro da comunicao entre usurios de uma rede de comunicao digital. Por ser freeware tornou-se rapidamente padro mundial. Ronald L. Rivest, autor dos algoritmos RC3 e RC4, publica a proposta do algoritmo RC5 na internet, o qual usa rotao dependente de dados como sua operao no linear e parametrizado de forma que o usurio possa variar o tamanho da chave, do bloco de cifragem e o nmero de estgios usados no processo de cifragem das informaes. O PGP 5.0 amplamente distribudo para uso no comercial. O cdigo DES de 56 bits quebrado por uma rede de 14.000 computadores O cdigo DES quebrado em 56 horas por pesquisadores do vale do silcio O cdigo DES quebrado em 22 horas e 15 minutos, mediante a unio da Eletronic Frontier Foundation e a Distributed.Net, que reuniam 100.000 computadores pessoais ao DES Cracker pela internet O NIST (National Institute of Standards and Technology), antigo NBS, anunciou um novo padro de uma chave secreta de cifragem escolhidos entre 15 candidatos atravs de concurso. Este novo padro foi criado para substituir o algoritmo DES cujo tamanho das chaves tornou-se insuficiente para conter ataques de fora bruta. O algoritmo Rijndael, cujo nome abreviao do nome dos autores Rijmen e Daemen, foi escolhido para ser o futuro AES (Advanced Encryption Standard) (FIPS 197, 2001). Muitos professores, estudantes e profissionais de computao em universidades e centros de pesquisa se motivaram e iniciaram pesquisas sobre novas formas de se implementar algoritmos e solues de segurana, surgindo assim uma nova onda voltada a realizar otimizaes e desenvolvimento destas primeiras implementaes onde a principal tendncia a implementao em hardware.

1976

1977

1978 1991

1994

1997 1998 1999

2000

2000-Atual

10

Considerado para todos os efeitos, que todo mtodo que utilize cifras baseados na substituio cclica do alfabeto denominado como cdigo de Csar. Para avaliar a sua importncia e simplicidade esta cifra foi utilizada pelos oficiais sulistas na guerra de sucesso americana e pelo exrcito russo em 1915 [02][03].

Com a chegada das comunicaes sem fio em meados de 1901, apesar da vantagem de uma comunicao de longa distncia se tornar imensamente mais barata do ponto de vista de infra-estrutura, o sistema aberto iniciava um novo desafio para criptografia e seus desenvolvedores, sendo que agora a questo era como trafegar informaes sigilosas em canais abertos com um razovel nvel de segurana.

Assim em 1921, Edward Hugh Hebern fundou uma companhia produtora de mquinas de cifragem eletromecnicas [02] baseadas em rotores que giravam a cada caractere cifrado, sendo muito utilizada para comunicaes em ambientes de canal aberto. Aps isto, entre 1933 e 1945, Arthur Scherbius aperfeioou a mquina enigma at se tornar a ferramenta criptogrfica mais importante da Alemanha nazista. Este sistema foi quebrado pelo matemtico polons Marian Rejewski e foi um dos maiores fatores que auxiliaram os Aliados na vitria sobre as tropas do Eixo na segunda guerra mundial [02][03].

2.3. Mtodos de Criptografia


Como j dito, os principais mtodos de criptografia que foram utilizados pela humanidade so sem duvida os que usam codificao (chaves) ou cifragem (substituio e transposio). J os mais utilizados atualmente so os de codificao, que apresentam maior segurana velocidade e capacidade de gerenciamento de chaves. Uma outra classificao dos algoritmos de cifragem pode ser realizada se considerarmos a forma com que as informaes sero tratadas, ou seja, os dados podem ser criptografados em blocos de tamanhos determinados ou de forma contnua denominada criptografia de fluxo. Assim, temos aplicaes ideais para cada tipo de trabalho de cifragem onde cada algoritmo deve ser determinado no s pelas caractersticas de segurana mais tambm pela aplicao como visto na tabela 2.2 [03].

11 Tabela 2.2 - Algoritmos por aplicao Aplicao Banco de Dados E-mail SSL Criptografia de Arquivos Cifragem recomendada Bloco AES RC4 Bloco Comentrios A interoperabilidade de um outro software no relevante, mas necessrio reutilizar as chaves. Se ganha interoperabilidade em todos os pacotes de e-mail utilizando o AES padro. A velocidade extremamente importante, cada conexo pode ter uma nova chave. Assim a maioria dos navegadores e servidores possuem RC4 A interoperabilidade no relevante, porm cada arquivo pode ser cifrado com a mesma chave.

Como o principal algoritmo de substituio e transposio j foi descrito com suficiente abrangncia anteriormente (Cifra de Csar), vamos nos ater aos algoritmos de codificao que fazem uso de chaves de criptografia. Os algoritmos mais usados atualmente que trabalham com chaves para criptografar mensagens podem, dentro de um subtipo de algoritmos, ser classificados de duas formas bsicas: os que trabalham com uma nica chave privativa para cifrar e decifrar a mensagem, chamados de algoritmos de chave simtrica e os que utilizam uma chave pblica para cifrar e outra privativa para decifrar a informao, chamados por sua vez de algoritmos de chave assimtrica, conforme a seguir apresentado na figura 2.2.

Figura 2.2 - Modelos simtrico e assimtrico de criptografia.

12 Assim sendo, podemos j identificar vantagens e desvantagens destes mtodos que, conforme j informado, possuem recursos interessantes para determinadas aplicaes. Na tabela 2.3 podemos visualizar caractersticas j um tanto quanto bvias, com relao a alguns parmetros em cada um destes algoritmos, sendo entre eles, a sua velocidade, manipulao de chaves e recursos extras [03].

Tabela 2.3 - Comparao entre algoritmos de chave simtrica e assimtrica. Criptografia simtrica Rpida Gerncia e distribuio de chaves complexa Sem recursos como assinatura digital Criptografia assimtrica Lenta Gerncia e distribuio de chaves simples Com recursos como assinatura digital

O algoritmo de chave simtrica classificado como rpido devido a sua particularidade de usar apenas uma nica chave de tamanho pr-determinado, enquanto comparado a um de chave assimtrica que utilizar duas chaves de mesmo tamanho tornando assim o processo mais lento, quando existir a necessidade de troca contnua de chaves. J com relao ao gerenciamento e distribuio de chaves, como o algoritmo assimtrico possui o recurso de chave pblica para cifrar informao, este recurso muito utilizado para o envio, troca e gerenciamento seguro de suas chaves, enquanto que no simtrico isto no possvel, sendo necessrias outras formas para troca e gerenciamento de chaves [03].

Os recursos extras como a assinatura digital desenvolvida e utilizada hoje, nada mais do que o uso invertido do algoritmo de chave assimtrica. Seu funcionamento utiliza a chave privativa de quem assina para cifrar a informao e a pblica para decifrar, comprovando assim que a informao tem origem confivel uma vez que, pelo funcionamento do algoritmo, apenas quem poderia ter codificado aquela informao seria o portador da chave privativa.

2.4. Uso Atual


Com a inteno de fornecer uma informao mais global, vamos a seguir listar e apresentar alguns dos algoritmos simtricos mais usados e importantes desta rea de conhecimento, tentando seguir certa ordem cronolgica.

13

Tabela 2.4 - Caractersticas dos algoritmos simtricos mais conhecidos [03]. Algoritmo DES Triplo DES IDEA Blowfish RC4 RC5 CAST-128 AES MARS [04] RC6 [05] Serpent [06] Twofish [07] Tipo Bloco Bloco Bloco Bloco Fluxo Bloco Bloco Bloco Bloco Bloco Bloco Bloco Tamanho da chave 56 bits 56 bits 128 bits 32 - 448 bits 0 - 256 bits 0 - 2040 bits 40 - 128 bits 128-192-256 bits Varivel Varivel Varivel 128-192-256 bits Tamanho do bloco 64 bits 64 bits 64 bits 64 bits ----32-64-128 bits 64 bits 128-192-256 bits 128 bits 128 bits 128 bits 128 bits

No caso dos algoritmos assimtricos, o mais citado e utilizado sem dvida o RSA onde, atravs de uma chave pblica e outra privativa se realiza o processo de cifragem e decifragem da informao. Devido ineficincia e baixa velocidade dos algoritmos assimtricos, os mtodos de assinatura digital utilizados na prtica no cifram os documentos propriamente ditos, mas uma smula destes, obtidas pelo processamento dos documentos ou informaes, por meio de uma funo denominada funo de hashing [03].

A funo de hashing gera uma sada independente da informao original de tamanho fixo (dependendo do algoritmo de 128 - 256 bits), no importando o tamanho da entrada, assim pode-se ter um outro dado separado da informao com o qual se pode utilizar para certificar a integridade e originalidade da informao. No uso de funes de hashing para assinatura digital, a verificao da informao feita gerando-se o cdigo de hash logo aps a informao ser recebida, sendo assim, pode-se comparar este cdigo com o cdigo inicial gerado na origem e em caso positivo confirmar a autenticidade e integridade da informao.

As caractersticas mnimas que uma funo de hash deve ter so: ser simples (eficiente e rpido) de se computar o hash de dada mensagem; impraticvel de se determinar a entrada a partir de seu hash; impraticvel de se determinar uma outra entrada, que resulte no mesmo hash. Apresenta-se na tabela 2.5 alguns dos algoritmos de hashing mais conhecidos da comunidade de segurana.

14

Tabela 2.5 - Caractersticas de algoritmos de hashing [03]. Algoritmo de hash Abrreast Bavies-Meyer (c/IDEA) Davies-Meyer (c/DES) GOST-Hash NAVAL (5 passos) MD4 Message Digest 4 MD5 Message Digest 5 N-NASH (15 rounds) RIPE-MD SHA Secure Hash Algorithm SENEFRU (8 passos) Tamanho do hash 128 bits 64 bits 256 bits Varivel 128 bits 128 bits 128 bits 128 bits 160 bits 128 bits Kbytes/s 22 9 11 118 236 174 24 182 75 23

Conforme [03], alguns destes algoritmos sugerem aplicaes de origem governamental como militar e defesa alm de outros de uso comercial privativo, porm podemos citar como mais conhecidos pela comunidade acadmica e comercial os SHA, MD4 e MD5, sendo muito comum o seu uso em aplicaes internet como em servidores e navegadores.

3. Captulo 3 Algoritmo AES (Rijndael)

Captulo 3 -

No dia 2 de Janeiro de 1997, o rgo oficial norte-americano NIST National Institute of Standards in Technology (Instituto Nacional de Normas em Tecnologia) anunciou formalmente um plano para definir um algoritmo como o novo padro para criptografia, convidando qualquer pessoa a desenvolver um algoritmo. Definido que o novo padro seria conhecido como AES, foi aberta assim uma espcie de concurso, com a condio que o vencedor no teria quaisquer direitos quanto propriedade intelectual do algoritmo selecionado. Os critrios para avaliao dos algoritmos que viessem a concorrer seriam: segurana (sem nenhuma fraqueza algortmica), desempenho (rpido em vrias plataformas) e tamanho (no poderia ocupar muito espao nem utilizar muita memria) [03].

Vrias pessoas fsicas e jurdicas desenvolveram seus algoritmos, e no dia 20 de agosto de 1998, o NIST selecionou 15 candidatos. Vrios dos 15 algoritmos originais no duraram muito tempo, pois em alguns foram descobertas fraquezas e em outros simplesmente eram muito grandes ou muito lentos, reduzindo a lista em apenas 5 algoritmos at agosto de 1999, sendo eles o MARS, RC6, Rijndael, Serpent e Twofish. No ano seguinte, estes algoritmos foram testados para decidir qual deles seria o vencedor. Finalmente, no dia 2 de outubro de 2000 [03], o NIST anunciou como grande vencedor o algoritmo Rijndael [08] [09], desenvolvido por dois pesquisadores belgas, Vincent Rijmen e Joan Daemen.

16 O Rijndael um algoritmo de criptografia de bloco simtrico (mesma chave de cifragem e decifragem), com tamanho (quantidade de bits de trabalho) de bloco e de chave variveis, podendo ser especificados independentemente para 128, 192 ou 256 bits [08], possui facilidade de implementao, propiciando uso em Smart Cards (cartes magnticos utilizados em operaes bancrias ou de compra eletrnica) e outros equipamentos que utilizam pouca memria RAM, alm disso, utiliza poucos ciclos de processamento [03]. O cdigo desse algoritmo bem enxuto e no depende de nenhum outro tipo de componente criptogrfico, como gerador de nmeros randmicos. Esse aspecto faz com que sua utilizao apresente um nvel de segurana superior [09].

No AES o resultado das diversas operaes intermedirias realizadas colocado em um lugar denominado matriz de estado (Fig. 3.1). Uma matriz de estado pode ser definida por uma matriz retangular de bytes, onde esta matriz possui quatro linhas por um nmero Nb (nmero de blocos) de colunas que igual ao tamanho do bloco (128, 192, 256) dividido por 32 [09].

A cifra da chave tambm pode ser definida como uma matriz retangular de bits tambm com quatro linhas por um nmero Nk de colunas igual ao tamanho da chave (128, 192, 256), dividido por 32, conforme exemplificado na figura 3.1 abaixo [08] [09].

Figura 3.1 - Matriz de estado e matriz de chave para Nb = 6 e Nk = 4 [08].

Em alguns casos precisa-se demonstrar estas matrizes como vetores de quatro bytes, cujo comprimento se refere ao tamanho da linha da matriz retangular. Como a quantidade de colunas da matriz obtida dividindo-se o tamanho do bloco por 32, as colunas da matriz somente podem assumir o tamanho de 4, 6 ou 8.

Quando necessrio especificar cada byte dentro do vetor usamos as letras a, b, c e d como ndice. Tanto a entrada como a sada do processo de criptografia AES tratada como um vetor de 8-bits (1 byte) numerados de tamanho igual a 4*Nb - 1 (estes

17 blocos podem ser de 16, 24 ou 32 bytes). A cifragem da chave tambm tratada da mesma forma, com a diferena de que o vetor numerado de 4*Nk-1. O algoritmo transforma os dados atravs do nmero de rodadas, usando quatro "funes" diferentes, sendo elas: ByteSub, ShiftRow, MixColumn e AddRoundKey. A ltima rodada um pouco diferente, pois ela apresenta apenas as funes: ByteSub, ShiftRow e AddRoundKey. Logo descreveremos as quatro transformaes que ocorrem a cada rodada do algoritmo [09]. A seguir explicaremos com mais detalhes o algoritmo e suas funes.

3.1. Especificao do Algoritmo


Para o algoritmo AES final aprovado, definiu-se que o tamanho do bloco de entrada (input), sada (output) e da matriz de estado interna deve ser de 128 bits (16 bytes). Isto representado por Nb = 4, que reflete o nmero de palavras de 32 bits (nmeros de colunas) na matriz de estado. J o tamanho da chave de criptografia K pode ser de 128, 192, ou 256 bits (16, 24 e 32 bytes). O tamanho da chave representado por Nk= 4, 6, ou 8, que reflete o nmero de palavras de 32 bits (nmero de colunas) na chave de cifragem.

O nmero de rodadas (quantidade de interaes) que sero utilizados no algoritmo, para a cifragem ou decifragem, depende do tamanho da chave a ser utilizada, sendo este representado por Nr, onde Nr = 10 quando Nk = 4, Nr= 12 quando Nk = 6, e Nr = 14 quando Nk = 8, sendo Nk o nmero de palavras de 32 bits (ou numero de colunas da matriz de chave). Para a implementao, podemos definir o tamanho da chave, o tamanho do bloco e o nmero de rodadas conforme visto na figura. 3.2 a seguir assim, pode-se modificar facilmente a implementao com o intuito de ajustar o tamanho dos elementos lgicos para quaisquer mudanas, alteraes e ajustes na norma atual [09].

Figura 3.2 - Tabela de combinaes [08].

18 Tanto na cifragem como na decifragem, o algoritmo AES trabalha com rodadas (nmero de iteraes), que so formadas por diferentes transformaes orientadas por bytes: 1)Substituio de byte usando a tabela de substituio (S-box); 2)Deslocamento de linhas da matriz de estado por valores diferentes; 3)Mistura dos dados com cada coluna da matriz de estados; 4)Adicionar a chave de rodada na matriz de estado [09].

Figura 3.3 - Diagrama detalhado da funo de processamento principal [08] [09].

3.1.1. Especificao Galois Field (GF 28)


Todos os bytes no algoritmo AES so interpretados como sendo elementos de um campo finito que podem ser representados por uma descrio polinomial, do tipo b7x7+ b6x6+ b5x5+ b4x4+ b3x3+ b2x2+ b1x+ b0, ou seja, o byte 57H {binrio 01010111} pode ser representado pelo polinmio x6 + x4 + x2 + x + 1. Desta forma se torna possvel toda uma descrio matemtica de funes como adio, multiplicao e outras tratando-se agora o byte como polinmio e efetuando tais operaes, como operaes polinomiais.

A representao polinomial de Galois Field possui uma representao mais fcil e permite uma representao numrica quando ao realizar operaes polinomiais o resultado produz um outro polinmio de ordem maior do que os operandos originais. Desta maneira a teoria aplicada (GF 28) na deduo matemtica usa do recurso de um polinmio irredutvel (ou mdulo), x4 + 1, com o qual se pode manter o resultado final com o mesmo ndice dos operandos originais, reduzindo o resultado a partir deste polinmio [08] [09].

19

3.2. O Cifrador
No incio do processo de cifragem, a entrada copiada para a matriz de estado. Depois da rodada inicial de adio da chave, a matriz de estado transformada pela implementao da funo de rodada 10, 12, ou 14 vezes (dependendo do tamanho da chave), com a rodada final sendo diferente das anteriores. Aps rodada final, a matriz de estado copiada para a sada e assim termina-se o processo. A funo de rodada parametrizada usando o escalonamento de chaves que consiste em uma matriz unidimensional de palavras de quatro bytes derivadas da chave original, produzido pela funo de expanso de chaves.

O cifrador descrito em pseudocdigo na figura 3.4. As transformaes individuais - SubBytes(), ShiftRows(), MixColumns(), and AddRoundKey() - processam a matriz de estado como est descrito a seguir. Na figura 3.3 a matriz w[] contm o vetor de escalonamento das chaves que ser usado na cifragem, todas as rodadas Nr so idnticas com exceo da rodada final que no inclui a transformao MixColumns() [08] [09].

Figura 3.4 - Pseudocdigo para o cifrador [08] [09].

Na figura 3.4, no pseudocdigo do cifrador, temos na linha 01 a declarao da chamada da funo, onde esto declarados os parmetros (tamanho da chave de criptografia, do bloco de entrada e sada dos dados) que devem ser passados para a funo a fim de que se obtenha o resultado correto. J entre as linhas 02 e 05 temos o incio funo e a declarao de algumas variveis que sero utilizadas, e na linha 07 a primeira interao da funo onde a

20 chave inicial adicionada (XOR) com a matriz de estado. Entre as linhas 09 e 14 temos as execuo das rodadas propriamente ditas, com a chamada de cada sub-funo, e nas as linhas 16, 17 e 18, a rodada final que difere das rodadas bsicas anteriores por no executar a funo MixColumns(). Assim na linha 20 obtemos o resultado de retorno da funo e na linha 21 a sua finalizao.

3.2.1. Transformao SubBytes()


A transformao SubByte uma substituio no linear que opera em cada byte da matriz de estado independentemente. A funo que implementa a tabela de substituio (S_box) usada nesta transformao inversvel e construda pela composio de duas transformaes. Executando uma multiplicao inversa em Galois Field (28) [10][11], que a base matemtica deste algoritmo, temos a funo polinomial convertida em representao matricial da seguinte forma na figura 3.5:

Figura 3.5 - SubBytes() aplica a S_box para cada byte da matriz de estado[08] [09].

Ao invs de aplicarmos a operao matemtica para cada byte toda vez que efetuarmos a chamada da funo, podemos simplesmente utilizar uma tabela pr-preenchida [08][09] e utiliz-la como S_box (tabela de substituio) na transformao SubBytes(). A seguir na figura 3.6 apresentada em formato hexadecimal a tabela pronta da funo S_box. Com exemplo, se s1,1 = {53}, o valor de substituio ser determinado pela interseo da linha 5 com a coluna 3 na figura 3.6. Isto resultar em s'1,1 = {ed}.

21

Figura 3.6 - S_box: substituio de valores pelo byte xy (hexadecimal) [08] [09].

3.2.2. Transformao ShiftRows()


Nesta transformao, as linhas da matriz de estado so alteradas (deslocadas para a direita) ciclicamente sendo C1, C2 e C3 o deslocamento que se deve aplicar nas linhas da matriz de estado onde a primeira linha no alterada, a segunda linha deslocada em C1 bytes, conforme apresentado na figura 3.7, a terceira linha deslocada em C2 bytes e a quarta linha deslocada em C3 bytes. Estes parmetros C1, C2 e C3 dependem do nmero de bytes (Nb) da coluna [09].

Figura 3.7 - Parmetros para a quantidade de bytes deslocados no ShiftRow

A figura 3.8 mostra o efeito da transformao ShiftRow em uma matriz de estado, onde se pode ver como o deslocamento cclico das colunas afetar os bytes na matriz de estado.

22

Figura 3.8 - Transformao ShiftRow() em uma matriz de estado.

3.2.3. Transformao MixColumns()


Para se realizar esta funo, as colunas de uma matriz de estado so consideradas como polinmios do tipo Galois Field (28) [10] [11], denotadas por a(x) e so multiplicadas por um polinmio reduzido em mdulo por x4+1. Segundo a norma [09] o polinmio para multiplicao (a(x)) pode ser obtido por: a(x) = {03}x3 + {01}x2 + {01}x + {02} O resultado da multiplicao pode ser denotado por a(x) e a multiplicao pode ser exemplificada pela expresso vista abaixo:

Como resultado desta multiplicao matricial, os quarto bytes na coluna so modificados como a seguir: s' 0,c = ({02} s0,c) ({03} s1,c) s2,c s3,c s' 1,c = s0,c ({02} s1,c) ({03} s2,c) s3,c s' 2,c = s0,c s1,c ({02} s2,c) ({03} s3,c) s' 3,c = ({03} s0,c) s1,c s2,c ({02} s3,c)

Assim teremos, aps a multiplicao, uma alterao nas colunas da matriz de estado, como visto na figura 3.9, esta funo opera coluna por coluna da matriz de estado.

23

Figura 3.9 - MixColumns() opera a matriz de estado coluna por coluna.

3.2.4. Transformao AddRoundKey()


Esta transformao consiste somente em aplicar uma operao lgica ou exclusivo (XOR) na matriz de estado, usando a matriz proveniente da funo de escalonamento de chaves. A ao de transformao ilustrada na figura 3.10 onde o ndice l que identifica a coluna na matriz de estado que ser utilizada, igual ao produto do ndice da rodada atual, pelo nmero de bytes da matriz (l=round * Nb). Sendo assim pode-se verificar que esta funo realiza um XOR coluna por coluna entre a matriz de estado atual (determinada pela rodada) e a chave de rodada obtida pela funo de expanso de chaves.

Figura 3.10 - Transformao AddRoundKey.

3.3. Gerao da Chave


As inseres de chave no meio do algoritmo so feitas atravs da funo RoundKey que so provenientes do processamento da chave. Este processamento da chave tratado por uma funo de escalonamento de chave que possui dois componentes: Expanso da Chave e Seleo da RoundKey. O nmero total de RoundKeys necessrio igual ao tamanho do bloco, multiplicado pelo nmero de rodadas mais um dividido por Nb*8. Por

24 exemplo: um bloco de 128 bits, 10 rodadas e Nb = 4 necessita de 1408 bits ou 44 RoundKeys de 32 bits cada. As RoundKeys so selecionadas da ExpandedKey (vetor principal de chaves) de acordo o ndice de rodada [08].

3.3.1. Expanso da Chave


A ExpandedKey um vetor linear de palavras de 4-bytes e denotado por W[Nb*(Nr+1)], onde Nr o numero de rodadas e Nb o de colunas da matriz de estado. As primeiras Nk (nmero de colunas da matriz de chaves) palavras possuem a chave inicial, enquanto que as outras, so definidas pela funo de expanso de chaves. A funo que calcula a ExpandedKey depende de Nk, existindo uma verso para Nk < 6 (para o vetor de chaves ser de 128 bits) e outra para Nk > 6 (para o vetor de chaves ser 192 ou 256 bits) [08].

Figura 3.11 - Pseudocdigo de expanso da chave [08] [09].

Na figura 3.11 encontra-se o pseudocdigo da funo de expanso de chaves onde, na linha 01 realizada a chamada da funo e os parmetros necessrios que devem ser fornecidos para a sua execuo. Nas linhas 02,03 e 04 tem-se a inicializao da funo, onde se observa a declarao e inicializao de variveis. J nas linhas 05, 06, 07 e 08 ocorre a primeira interao da funo onde iniciado o vetor de expanso com o valor da chave original, introduzida no algoritmo. Na linha 09 tem-se a inicializao do contador de interaes das rodadas que devero ser necessrias para a expanso das chaves e entre as linhas 10 e 19 a expanso propriamente dita onde, de acordo com o ndice do contador a subchave (palavra de 32 bits) sofrer a ao de determinadas operaes para a sua determinao. E por fim, na linha 20, o algoritmo encerrado.

25

3.4. Decifrador
O cifrador pode ser invertido e implementado de modo a decifrar a informao gerada anteriormente pelo algoritmo AES. As transformaes individuais usadas no decifrador - InvShiftRows(), InvSubBytes(), InvMixColumns(), e AddRoundKey() - so processadas na matriz de estados como apresentado pelo pseudocdigo na figura 3.12. Na decifragem, a matriz produzida pela funo dever ser utilizada de ordem inversa.

Figura 3.12 - Pseudocdigo para o decifrador [08] [09].

Na figura 3.12, tem-se na linha 01 a chamada da funo e os parmetros declarados que devem ser passados para a funo. J entre as linhas 02 e 04 tem-se o incio da funo e a declarao de variveis necessrias. Na linha 05 ocorre a primeira interao da funo onde adicionada a chave inicial (XOR) com a matriz de estado. Entre as linhas 06 e 11, tem-se as execuo das rodadas propriamente ditas, com a chamada de cada sub-funo at que o lao FOR termine. J nas linhas 12, 13 e 14 ocorre a rodada final que difere das rodadas anteriores por no executar a funo InvMixColumns(). Na linha 15 obtem-se o resultado de retorno da funo e na linha 16 a sua finalizao.

3.4.1. Transformao InvShiftRows()


A funo InvShiftRows(), ilustrada na figura 3.13, o inverso da transformao ShiftRows(). Os bytes nas ultimas trs linhas da matriz de estado so

ciclicamente deslocados para a esquerda por diferentes nmeros de bytes (offsets). A primeira linha, r = 0, no deslocada. As trs consecutivas so deslocados por Nb-z(r,Nb) bytes, onde z depende do nmero da linha.

26

Figura 3.13 - InvShiftRows() deslocamento cclico de linhas.

3.4.2. Transformao InvSubBytes()


InvSubBytes() o inverso da transformao de substituio de bytes, onde a S-box inversa aplicada para cada byte da matriz de estados.

Figura 3.14 - S_box Inversa: substituio de valores pelo byte xy (hexadecimal) [08].

3.4.3. Transformao InvMixColumns()


A funo InvMixColumns() o inverso da MixColumns(), e trabalha na matriz de estados coluna por coluna, tratando cada coluna como um polinmio de quatro termos. As colunas so consideradas como polinmios do tipo Galois Field (28) [10][11], denotadas por

27 a-1(x) onde so multiplicadas por um polinmio e reduzidas em mdulo por x4+1. Na norma [09] o polinmio para multiplicao (a-1(x)) pode ser obtido por: a-1 (x) = {0b}x3 + {0d}x2 + {09}x + {0e} Podemos ver na forma matricial a multiplicao de matrizes como apresentado a seguir:

Como resultado desta multiplicao, os quarto bytes na coluna podem ser modificados como a seguir: s'0,c = ({0e} s0,c) ({0b} s1,c) ({0d} s2,c) ({09} s3,c) s'1,c = ({09} s0,c) ({0e} s1,c) ({0b} s2,c) ({0d} s3,c) s'2,c = ({0d} s0,c) ({09} s1,c) ({0e} s2,c) ({0b} s3,c) s'3,c = ({0b} s0,c) ({0d} s1,c) ({09} s2,c) ({0e} s3,c) Assim, aps a multiplicao, uma alterao nas colunas da matriz de estado, como visto na figura 3.15, esta funo opera coluna por coluna da matriz de estado.

Figura 3.15 - InvMixColumns() opera a matriz de estado coluna por coluna.

3.4.4. Inverso da Transformao AddRoundKey()


A funo AddRoundKey(), que est descrita anteriormente, pode ser invertida desde que se aplique uma operao ou exclusivo (XOR) com o vetor de chave que foi produzido pela funo de escalonamento de chaves.

No caso do processo de decifragem a ordem de utilizao do vetor de chaves deve tambm ser invertida para que assim o processo funcione corretamente [10] [11].

4. Captulo 4 Dispositivo de Lgica Programvel (FPGA)

Captulo 4 -

Atualmente, uma tcnica de desenvolvimento de circuitos integrados, tem oferecido uma opo de implementao de hardware que muito mais flexvel do que os j consagrados Circuitos Integrados de Aplicaes Especficas (ASICs - Application Specific Integrated Circuits). Esta tcnica utiliza projeto com linguagem de descrio de hardware e Dispositivos de Lgica Programvel (os mais utilizados: FPGAs - Field Programmable Gate Arrays) [12].

A tecnologia FPGA foi escolhida para implementar o algoritmo de criptografia AES em hardware devido a varias razes, entre elas a substituio de uma funo do algoritmo criptogrfico por outra (reviso de verses), que trivial em software, mas no est disponvel em um projeto de hardware convencional (ASIC). Assim, as solues que permitem revises de hardware com se fossem software, podem oferecer uma grande melhoria de desempenho quanto velocidade, segurana, e custo de desenvolvimento.

A agilidade refere-se ao fato de que o mesmo FPGA pode ser reprogramado em tempo de execuo para suportar diferentes algoritmos. Outro fator chave que favorece o uso de FPGA a possibilidade de abstrao do funcionamento eltrico dos circuitos que, como poder ser visto, permite implementar em hardware um algoritmo de criptografia (abstrao matemtica), sem se conhecer a fundo o funcionamento de transistores. O menor

29 tempo usado no desenvolvimento do projeto, a escalabilidade de segurana e os parmetros de arquiteturas variveis tambm so fatores importantes para definio por esta tecnologia [13].

4.1. FPGAs - Viso Geral


Um dispositivo de lgica programvel FPGA (Field Programmable Gate Array) um pedao de silcio que contm uma matriz de blocos lgicos configurveis (CLBs), flip-flops e interconexes programveis entre os blocos lgicos. Diferentemente de um Circuito Integrado de Aplicao Especfica (ASIC - Application Specific Integrated Circuit), que pode executar uma funo nica e direcionada, um FPGA pode ser reprogramado para executar uma funo diferente aps alguns microssegundos [12].

Os FPGAs foram introduzidos como uma alternativa aos circuitos integrados customizados, para a implementao de sistemas em um nico chip e para fornecer flexibilidade de reprogramao para o usurio, resultando na melhoria de densidade quanto comparado a componentes discretos (aproximadamente 10 vezes). Outra vantagem do FPGA sobre o CustomICs que, com o auxilio de ferramentas CAD (Computer Aid Design), os circuitos passaram a ser implementados em um intervalo de tempo menor (sem processo fsico de layout, sem produo de mascara, e sem fabricao de circuito integrado especfico)[12]. Na figura 4.1 apresentamos parmetros de comparao entre as tecnologias de projeto de circuitos integrados sendo NRE: Non-recurring Engineering Costs e TTM: Time To Market.

Figura 4.1 - Anlise comparativa [12] [13]

Antes que seja programado, um circuito integrado no pode se comunicar com os dispositivos que o cercam, isto tanto ruim quanto bom, mais vai lhe permitir muita flexibilidade na utilizao diria, aumentando o seu poder e complexidade de programao. A

30 capacidade de reprogramao do FPGA, o levou a ser largamente utilizado por projetistas de hardware para circuitos de prottipos. Alguns anos atrs os FPGAs comearam a conter bastantes recursos, tornando-os muito interessantes para a comunidade e as empresas que desenvolvem sistemas de computao de alta desempenho (HPC Computing). High Performance

Recentemente os vendedores de hardware de HPC comearam a oferecer solues que incorporam FPGAs em sistemas HPC [12], onde pode-se utiliza-los como coprocessadores ou outros sistemas auxiliares de desempenho, acelerando key kernels (ncleos de sistemas operacionais) dentro de certas aplicaes. Como um FPGA formado por uma matriz de CLBs, esta matriz pode ser simplesmente estendida para um processo de fabricao de 65nm ou mais novo, evitando a necessidade de re-engenharia intensa da arquitetura a cada nova gerao de um chip, como no caso dos ASICs [13].

A onda recente no interesse de FPGAs da comunidade HPC, vem no momento em que os microprocessadores convencionais esto lutando para acompanhar a lei de Moore. Esta reduo de ganho de desempenho em microprocessadores, junto com o aumento do custo para manter exigncias mnimas de desempenho, levou a um aumento do interesse em qualquer tecnologia que possa oferecer uma alternativa mais rentvel e vivel. O uso de FPGAs em sistemas HPC pode prover trs vantagens distintas sobre os grupos de computao convencional. Inicialmente, FPGAs consomem menos energia do que muitos

microprocessadores convencionais; segundo, usando FPGAs como aceleradores auxiliares dos sistemas de computao, pode-se aumentar significativamente a densidade de computao; terceiro, FPGAs podem fornecer um aumento significativo no uso e desempenho de certas aplicaes [12].

Internamente, os FPGAs consistem de interconexes de chaves programveis eletricamente, conforme a figura 4.2, que os diferenciam dos circuitos integrados customizados que so fabricados com interconexes fixas de metal entre os blocos lgicos. O FPGA permite um modo de configurar as interconexes entre os blocos lgicos e a funo de cada bloco lgico [11]. O FPGA pode ser configurado de forma a prover desde funcionalidade de um transistor at a complexidade de um microprocessador. Isto pode ser implementado de diferentes formas, com lgica combinacional ou lgica seqencial: 1)Par de Transistores; 2)Portas combinacionais NAND ou XOR; 3) Tabelas verdade de n-input; e 4)Multiplexadores.

31

Figura 4.2 - Verso simplificada da arquitetura interna de um FPGA [13].

A densidade dos blocos lgicos usados num FPGA depende do projeto, do comprimento e do nmero de segmentos (trilhas) usados para o roteamento dos circuitos. O nmero de segmentos para interconexo tipicamente uma troca entre a densidade de blocos lgicos usados e o total de rea usada para o roteamento.

4.2. O Bloco Lgico


O bloco lgico em um FPGA pode ser implementado de modo que se pode abstrair no nmero de entradas e sadas, a complexidade de funes lgicas que ele pode implementar e o nmero total de transistores que ele consome. A seguir uma descrio de como funciona os blocos lgicos de alguns fabricantes

FPGA Crosspoint: composto de dois tipos de blocos lgicos, onde um o par de transistores. Os blocos lgicos so executados em linhas paralelas como mostrado na figura 4.3 a baixo:

Figura 4.3 - Par de transistores em um FPGAs Cross-point [13].

32 O segundo tipo de blocos lgicos a lgica de memria de acesso aleatrio (RAM) que pode ser usada para implementar uma memria de acesso aleatrio.

FPGA Plessey: aqui o bloco de construo bsica uma porta NAND de duas entradas, como na figura 4.4, que conecta outro elemento para implementar a funo desejada.

Figura 4.4 - Bloco lgico para FPGAs Plessey [13].

FPGA Actel: Se as entradas de um multiplexador forem conectadas a uma constante ou a um sinal, isto pode ser usado para implementar funes lgicas diferentes com na figura 4.5. Por exemplo, um multiplexador de 2 entradas com entradas a, b e select, poder implementar a funo ac+bc. Se b=0 ento ele implementar ac, e se a=0 ele implementar bc.

Figura 4.5 - Bloco lgico para FPGAs Actel [13].

Tipicamente um bloco lgico Actel formado de um nmero mltiplo de multiplexadores e portas lgicas.

33 FPGA Xilinx: No bloco lgico Xilinx a Look up table (LUT) usada para implementar diversas funcionalidades. As linhas de entrada habilitam esta LUT e a sua sada fornece o resultado da funo lgica implementada. A LUT implementada usando uma SRAM, e uma funo lgica de k-entradas pode ser implementada usando 2^k de tamanho de uma SRAM. O nmero de funes possveis para a LUT de entrada k de 2^2k. A vantagem de tal arquitetura que ele suporta a implementao de muitas funes lgicas, contudo a desvantagem o nmero excepcionalmente grande de clulas de memria necessrias para implementar um bloco lgico no caso do nmero de entradas ser grande como na figura 4.6.

Figura 4.6 - Bloco lgico para FPGAs Xilinx [13].

FPGA Altera: O bloco lgico do FPGA Altera desenvolveu-se antes do aparecimento dos atuais PLDs. Ele composto de uma entrada bem larga (at 100 entradas) de portas AND que so alimentadas por portas OR de 3 a 8 entradas. Se o transistor de porta flutuante estiver baseado em uma chave programvel, habilitada qualquer trilha (roteamento) vertical que passe perto de uma porta AND e possa ser usado como entrada da mesma. A vantagem de uma implementao baseado numa quantidade grande de portas de entrada AND consiste que, poucos blocos lgicos podem implementar uma funcionalidade completa e assim se reduz da rea necessria para implementar interconexes do FPGA. Por outro lado, temos a desvantagem no uso de baixas densidades de blocos lgicos em um projeto que necessite de menos lgica de entrada.

Outra desvantagem o uso de dispositivos de pull-up (portas AND) que consomem energia esttica. Para melhorar isto, os fabricantes fornecem blocos lgicos de baixo consumo de energia que provocam o custo maior no atraso do dispositivo. Tais blocos lgicos podem ser usados em caminhos no-crticos [12] [13].

34

4.3. Negociao - Tamanho vs Desempenho


O tamanho dos blocos lgicos passa por um grande impasse, quando se avalia entre a densidade de blocos lgicos e a otimizao de rea utilizada no FPGA, visto que isto imprescindvel para o desempenho dos dispositivos. Um grande bloco lgico implementa mais lgica e assim, um menor nmero de blocos lgicos e necessrio para implementar uma funcionalidade no FPGA. Por outro lado, um grande bloco lgico consumir mais espao. Portanto, o timo tamanho do bloco lgico aquele que usa menos nmeros de blocos lgicos na implementao de uma funcionalidade, consumindo o menor espao possvel.

A rea lgica ativa geralmente menor do que a rea lgica total devido presena das conexes programveis. A rea lgica total a soma de rea lgica ativa e da rea consumida por conexes programveis. A rea rotevel em um FPGA tipicamente mais do que a rea ativa. Ela 70 a 90 por cento da rea total em um FPGA [13].

4.4. Tcnicas de Roteamento de FPGAs


A arquitetura de roteamento compreende chaves programveis e trilhas. O roteamento fornece uma conexo entre os blocos de entrada-sada e os blocos lgicos, e entre um bloco lgico e outro. O tipo de arquitetura de roteamento decide a rea consumida pelo roteamento e a densidade de blocos lgicos. Tcnicas de roteamento usadas em um FPGA basicamente decidem a quantidade de rea a ser usada pelas trilhas e as chaves programveis comparando-as com a rea consumida por blocos lgicos.

Uma trilha pode ser descrita como dois pontos finais de uma interconexo sem chaves programveis entre eles. Uma seqncia de uma ou mais trilhas em um FPGA pode ser chamada de pista. Tipicamente um FPGA tem blocos lgicos, interconexes e blocos de entrada/sada. Os blocos de entrada/sada esto na periferia dos blocos lgicos e interconexes. Os blocos de conexo so unidos aos blocos lgicos e, dependendo da exigncia do projeto, um bloco lgico conectado a outro [12][13].

35 Arquitetura de roteamento Xilinx: No roteamento da Xilinx, as conexes so feitas do bloco lgico ao canal de interconexo por um bloco de conexo. Como a tecnologia SRAM usada para implementar uma LUT, as conexes locais so grandes.

O bloco lgico rodeado por blocos de conexo. Estes unem os pinos dos blocos lgicos com a trilha de roteamento. Como na Figura 4.7, os transistores so usados para implementar conexes de pinos de sada enquanto, pinos multiplexadores de entrada guardam o nmero de clulas SRAM requeridas.

Figura 4.7 - Arquitetura de roteamento da Xilinx[13].

Arquitetura de roteamento Actel: O projeto da Actel tem mais segmentos de trilhas na direo horizontal do que na direo vertical. Os pinos de entrada conectam todas as pistas do canal que esto no mesmo lado que o pino. O pino de sada estende-se atravs de dois canais sobre o bloco lgico e dois canais abaixo dele.

O pino de sada pode ser unido aos quatro canais que ele cruza. Os blocos de chaveamento so distribudos pelos canais horizontais. que todas as pistas verticais podem fazer conexo com cada pista horizontal incidente como visto na figura 4.8 [13].

36

Figura 4.8 - Arquitetura de roteamento da Actel .

Arquitetura de roteamento Altera: A arquitetura de roteamento da Altera tem dois nveis de hierarquia. No primeiro nvel da hierarquia, 16 ou 32 dos blocos lgicos so agrupados em um Bloco de Matriz Lgica (LAB), sendo a estrutura do LAB muito semelhante a um PLD. As conexes so formadas usando-se EPROM como transistores de porta flutuante.

O canal o conjunto de trilhas que percorrem verticalmente o FPGA. As pistas so usadas para as seguintes conexes: conexes de sadas dos blocos lgicos do LAB; conexes de expanso; conexes de sadas de blocos lgicos; conexes de conectores de I/O.

Figura 4.9 - Arquitetura de roteamento global da Altera. (MAX 5000) [13]

37

Figura 4.10 - Arquitetura de roteamento local da Altera. (MAX 5000) [13]

4.5. Classificao Estrutural de FPGAs


O arranjo dos blocos especfico para cada fabricante que o desenvolve segundo suas opes de mercado e comercializao. Com base no arranjo interno, os FPGAs podem ser dividido em trs classes:

Matrizes Simtricas

Esta arquitetura compe-se de elementos lgicos (chamados CLBs) arranjados em linhas e colunas de uma matriz, juntamente com um layout de interconexo entre eles. Esta matriz simtrica rodeada de blocos de entrada/sada que so conectados ao mundo exterior como na figura 4.11.

Cada CLB formado de uma LUT (Lookup Table) de n-entrada e um par de flip-flops programveis. Interconexes fornecem o caminho de roteamento, e a direta interligao entre elementos lgicos adjacentes produz menor atraso do que se comparados com as interconexes de propsitos geral [13].

38

Figura 4.11 - FPGAs, de matrizes simtricas.

Arquitetura Baseada em Linhas

A arquitetura baseada em linhas formada de linhas alternadas de mdulos lgicos programveis que interligam as trilhas. Os blocos de entrada/sada so localizados na periferia das linhas. Uma linha pode ser unida a linhas adjacentes via interconexo vertical. Os mdulos lgicos podem ser implementados com diversas combinaes. Os mdulos combinatrios s contm elementos combinacionais, j mdulos de seqenciais contm ambos, elementos combinacionais junto com flip-flops. Estes mdulos seqenciais podem implementar funes combinatrias e seqenciais complexas como visto na figura 4.12.

Figura 4.12 - FPGAs, arquitetura baseada em linhas [13].

39 PLDs Hierrquicos

Esta arquitetura projetada da maneira hierrquica com o nvel superior contendo apenas blocos lgicos e interconexes. Cada bloco lgico contm um nmero de mdulos lgicos, e cada mdulo lgico tem elementos combinatrios, como tambm elementos funcionais seqenciais. Cada um desses elementos funcionais controlado por uma memria pr-programada. Na figura 4.13 [13], vimos que a comunicao entre blocos lgicos realizada por meio de uma matriz de interconexo programvel.

Figura 4.13 - FPGAs, PLD hierrquico.

4.6. Metodologias de Programao


Os comutadores eletricamente programveis so usados para programar um FPGA. A desempenho de um FPGA, em termos de rea e densidade lgica uma funo das propriedades desses comutadores. As propriedades desses comutadores programveis que fazem a diferena com relao resistncia, capacitncia parasita, volatilidade dos dados, reprogramao, tamanho, etc. As tcnicas empregadas so:

40 Tecnologia de Programao SRAM

As clulas estticas RAM so usadas para controlar portas de passagem ou multiplexadores. Para usar uma porta de passagem como uma chave fechada, o valor 1 (um) armazenado na clula SRAM. A figura 4.14 apresenta o uso de SRAM:

Figura 4.14 - FPGAs, programao SRAM [13].

Para usar uma SRAM como multiplexador, o estado dos valores de controle armazenados na SRAM decide quais as entradas do multiplexador devero ser unidas sada. A vantagem que a SRAM prov rpida reprogramao e tecnologia de fabricao. A desvantagem o espao consumido pelos transistores para implementar a clula de memria.

Programao de Porta Flutuante

A tecnologia, encontrada nos EPROMs que so apagadas com luz ultravioleta e nos EEPROMs apagveis eletricamente, usada em alguns FPGAs do fabricante Altera com na figura 4.15. A chave programvel um transistor que pode ser desabilitado. Aqui novamente, a vantagem a reprogramao, mas temos uma outra, nenhuma fonte de memria permanente externa (ROM), a necessria para programar o dispositivo na inicializao.

A desvantagem o alto consumo de energia devido a esttica do resistor de pull up e alta ON-resistance do transistor EPROM.

41

Figura 4.15 - FPGAs, programao de porta flutuante [13].

Tecnologia Anti-fusvel (Antifuse programming methodology)

Um anti-fusvel um dispositivo de dois terminais com estado no programado, que fornece uma resistncia muito alta entre os seus terminais. Para criar uma conexo de baixa resistncia entre os dois terminais, uma alta voltagem aplicada atravs dos terminais para queimar o anti-fusvel. Um bit extra do circuito necessrio para programar um anti-fusvel. A tecnologia de anti-fusvel usada por FPGA'S da Actel, QuickLogic e Crosspoint. A vantagem do anti-fusvel o tamanho relativamente pequeno e a reduo de rea, que anulada pela rea consumida pelo circuito extra necessrio para programar o FPGA. Outra vantagem a baixa resistncia em srie e a baixa capacitncia parasita [13].

4.7. FPGA Fluxo de Projeto


Uma das vantagens mais importantes no projeto baseado em FPGA que o usurio pode projet-lo usando ferramentas CAD, fornecidas pelas companhias de automao de projeto. Geralmente o fluxo de projeto de um FPGA inclui os seguintes passos [13]:

Projeto de Sistemas Nesta etapa o projetista tem que decidir, que parte da sua funcionalidade tem de ser implementada em FPGA e como integrar aquela funcionalidade ao resto do sistema.

Integrao de I/O com o resto do sistema Os fluxos de entrada/sada do FPGA esto integrados a Placa de Circuito

42 Impresso (PCB), onde importante o projeto da PCB antes do processo de projeto. Os fabricantes de FPGA fornecem solues extras de software para o processo de projeto de I/O.

Descrio de Projeto Projetistas descrevem as funcionalidades do projeto com editores esquemticos ou usando uma das vrias linguagens de descrio de hardware (HDL) como Verilog e VHDL

Sntese Uma vez que o projeto foi definido so usadas ferramentas para implementar o projeto em um determinado FPGA. A sntese inclui otimizaes genricas e otimizaes de energia, seguidas por otimizaes de locao de elementos lgicos e roteamento. A implementao inclui, dependendo das ferramentas utilizadas, a possibilidade de particionamento do projeto em mais de um dispositivo. A sada da fase de implementao do projeto o arquivo de bit-stream.

Verificao de Projeto O arquivo de bit-stream alimentado para um simulador que verifica a funcionalidade do projeto e informa erros no comportamento do projeto. Ferramentas de timing so usadas para determinar a freqncia mxima de funcionamento do projeto e por fim o projeto carregando para o dispositivo de FPGA final onde so feitos testes de trabalho no ambiente real.

5. Captulo 5 Linguagem Descrio de Hardware (VHDL)

Captulo 5 -

Alm das grandes vantagens j vistas anteriormente com o uso de FPGAs em projetos de hardware, normalmente existe a necessidade de migrao do projeto para outras plataformas, como os ASICs, ou mesmo FPGAs de outros fabricantes (portabilidade), alm da possibilidade de mudana na tecnologia de fabricao dos chips (0,90nm -> 0,65nm). Assim, necessrio que se encontre uma soluo integrada de forma que, o desenvolvimento de uma ferramenta de projeto resolva estas questes. Esta necessidade pode ser suprida com o uso de linguagens de descrio de hardware HDL (Hardware Description Language). Devendo, com caractersticas principais, serem padronizadas internacionalmente e reconhecidas pelos fabricantes e grupos de desenvolvimento.

Um sistema digital pode ser descrito com diferentes nveis de abstrao e pontos vista [14]. Um HDL deve modelar com fidelidade, exatido e descrever um circuito com vises comportamentais e/ou estruturais definidas pela abstrao necessria. Como as HDLs so modeladas depois do hardware, a sua semntica e uso so muito diferentes daquelas linguagens de programao tradicionais. Existem diversas linguagens de descrio de hardware disponveis no mercado, porm devido a sua origem e funcionalidade, sem duvida a VHDL (VHSIC Hardware Description Language) a mais conhecida. O uso de VHDL permite que o projeto tenha portabilidade, fcil compreenso (documentao de projeto) e um time to marketing menor para projetos de hardware.

44

5.1. VHDL - Viso Geral


O VHDL e Verilog so as duas das mais utilizadas HDLs. Embora a sintaxe e "a aparncia" das duas lnguas sejam muito diferentes, as suas capacidades e os seus alcances so bastante semelhantes. Ambos so padres industriais e so suportados pela maior parte das ferramentas de softwares disponveis atualmente [15]. O desenvolvimento do VHDL foi alavancado inicialmente pelo Departamento de Defesa dos Estados Unidos como um padro de documentao de hardware no incio dos anos 1980 e logo foi transferido ao IEEE (Institute of Electrical and Electronic Engineers). O IEEE ratificou o VHDL em 1987, onde se fez referncia a esta linguagem como VHDL-87. Sua evoluo apresentada na figura 5.1

Figura 5.1 - Evoluo do padro

Cada padro IEEE revisto aps alguns anos, alm de quando ocorrer fatos novos que justifiquem, pode-se fazer uma reavaliao extraordinria. O IEEE revisou o padro VHDL em 1993, denominado como VHDL-93. Outras pequenas modificaes foram fixadas em 2001, denominado agora o padro como VHDL-2001, que por sinal no possui nenhuma diferena significativa com relao ao VHDL-93. Como aviso, um sufixo s vezes acrescentado ao padro IEEE para indicar o ano que o padro foi lanado. Depois do lanamento inicial, vrias extenses foram desenvolvidas para facilitar vrios projetos e exigncias de modelagem. Essas extenses so documentadas em vrios padres IEEE [14] [15]:

45 0 padro IEEE 1076.1-1999, VHDL Analog and Mixed Signal Extensions (VHDLAMS): define a extenso de modelagem de sinais. 0 IEEE standard 1076.2-1996, VHDL Mathematical Packages: define funes matemtica extras para nmeros complexo e reais 0 IEEE standard 1076.3- 1997, Synthesis Packages: define operaes aritmticas sobre uma coleo de bits. 0 IEEE standard 1076.6-1999, VHDL Register Transfer Level (RTL) Synthesis: define um subconjunto que util para a sntese. 0 IEEE standard 1029.1-1998, VHDL Waveform and Vector Exchange to Support Design and Test Verification (WAVES): define como usar VHDL para troca de informao em ambientes de simulao.

5.2. Conceitos Bsicos de VHDL


A fim de se compreender a estrutura de programao VHDL, deve-se inicialmente estudar a forma com a qual esta linguagem define os diferentes processos e componentes que fazem parte de um sistema. Todo componente VHDL definido como uma entidade (entity), o que nada mais do que uma representao formal de um componente ou de um processo. Em descries mais simples uma entidade pode ser o prprio projeto, mas em implementaes de grandes sistemas, o projeto composto por diversas entidades distintas.

Figura 5.2 - VHDL: Fluxo ASIC [14]

46 Como apresentado anteriormente na figura 5.2, possivel ver as principais etapas envolvidas no processo de desenvolvimento de um chip (ASIC), onde poderemos estabelecer um ponto timo para o uso do VHDL. Conforme o fluxo, temos atividades desde a especificao do projeto, onde se trabalha com um documento de texto simples (linguagem corrente) e alguns recursos grficos como esquemas e fluxogramas, passando pelo projeto propriamente dito (sistema, lgico e circuito) at a parte de projeto fsico e validao. Diferentemente de um fluxo de projeto FPGA, o fluxo ASIC necessita de outras etapas para a sua correta finalizao.

Independente da plataforma de projeto escolhida a linguagem VHDL sempre utilizada nas etapas de desenvolvimento do projeto de sistema e lgico, alm de ser a ideal para a parte de teste e verificao dos mesmos. Desta forma podemos utilizar no s no fluxo ASCI, nas reas de desenvolvimento de projeto comportamental, RTL e netlist, como tambm no fluxo de projeto em FPGA em etapas semelhantes e tambm em teste e verificao.

O modelo de definio de uma entidade em VHDL segue uma estrutura bem especfica, composta por duas partes, que sero apresentadas a seguir [16]:

-Declarao de entidade; -Corpo de arquitetura

5.2.1. Declarao de Entidade


Declarao de uma entidade a definio de uma estrutura funcional, que pode ser um componente completo ou s parte de um sistema com a identificao apropriada, de modo a permitir que a mesma seja utilizada posteriormente. Normalmente o nome da entidade declarado aps a palavra-chave entity e repetido aps a palavra-chave end entity. Dentro da declarao da entidade definida a interface do componente de forma similar a definio de pinos de um componente [16].

O instanciamento da entidade feito atravs da declarao de portas (ports) de interface da entity que, alm de um nome prprio, deve conter o modo que indica de que tipo o sinal (de entrada (in), sada (out) ou bidirecional (inout)). O tipo do sinal que determina

47 o tipo de informao que ir trafegar pela porta. Inicialmente, so apresentados na declarao da entity os nomes dos sinais e a seguir, separados por dois pontos ':', o modo e o tipo dos mesmos. Na definio das portas, podem-se definir sinais que comportem bits, tipos complexos como bytes (8bits) e at tipos compostos como arrays de variveis, conforme necessidade do projeto. Na figura 5.3 temos um exemplo de uma declarao de entidade bem simples [17].

entity modelo is port ( a, b : in bit; c : out bit); end entity modelo; Figura 5.3 - VHDL: declarao de entidade.

Denominada modelo, esta entidade possui duas portas de entrada do tipo bit, declaradas como a e b e uma porta de sada tambm do tipo bit, declarada como c. Normalmente as portas de entrada de uma entidade so declaradas antes das de sada. Cada declarao de interface seguido por ponto e vrgula ';', exceto a ltima. Tambm necessrio colocar-se ponto e vrgula no final da definio de porta.

Bit um tipo pr-definido em VHDL, que pode assumir valores '0' e '1'. Este tipo usado para representar dois nveis lgicos. Na prtica, para representar valores digitais reais so utilizadas bibliotecas definidas pela IEEE ou por um vendedor de componentes. comum se encontrar os tipos STD_LOGIC ou VL_BIT, que so representaes de circuito bem mais prximas da realidade que os simples valores '0' e '1'. possvel, em VHDL, a definio de valores iniciais para portas, como na figura 5.4, durante a definio da entidade [17].

entity modelo is port ( a, b : in bit := '1'; c : out bit); end entity modelo; Figura 5.4 - VHDL: declarao de entidade com atribuio inicial.

48

5.2.2. Corpo de Arquitetura


O corpo de arquitetura de uma entidade define o seu funcionamento interno, a partir de uma srie de instrues de operao em um ou mais processos. Um processo como uma unidade bsica descritiva de um comportamento. Um processo executado normalmente em resposta a mudana de valores de sinais, e usa os valores correntes destes sinais e variveis para determinar os novos valores de sada. importante saber que mais de um processo pode ser executado simultaneamente, provocando assim processos concorrentes, sem esquecer que so permitidas estruturas de loop como If-Them-Else; Do-While e outras com a inteno de se flexibilizar mais os recursos da linguagem de programao. Em VHDL existem dois conceitos de modelamento da descrio funcional de uma entidade [17] [18]. So eles:

- Modelo comportamental - Modelo estrutural

Modelo Comportamental

Pode-se montar um corpo de arquitetura comportamental descrevendo sua funo a partir sentenas de processo, que so conjuntos de aes a serem executadas. Os tipos de aes que podem ser realizadas incluem expresses de avaliao, atribuio de valores a variveis, execuo condicional, expresses repetitivas e chamadas de subprogramas [18].

A declarao do comportamento de uma entidade feito atravs da programao de seus algoritmos com base nos diversos comandos e estruturas da linguagem. A seguir na figura 5.5 tem-se um exemplo de uma declarao de arquitetura para a entidade latch.

architecture opera of latch is begin q <= r nor nq; nq <= s nor q; end opera;

-- Declarao de arquitetura

-- Sadas q e nq recebem resultado de -- operao NOR com as entradas r e s

Figura 5.5 - VHDL: declarao de arquitetura.

49

A primeira linha da declarao indica que esta a definio de uma nova estrutura denominada opera, que pertence entidade denominada latch. Assim esta arquitetura descreve a operao da entidade latch. As linhas entre as diretivas de comeo (begin) e fim (end) descrevem a operao do latch.

Assim como em outras linguagens de programao, variveis internas so definidas tambm em VHDL, com o detalhe de que estas podem somente ser utilizadas dentro de seus respectivos processos, procedimentos ou funes. Para troca de dados entre processos devem-se utilizar sinais ao invs de variveis [17] [18]. Outro exemplo possvel de um corpo de arquitetura comportamental apresentado na figura 5.6 para a entidade reg4, registrador de 4 bits:

architecture comportamento of reg4 is begin carga: process (clock) variable d0_temp, d1_temp, d2_temp, d3temp : bit; begin if clk = '1' then if en = '1' then -- Carrega as entradas no registrador -- temporrio

d0_temp := d0; d1_temp := d1; d2_temp := d2; d3_temp := d3; end if; end if; -- Descarrega o registrador na sada

q0 <= d0_temp after 5ns; q1 <= d1_temp after 5ns; q2 <= d2_temp after 5ns; q3 <= d3_temp after 5ns; end process carga; end comportamento; Figura 5.6 - VHDL: arquitetura comportamental.

50 Neste corpo de arquitetura, a parte aps a diretiva begin inclui a descrio de como o registrador se comporta. Inicia com a definio do nome do processo, chamado carga, e termina com a diretiva end process. Na primeira parte da descrio testada a condio de que ambos os sinais en e clk sejam iguais a 1. Se eles so, as sentenas entre as diretivas then e end if so executadas, atualizando as variveis do processo com os valores dos sinais de entrada. Aps a estrutura if os quatro sinais de sada so atualizados com um atraso de 5ns. O processo carga sensvel ao sinal clock, o que indicado entre parnteses na declarao do mesmo. Quando uma mudana no sinal clock ocorre, o processo novamente executado [17][18].

Modelo Estrutural

Existem vrias formas pela qual um modelo estrutural pode ser expresso [17][18]. Uma forma comum o esquemtico de circuito. Smbolos grficos so usados para representar subsistemas que so conectados usando linhas representando fios. Esta forma grfica geralmente uma das preferidas pelos projetistas, entretanto a mesma forma estrutural pode ser representada textualmente na forma de uma lista de conexes. Uma descrio estrutural de um sistema expressa, portanto em termos de subsistemas interconectados por sinais. O mapeamento de portas especifica que portas da entidade so conectadas para quais sinais do sistema que se est montando. Por exemplo, tomando-se como base a entidade flipflop tipo D, temos internamente a representao da entidade d_latch cuja declarao encontrase na figura 5.7:

entity d_latch is port ( d, clk : in bit; q : out bit); endentity d_latch; Figura 5.7 - VHDL: declarao da entidade flip-flop.

Pode-se utilizar esta estrutura para se compor sistemas mais complexos, como registradores de um nmero qualquer de bits. Para ilustrar isto na figura 5.8 apresentada uma descrio de um registrador de 2 bits, chamado reg_2bits, construdo a partir do flip_flop d_latch.

51 entity reg_2bits is port ( d0, d1, clk : in bit; q0, q1 : out bit); end entity reg_2bits; architecture estrutura of reg_2bits is begin: bit0: entity work.d_latch port map ( d0, clk, q0) bit1: entity work.d_latch port map (d1, clk, q1) end architecture estrutura; Figura 5.8 - VHDL: descrio de um registrador de 2 bits. Note que neste caso, na prpria indicao dos componentes que constituem o sistema reg_2bits j feito o mapeamento de pinos desejados, ou seja, d0 associado ao pino d do primeiro flip-flop, assim como o pino clk ao sinal de porta de mesmo nome e q0 ao bit q, conforme a estruturao bit0. A estrutura bit1 descrita de forma anloga somente que uma nova entidade d_latch (uma cpia deste componente) ser criada para a realizao de suas ligaes. Entretanto, apesar da forma apresentada ser funcional, muitas vezes na prtica se costuma descrever formalmente o mapeamento de portas desejados. Isso torna o esquema de ligaes implementado mais visual e intuitivo. O mapeamento ento se caracteriza pela indicao dos sinais de origem/destino para cada conexo como figura 5.9 [17][18]. -- Chamada da estrutura de um lacth -- Interligaes -- Chamada da estrutura de um lacth -- Interligaes -- Declarao de conexes externas

entity reg_2bits is port ( d0, d1, clk : in bit; q0, q1 : out bit); end entity reg_2bits; architecture estrutura of reg_2bits is begin: bit0: entity work.d_latch -- Chamada da estrutura de um lacth

port map (d => d0, clk => clk, q => q0) bit1: entity work.d_latch -- Chamada da estrutura de um lacth

port map (d => d1, clk => clk, q => q1) end architecture estrutura; Figura 5.9 - VHDL:descrio de um registrador de 2 bits de forma mais clara.

52

Este formato traz por si s uma maior flexibilidade do projeto na manipulao de sinais. Pode-se assim trabalhar com arranjos mais flexveis como quando se utilizam variveis de tipo composto (bit_vector, etc...). Na descrio da figura 5.10, por exemplo:

entity registrador_4bits is port ( d : in bit_vector (0 to 3); -- Definio da entidade que ser clk : in bit; -- utilizada posteriormente

q : out bit_vector (0 to 3); -- (este o registrador de 4 bits) end entity registrador_4bits; ... entity registrador_8bits is port ( din : in bit_vector (0 to 7); -- Definio dos pinos de conexo clk : in bit; -- externa da implementao

dout : out bit_vector (0 to 7)); -- do registrador de bits end entity registrador_8bits; -- Inicio da implementao

architecture estrutura of registrador_8bits is begin: -- Inicio da implementao

estrutura: entity work.registrador_4bits -- para um novo reg de 8 bits port map ( d (0 to 3) => din (0 to 3), -- Instaciamento do reg de 4 bits clk => clk, -- para os 4 bits menos significativos

q (0 to 3) => dout (0 to 3)) port map ( d (0 to 3) => din (4 to 7), -- Instaciamento do reg de 4 bits clk => clk, -- para os 4 bits mais significativos

q (0 to 3) => dout (4 to 7)) end architecture estrutura; Figura 5.10 - VHDL:descrio de um registrador de 8 bits.

Pode-se montar um registrador de 8 bits (registrador_8bits) a partir de registradores de 4 bits (registrador_4bits) operando com sinais tipo bit_vector, o que simplifica a indicao das ligaes. Muitas vezes, como em alguns esquemticos de circuitos feitos com componentes discretos, desejam-se conectar sinais a valores fixos ou at mesmo deslig-los do circuito final. Isto tambm possvel em VHDL pela adequada atribuio de valores no mapeamento de conexes [17] [18]. A figura 5.11 tem apresentao deste recurso.

53 entity FF_D is port ( d, clk, rs, pr : in bit; q, nq : out bit); end entity FF_D; ... entity reg_2bits is port ( d0, d1, clk : in bit; q0, q1 : out bit); end entity reg_2bits; architecture estrutura of reg_2bits is begin: bit0: entity work.FF_D -- Uso do flip-flop para o 1.o -- Declarao do reg de 2 bits -- Definio de um flip-flop -- ser usado no reg de 2 bits

port map ( d => d0, clk => clk, -- bit do registrador rs => '1', pr => '1', q => q0, nq => open) bit1: entity work.FF_D(behavioral) -- Uso do flip-flop para o 2.o

port map ( d => d1, clk => clk, -- bit do registrador rs => '1', pr => '1', q => q1, nq => open) end architecture estrutura; Figura 5.11 - VHDL:descrio de um registrador de 2 bits instanciando sinais.

5.2.3. Interligao de Modelos com Sinais


Modelos no precisam ser puramente estruturais ou comportamentais. Frequentemente til especificar um modelo com algumas partes compostas de instncias de componentes e outras descritas usando processos. Utilizam-se sinais no sentido de interligar instncias de componentes e processos. Um sinal pode ser associado a porta de uma instncia de componente e pode ser assinalado para ser lido ou escrito em um processo [17][18].

Pode-se escrever um projeto, com um modelo hbrido que inclua ambas as abordagens. Estas instrues so coletivamente chamadas de sentenas concorrentes, uma vez que todos seus processos so executados concorrentemente, quando o modelo simulado.

54 Uma demonstrao disto pode ser observada na figura 5.12. Este modelo descreve um multiplicador que consiste de uma parte de tratamento de dados e uma seo de controle.

A parte de tratamento de dados descrita estruturalmente, usando um nmero de instncias de componentes. A seo de controle pode ser descrita comportamentalmente usando um processo que liga os sinais de controle com a parte de tratamento de dados.

entity multiplicador is port ( clk, reset, multiplicando, multiplicador: in integer; produto: out integer); end entity multiplicador; architecture prj_completo of multiplicador is signal produto_parcial, produto_final: integer; signal controle_aritmet, result_en, mult_bit, mult_load: bit; begin unid_aritmet: entity work.shift_adder(behavior) port map (somador => multiplicador, augend => produto_final, sum => produto_parcial, add_control => controle_ aritmet); resultado: entity work.reg(behavior) port map ( d => produto_parcial, q => produto_final, en => result_en, reset => reset); multiplicador_rs: entity work.shift_reg(behavior) port map ( d => multiplicador, q => mult_bit, load => mult_load, clk => clk); produto <= produto_final; secao_controle : process ... wait on clk, reset; end process secao_controle; end architecture prj_completo; Figura 5.12 - VHDL:descrio estrutural e comportamental [17][18].

6. Captulo 6 Caracterizao, Modelagem e Resultados.

Captulo 6 -

Conforme apresentado no captulo 3, o algoritmo de criptografia AES pode ser implementado tanto em hardware como em software. O grande trunfo da versatilidade de implementao deste algoritmo esta no fato de se poder subdividi-lo em partes menores e trabalhar com uma implementao modular. Assim podemos trabalhar com a otimizao de cada parte, agora denominada de bloco funcional, e realizar testes de desempenho e funcionamento individualizados.

Sem dvida, para a implementao deste algoritmo em hardware, o recurso de desmembramento do projeto em partes menores muito importante para uma otimizao ainda maior do funcionamento do mesmo, onde se pode avaliar no s o resultado funcional de cada bloco, mais tambm se pode melhorar diversas outras caractersticas de operao do projeto. Como exemplo, podemos citar como otimizaes importantes, o consumo de rea ocupada pela funo, a anlise de temporizao do dispositivo e as caractersticas com relao a implementao de determinadas operaes, utilizando-se o mximo de recurso do componente de FPGA, alm de diversos outros [12][13][14].

Outra grande vantagem deste desenvolvimento fracionado juntamente com uso de linguagem de descrio de hardware (VHDL), a capacidade que o projetista tem de testar se a implementao esta produzindo realmente o elemento lgico desejado, atravs de sntese

56 RTL. Com este recurso possvel implementar funes lgicas que utilizam recursos especficos do dispositivo de lgica programvel (FPGA), como por exemplo, reas reservadas para implementao de memrias devem ser utilizadas para se implementar memrias e reas reservadas para implementao de lgica devem-se implementar funes lgicas, entre outras. Assim, podemos tirar proveito mximo dos FPGAs e direcionar o desenvolvimento do projeto para o melhor resultado de desempenho e consumo de recursos.

No prximo item, apresentaremos a descrio e caracterizao funcional do algoritmo AES, alm de detalhes e modelagem de alguns de seus blocos funcionais que foram desenvolvidos em VHDL e implementados em um dispositivo FPGA da ALTERA .

6.1. Caracterizao Funcional


A fim de se realizar uma caracterizao funcional do algoritmo AES, realizamos como visto na figura 6.1, uma caracterizao do algoritmo em forma de fluxo de funcionamento, onde definiu-se a forma e a ordem que as funes de operao devem ocorrer para o funcionamento correto do projeto. Posteriormente ser apresentada uma discusso detalhada de cada unidade funcional do algoritmo.

Figura 6.1 - Diagrama geral de funcionamento

57

Assim os blocos bsicos de trabalho do algoritmo esto definidos, sendo estes, a unidade de expanso de chaves, e unidade de processamento propriamente dito que realiza a funo de criptografia . Tanto a unidade de processamento quanto a unidade de expanso de chaves, podem por si s serem subdivididos em subfunes menores. Isto nos auxiliar no desenvolvimento do projeto, ajuste de desempenho, alm de facilitar a compreenso de funcionamento do bloco funcional.

Antes de iniciarmos um detalhamento maior de funcionamento das funes vale aqui apresentar os parmetros utilizados neste trabalho. Ser utilizado um bloco de cifragem de 128 bits (visando desempenho no usaremos outros tamanhos de chaves), conforme definidos pela norma FIPS-197 [08], e tambm uma chave de processamento de 128 bits, devido a limitaes de recursos (pinos, elementos lgicos e memria) do dispositivo de lgica programvel (FPGA), que dispunha-se no incio deste trabalho. Assim, conforme determinado pela norma [08], o numero de rodadas de expanso de chaves e de execuo do algoritmo ser uma inicial mais dez subseqentes.

Observa-se na figura 6.2, com mais detalhes, como funciona o bloco funcional de expanso de chaves. Com isto pode-se realizar um estudo mais detalhado do seu funcionamento e desenvolver um modo de implement-lo em VHDL com rapidez, segurana e garantia de operao correta, conforme exigido e definido pelo algoritmo original [08].

Figura 6.2 - Diagrama detalhado da funo de expanso de chaves [08] [09].

58

Na figura 6.2, pode-se verificar que a funo de expanso de chaves trabalha da seguinte forma: inicialmente a chave original dada como entrada da funo e armazenada em um registrador ou memria. Aps isto, a matriz de estado da chave (w[i]) instanciada em uma varivel temp que recebe coluna por coluna a matriz de chaves e assim processa a expanso.

Esta expanso realizada de forma que, caso o ndice da coluna que esteja sendo processada no momento, seja mltiplo de quatro (no caso deste trabalho, uma chave de 128 bits), conforme definido pelo algoritmo original no captulo 3 [08], esta palavra de 32 bits sofrer a ao das funes RotWord, SubWord, XOR com Rcon e no final uma operao XOR com uma outra palavra de 32 bits cujo ndice ser quatro posies anteriores a atual. Caso no seja mltiplo, ento sofrero apenas a ao da operao XOR com outra palavra de 32 bits quatro posies anteriores.

Desta forma processamos a expanso de chaves onde, no caso deste nosso trabalho, produzir um vetor com quarenta e quatro palavras de 32 bits que quando agrupadas quatro a quatro formaro a chave de processamento de cada um das onze rodadas, sendo uma inicial com a chave original e mais dez com as chaves expandidas pela funo [08].

Agora na figura 6.3, apresenta-se a funo de processamento principal do algoritmo que tambm pode ser desmembrada em um conjunto de subfunes que podem auxiliar tambm muito no seu desenvolvimento. Como descrito anteriormente, onde o bloco de processamento principal faz uso que algumas funes do bloco funcional de expanso de chaves, como por exemplo, a funo de substituio de bytes (sub_byte), e tambm com alguns ajustes, pode-se utilizar a funo de rotao de palavras (rot_word) apresentada na expanso de chaves para se rotacionar a matriz de estados da unidade de processamento principal , implementando assim a funo ShifRow [08].

O funcionamento do processo de cifragem e decifragem funciona de forma parecida, onde inicialmente tem-se a entrada do dado em um registrador ou modulo de memria, que posteriormente ser submetido a diversas aes pelo algoritmo, com o interesse que se realizar a encriptao ou a decriptao da informao conforme necessidade do processo.

59

Na cifragem, a informao (bloco de 128 bits), passa por uma operao de substituio byte a byte da sua matriz de estados (ByteSub), e posteriormente sofre um rotao pr-definida nas linha da matriz de estado conforme o algoritmo de criptografia (ShiftRow). Aps, esta matriz alterada por uma operao de reduo polinomial (MixColumns) j definida anteriormente no capitulo 3 [08], e por fim se realiza uma operao XOR com a chave de rodada (AddRoundKey) originada da funo de expanso de chaves. Vale resaltar que na ltima interao (rodada), a operao de reduo polinomial no executada.

J no processo de decifragem, a informao (bloco de 128 bits) simplesmente realiza a operao inversa do processo de cifragem. Ou seja, inicialmente se adiciona (XOR) a matriz de estado com a chave de rodada, depois realizamos a reduo polinomial, que no deve executada na primeira rodada, e depois as funes inversas respectivas do processo de cifragem, sendo estas, realizadas na ordem inversa, como na figura 6.3. Com isto, realiza-se tanto o processo de cifragem como decifragem dentro da unidade de processamento, lembrando que antes de qualquer operao devemos definir se vamos realizar operaes de cifragem ou decifragem de dados, para posteriormente executarmos as operaes propriamente ditas [08].

Figura 6.3 - Diagrama detalhado da funo de processamento principal [08] [09].

60

6.2. Parmetros do Trabalho


Antes de apresentarmos a modelagem e os resultados importante mostrar o ambiente em que foi desenvolvido este trabalho, juntamente com os parmetros de implementao. Entre as opes de projeto, linguagem de implementao e componentes, j se pode afirmar que os resultados variam de uma opo para outra. Uma boa forma de resolver esta questo a uniformalizao de alguns parmetros, entre eles principalmente, a famlia de FPGAs utilizadas e o componente especfico que se ir trabalhar, pois assim podemos garantir que as medidas de desempenho sero realizadas sobre a mesma plataforma.

Definimos, conforme disponibilidade de recursos, qual famlia e dispositivo dever ser desenvolvido o trabalho. Sendo assim, estavam disponveis somente os componentes do fabricante ALTERA , da famlia ACEX1K, o mesmo foi utilizado nos processos de desenvolvimento e implementao do trabalho. Na tabela 6.1 apresentamos um resumo descritivo de alguns parmetros e recursos disponveis no componente (FPGA) utilizado neste trabalho. Tabela 6.1 - Recursos disponveis da famlia de FPGAs ACEX1K [19].

E quais os parmetros de desempenho devero ser monitorados para comparar e avaliar a implementao? Sem dvida, para comprovar a eficincia da implementao o principal item que se deve avaliar o tempo de propagao do sinal eltrico dentro do FPGA a partir da lgica utilizada, ou seja, o tempo crtico que se necessita para se obter o valor estvel de dado na sada a partir da entrada. Assim, tem-se que medir o tempo de propagao em cada funo e depois tentar realizar uma extrapolao matemtica terica para um sistema completo.

61 Alm do fator tempo, tambm importante medir e apresentar a quantidade de recursos consumidos no FPGA (elementos lgicos, rea e memria consumida, alm do custo de cada componente), pois assim se pode realizar uma avaliao de custo - beneficio do trabalho, projetando futuramente estes parmetros em outras famlias de FPGAs deste e de outros fabricantes.

6.3. Modelagem, Funcionamento e Resultados.


De acordo com a importncia funcional e a possibilidade de incremento de desempenho em uma futura implementao completa do algoritmo, optou-se por algumas funes para implementarmos em linguagem VHDL e testar o funcionamento e operao em um dispositivo de lgica programvel FPGA. Com esta opo, realizou-se a modelagem das funes seguindo no s a melhor forma de descrio VHDL, mas adequando sempre os cdigos as caractersticas do componente escolhido, no caso ALTERA famlia ACEX1K.

6.3.1. Funo ByteSub


A primeira funo escolhida a ser implementada, foi a de substituio de bytes (ByteSub), que realiza a troca do byte de entrada por um outro predeterminado como descrito no captulo 3 [08], que pode ser implementado com o uso de uma tabela fixa, sendo assim modelado como uma memria de valores fixos (ROM). Para a implementao desta funo, utilizou-se uma descrio VHDL [18] que cria uma memria do tipo ROM com capacidade de 256 endereos de 8 bits, consumindo assim 2048 bits de memria no componente. Como esta funo utilizada na funo de expanso da chave (normal ou inversa) e tambm tanto na cifragem como na decifragem de dados, o seu estado inverso, denominado de funo inversa de substituio de bytes (InvByteSub), tambm foi implementado da mesma forma. Assim o consumo total de clulas de memria de 4048 bits por chamada da funo.

Para esclarecer melhor o funcionamento da funo pode-se ver na figura 6.4 o cdigo VHDL desta funo onde detalhamos apenas as partes referentes a definio de arquitetura e o seu funcionamento:

62

Figura 6.4 - Arquitetura da funo ByteSub.

Como apresentado na figura 6.4, pode-se ver que na linha 30, utilizada uma arquitetura denominada rtl a partir de um uma entidade denominada byte_sub_ROM, e a seguir entre as linhas 31 e 64, declara-se os sinais de controle e constantes que sero necessrias a implementao do algoritmo. Particularmente na linha 31 definido um tipo

63 (constante), que ser utilizado depois para instanciar as clulas de memrias de 256 posies por 1 byte de largura, agora entre as linhas 32 a 63 inicializamos a memria propriamente dita e j damos carga na mesma, fazendo-a trabalhar como uma RAM pr-carregada, e na linha 64 definimos o vetor que ser usado no endereamento da memria. Aps isto, tem-se na linha 66 a inicializao de funcionamento da arquitetura, que neste caso implementa uma estrutura comportamental como j explicado no captulo 5 [17][18], assim na linha 68, converte-se o parmetro que passado para a funo (endereamento) do formato binrio para o decimal, sendo este mais adequado para se referenciar a posio de memria.

J entre as linhas 70 e 79, tem-se a definio do processo principal de funcionamento da memria. Pode-se ver que, quando se verifica uma alterao ou evento em clk que representa a porta de entrada de relgio, inicializa-se, dependendo do estado de wr_rd_en, a leitura do contedo do endereo de memria pra a porta de sada do, ou a escrita do contedo da porta de entrada di para o endereo de memria. Assim, na linha 80, finaliza-se a descrio desta funo, lembrando que, como a inteno utilizar esta funo como uma memria apenas de leitura (ROM), ento o valor da porta de entrada wr_rd_en dever estar conectado sempre em GND, permitindo assim trabalhar apenas como acesso de leitura na mesa, desprezando-se qualquer contedo em di.

Com o interesse de se esclarecer ainda mais o funcionamento da funo, podese observar na figura 6.5, como deveria ser representada de forma grfica a mesma.

Figura 6.5 - Funo ByteSub, representao grfica.

64 Assim como visto na figura 6.5, verifica-se a existncia de todos as portas e entrada/sada, necessrias para o funcionamento da funo, como os vetores a[i], di[i], do[i] e os sinais clk e wr_rd_en, que no caso de uma implementao utilizando-se de interface grfica pode ser usada como modelo.

Conforme descrio do algoritmo de criptografia [08], tem-se na figura 6.6 a sntese RTL desta funo realizada pelo software QUARTUS II

da ALTERA . Como

poder ser verificado, est sntese mostra a implementao de uma estrutura de memria sncrona com um vetor de 8 bits de endereamento e outros dois de 8 bits para a entrada de dados e leitura dos mesmos (aplicao da funo). A descrio ser implementada apenas com a funo de leitura, obrigando o funcionamento da funo como uma ROM.

Figura 6.6 - Descrio RTL da funo ByteSub e InvByteSub.

Agora so apresentados e discutidos os resultados obtidos por simulao da funo no software de desenvolvimento. Na figura 6.7, observa-se o grfico de forma de onda que representa os resultados de simulao obtidos pelo software QUARTUS II .

Figura 6.7 - Funo ByteSub, grfico de forma de onda.

65

Figura 6.8 - Funo ByteSub, grfico de forma de onda (detalhes).

J na figura 6.8, pode-se ver em detalhes o resultado da funo, onde se aplicou um sinal de relgio com ciclos de 15ns, iniciando-se no instante 15ns, e tambm com o vetor de endereamento a, sendo incrementado de uma unidade a partir de 15ns com um ciclo de tambm 15ns. Conforme visto o resultado desta simulao, com a porta wr_rd_en em 0, apresenta corretamente o esperado pela funo, uma vez que os valores colhidos na porta de sada do correspondem exatamente ao esperado pela descrio do algoritmo de criptografia [08]. Pode-se ver tambm uma marca aos 22,5ns e outra 13ns aps, demonstrando o tempo de atraso mximo da funo.

O resultado completo pode ser visto na figura 6.9 abaixo, onde demonstrado os parmetros de desempenho obtidos por esta implementao.

Figura 6.9 - Funo ByteSub, resultados da implementao

Como apresentado acima, pode ser observdo que a avaliao de recursos consumidos pela implementao no dispositivo de lgica programvel (FPGA), apresentou apenas o consumo de 2048 bits de espao de memria e o uso de 26 pinos de entrada e sada, no utilizando nenhum elemento lgico, funes combinacionais ou mesmo registradores.

66 J no desempenho de analise de tempo de propagao, pode-se verificar na mesma figura 6.9 que o sumrio de anlise apresenta os valores de temporizao de pior caso variando entre 0.3ns a 13ns. Vimos que: o tempo mnimo que o endereo (porta a) da memria deve estar disponvel na entrada (tSU) deve ser de 11,5ns; o tempo mximo que a funo demora para retornar o dado vlido (tCO) na sada de 13ns; o tempo mnimo que o dado (porta a) deve estar disponvel na entrada depois de um evento de relgio (tH) para que a funo consiga processar a informao de 0,3ns; a freqncia de relgio mxima que pode ser aplicada sem violar a organizao interna (tSU) e manter exigncias de tempo (tH) para esta implementao 149,25Mhz.

O mesmo processo foi aplicado para a funo InvByteSub, obtendo os mesmos resultados, lembrando que o contedo de carga da memria ROM diferente e implementa o que esta definido na descrio do algoritmo no captulo 3 [08], conforme a figura 3.13.

O cdigo VHDL completo desta funo, alm dos pacotes de funes e bibliotecas complementares, necessrios para o funcionamento da mesma, est disponvel para anlise no apndice A deste trabalho.

6.3.2. Funo Rcon


Como a funo anterior (ByteSub) modelava uma memria, aproveitamos os mesmos arranjos para modelarmos a funo de constante de rodada (Rcon), necessria para o uso no bloco funcional de expanso de chaves. Esta funo implementa uma constante que deve ser usada numa operao OU exclusivo (XOR) durante a gerao das chaves de rodada. Como cada rodada utiliza uma constante diferente para a operao lgica, o meio mais simples de modelagem desta funo o instanciamento de uma unidade de memria capaz de armazenar as constantes para cada rodada e identific-las (endere-las) para o correto uso em sua rodada predeterminada.

Segunda a especificao feita pelo algoritmo de criptografia, estas constantes Rcon devem ser implementadas de acordo com o numero de rodadas exigidas pelo bloco de expanso de chaves. Pode-se ter 10, 12 ou 14 constantes de acordo com o nmero de rodadas necessrias para a expanso da chave, uma vez que as chaves podem ter o tamanho de 128,

67 192 e 256 bits. Lembrando que, como j informado anteriormente, na nossa implementao optamos pela chave com tamanho fixo de 128 bits, como meio de simplificar o processo, sendo assim necessria apenas a expanso e armazenamento de 10 constantes fixas de rodada.

Como na implementao de ByteSub, a funo Rcon tambm necessita do instanciamento de uma memria para implementa-la de uma forma mais coerente e rpida, alm de tambm utilizar as clulas de memrias j disponveis, para este tipo de implementao no FPGA. Assim, na modelagem desta funo foi utilizado um elemento de memria com a capacidade de 10 endereos de 8 bits, consumindo assim 80 bits de memria. Lembrando que como necessria a mesma quantidade de memria para as constantes de rodada do processo inverso de expanso de chaves, tem-se que o consumo total de memria destas funes ser de 160 bits.

Na figura 6.10 temos o cdigo VHDL desta funo, aonde observa-se apenas as partes referentes a definio de arquitetura e o seu funcionamento.

Figura 6.10 - Arquitetura da funo Rcon.

Na figura 6.10, observa-se que na linha 31 instancianda uma arquitetura denominada rtl a partir de um uma entidade denominada r_con_ROM, e a seguir entre as linhas 32 e 35, declarando as constantes e os sinais de controle utilizados na implementao. Na linha 32, definiu-se um tipo, que ser utilizado depois para instanciar as clulas de memrias de 10 posies por 1 byte de largura, j nas linhas 33 e 34 foi inicializado a memria e j damos carga na mesma, fazendo-a trabalhar como uma RAM pr-carregada, e na

68 linha 35 tem-se o vetor que ser usado no endereamento. Aps isto tem-se na linha 37 a inicializao da arquitetura, que neste caso implementa uma estrutura comportamental como visto na funo ByteSub, com isto, na linha 38 foi convertido o parmetro a que passado para a funo (endereamento) do formato binrio para o decimal, sendo assim mais adequado para se referenciar as posies da memria.

Entre as linhas 39 a 48, tem-se a definio do processo principal da memria. V-se que, quando ocorre uma subida de nvel lgico em clk, que a porta de entrada de relgio, inicializa-se a leitura do contedo do endereo de memria pra a porta de sada do, dependendo do estado de wr_rd_en, ou a escrita do contedo da porta de entrada di para o endereo de memria. Na linha 49 finalizamos a descrio da funo. Vale lembrar que, como a inteno utilizar a funo como uma memria apenas de leitura (ROM), ento a porta de entrada wr_rd_en ser conectada sempre em GND, trabalhando assim apenas como acesso de leitura na mesa, como na implementao anterior ByteSub.

Na figura 6.11, com a inteno de se esclarecer ainda mais o funcionamento e o instanciamento, observa-se como deveria ser representada da funo lgica de forma grfica.

Figura 6.11 - Funo Rcon, representao grfica.

Pode-se verificar na figura 6.11, a existncia dos sinais clk e wr_rd_en e todas as portas e entrada/sada, necessrias para o funcionamento da funo, como os vetores a[i], di[i], do[i], que em uma implementao usando interface grfica pode ser usada como modelo da mesma forma como apresentado na funo anterior ByteSub, guardando as respectivas diferenas com relao ao sinal de endereamento, que nesta caso.agora, enderea apenas 10

69 posies de memria.

apresentado na figura 6.12, a sntese RTL desta funo, realizada pelo software QUARTUS II

da ALTERA . Pode-se ver que, de acordo com o cdigo VHDL,

realmente implementa-se a estrutura de uma memria sncrona com um vetor de quatro bits de endereamento (programando apenas dez posies), e outros dois outros de oito bits, sendo um para a entrada e outro para leitura de dados. Lembrando que a carga da funo ser desabilitada para o correto funcionamento do sistema como uma ROM.

Figura 6.12 - Descrio RTL da funo Rcon.

Apresenta-se agora os resultados obtidos por simulao da funo no software de desenvolvimento. A figura 6.13, ilustra o grfico de forma de onda que apresenta os resultados de simulao obtidos pelo software QUARTUS II .

Figura 6.13 - Funo Rcon, grfico de forma de onda.

70

Figura 6.14 - Funo Rcon, grfico de forma de onda (detalhes).

Na figura 6.14, apresenta-se o resultado da simulao da funo, aplicou-se um estmulo de relgio com ciclos de 15ns como na simulao anterior ByteSub, iniciando no tempo de 15ns, com o vetor de endereo a, incrementado de um a partir de 15ns a cada ciclo de 15ns. Visto isto, o resultado desta simulao apresenta o esperado pela funo, com a porta wr_rd_en em 0, uma vez que os valores na porta do correspondem de forma correta ao esperado conforme a descrio do algoritmo de criptografia [08]. Verifica-se tambm uma marca aos 97,5ns e outra 14ns aps, mostrando o tempo de atraso mximo da funo. Abaixo na figura 6.15, apresentamos os parmetros de desempenho obtidos por esta implementao no software de desenvolvimento QUARTUS II da ALTERA .

Figura 6.15 - Funo Rcon, resultados da implementao

Acima na figura 6.15, observa-se que os recursos consumidos pela implementao apresentaram apenas o consumo de 80 bits de espao de memria e o uso de 22 pinos de entrada e sada no dispositivo de lgica programvel (FPGA), no utilizando nenhum elemento lgico, funes combinacionais ou mesmo registradores. O desempenho de analise de tempo de propagao, tambm pode ser verificado na figura 6.15 onde tem-se o sumrio de anlise dos valores de temporizao de pior caso,

71 variando entre 0.3ns a 14ns. Tem-se que: o tempo mnimo que o endereo da memria (porta a) deve estar disponvel na entrada (tSU) deve ser de 8,1ns; o tempo mximo que a funo demora para retornar o dado vlido (tCO) na sada de 14ns; o tempo mnimo que o dado (porta a) deve estar disponvel na entrada depois de um evento de relgio (tH) para que a funo consiga processar a informao de 0,3ns; a freqncia mxima a ser aplicada sem violar a organizao (tSU) e manter exigncias (tH) para esta implementao 149,25Mhz. O mesmo processo foi aplicado para a funo InvRcon, obtendo os mesmos resultados. O contedo de carga da memria ROM diferente da Rcon para a InvRcon e implementa o que esta definido na descrio do algoritmo no captulo 3 [08]. O cdigo VHDL completo desta funo, alm dos pacotes de funes e bibliotecas complementares, necessrios para o funcionamento da mesma, est disponvel no apndice A deste trabalho.

6.3.3. Funo RotWord


A forma mais adequada de modelagem desta funo com certeza a criao de registradores de 32 bits que devem ser utilizados como entrada, e aps a chamada da funo lgica, esta realiza o deslocamento cclico de um byte neste registrador conforme o que se encontra definido pelo algoritmo no capitulo 3 [08], retornando assim o dado correto.

Figura 6.16 - Arquitetura da funo RotWord.

Na figura 6.16 apresenta-se o cdigo parcial em VHDL desta funo, onde pode-se ver a declarao de arquitetura e a descrio comportamental de funcionamento da

72 funo. Na linha 30, tem-se instanciado a arquitetura denominada texte a partir de um uma entidade denominada rot_word. A seguir na linha 31, tem-se a inicializao da arquitetura, que implementa uma estrutura comportamental de um registrador de 32 bits, como ser visto no resultado de sntese RTL. Na linha 33 e 34 inicializa-se o processo da funo e entre as linhas 35 e 46, executa-se a funo propriamente dita, onde um lao IF, controlado pelo valor do pino reset e pelos eventos de relgio (clock), determina se o contedo da palavra de 32 bits na porta de entrada in_data ser enviado para a porta de sada out_data de forma rotacionada, ou se a sada receber o nvel lgico 0, conforme o estado do pino reset.

Agora tem-se que, a melhor descrio funcional desta operao de rotao a que se encontra detalhada na figura 6.17, onde pode ser observado a descrio RTL desta funo aps a sntese no software de desenvolvimento. Lembrando que, como esta funo no utiliza recursos de armazenamento de memria, agora utilizaremos elementos lgicos para sua implementao, conforme ser visto nos resultados de desempenho.

Figura 6.17 - Descrio RTL da funo RotWord.

J que agora esta funo comea a trabalhar com o uso de lgica combinacional, importante salientar que as funes apresentadas at este momento, buscam trabalhar com a implementao VHDL de forma comportamental, e no momento da implementao dos blocos principais, esta ser realizada de forma estrutural.

73

Figura 6.18 - Funo RotWord, representao grfica.

74 Na figura 6.18, com a inteno de se esclarecer ainda mais o funcionamento e o instanciamento da funo lgica, pode-se observar como deve ser representada de forma grfica esta funo. Pode-se visualizar os sinais reset e clk e todas as portas e entrada/sada, necessrias para o funcionamento da funo, como os vetores in_data[i][i] e out_data[i][i], que, em uma implementao usando projeto grfico, pode ser usada como modelo.

Com visto, temos a apresentao e instanciamento de cada bit do registrador de entrada em uma clula lgica, como um armazenamento temporrio, sem utilizar modelagem de memria. Sendo assim, aps o inicio do processo, o contedo destas clulas enviado de forma sncrona para a sada realizando uma rotao nos bits.

Sero apresentados os resultados obtidos no software de desenvolvimento, da simulao da funo. Na figura 6.19, observa-se o grfico de forma de onda que representa os resultados de simulao do software QUARTUS II .

Figura 6.19 - Funo RotWord, grfico de forma de onda.

Pode-se observar na figura 6.20, que o correto funcionamento da implementao, corresponde ao esperado no algoritmo de criptografia [08]. possvel ver que quando se aplica um determinado valor na entrada (in_data) e aps um determinado tempo (10,2ns) depois do evento de relgio, a sada (out_data) assume o resultado esperado, rotacionando de um byte o dado de entrada composto por uma word de 32 bits. Como exemplo basta observar o primeiro dado de entrada, A3FA6E89, que aps o evento de relgio transformado (rotacionado) para 89A3FA6E.

75

Figura 6.20 - Funo RotWord, grfico de forma de onda (detalhes).

Como visto na figura 6.20 podemos ver em detalhes o resultado da simulao da funo, na qual foi aplicado um sinal de relgio com ciclos de 15ns, iniciando-se no instante 15ns, e que aps o sinal reset mudar do nvel lgico 1 para 0, se deu inicio a execuo da funo. Durante o processo de execuo, quando se aplica um evento de relgio, o contedo da porta de entrada onde se encontra o vetor in_data que foi instanciado com valores aleatrios a cada 15ns, envidado para a porta de sada no vetor out_data com o valor modificado (rotacionado) conforme o resultado da simulao apresentada, correspondendo assim exatamente ao esperado pela descrio do algoritmo de criptografia [08]. Pode-se ver tambm uma marca aos 22,5ns e outra 10,2ns aps, demonstrando o tempo de atraso mximo da funo.

Na figura 6.21 pode ser o resultado completo, onde so apresentados os parmetros de desempenho desta implementao.

Figura 6.21 - Funo RotWord, resultados da implementao

76 Como apresentado na figura 6.21, viu-se que a avaliao de recursos consumidos pela implementao no dispositivo de lgica programvel (FPGA), no apresentou consumo de espao sintetizado como memria, porm usou 66 pinos de entrada e sada, 32 elementos lgicos e 32 registradores, no necessitando de funes combinacionais de nenhum tipo.

Agora no desempenho de analise de tempo de propagao, pode-se verificar na mesma figura 6.21, que o sumrio apresenta os valores de temporizao de pior caso variando entre -0,6ns a 10,2ns. Tem-se que: o tempo mnimo que o dado, in_data deve ficar disponvel na entrada (tSU) deve ser de 5,0ns; o tempo mximo que a funo demora para retornar o dado vlido (tCO) na sada de 10,2ns; o tempo mnimo que o dado in_data deve estar disponvel na entrada depois de um evento de relgio (tH) para que a funo consiga processar a informao de -0,6ns.

Neste caso em particular temos o tempo negativo (tH) que pode ser explicado da seguinte forma: como o tempo que o dado tem que estar disponvel na sada negativo, significa que antes do dado ser passado para o prximo registrador, ele j foi transferido da entrada D do flip-flop posterior para a sua respectiva sada Q, no necessitando esperar tempo algum para que a funo seja executada corretamente. Este fato pode ocorrer devido a atrasos na temporizao de clock das funes, uma vez que o atraso causado (clock skew) pode induzir a propagao do sinal de forma errada. Deve-se saber que se a entrada de sinal de clock ocorrer do ultimo registrador para o primeiro, ento o atraso no clock pode ser uma vantagem no tempo de propagao do sinal, auxiliando muito os tempos de espera (tH). Como esta implementao no utilizada de sincronismo de dados de endereamento, leitura e escrita como as memrias, no temos apresentao de dados de freqncia de operao. O cdigo VHDL completo est disponvel para anlise no apndice A deste trabalho.

7. Captulo 7 Concluses e Trabalhos Futuros

Captulo 7 -

Nesta dissertao vimos uma implementao parcial de blocos funcionais do algoritmo de criptografia AES (Rijndael) em um dispositivo de lgica programvel (FPGA) do fabricante Altera utilizando linguagem de descrio de hardware VHDL. Com isto e aps a apresentao dos resultados obtidos, poderemos agora realizar algumas ponderaes.

Inicialmente,

aps

apresentarmos

os

resultados

de

desempenho

da

implementao e os valores de temporizao como visto no capitulo 6, vamos realizar uma extrapolao matemtica e assim conseguir parmetros tericos de uma implementao geral da expanso de chaves, no avaliando os mdulos de cifragem ou decifragem. Conforme visto no captulo 3, o bloco funcional de expanso de chaves utiliza algumas sub-funes, entre elas a byte_sub, a r_con e a rot_word, assim com os valores de temporizao apresentados, poderemos realizar uma aproximao para avaliar o tempo total desta implementao.

7.1. Concluses de Desempenho


Apresentaremos agora uma avaliao do desempenho de temporizao das funes, analisando os valores apresentados no captulo anterior.

78

Conforme visto e discutido no captulo 6 nos resultados de sntese e temporizao da funo byte_sub, necessitamos de um tempo mnimo de 11,5ns de espera para que o valor de entrada esteja estvel (tSU) e 13,0ns para que o dado esteja disponvel na sada da funo (tCO), sendo que este valor se refere ao tempo mnimo necessrio para se processar apenas a entrada de um byte. Assim, sabemos que o tempo de espera para que o dado esteja estabilizado na entrada pode ser sobreposto ao tempo de processamento e teremos no momento inicial o valor de 11,5 + 13 = 24,5ns para execuo da funo e a partir da segunda entrada e nos demais teremos apenas 13ns.

J para a funo r_con, temos o tempo de 14ns para que o dada esteja estvel na sada (tCO) e 8,1ns de espera para que o dado fique estvel na entrada para processamento (tSU). Realizando a mesma aproximao da funo byte_sub, teremos para efeito de calculo, com uma sobreposio do tempo de processamento sobre o tempo de disponibilidade do dado no momento inicial o valor de 8,1 + 14 = 22,1ns, e da mesma forma sero necessrios para as demais entradas apenas 14ns para a correta resposta da funo.

Agora para a funo rot_word, temos o tempo mnimo na entrada de 10,2ns (tCO) e mais 5ns para estabilidade do dado de entrada (tSU), porm de nada vale um tempo menor se teremos que implementar a funo pelo tempo crtico da funo de pior desempenho. Porm da mesma forma teramos um tempo sobreposto de 10,2 + 5 = 15,2ns necessrio para o momento inicial e apenas 5ns nos demais consecutivos. Lembrando que agora esta funo processa entradas com tamanho de 32 bits e no mais 8 bits como nas funes byte_sub e r_con.

Para efeito de extrapolao matemtica conclumos que um ciclo de clock de 15ns ser o suficiente para o correto funcionamento das funes, uma vez que este valor e superior ao pior caso das funes e assim ser utilizado na nossa extrapolao.

Conforme o pseudocdigo da funo de expanso de chaves apresentada e discutido no captulo 3 (figura 3.10), onde podemos entender o fluxo do processo e a quantidade de chamadas das funes, possvel verificar quantas vezes cada uma necessria para processar a expanso e fornecer as sub-chaves de criptografia para a entrada na unidade de processamento. Assim conforme o visto na figura 3.10 teremos os seguintes resultados:

79

Temos que a funo byte_sub chamada 10 vezes no processo de expanso de chaves (apenas quando o ndice do vetor de trabalho w[i] mltiplo de quatro) e trabalha com um vetor de quatro bytes, apesar de processar apenas um byte por vez, poderemos instanci-la lado a lado quatro vezes. Desta forma temos o seguinte tempo gasto: 10*15ns, que resultar em um tempo total estimado de 0,15us para o processamento das chaves de criptografia.

J para a funo r_con, que tambm instanciada 10 vezes, temos que para o processamento das constantes de rodada: 10*15ns, com 0,15us para processamento desta funo. Porm lembrando que esta funo deve ser executada de forma paralela com a funo anterior byte_sub, no necessitamos contabiliz-la novamente para um calculo final de desempenho.

Agora para a funo rot_word, temos que, como a funo chamada dez vezes tambm durante a expanso de chaves teremos: 10*15ns, com 0,15us de tempo consumido. Agora, neste caso em particular, conforme visto no algoritmo de expanso, esta funo dever ser executada antes das funes de byte_sub, assim contabilizando o seu tempo gasto para o tempo total gasto.

Para finalizar o estudo de tempo consumido para se realizar a funo de expanso de chaves, necessitamos conhecer ainda o tempo necessrio para se realizar a operao ou exclusivo (XOR) usada neste bloco funcional. Sendo assim, realizamos um teste individual com a chamada da funo XOR, entre duas words de 32 bits, e obtivemos valores de temporizao inferiores aos tempos crticos necessrios das funes, sendo assim utilizamos o valor de 15ns como tempo crtico para esta operao tambm, padronizando assim mais uma vez a nossa extrapolao matemtica.

Como dentro da funo de expanso de chaves necessitaremos fazer a operao XOR uma vez inicial depois mais dez vezes entre o retorno das funes r_con e a temp, mais quarenta e quatro vezes da temp com a w[i-Nk], ento termos 55 chamadas desta funo, totalizando: 55*15ns, igual a 0,825us. Desta forma, como na figura 7.1 a seguir apresentamos uma descrio grfica estrutural de como seria realizada a chamada da funo no momento em que o ndice do vetor de processamento w[i], fosse mltiplo de quatro. [08].

80

Figura 7.1 - Representao grfica, funo principal de expanso de chaves.

A seguir na tabela 7.1 apresentamos um resumo da extrapolao dos clculos para uma idia terica do tempo necessrio usado na funo de expanso de chaves.

Tabela 7.1 - Resultados de desempenho expanso de chaves. Funo byte_sub r_con rot_word xor Nmero de Chamadas 10 10 10 55 Tempo Critico 15 15 15 15 TOTAL Total 0,15us 0,15us 0,15us 0,825us 1,425us Total acumulado ------0,15us 0,30us 0,825us 1,125us

81

Considerando que para a chamada da funo de expanso de chaves, os dados de entrada (chave com 128 bits) j devem estar disponveis nos registradores de entrada (assim no computado como tempo gasto), teremos o seguinte desempenho (apenas processamento de funes): Throughput = 128 / 1,125 108,5 Mb/s Esta mesma extrapolao matemtica pode ser realiza para a unidade de processamento, porm como no implementamos todas as funes para a implementao deste bloco funcional (ShifTransf e MixColumns), na ser possvel dimensionar o desempenho terico.

Por fim, como concluso deste trabalho, apresentamos a seguir na figura 7.2, um esquemtico completo da implementao, demonstrando os blocos funcionais do algoritmo que foram efetivamente desenvolvidos neste trabalho, e os que faltam ser implementados para uma completa implementao do sistema. Lembrando que importante possuir em mos uma plataforma de desenvolvimento mais completa, como por exemplo, um FPGA com maior nmero de pinos de I/O para que seja possvel implementar a carga dos dados de entrada (informao e chave) de uma s vez de forma paralela.

Figura 7.2 - Desenvolvimento do trabalho.

82

7.2. Sugestes e Trabalhos Futuros


Como a implementao deste trabalho no levou em considerao o maior uso de processamento paralelo, alm de tcnicas de pipelined, uma alternativa para outras implementaes seria a utilizao destas tcnicas. Desta forma, podero ser atingidas velocidades ainda maiores na implementao do algoritmo, alm de otimizar os recursos lgicos no FPGA e tambm a migrao para famlias de dispositivos mais novos e rpidos, e que possuem mais recursos, pois desta forma conseguiramos atingir parmetros de desempenho suficientemente rpidos para utilizao deste projeto em sistemas de comunicao de alta desempenho.

No poderamos deixar de mencionar melhorias que poderiam ser implementadas no algoritmo de criptografia, assim sugerimos algumas modificaes na forma com que se trata o processamento das chaves de criptografia. Conforme apresentado neste trabalho, a expanso de chaves deve ser realizada primeiro, para depois ser utilizada a subchave na respectiva rodada de criptografia, assim seria conveniente a criao de uma funo de expanso de chaves que se tornasse independente de passos anteriores. Conforme visto neste trabalho [08], com todos os recursos de processamento paralelo e pipelided, a matemtica atual do algoritmo no permite que se realize o processamento da sub-chave com a matriz de estado (byte a byte), uma vez que a gerao desta sub-chave de rodada no esteja completamente pronta.

Como a gerao de cada palavra de 32 bits que forma uma nova coluna na matriz de sub-chaves, depende de outra palavra quatro posies anteriores no vetor de expanso de chaves, no permitido apagar ou perder este dado (palavra 32 bits) antes que este seja utilizado na expanso de sub-chaves seguintes e por conseqncia utiliz-lo imediatamente no processo de criptografia. Assim, no possvel realizar a produo byte a byte da chave e a sua utilizao direta na matriz de estado sendo, no mnimo, necessria a produo de uma palavra de 32 bits antes de utiliz-la no processamento principal.

A pretenso a partir de agora a busca por um trabalho complementar, onde poderemos identificar outras necessidades de mercado e trabalh-las em uma futura tese de doutorado. Sendo assim, acreditamos que a o aperfeioamento das tcnicas de implementao

83 deste algoritmo em linguagem de descrio de hardware (VHDL), e o maior conhecimento sobre os dispositivos de lgica programvel (FPGAs), nos serviro de base para o prximo passo. Alm da procura por outros algoritmos de criptografia e anlise de suas caractersticas mais detalhadas, poderemos citar como futuras pretenses, a criao e desenvolvimento de um novo cripto-processador.

Acredita-se que a nova tendncia de solues de segurana seja a implementao em hardware de sistemas de criptografia, e temos que trabalhar ainda mais para desenvolver esta tecnologia, com a inteno de abastecer a demanda por solues baratas, de alto desempenho e com satisfatrio nvel de segurana que viro.

84

8. Referncias Bibliogrficas

[01]

TERADA, Routo. Segurana de Dados: Criptografia em Redes de

Computador. Edgard Blucher, 2000. TKOTZ, V.: Criptografia Numaboa. Acesso em Dez 2007, disponvel em:

[02]

http://www.numaboa.com/content/section/11/57. MORENO E. D.; PEREIRA F. D.; CHIARAMONTE R. B.; Criptografia em

[03]

Software e hardware. Novatec. 2005. IBM Corporation, MARS a candidate cipher for AES. 1999. RIVEST R. L.; ROBSHAW M. J. B.; SIDNEY R.; YIN Y. L. The RC6

[04]

[05]

Block Cipher. RSA Laboratories, 1998. ANDERSON, R.; BIHAM, E.; KNUDSEN, L. Serpent: A Proposal for the

[06]

Advanced Encryption Standard. 1999.

[07]

SCHNEIER, B.; KELSEY, J.; WHITING, D.; WAGNER, D.; HALL, C.;

FERGUSON, N.. Twofish: A 128-Bit Block Cipher. 1998.

85

[08]

NIST Advanced Encryption Standard (AES). Pgina oficial do AES. 2001,

disponvel em: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf. DAEMEM, J.; RIJMEN, V. AES Proposal: Rijndael. 1999. MOREIRA, J. C.; FARRELL P. G., Essentials of Error-Control Coding.

[09]

[10]

John Wiley & Sons, Ltd. 2006 MORELOS-ZARAGOZA R. H., The Art of Error Correcting Coding. John

[11]

Wiley & Sons, Ltd. 2006 WAIN R.; BUSH I.; GUEST M.; DEEGAN M.; KOZIN I.; KITCHEN C.; An

[12]

overview of FPGAs and FPGA programming. 2006 BROWN S.; ROSE J.; Architecture of FPGAs and CPLDs: A Tutorial.

[13]

University of Toronto. 1996 HEINKEL U.; VHDL Tutorial. Universitt Erlangen-Nrnberg.

[14]

2000

disponvel em: http://www.vhdl-online.de/~vhdl CHU, PONG P., RTL Hardware Design Using VHDL. Wiley-Interscience.

[15] 2006

[16]

PEDRONI, V. A., Circuit design with VHDL. MIT Press. 2004 LIPSETT, R.; SCHAEFER C. F.; USSERY C., VHDL: Hardware Description

[17]

and Design. Kluwer Academic Publishers. Ninth Printing 1992 RUSHTON, A., VHDL for Logic Synthesis. McGraw-Hill Book Company.

[18] 1995.

[19]

ALTERA CORPORATION., ACEX 1K Programmable Logic Device Family

(Data Sheet). ALTERA Corporation. Maio 2003, verso 3.4.

Apndice A Cdigos VHDL da Implementao

Apndice A -

A seguir sero apresentados os cdigos VHDL da implementao deste trabalho, juntamente com as respectivas identificaes dos blocos funcionais. Em todos os cdigos possvel identificar os parmetros de comentrios do programa que visa aumentar a documentao e compreenso dos mesmos.

87

88

89

90

91

92

93

94

You might also like