construção de um hardware criptográ co do …almeida, ariane alves construção de um hardware...

63

Upload: others

Post on 10-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDADE FEDERAL DE GOIÁS � UFG

CAMPUS CATALÃO � CaC

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO � DCC

Bacharelado em Ciência da Computação

Projeto Final de Curso

Construção de um Hardware Criptográ�co doAlgoritmo DES com a Linguagem VHDL em um

Circuito FPGA

Autor: Ariane Alves Almeida

Orientador: Vaston Gonçalves da Costa

Catalão - 2012

Ariane Alves Almeida

Construção de um Hardware Criptográ�co do Algoritmo DES com a

Linguagem VHDL em um Circuito FPGA

Monogra�a apresentada ao Curso de

Bacharelado em Ciência da Computação da

Universidade Federal de Goiás � Campus Catalão

como requisito parcial para obtenção do título de

Bacharel em Ciência da Computação

Área de Concentração: Sistemas de Computação

Orientador: Vaston Gonçalves da Costa

Catalão - 2012

Almeida, Ariane Alves

Construção de um Hardware Criptográ�co do Algoritmo DES com a Lin-

guagem VHDL em um Circuito FPGA/Ariane Alves Almeida- Catalão -

2012

Número de paginas: 61

Projeto Final de Curso (Bacharelado) Universidade Federal de Goiás, Campus

Catalão, Curso de Bacharelado em Ciência da Computação, 2012.

Palavras-Chave: 1. Circuitos reprogramáveis. 2. Criptogra�a. 3. Linguagem de

descrição de hardware

Ariane Alves Almeida

Construção de um Hardware Criptográ�co do Algoritmo DES com a

Linguagem VHDL em um Circuito FPGA

Monogra�a apresentada e aprovada em de

Pela Banca Examinadora constituída pelos professores.

Vaston Gonçalves da Costa � Presidente da Banca

Roberto Mendes Finzi Neto

Mônica Sakuray Pais

Dedico este trabalho a todos que de alguma forma contribuíram para a concretização do

mesmo. Em especial aos meus pais, que tanto me incentivaram e apoiaram.

AGRADECIMENTOS

Quero agradecer primeiramente a Deus, por ter me dado forças para aqui estar, pois

sem fé e esperança é impossível concretizar qualquer coisa que seja.

Segundo, um muito obrigada para minha família, especialmente meus pais, Tânia

e Evaldo, que mesmo se privando da minha presença para que eu pudesse estudar em

outra cidade, sempre me deram o apoio, força e coragem necessários, principalmente nos

momentos mais difíceis, para a conclusão desse trabalho.

Também �ca registrada minha gratidão ao meu marido, José Rafael, que sempre foi

paciente e compreensivo comigo e nunca me deixou desamparada quando as di�culdades

do caminho me abalaram.

Não poderia deixar de agradecer também a todos os professores e professoras que já

lecionaram para mim, desde aqueles do Ensino Fundamental àqueles com quem convivi

nos últimos quatro anos aqui na Graduação, e que de uma forma ou outra deram sua con-

tribuição para a concretização de uma incrível jornada. Em especial, a Professora Mônica,

que participa da banca de avaliação deste trabalho e in�uenciou a escolha deste curso de

graduação quando da minha realização do curso Técnico em Sistemas de Informação no

Centro Federal de Educação Tecnológica de Urutaí, hoje com nome de Instituto Federal

Goiano - Campus Urutaí.

Aqui também �ca um agradecimento especial ao meu orientador, Prof. Vaston, que

me apresentou o tema de que trata este trabalho e na medida do possível me deu sua

assistência para a conclusão deste. E também ao Prof. Roberto, que forneceu o material

necessário para a concretização deste projeto.

E por último, mas não menos importante, gostaria também de deixar meu muito

obrigada a todos os meus colegas e amigos que percorreram esse caminho comigo, aqueles

com quem compartilhei aulas, trabalhos, noites sem dormir para fazer algum trabalho

ou estudar para provas, alegrias e descontrações nos momentos de descanso, ou apenas

a companhia que alivia a saudade da família e nos faz sentir queridos. A todos esses

que me auxiliaram de alguma maneira, �ca minha gratidão. Entre esses, sem desmérito

dos demais que aqui se encaixam, cito em especial a amiga Amanda, que participou de

todo o processo de confecção desta monogra�a e auxiliou de diversas formas, e o amigo

Elias, que mesmo não estando mais na mesma universidade, me ajudou e direcionou nesse

trabalho de forma que não seria possível ter alcançado os resultados aqui obtidos sem sua

colaboração.

�O sucesso nasce do querer, da determinação e persistência em se chegar a

um objetivo. Mesmo não atingindo o alvo, quem busca e vence obstáculos, no

mínimo fará coisas admiráveis.� (José de Alencar)

RESUMO

Com os avanços na área de segurança da informação, diversas técnicas têm sido desen-

volvidas e/ou aprimoradas para garantir que apenas agentes autorizados tenham acesso às

informações. Dentre estas técnicas se destaca a criptogra�a, que pode ser implementada

tanto em software quanto em hardware. Este trabalho aborda a utilização de circui-

tos reprogramáveis para a implementação de sistemas criptográ�cos embarcados com a

utilização de linguagens de descrição de hardwares, pois tais linguagens e equipamentos

permitem ao projetista certa facilidade e �exibilidade na construção de seu projeto. É

apresentado o algoritmo criptográ�co a ser utilizado na construção do sistema proposto,

bem como os passos percorridos para isso. Através da análise dos resultados obtidos, é

possível veri�car o correto funcionamento do projeto proposto e também as melhorias

desse em relação a outra codi�cação proposta na literatura, alcançando um ganho signi�-

cativo no uso de componentes internos do sistema. Conclui-se então o texto apresentando

os resultados alcançados e as di�culdades encontradas, bem como as pesquisas que podem

vir a desenrolar a partir deste trabalho inicial no campo da criptogra�a e dos sistemas

embarcados.

Palavras-Chaves: Circuitos reprogramáveis, Criptogra�a, Linguagem de descrição

de hardware

ABSTRACT

With advances in information security, several techniques have been developed and/or

enhanced to ensure that only authorized agents have access to information. Among these,

stands out the encryption techniques that can be implemented in both software and hard-

ware. This work discusses the use of reprogrammable circuits for implementing embedded

cryptographic systems by using hardware description languages, since these languages and

equipments allow the designer relative ease and �exibility in building his project. It is

presented the cryptographic algorithm used in the construction of the proposed system,

as well as the steps traversed to it. By analyzing the results, it is possible to verify the

correct operation of the proposed project and also that the improvements over other en-

coding proposed in the literature, reaching a signi�cant gain in the use of internal system

components. This work is then concluded by presenting the results achieved and di�-

culties encountered, and also the researchs that may unfold from this initial work in the

cryptography and embedded systems �elds.

Keywords: Reprogrammable Circuits, Cryptography, Hardware Description Lan-

guage

Sumário

1 Introdução 14

2 Revisão Bibliográ�ca 15

2.1 Segurança da informação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.2 Criptogra�a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.2.1 Histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.2.2 Classi�cação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.3 Circuitos Reprogramáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.3.1 FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.4 Linguagem de Descrição de Hardware . . . . . . . . . . . . . . . . . . . . . 21

2.4.1 VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.5 Criptogra�a em Software X Criptogra�a em Hardware . . . . . . . . . . . 24

2.6 Trabalhos Correlatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3 O Algoritmo DES 27

3.1 O Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.2 Módulo Gerador de Chaves . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.3 Processamento Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4 O DES em VHDL 36

4.1 Estrutura do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

4.2 Arquivos Auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.3 Comparativo de implementações . . . . . . . . . . . . . . . . . . . . . . . . 40

5 Construção do Hardware Criptográ�co 44

5.1 Materiais e Programas Utilizados . . . . . . . . . . . . . . . . . . . . . . . 44

5.1.1 A Placa Utilizada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

5.1.2 O Programa Quartus II . . . . . . . . . . . . . . . . . . . . . . . . 46

5.1.3 O Programa ModelSim . . . . . . . . . . . . . . . . . . . . . . . . . 47

5.2 Compilação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

5.2.1 Análise do Resultado da Compilação . . . . . . . . . . . . . . . . . 49

5.3 Simulação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.3.1 Análise dos Resultados da Simulação . . . . . . . . . . . . . . . . . 50

5.4 Atribuição da Pinagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.5 A Migração da Aplicação para o Hardware . . . . . . . . . . . . . . . . . . 53

5.6 A Execução do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5.7 As Di�culdades Encontradas . . . . . . . . . . . . . . . . . . . . . . . . . . 56

6 Conclusão 58

6.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

Referências 60

Lista de Figuras

2.1 Desempenho do algoritmo RSA em software. Fonte: [Moreno et al., 2005]. . 25

2.2 Desempenho do algoritmo RSA em hardware. Fonte: [Moreno et al., 2005]. 25

3.1 Módulo Gerador de Subchaves do DES. Fonte: [Brown et al., 1993]. . . . . 28

3.2 Processamento Principal do DES. Fonte: [Brown et al., 1993] . . . . . . . . 30

5.1 Cyclone R© II EP2C20F484C7. Fonte: [ALTERA, 2006b]. . . . . . . . . . . 45

5.2 Tela Inicial do Quartus II Web Edition. . . . . . . . . . . . . . . . . . . . . 46

5.3 Tela Inicial do ModelSim ALTERA STARTER EDITION 6.5b. . . . . . . . 47

5.4 Compilação da Implementação do DES deste Trabalho. . . . . . . . . . . . 48

5.5 Compilação da Implementação do DES de [Moreno et al., 2005]. . . . . . . 49

5.6 Simulação do Sistema Criado Para Cifragem. . . . . . . . . . . . . . . . . . 50

5.7 Simulação do Sistema Criado Para Decifragem. . . . . . . . . . . . . . . . 51

5.8 Simulação do Sistema de [Moreno et al., 2005]. . . . . . . . . . . . . . . . . 51

5.9 Ferramenta Pin Planner do Quartus II. . . . . . . . . . . . . . . . . . . . . 52

5.10 Ferramenta Programmer do Quartus II. . . . . . . . . . . . . . . . . . . . . 54

5.11 Dados de Entrada e Saída da Execução do Hardware Criado. . . . . . . . . 55

5.12 Simulação do Sistema Criado com Outros Dados de Entrada. . . . . . . . . 56

5.13 Outros Dados de Entrada e Saída da Execução do Hardware Criado. . . . . 56

Lista de Tabelas

2.1 Temporização do algoritmo DES em C. Fonte: [Moreno et al., 2005]. . . . . 25

2.2 Desempenho do algoritmo DES em VHDL. Fonte: [Moreno et al., 2005]. . 25

3.1 Permutação de Compressão Inicial. Fonte: [Brown et al., 1993] . . . . . . . 29

3.2 Número da Iteração e Quantidade de Rotaçãoes. Fonte: [Brown et al., 1993] 29

3.3 Permutação de Compressão. Fonte: [Brown et al., 1993] . . . . . . . . . . . 29

3.4 Permutação Inicial. Fonte: [Brown et al., 1993] . . . . . . . . . . . . . . . 31

3.5 Permutação de Expansão. Fonte: [Brown et al., 1993] . . . . . . . . . . . . 31

3.6 S-Box 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.7 S-Box 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.8 S-Box 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.9 S-Box 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.10 S-Box 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.11 S-Box 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.12 S-Box 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.13 S-Box 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.14 Permutação Comum. Fonte: [Brown et al., 1993] . . . . . . . . . . . . . . . 34

3.15 Permutação Final. Fonte: [Brown et al., 1993] . . . . . . . . . . . . . . . . 35

Lista de Algoritmos

2.1 Descrição Comportamental de Comparador de 1 bit por [Moreno et al., 2005]. 22

2.2 Descrição Estrutural de Comparador de 1 bit por [Moreno et al., 2005]. . . 23

4.1 Exemplo de Descrição Híbrida Criada. . . . . . . . . . . . . . . . . . . . . 37

4.2 Entidade do Módulo sistema.vhd. . . . . . . . . . . . . . . . . . . . . . . . 37

4.3 Arquitetura do Módulo sistema.vhd. . . . . . . . . . . . . . . . . . . . . . . 38

4.4 Arquitetura do Testbench. . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.5 Arquivo Auxiliar Macro. . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4.6 Incrementação das Iterações por [Moreno et al., 2005]. . . . . . . . . . . . . 41

4.7 Incrementação das Iterações deste Trabalho. . . . . . . . . . . . . . . . . . 41

4.8 Módulo Principal por [Moreno et al., 2005]. . . . . . . . . . . . . . . . . . 42

4.9 Módulo Principal deste Trabalho. . . . . . . . . . . . . . . . . . . . . . . . 42

4.10 Implementação da Compressão Inicial da Chave. . . . . . . . . . . . . . . . 43

14

Lista de Siglas

AES Advances Encryption Standard

ANSI American National Standards Institute

API Application Programming Interface

ASIC Application-Speci�c Integrated Circuit

CPLD Complex Programmable Logic Device

DEA Data Encryption Algorithm

DES Data Encryption Standard

FPGA Field Programable Gate Array

GPP General Purpose Processor

HDL Hardware Description Language

I/O Entrada/saída, do inglês �input/output�

IEEE Institute of Electrical and Electronics Engineers

LED Diodo Emissor de Luz

NBS Nacional Bureau of Standards

NIST National Institute of Standards and Technology

RAM Random Access Memory

S-Box Substitution Box

SRAM Static Random Access Memory

VHDL Very High Speed Integrated Circuits (VHSIC) HDL

XOR Exclusive or.

Capítulo 1

Introdução

Com o surgimento e aumento do uso de meios digitais para os mais diversos objetivos,

também aumentou sua utilização para armazenamento e transmissão de dados. Arquivos

que há tempos atrás eram mantidos em armários e grafados em papel, agora pertencem

a um universo de dados codi�cados em bits que estão armazenados em discos magnéticos

ou outros tipos de mídia digital, e trafegam para diversas partes do mundo através de �os

de cobre, �bra ótica, e até mesmo pelo ar, através de ondas de rádio.

Assim, se faz necessário o uso de mecanismos que prezem pela segurança dos dados

digitais, tanto para impedir que aqueles que não estejam autorizados a acessá-los o façam,

quanto para assegurar que seu conteúdo original permaneça �dedigno quando transmitido

de um ponto a outro. Dentre os artifícios utilizados para garantir a acessibilidade aos

dados apenas por pessoas autorizadas, este trabalho trata da criptogra�a, que objetiva

ocultar o conteúdo de uma informação daqueles que não deveriam ter acesso a ela.

Além de garantir a segurança, é necessário que tal processo seja executado cada vez

mais rapidamente e que o custo computacional para isso se mantenha baixo. Com a

utilização de sistemas embarcados, que possibilitam que os mais diversos processamentos

sejam executados em hardwares dedicados a �m de aliviar os processadores de propósito

geral presente na maioria dos sistemas computadorizados, essas aspirações são possíveis.

Deste modo, o objetivo deste trabalho é a con�guração de um hardware criptográ�co

que atenda tais necessidades, para isso, são descritos no Capítulo 2 os conceitos necessários

para a compreensão deste trabalho, como a contextualização da segurança da informação,

os conceitos básicos de linguagens de descrição de hardware e de circuitos reprogramáveis.

Posteriormente no Capítulo 3 é descrito o algoritmo que será utilizado para a criação do

sistema criptográ�co proposto, que tem sua estrutura apresentada no Capítulo 4 e sua

efetiva implantação exposta no Capítulo 5. Por �m, são apresentadas as conclusões aqui

obtidas no Capítulo 6, bem como os trabalhos futuros que este trabalho pode nortear.

14

Capítulo 2

Revisão Bibliográ�ca

Este capítulo aborda todos os conceitos necessários para a realização do trabalho

proposto, discorre brevemente sobre criptogra�a, seu histórico resumido e seus tipos, bem

como é apresentado um algoritmo clássico que será implementado. Também neste capítulo

são introduzidos conceitos básicos de linguagens de descrição de hardware e de circuitos

reprogramáveis (ou recon�guráveis), que utilizados em conjunto podem produzir diversos

tipos de sistemas embarcados1, inclusive sistemas criptográ�cos, que é o objetivo principal

deste trabalho.

2.1 Segurança da informação

Há muito tempo o ser humano sente necessidade de garantir a segurança de suas

informações. Com o uso de ambientes digitais para armazenamento de informações tal

necessidade aumenta, já que meios físicos como armários e cadeados já não são su�cientes

para mantê-las a salvo. Os sistemas informatizados de hoje tentam de diversas maneiras

salvaguardar dados armazenados ou transmitidos de forma e�ciente e e�caz, de modo que

apenas pessoas autorizadas possam ter acesso ao seu conteúdo.

Um sistema, por exemplo, pode exigir que um usuário insira alguma prova de que

realmente é a pessoa que pode acessá-lo. Esse mecanismo de segurança é chamado de

autenticação do usuário e pode ocorrer apenas por uso de algo que o usuário sabe, e/ou

pelo que o usuário é, ou seja, por alguma característica que ele possua [Tanenbaum, 2003].

No caso descrito acima, pode-se utilizar um login e senha para que cada pessoa possa

acessar o sistema. Num segundo caso pode-se fazer uso da biometria2, pedindo ao usuário

que efetue por meio de algum dispositivo a leitura de alguma característica sua, como a

impressão digital, que é única em cada pessoa, para veri�car sua autenticidade.

1Sistema microprocessado no qual o computador é completamente encapsulado ou dedicado ao dispo-

sitivo ou sistema que ele controla.2Uso de características biológicas em mecanismos de identi�cação.

15

Caso haja alguma falha de segurança e as informações sejam acessadas por agentes não

autorizados, ainda é possível utilizar a criptogra�a para que esses não consigam entender

seu conteúdo. Junção das palavras em latim kryptós, que signi�ca "secreto", "oculto", e

gráphein, que signi�ca "escrita", a criptogra�a permite que um texto seja escrito, porém

com signi�cado oculto, já que quem não souber a forma correta de extrair o signi�cado

dele, não o entenderá. Esse assunto será melhor explanado mais adiante na Seção 2.2.

Em contraposição à criptogra�a, existe a criptoanálise, que faz a análise de conteúdos

criptografados a �m de descobrir a informação original. A criptoanálise também tem

como objetivo apontar falhas em sistemas criptográ�cos com propósito de melhorá-los.

Em conjunto, a criptogra�a e a criptoanálise formam a ciência da criptologia. Neste

trabalho será abordada apenas a criptogra�a em um tipo de aplicação especí�ca, porém

mais detalhes sobre este e outros tópicos sobre segurança da informação podem ser obtidos

em [Badrignans et al., 2011].

2.2 Criptogra�a

A criptogra�a tem por objetivo a transformação de um texto claro (nome dado à

informação original) em um texto cifrado (nome dado à informação criptografada) através

do uso de uma chave, que pode ser considerada análoga às chaves do mundo físico, já que

ela é o �segredo� para realização do processo, e de um sistema criptográ�co, chamado

cifra. Uma cifra é a implementação de um algoritmo que recebe a chave e o texto claro e

dá como resposta o texto cifrado no caso da cifragem, e recebe o texto cifrado juntamente

com a chave para obtenção do texto claro no caso da decifragem.

O uso de métodos criptográ�cos é de grande valia quando se deseja armazenar ou

transmitir dados de forma segura, impedindo o acesso de agentes não autorizados, eles

também podem garantir a autenticidade de algum documento digital, por meio de assi-

naturas digitais por exemplo, além de sua integridade [NIST, 1995]. E também há outras

aplicações, como as funções de via única3 utilizadas em funções hash4.

2.2.1 Histórico

O uso da criptogra�a, mesmo que não aquela conhecida atualmente, feita por meio

de sistemas computadorizados, mas a escrita, objetivando o ocultamento de seu conteúdo

daqueles que não devem acessá-lo, é feito há muito tempo. Seus primeiros relatos datam

3Funções que dada uma entrada qualquer, é fácil calcular o resultado, porém, dado o resultado �nal,

é difícil chegar ao dado que o originou.4Função matemática que dado um valor retorna um código que o representa, comumente utilizada

quando se deseja obter identi�cadores únicos para dados que possuem identi�cadores numéricos idênticos.

16

de cerca de 1.900 anos antes da era Cristã, no Egito antigo, com o uso de hieróglifos

para escrita, bem como com a substituição de alguns destes em textos que levavam, por

exemplo, a túmulos e catacumbas que continham tesouros encerrados junto aos faraós.

Deste modo, se alguém tivesse a intenção de saquear as tumbas, seguiria as instruções

cifradas e provavelmente se perderia nas câmaras das pirâmides, podendo não mais achar

o caminho de volta e morrer ao tentar chegar ao seu destino [Kahn, 1967].

Na Grécia antiga, por volta do ano 400 antes de Cristo, também foram observadas

tentativas de manter informações em segredo, e pela primeira vez, mensagens secretas

foram utilizadas com propósito militar em Esparta. Conhecida pelo nome de scylate,

a técnica utilizada consistia em enrolar uma tira de couro em um bastão, a mensagem

então era escrita horizontalmente no couro enrolado, cada letra ocupando uma tira de

largura em volta do bastão. Ao �nal obtinha-se uma tira de couro com letras en�leira-

das verticalmente de forma aparentemente aleatória e sem sentido, ou seja, a mensagem

cifrada, bastando apenas enrolar novamente o couro em um bastão, de mesmo tamanho

do utilizado para a cifragem, para obter o texto claro.

Posteriormente, na Roma antiga, é relatado o primeiro uso da criptogra�a como co-

nhecida nos dias atuais. Querendo mandar em segredo mensagens e planos de guerra aos

seus generais nos campos de batalha, o imperador romano Caio Júlio César (100 a.C. -

44 a.C.) engenhou o que hoje se conhece por Cifra de César ou Troca de César. A cifra

em questão era feita substituindo cada letra do alfabeto pela terceira letra subsequente a

ela, as três últimas assumiam como as três primeiras, como se o alfabeto fosse circular.

Assim sendo, caso as mensagens fossem interceptadas pelo exército inimigo, eles teriam

acesso a um texto ininteligível, aparentemente formado por um emaranhado desconexo

de letras. A Cifra de César foi a precursora da chamada cifra por substituição, que será

explicada posteriormente na Subseção 2.2.2, e é a única da antiguidade cujo princípio

ainda é utilizado em cifras modernas.

Além de sua conhecida cifra, Júlio César também fez uso de métodos criptográ�cos

mais complexos, como a Caixa de César, onde suas mensagens eram escritas de forma que

a quantidade de letras fosse um número quadrado perfeito5, assim, ele distribuía as letras

em uma tabela cujo número de linhas e de colunas era a raiz quadrada da quantidade de

letras da mensagem, preenchendo as letras sequencialmente pelas colunas, de cima para

baixo e da esquerda para a direita. A mensagem cifrada era obtida copiando as letras da

tabela seguindo pelas linhas, da esquerda para a direita e de cima para baixo. Realocando

as letras na tabela e repetindo o processo, a decifragem da mensagem era obtida.

Na Idade Média, embora em menor quantidade e menos documentada, também houve

produção criptográ�ca, foi nesse período que surgiram as cifras polialfabéticas. Nesse tipo

5Número inteiro positivo que pode ser expresso como o quadrado de outro número inteiro.

17

de cifra, dois ou mais alfabetos são utilizados para as substituições, podendo um mesmo

símbolo, ou mesma letra, representar mais de um correspondente do texto claro.

Nos séculos seguintes também há registros de uso de métodos criptográ�cos, como

na Europa do século XV, com as escritas espelhadas de Leonardo Da Vinci, onde ele

escrevia de modo que somente era possível a leitura de seus manuscritos mediante um

espelho. E também no século XVI, em que Maria, a Rainha da Escócia (1542 - 1587),

utilizou mensagens cifradas, também por substituição, ao conspirar para o assassinato

de sua prima, a Rainha Elizabeth (1533 - 1603), a �m de tomar para si a coroa inglesa.

A conspiração, da qual eram participantes ingleses católicos, tinha objetivo de retirar do

trono a Rainha Elizabeth, que era protestante, para a ascensão de Maria, que era católica,

à coroa. As cartas de Maria aos conspiradores foram interceptadas e criptoanalisadas,

posteriormente, ela foi condenada e executada por traição [Singh, 2000].

Foi com o advento dos meios de comunicação e de transmissão de dados, que permi-

tiam que mensagens fossem transmitidas para distâncias muito grandes e de certa forma

desprotegidas, que surgiu a necessidade de meios criptográ�cos mecanizados. Nesse con-

texto, a criptogra�a teve um grande avanço, sendo criados diversos métodos de cifragem e

decifragem mecanizados culminando com a invenção da máquina Enigma, que era elétrica

e baseada em um sistema com discos rotativos, e foi utilizada para cifrar informações

militares alemãs durante a Segunda Guerra Mundial (1939 - 1945). Desde então, muito

se tem avançado no meio da criptologia, já que a difusão de meios digitais para armaze-

namento e transmissão de dados evoluíram em níveis gigantescos e a segurança de tais

processos é crucial.

2.2.2 Classi�cação

Existem três classi�cações que podem ser aplicadas à criptogra�a, cada uma delas

analisando determinada característica, podendo ser a forma em que a cifragem ocorre, o

modo de entrada do texto claro e o tipo de chave utilizada.

Quanto à forma de cifragem

Quanto à forma em que a cifragem é realizada, ela pode ocorrer de duas maneiras,

chamadas de substituição e transposição. Na primeira, somente os símbolos do texto são

substituídos por outros, e a ordem dos símbolos presentes no texto permanece inalterada.

Em oposição a esse método, também pode ser aplicada a criptogra�a por transposição,

onde os símbolos do texto claro se mantêm inalterados, porém a ordem deles no texto

cifrado é modi�cada, assim sendo, a informação criptografada torna-se um anagrama6 da

original [Churchhouse, 2004].

6Palavra ou frase formada com as letras de outra.

18

Quanto à inserção de dados

O texto claro pode ser inserido em um sistema criptográ�co de duas maneiras, a

primeira é realizada por bloco, onde o texto é dividido em blocos de determinado tamanho

admitido pela cifra e cada um deles é cifrado individualmente, obtendo-se ao �nal um

conjunto de blocos cifrados que colocados juntos formam o texto cifrado total.

O segundo modo de inserção de texto para cifragem é por meio de bit a bit, a chamada

cifra por �uxo, onde o texto total é desmembrado em bits e cada um deles é inserido

e cifrado individualmente, obtendo-se ao término da cifragem, uma sequência de bits

cifrados que juntos formam o texto cifrado �nal.

Quanto à chave

A última classi�cação se dá de acordo com o tipo de chave utilizada para o a cifragem.

Quando tanto o processo de cifragem quanto o de decifragem utilizam a mesma chave

em sua execução, chamada de chave privada, a criptogra�a é classi�cada como simétrica.

Geralmente os algoritmos que utilizam esse tipo de chave são mais simples e rápidos,

porém exigem que remetente e destinatário tenham a chave compartilhada a priori.

Em contraste, existe a criptogra�a assimétrica, que utiliza a premissa das chaves pú-

blicas, onde esta chave é disponibilizada a qualquer indivíduo que queira cifrar e mandar

informações e apenas o destinatário tem acesso a uma chave privada que permite a deci-

fragem para obtenção do texto claro. Embora mais lentos e complexos que os algoritmos

que utilizam apenas chaves privadas, os sistemas criptográ�cos assimétricos provêm uma

maior segurança e con�abilidade contra criptoanálise, já que suas chaves geralmente são

baseadas em operações com números primos grandes, o que torna extremamente laborosa

sua descoberta.

2.3 Circuitos Reprogramáveis

Ao se falar em implementação de sistemas, a maioria das pessoas tem em mente o

uso de alguma linguagem de programação e um compilador que a traduz para a criação

de um programa que objetiva realizar alguma tarefa. Porém, essa não é a única forma

de alcançar esse objetivo, já que um sistema pode ser implementado diretamente via

hardware [Almeida e da Costa, 2011b], ou seja, pela manipulação de circuitos elétricos,

seja diretamente com uso de circuitos digitais interligados ou pela utilização de circuitos

reprogramáveis, que permitem a programação através de uma linguagem de descrição de

hardware, que serão vistas na Seção 2.4, de forma que é possível indicar ao circuito qual

deve ser seu comportamento e organização, fazendo com que este atue efetivamente como

um circuito digital [Tocci et al., 2007].

19

A implementação concebida em hardware pode ser feita com o uso de dispositivos

eletrônicos de propósitos especí�cos e arquitetura �xa, os Application-Speci�c Integrated

Circuit (ASIC) ou de dispositivos programáveis de propósito geral de arquitetura recon-

�gurável, como os Field Programable Gate Array (FPGA) e os Complex Programmable

Logic Device (CPLD's) [Gaj e Chodowiec, 2009].

Quando utilizada uma arquitetura �xa, uma vez que um projeto de sistema embarcado

seja implementado, a arquitetura não mais pode ser alterada, o que faz os circuitos re-

programáveis mais atrativos, já que uma mesma pastilha (circuito) pode receber diversos

projetos, desde que não concomitantemente. Porém estes últimos, na maioria das vezes,

não possuem características que podem ser úteis e que estão presentes nos primeiros, como

a presença de memória não volátil7 [Badrignans et al., 2011].

Com o uso de circuitos recon�guráveis, o projetista pode criar novas funções que façam

com que operações sejam realizadas com muito menos ciclos do que seria necessário usando

um processador de propósito geral, do inglês General Purpose Processor (GPP), assim a

acoplação de um FPGA a um GPP possibilita uma melhor exploração do potencial dos

mesmos. Deste modo, podem ser criados programas para execução direta no processador

da placa de um circuito reprogramável, o que alivia o GPP de uma máquina que tenha

tal placa acoplada. Assim, é possível utilizar esse equipamento de diversas maneiras,

seja para criar efetivamente um sistema embarcado, usando Very High Speed Integrated

Circuits (VHSIC) Hardware Description Language (VHDL) ou Verilog por exemplo, ou

apenas para poder fazer um processamento paralelo e�ciente.

A implementação tratada neste trabalho foi projetada para sua inserção em um FPGA,

que oferece entre outras vantagens, o fato de não possuir necessariamente uma execução

sequencial, o que permite a realização de centenas a milhares de operações a cada ci-

clo [Hu�mire et al., 2010], através da linguagem VHDL, uma linguagem de descrição de

hardware que será discutida na Subseção 2.4.1.

2.3.1 FPGA

FPGA's são dispositivos lógicos constituídos de um array bidimensional de células

lógicas genéricas e comutadores programáveis. Essas últimas podem ser con�guradas de

modo a executarem uma função simples e os comutadores podem ser customizados para

fornecerem as interconexões entre as células [Chu, 2008]. Esses circuitos são atualmente o

cerne de diversos dispositivos que realizam performances críticas, desde pontos de acesso

wireless até sistemas comerciais de reconhecimento facial. E por não serem sequenci-

ais, como um processador de propósito geral, possibilitam a realização de centenas de

7Memória que guarda todas as informações nela armazenadas mesmo quando não estiver recebendo

alimentação de energia.

20

multiplicações ou milhares de adições por ciclo [Hu�mire et al., 2010].

Em um FPGA o roteamento é a interconexão entre os blocos lógicos por meio de

uma rede de camadas de metal, já a conexão física entre os blocos lógicos é realizada por

transistores controlados através de bits de memória ou de chaves de comutação (switch

matrix ). A recon�guração desses dispositivos pode ocorrer de várias formas, permitindo

desde uma recon�guração total do mesmo, ou apenas parte dele, que pode ser feita sem a

necessidade de remover ou reiniciar o circuito, o que se apresenta como uma grande vanta-

gem ao permitir a alteração mesmo em tempo de execução [Almeida e da Costa, 2011a].

O uso de FPGA's oferece algumas vantagens sobre a utilização de circuitos de propósito

especí�co e de arquitetura �xa além do reuso do circuito, como ganho em velocidade de

processamento, a possibilidade de evolutibilidade em tempo real do sistema, já que podem

ser realizadas alterações em tempo real do sistema con�gurado, e também o aumento

da segurança do sistema, que pode ser possibilitado pelo versionamento ou correção da

con�guração do circuito em tempo de execução.

Existem algumas fabricantes de FPGA's mais conhecidas no mercado, como a Xilinx R©,

que foi a primeira empresa a fornecer circuitos programáveis e é uma das maiores fornece-

doras, possuindo diversas famílias de circuitos, entre estas tem-se como mais populares as

placas de desenvolvimento Spartan R© e Virtex R©. Outra empresa bastante conhecida que

vem fornecido placas para desenvolvimento FPGA completas e de manipulação relativa-

mente simples, é a Altera R©, que também apresenta diversas famílias de desenvolvimento,

como a Cyclone R© e a Stratix R©.

2.4 Linguagem de Descrição de Hardware

As linguagens de descrição de hardware, do inglês Hardware Description Language

(HDL), podem ser vistas como análogas às linguagens de programação de software, pois

ambas de�nem como uma determinada tarefa deve ser realizada, as primeiras através da

descrição do comportamento e das interligações que os circuitos devem ter, e as segundas

pela descrição detalhada de passos a serem seguidos para realização de uma tarefa.

Existem atualmente no mercado diversas HDL's, dentre as quais podem ser citadas

como mais populares: VHDL e Verilog [Chu, 2008], e ambas, bem como as demais exis-

tentes são muito utilizadas para a programação de sistemas recon�guráveis.

Essas linguagens possuem grande pro�cuidade quando comparadas às linguagens de

programação, pois permitem que seja feito um sistema com vantagens de hardware e

software, já que combina a rapidez e maior con�abilidade do primeiro, com a �exibilidade

e facilidade de design do segundo, além de dar ao projetista, a possibilidade de recomeçar

tudo em um mesmo circuito caso algum erro seja cometido no processo de criação. A maior

di�culdade dessa abordagem, é inserida na sua complexidade e necessidade de grande

21

entendimento por parte do projetista da linguagem para poder executar satisfatoriamente

o proposto.

A linguagem utilizada para o projeto executado neste trabalho foi a VHDL. A se-

guir são abordados brevemente os principais pontos desta linguagem e alguns conceitos

necessários para o entendimento do sistema criptográ�co criado.

2.4.1 VHDL

Essa linguagem foi desenvolvida pelo Departamento de Defesa Norte Americano (DoD)

na década de 1980 e foi a primeira linguagem do gênero a ser padronizada pelo Institute

of Electrical and Electronics Engineers (IEEE), assim sendo, é uma das mais conhecidas

e utilizadas para aplicações descritas em circuitos recon�guráveis.

Um sistema descrito em VHDL pode ser assim feito ou de forma comportamental, onde

é conhecido o comportamento do circuito que se deseja implantar ou de forma estrutural,

onde é desprezado o comportamento do sistema e/ou apenas a estrutura do circuito é

conhecida [Moreno et al., 2005]. Os Algoritmos 2.1 e 2.2 exempli�cam respectivamente as

descrições comportamental e estrutural, o primeiro apresenta nas linhas 7 e 8 os comandos

when e else, que indicam a presença do comportamento do sistema (tais linhas representam

um comportamento similar ao obtido através dos comandos condicionais if e else das

linguagens de programação), já no segundo, as linhas 5 e 6 mostram a criação de entidades

por meio da passagem dos sinais que essas devem mapear para realizar o processamento.

Algoritmo 2.1 Descrição Comportamental de Comparador de 1 bit por

[Moreno et al., 2005].

1 entity comp i s

2 port ( e1 , e2 : in b i t ;

3 s : out b i t ) ;

4 end comp ;

5 architecture comp_fluxo_dados of comp i s

6 begin

7 s<= e1 when e2>e1

8 else e2 ;

9 end comp_fluxo_dados ;

22

Algoritmo 2.2 Descrição Estrutural de Comparador de 1 bit por [Moreno et al., 2005].

1 . . .

2 architecture comp_fluxo_dados of comp i s

3 signal l 1 : b i t ;

4 begin

5 u1 : entity xor2 port map ( e1 , e2 , l 1 ) ;

6 u2 : entity and2 port map ( e1 , l1 , s ) ;

7 end comp_fluxo_dados ;

Também é possível criar sistemas utilizando as duas abordagens acima concomitante-

mente, criando uma descrição híbrida, o que pode ser bastante desejável quando não se

sabe totalmente o comportamento ou a estrutura de todos os componentes do sistema a

ser criado, ou mesmo quando algum módulo pode ser mais facilmente implementado com

uma descrição diferente do restante do sistema.

De qualquer uma das formas descritas acima, a implementação é feita de forma hi-

erárquica, onde são implementados blocos ou módulos, que são pequenas estruturas do

sistema, que podem ser então interligadas e utilizadas para a formação de blocos maiores

até a formação do sistema completo [Ashenden, 1990].

Em VHDL são utilizadas entidades para de�nir uma estrutura e arquiteturas para a

implementação do proposto por elas, são essas últimas que realizam as funcionalidades de

um projeto e podem ser executadas de forma concorrente, como processos, fazendo com

que uma mesma entidade possa ter diversas arquiteturas. A estrutura da utilização de

entidade e arquitetura também pode ser observada no Algoritmo 2.1.

Outros pontos que podem ser comparados com as linguagens de programação é a

colocação de parênteses para estruturar e separar comandos e blocos de comandos e o uso

de pacotes e bibliotecas, os pacotes encapsulam funcionalidades para seu reaproveitamento

posterior no mesmo ou em outros projetos e são agrupados em bibliotecas.

A execução de um sistema implementado nessa linguagem ocorre em ciclos, ou seja,

o sistema será executado por uma determinada quantidade de tempo e a cada ciclo de

relógio do processador os processos são realizados até �ndar o tempo previsto para a

execução.

O IEEE, ao padronizar a linguagem, criou para esta uma biblioteca que é utilizada na

maioria dos projetos em VHDL. Isto porque tal biblioteca fornece de antemão elementos

úteis para a construção de qualquer projeto. Seus dois principais pacotes, o standard e

o textio fornecem, por exemplo, os tipos de constantes, variáveis e sinais que podem ser

utilizados para operações simples ou que trabalham com arquivos.

Essa linguagem oferece os tipos primitivos de dados para manipulação, como os bits

23

e dados booleanos8. Também são fornecidos tipos que permitem a declaração de objetos,

como as constantes, que possuem valor �xo, e as variáveis e os sinais, que podem ser

utilizados para o armazenamento de valores que se alteram durante a execução, esses

elementos em VHDL são considerados como objetos. A diferença entre as variáveis e

os sinais é que as primeiras são atualizadas imediatamente quando da sua alteração,

enquanto os sinais são atualizados ao �nal do ciclo de execução. Além desses tipos mais

comuns, também é possível a utilização de subtipos e de vetores de dados primitivos,

como os arrays de bits que serão amplamente utilizados na implementação apresentada

no Capítulo 4.

Por ser uma linguagem hierárquica, é necessária a comunicação entre os módulos do

projeto criado. Assim sendo, pode-se utilizar funções quando se tem apenas um retorno

do módulo subordinado ou procedimentos quando este prover mais de um retorno ao

módulo do qual faz parte.

Existem outas características inerentes ao VHDL, porém fogem ao escopo deste tra-

balho e podem ser veri�cadas em [Ashenden, 1995] e [Ashenden, 1990].

2.5 Criptogra�a em Software X Criptogra�a emHard-

ware

Com a utilização de circuitos reprogramáveis e HDL's em conjunto, é possível a cons-

trução de diversos sistemas diretamente em hardware, inclusive de sistemas criptográ�cos,

que apresentem vantagens sobre os implementados em software.

A posição do National Institute of Standards and Technology (NIST) sobre o assunto

é de que a implementação de criptogra�a em software é mais barata e lenta que em

hardware, embora para aplicações grandes pode se tornar mais cara, porém menos segura

devido à maior facilidade de ser modi�cada ou ignorada do que um produto equivalente de

hardware, e também, a resistência à adulteração em hardware é comumente considerada

melhor [NIST, 1995].

Sendo o proposto neste trabalho a construção do algoritmo Data Encription Stan-

dart (DES) em um FPGA utilizando VHDL, é válido apresentar um comparativo que

ilustre a vantagem em relação ao tempo de execução de criptogra�as realizada com um

hardware sobre uma executada com software, como por exemplo as apresentadas em

[Moreno et al., 2005], onde são feitas implementações em software usando a linguagem C

e em hardware com o VHDL.

Entre os algoritmos analisados, é possível ver na Tabela 2.1 a temporização do al-

goritmo DES feito em C e na Tabela 2.2 o desempenho do mesmo em VHDL. Para um

8Dados que assumem valor verdadeiro ou falso.

24

arquivo de 10MB o DES implementado em linguagem C, no melhor cenário, consome um

tempo superior a 7 segundos para realizar a cifragem. Já a implementação em VHDL

para um arquivo de 25 MB consome 1 segundo.

Tabela 2.1: Temporização do algoritmo DES em C. Fonte: [Moreno et al., 2005].Tamanho do arquivo

criptografado

Tempo (segundos) gasto

com arquivo armazenado

em disco

Tempo (segundos) gasto

com arquivo armazenado

na memória

% de melhora do desem-

penho em disco e em me-

mória

1 MB 1,25s 0,94s 25,39 %

5 MB 5,82 s 3,90 s 32,96 %

10 MB 10,27 s 7,08 s 30,96 %

Tabela 2.2: Desempenho do algoritmo DES em VHDL. Fonte: [Moreno et al., 2005].Tempo de Propagação Frequência Máxima

19,55ns 51,146 MHz

Taxa de ocupação do FPGA

CLBs FLIP-FLOPs LUTs (Look-Up Table)

No de componentes utilizados 381 68 755

No de componentes disponíveis 9.48 18.816 18.816

Porcentagem de Ocupação 4,04% 0,30% 4,01%

Consumo de tempo para cifragem

Tamanho do texto claro (MB) Tempo (segundos)

25 1

Desempenho análogo pode ser observado em sistemas criptográ�cos de chave pública,

como a RSA, onde em um arquivo de 1 MB o tempo de cifragem passa de 20 segundos

em VHDL (Figura 2.2) para aproximadamente 80 segundos em C (Figura 2.1).

Figura 2.1: Desempenho do algoritmo RSA em software. Fonte: [Moreno et al., 2005].

Figura 2.2: Desempenho do algoritmo RSA em hardware. Fonte: [Moreno et al., 2005].

25

2.6 Trabalhos Correlatos

Muitos trabalhos tem sido desenvolvidos a respeito do desenvolvimento de sistemas

embarcados recon�guráveis com a utilização de HDL's. Aqui serão apresentados alguns

que tratam da criação de sistemas criptográ�cos em hardware, mais especi�camente os

que utilizam o algoritmo DES, que será apresentado no Capítulo 3, e da linguagem VHDL

já apresentada na Seção 2.4.1.

As metodologias dos ciclos de design e ferramentas de hardware e software que podem

ser utilizadas para desenvolvimento do DES são estudadas em [Arich e Eleuldj, 2002], que

fazem uso de plataformas tanto da Altera R© quanto da Xilinx R© para análise da melhor

maneira de se implementar tal algoritmo em sistemas embarcados.

Uma variação do DES, o 3-DES, que também será apresentado no Capítulo 3, recebe

também implementações embarcadas, como visto em [Ali et al., 2004].

A modelagem comportamental é discutida em [Wilson e Brown, 2005], onde pode ser

visto o uso de descrição em alto nível para criação de um sistema DES, bem como é

possível observar a divisão modular do sistema.

Em [Li e Ming, 2009], os autores propõem simpli�cações em relação à chave cripto-

grá�ca utilizada na cifragem do DES, bem como das tabelas de substituição que este

algoritmo utiliza. A �m de melhorar sua segurança quanto à criptoanálise, é utilizada a

linguagem VHDL e um circuito FPGA da Altera R© para realizar esta tarefa. Com o uso

de pipeline9 de múltiplos estágios, foi possivel conseguir um uso e�ciente do hardware em

termos de consumo de tempo.

Outro trabalho que trata do uso de pipeline para aceleração do hardware é proposto

em [Taherkhani et al., 2010], que também apresentam a possibilidade da utilização de

máquinas de estados �nitos para implementações sem pipeline, neste trabalho é utilizada

a arquitetura da Xilinx R© e também a linguagem VHDL para apresentação das abordagens

realizadas.

Cada trabalho apresenta suas peculiaridades, porém é possível observar que todos tem

como objetivo a implantação de um sistema de hardware rápido e e�ciente, independen-

temente da abordagem de desenvolvimento ou da plataforma de FPGA's utilizadas.

9Técnica de hardware que permite que a CPU realize a busca de uma ou mais instruções além da

próxima a ser executada.

26

Capítulo 3

O Algoritmo DES

Este trabalho tem por objetivo criar um hardware criptográ�co através do algoritmo

DES. A escolha por essa cifra foi feita devido à sua ampla aplicação em dispositivos

de hardware e também por ser um algoritmo bastante divulgado e conhecido no meio

acadêmico. O fato de haver códigos de fácil entendimento presentes na literatura também

in�uenciou a escolha dessa cifra em detrimento das demais, adiciona-se também o fato

de DES utilizar o mesmo processo para cifragem e decigragem e ter um funcionamento

interno relativamente simples. Neste capítulo o DES será explanado, apresentando suas

peculiaridades e funcionalidades.

3.1 O Algoritmo

Anunciado pelo NIST com sua descrição algorítmica e matemática em 1993, porém, já

adotado desde 1977 pelo Nacional Bureau of Standards (NBS) e em 1981 pelo American

National Standards Institute(ANSI) com o nome de Data Encryption Algorithm (DEA), o

DES é talvez o mais conhecido e utilizado algoritmo de criptogra�a [Moreno et al., 2005].

Sendo um algoritmo criptográ�co de chave privada que realiza a cifragem por blocos

com ambos os processos de substituição e transposição, o DES cifra blocos de 64 bits com

uma chave de 64 bits, onde apenas 56 são utilizados e os outros 8 desprezados, podendo

ser utilizados posteriormente para detecção de erros, para geração de blocos de 64 bits

criptografados.

O funcionamento deste algoritmo se dá de forma relativamente simples, sendo com-

posto basicamente do processamento principal e do módulo gerador de subchaves, este

último fornece as chaves parciais para cada rodada de processamento do primeiro. A ci-

fragem e decifragem utilizam o mesmo processo, assim sendo, a cifragem dupla, utilizando

a mesma chave, de um texto retorna o texto original [Schneier, 1996].

27

3.2 Módulo Gerador de Chaves

A cada iteração do processamento principal do algoritmo é utilizada uma subchave

derivada da chave inicial, no caso da primeira subchave, ou da sua antecessora, no caso

das demais subchaves. A Figura 3.1 ilustra o modo como as subchaves são geradas para

sua inserção a cada iteração do módulo de processamento principal.

Figura 3.1: Módulo Gerador de Subchaves do DES. Fonte: [Brown et al., 1993].

Para a criação das subchaves (K1, ..., K16), a chave inicial de 64 bits passa pela pri-

meira operação, uma permutação de compressão (PC-1), que a transforma em uma chave

comprimida de 56 bits permutados de acordo com a tabela Tabela 3.11, para a obtenção

da chave que dará origem às subchaves subsequentes.

1A Tabela 3.1 e as demais que representam as tabelas de compressão, expansão e permutação (exceto

as S-Boxes) de chaves e textos tem como elementos os números que indicam a posição dos bits na chave

ou texto original que passará pelo processo, assim sendo, ao reagrupar os bits após sua inserção na tabela

de ordem da esquerda para a direita e de cima para baixo, é obtida a chave ou texto transformados pela

operação em questão.

28

Tabela 3.1: Permutação de Compressão Inicial. Fonte: [Brown et al., 1993]

PC-1

57 49 41 33 25 17 9

1 58 50 42 34 26 18

10 2 59 51 43 35 27

19 11 3 60 52 44 36

63 55 47 39 31 23 15

7 62 54 46 38 30 22

14 6 61 53 45 37 29

21 13 5 28 20 12 4

A chave comprimida é dividida em duas partes de 28 bits cada, na Figura 3.1 é possível

observar essa divisão, onde C0 representa os 28 bits mais signi�cativos da chave compri-

mida e D0 os 28 bits restantes. Cada parte sofre rotações à esquerda cuja quantidade

varia de acordo com o número da iteração de que faz parte de acordo com a Tabela 3.2.

Tabela 3.2: Número da Iteração e Quantidade de Rotaçãoes. Fonte: [Brown et al., 1993]

Número da Iteração 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Rotações à Esquerda 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1

As partes da chave são então reunidas e passam por mais uma operação de permutação

de compressão (PC-2) conforme a Tabela 3.3 para a formação de uma subchave �nal de

48 bits.

Tabela 3.3: Permutação de Compressão. Fonte: [Brown et al., 1993]

PC-2

14 17 11 24 1 5

3 28 15 6 21 10

23 19 12 4 26 8

16 7 27 20 13 2

41 52 31 37 47 55

30 40 51 45 33 48

44 49 39 56 34 53

46 42 50 36 29 32

29

3.3 Processamento Principal

O processamento principal recebe o texto claro e as chaves produzidas pelo módulo

gerador de chaves para realizar as operações que ao �nal fornecem o texto cifrado. Seu

funcionamento pode ser observado na Figura 3.2.

Figura 3.2: Processamento Principal do DES. Fonte: [Brown et al., 1993]

O texto claro de 64 bits é recebido pelo algoritmo e sofre uma permutação inicial (IP)

conforme a Tabela 3.4.

30

Tabela 3.4: Permutação Inicial. Fonte: [Brown et al., 1993]

IP

58 50 42 34 26 18 10 2

60 52 44 36 28 20 12 4

62 54 46 38 30 22 14 6

64 56 48 40 32 24 16 8

57 49 41 33 25 17 9 1

59 51 43 35 27 19 11 3

61 53 45 37 29 21 13 5

63 55 47 39 31 23 15 7

O texto resultante do passo anterior é dividido em duas partes de 32 bits cada uma,

essas estão representadas na Figura 3.2 por L0 e R0, contendo respectivamente os 32 bits

mais e menos signi�cativos.

A subchave referente à iteração atual é introduzida no algoritmo para realização das

operações designadas pela função f(Ri−1, Ki), onde i é o número da iteração. A primeira

parte dessa função é realizar uma permutação de expansão (E BIT-SELECTION) sobre

R0 (ou Ri, dependendo da iteração) que passa então a ter 48 bits e não mais 32, de acordo

com a Tabela 3.5 .

Tabela 3.5: Permutação de Expansão. Fonte: [Brown et al., 1993]

E BIT-SELECTION

32 1 2 3 4 5

4 5 6 7 8 9

8 9 10 11 12 13

12 13 14 15 16 17

16 17 18 19 20 21

20 21 22 23 24 25

24 25 26 27 28 29

28 29 30 31 32 1

Depois, o vetor resultante da operação acima passa por uma operação ou-exclusivo

(Exclusive-or ou XOR) com a subchave da iteração. Os bits resultantes dessa operação

são agrupados sequencialmente em 8 grupos de 6 bits. Cada grupo passa por uma operação

de compressão através de uma substitution box (S-Box) , que é uma tabela de substituição

31

de 4 linhas e 16 colunas. Ao total são 8 S-Boxes, cada uma referente a um grupo de 6 bits,

sendo respetivamente a S-Box 1 utilizada para a operação do primeiro grupo, a S-Box 2

para o segundo e assim por diante. Pode-se veri�car abaixo as 8 S-Boxes de�nidas pelo

NIST em [Brown et al., 1993]:

Tabela 3.6: S-Box 1.

S1

14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7

0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8

4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0

15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

Tabela 3.7: S-Box 2.

S2

15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10

3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5

0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15

13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9

Tabela 3.8: S-Box 3.

S3

10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8

13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1

13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7

1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12

Tabela 3.9: S-Box 4.

S4

7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15

13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9

10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4

3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14

32

Tabela 3.10: S-Box 5.

S5

2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9

14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6

4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14

11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3

Tabela 3.11: S-Box 6.

S6

12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11

10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8

9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6

4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13

Tabela 3.12: S-Box 7.

S7

4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1

13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6

1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2

6 11 13 8 1 4 10 7 7 5 0 15 14 2 3 12

Tabela 3.13: S-Box 8.

S8

13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7

1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2

7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8

2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

A operação de compressão realizada pelas S-Boxes são diferentes da mera supressão de

bits, como ocorre com a compressão das chaves. Tendo a S-Box 4 linhas, pode-se numerá-

las de 0 a 3, assim sendo, o primeiro e o sexto bit do grupo se combinam para formar

33

o número binário correspondente ao número da linha a ser analisada para a substituição

de compressão. Do mesmo modo, tendo a S-Box 16 colunas, o segundo, o terceiro, o

quarto e o quinto bits combinados formam o número binário correspondente à coluna,

que numerada de 0 a 15, será analisada. Assim sendo, o valor binário correspondente

ao número posicionado nas coordenadas indicadas pela linha e pela coluna obtidas pelo

método descrito anteriormente substitui os 6 bits originais. Assim, como cada valor �nal

de cada grupo terá 4 bits, serão um total de 32 bits, voltando o texto ao tamanho de Ri

para dar sequência ao processo.

Por �m, é feita uma permutação comum (P-Box) com o vetor de 32 bits obtido no

passo anterior conforme a Tabela 3.14.

Tabela 3.14: Permutação Comum. Fonte: [Brown et al., 1993]

P

16 7 20 21

29 12 28 17

1 15 23 26

5 18 31 10

2 8 24 14

32 27 3 9

19 13 30 6

22 11 4 25

Findados os passos da função f(Ri−1, Ki), seu vetor resultante passa por uma operação

XOR com Li, o resultado dessa operação passa então a ser armazenado em Ri e o valor

de Ri−1 passa a ser armazenado em Li.

As operacões supracitadas são realizadas por 16 vezes, cada uma delas com uma

subchave distinta fornecida pelo módulo gerador de chaves. Os valores de L16 e R16

são então unidos, formando novamente um vetor de 64 bits, que sofre a permutação �nal

(IP-1) indicada pela Tabela 3.15.

34

Tabela 3.15: Permutação Final. Fonte: [Brown et al., 1993]

IP-1

40 8 48 16 56 24 64 32

39 7 47 15 55 23 63 31

38 6 46 14 54 22 62 30

37 5 45 13 53 21 61 29

36 4 44 12 52 20 60 28

35 3 43 11 51 19 59 27

34 2 42 10 50 18 58 26

33 1 41 9 49 17 57 25

Existe também outra versão do DES chamada de 3DES ou Triple-DES, que realiza

o mesmo processo do DES repetido por 3 vezes. A segurança do 3DES é superior à

do DES somente se utilizadas chaves diferentes em cada vez da sua execução, pois para

o processo de decifragem basta inserir o texto cifrado e a chave para obtenção do texto

claro, fazendo o 3DES equivalente ao DES caso a mesma chave seja utilizada nas três fases

do processo. Estes dois foram por muito tempo utilizados como padrões de criptogra�a,

porém apresentaram falhas de segurança quando submetidos a processos de criptoanálise e

atualmente foram substituídos pelo NIST por um novo algoritmo, o Advances Encryption

Standard (AES) [Stallings, 2008].

Pode ser observado que a estrutura desse algoritmo possui funcionalidades distintas

bem de�nidas, isso possibilita uma implementação modular, que facilita o entendimento

do código, sua implementação, a reutilização posterior de partes do código e a detecção

e correção de erros concebidos a nível de implementação. Isso é bastante desejável para

a implementação proposta neste trabalho, já que a linguagem aqui utilizada, a VHDL,

possui um alto nível de di�culdade de design e exige um profundo conhecimento do projeto

a ser implementado, logo, com a criação separada de pequenos módulos, a criação do

sistema como um todo se torna mais simples.

35

Capítulo 4

O DES em VHDL

Este capítulo apresenta como foi implementado o algoritmo DES, descrito no capítulo

anterior, com a linguagem VHDL já apresentada no Capítulo 2, do sistema criptográ�co

aqui criado. Ainda em VHDL, foram construídos arquivos de testes que foram utilizados

para a simulação do sistema, que será vista no Capítulo 5 juntamente com a efetiva

implantação do sistema em hardware.

Neste trabalho a implementação em VHDL do DES teve dois momentos distintos. No

primeiro, dentre as diversas referências na literatura, uma que se destacou por apresentar

uma implementação simples do algoritmo pretendido foi a de Moreno [Moreno et al., 2005],

então foi reproduzido o código presente nesta e correções foram realizadas a �m de obter

uma compilação correta do sistema. Num segundo momento, a implementação sofreu

alterações com objetivo de torná-la mais completa e e�ciente. Tais alterações serão apre-

sentadas na Seção 4.3.

4.1 Estrutura do Sistema

Como já foi apresentado na Seção 2.4.1, podem ser utilizadas tanto descrições compor-

tamentais quanto estruturais e até mesmo híbridas para criação de sistemas em VHDL.

Neste trabalho optou-se por uma abordagem híbrida, já que ora foram descritos compor-

tamentos para criação dos componentes, como pode ser observado nas linhas de 1 a 4 no

Algoritmo 4.1, ora foi necessária a descrição da estrutura a ser criada, como por exemplo,

para a criação e chamada dos subcomponentes que criam a estrutura hierárquica presente

nesta implementação (linhas 5 e 6 do Algoritmo 4.1).

36

Algoritmo 4.1 Exemplo de Descrição Híbrida Criada.

1 Lout <= PI (32 to 63) when i t e r a c a o = "0000" else R;

2 Aux <= PI (0 to 31) when i t e r a c a o = "0000" else L ;

3 Rout <= Aux xor Pout ;

4 PF <= Rout&Lout ;

5 i t e r a : rounds port map ( Lout , SubChave , Pout ) ;

6 chaves : keys port map (K, i t e r a cao , SubChave ) ; ;

A codi�cação foi realizada de forma modular, ou seja, cada funcionalidade foi im-

plementada em um arquivo em VHDL diferente, totalizando 12 módulos (ou arquivos)

distintos e interligados entre si de forma hierárquica.

O primeiro arquivo intitulado sistema.vhd1, recebe os dados de entrada, que serão o

texto a ser cifrado (64 bits), a chave criptográ�ca (64 bits), o sinal de relógio do hardware

(clock) e o sinal de reset do sistema para a produção de um texto cifrado (64 bits) como

sinal de saída (descrição dada pela entidade criada nas linhas de 1 a 7 do Algoritmo 4.2).

Dentro de sua arquitetura (linhas 1 a 11 do Algoritmo 4.3) é de�nido o subcomponente

des.vhd (linhas 2 a 8 do Algoritmo 4.3), que recebe a chave permutada previamente pelo

sistema.vhd, o texto claro, a rodada do processo de cifragem e o sinal de relógio do sistema

para geração e retorno do texto cifrado. O subcomponente descrito por des.vhd é então

chamado ao �nal da arquitetura do módulo sistema.vhd (linha 10 do Algoritmo 4.3).

Algoritmo 4.2 Entidade do Módulo sistema.vhd.

1 entity s i s tema i s

2 port ( c l k : in s td_log i c ;

3 r e s e t : in s td_log i c ;

4 K : std_log ic_vector (63 downto 0 ) ;

5 din : s td_log ic_vector (63 downto 0 ) ;

6 sa ida : out s td_log ic_vector (63 downto 0 ) ) ;

7 end s i s tema ;

1Extensão dos arquivos em VHDL.

37

Algoritmo 4.3 Arquitetura do Módulo sistema.vhd.

1 architecture sistema_arch of s i s tema i s

2 component des

3 port ( c l k : in s td_log i c ;

4 i t e r a c a o : s td_log ic_vector (3 downto 0 ) ;

5 K : std_log ic_vector (55 downto 0 ) ;

6 din : s td_log ic_vector (63 downto 0 ) ;

7 sa ida : out s td_log ic_vector (63 downto 0 ) ) ;

8 end component ;

9 . . .

10 U1 :DES port map (Clk , Rodada , chave , din , sa ida ) ;

11 end sistema_arch ;

Seguindo a mesma estrutura do módulo principal, os demais arquivos também reali-

zam parte do processamento e delegam parte para outros componentes. O módulo des.vhd

realiza a permutação inicial do texto claro e utiliza um componente para a criação de sub-

chaves (keys.vhd) e outro para realizar as demais partes do processamento (rounds.vhd),

com excessão à permutação �nal, que é realizada por este com o resultado �nal retornado

por rounds.vhd.

A última camada da hierarquia tem presente os módulos referentes às S-Boxes descritas

na Seção 3.3 e tem suas funções delegadas pelo módulo rounds.vhd, os arquivos das S-

Boxes realizam as permutações que lhes cabem e retornam o resultado ao módulo a que

é subordinado, que executa as demais funções e retorna ao módulo des.vhd as subchaves.

Todos os componentes e maiores detalhes da implemetação podem ser encontrados no CD

que acompanha esta monogra�a.

Juntos, todos os componentes formam o sistema �nal, que após sua implementação

deve ser compilado para a veri�cação de erros e criação �nal do sistema. Esse processo

será melhor explicado na Seção 5.2.

4.2 Arquivos Auxiliares

Após a compilação de um projeto e antes da efetiva implantação de um sistema descrito

em uma HDL em um circuito reprogramável, recomenda-se sua simulação para veri�cação

dos resultados parciais e �nais, bem como do funcionamento do projeto. Embora existam

softwares que permitam a construção de simulações por meio de interfaces grá�cas, co-

nhecidos como Application Programming Interfaces (API's), através deles não é possível

a fácil alteração dos dados de entrada utilizados, já que cada bit de entrada deve ser

alterado por meio da interface fornecida pelo software.

38

É possível realizar simulações também através do uso de arquivos auxiliares, que

mesmo sendo mais complexos quando da sua criação do que as simulações via API's,

permitem uma maior �exibilidade e controle na sua criação e na alteração dos dados de

entrada, o que é desejável quando se quer testar um projeto com diversas entradas a �m

de veri�car seu funcionamento. Por esse motivo, neste trabalho optou-se pela criação de

arquivos auxiliares que automatizam o processo de simulação.

Os arquivos auxiliares utilizados neste trabalho foram os testbenchs e as macros, os

primeiros são arquivos que criam um ambiente virtual a �m de veri�car o correto funcio-

namento de um determinado projeto, já as macros são arquivos utilizados para armazenar

as con�gurações de formato de onda a serem mostrados na simulação de um projeto em

VHDL ou outra HDL.

No testbench criado, foi virtualizado um ambiente em que todas os dados de entrada

do sistema são inseridos com intuito de testar seu funcionamento através dos dados de

saída obtidos. Todo o ambiente criado é assim feito com base no arquivo VHDL principal

da aplicação projetada, ou seja, o arquivo sistema.vhd. Por se tratar de um arquivo

especí�co para um projeto em VHDL, o arquivo de testbench também deve ser criado

nessa linguagem, logo, apresenta estrutura semelhante ao arquivo principal ao qual remete

e o utiliza como componente, o que pode ser visto no Algoritmo 4.4, podendo assim passar

os dados de entrada a serem testados para o sistema projetado.

Algoritmo 4.4 Arquitetura do Testbench.

1 architecture ac_sistema_tb of sistema_tb i s

2 component s i s tema

3 port (

4 c l k : in s td_log i c ;

5 r e s e t : in s td_log i c ;

6 din : in s td_log ic_vector (63 downto 0 ) ;

7 K : in s td_log ic_vector (63 downto 0 ) ;

8 sa ida : out s td_log ic_vector (63 downto 0)

9 ) ;

10 end component s i s tema ;

11 −−Declarações e a t r i b u i ç õ e s de s i n a i s e proces sos

O arquivo de macro apresentado no Algoritmo 4.5 foi feito para encapsular todas as

execuções a serem realizadas quando da execução de simulações. Deste modo, todos os

comandos de simulação podem ser executados sequencialmente de forma automática.

39

Algoritmo 4.5 Arquivo Auxiliar Macro.

1 v l i b work

2 vcom sbox1 . vhd

3 . . .

4 vcom des . vhd

5 vcom si s tema . vhd sistema_tb . vhd

6 vsim −t ns work . sistema_tb

7 view wave

8 add wave −rad ix hex / din_s i s

9 add wave −rad ix hex /K_sis

10 add wave −rad ix hex /sis_cmp/U1/k

11 add wave −rad ix hex /sis_cmp/U1/PF

12 add wave −rad ix hex / sa ida_s i s

13

14 run 3 ns

Para uma correta execução, todos os componentes e subcomponentes do sistema devem

ser adicionados ao arquivo, a começar por aquele mais interno (ou subordinado) e a

terminar pelo mais externo, precedidos do comando vcom, e então deve-se acrescentar as

variáveis cujas ondas devem ser visualizadas no simulador com sua respectiva con�guração

de visualização e seu caminho de acordo com a hierarquia dos arquivos, ao �nal, deve-se

colocar também o nome do arquivo de testbench a ser executado e as variáveis que se

deseja avaliar com suas devidas con�gurações de formato de onda a ser exibida, além do

tempo que a execução deve durar.

A macro criada no Algoritmo 4.5 apresenta as ondas de saída das variáveis que repre-

sentam o texto claro inserido, a chave original inserida, a chave permutada, o texto cifrado

antes da permutação �nal, e o texto cifrado �nal em formato de valor hexadecimal, com

efeito de facilitar o entendimento das saídas geradas e executa por um total de tempo de

3 nanossegundos.

4.3 Comparativo de implementações

Como dito anteriormente, o código presente em [Moreno et al., 2005] norteou a realiza-

ção deste trabalho, porém, algumas alterações que serão aqui exploradas foram necessárias

para que seu funcionamento fosse satisfatório.

Primeiramente, o módulo principal sistema.vhd sofreu alteração quanto às iterações

do processamento e sua incrementação. O código original fornecia uma codi�cação falha

em seu processo interno referente ao incremento das rodadas do processamento principal

40

do DES (Algoritmo 4.6), tal código tratava o vetor de rodadas como uma variável in-

teira, logo, quando da simulação, que será apresentada no Capítulo 5, são criados erros

de execução que impedem o funcionamento do sistema. Assim sendo, a incrementação

apropriada do vetor em questão foi alterada para uma adequada execução do projeto, fa-

zendo a incrementação total do vetor de 4 bits que representa as 16 rodadas do algoritmo

(Algorimto 4.7).

Algoritmo 4.6 Incrementação das Iterações por [Moreno et al., 2005].

1 process ( Clk )

2 begin

3 i f Clk ' event and Clk= '1 ' then

4 Rodada<=Rodada+1;

5 end i f ;

6 end process ;

Algoritmo 4.7 Incrementação das Iterações deste Trabalho.

1 process (Clk , r e s e t )

2 begin

3 i f r e s e t = '1 ' then

4 Rodada (3 downto 0)<="0000" ;

5 e l s i f r i s ing_edge ( c l k ) then

6 Rodada (3 downto 0)<=Rodada (3 downto 0)+"0001" ;

7 end i f ;

8 end process ;

Após a correção inicial do código, foram realizadas alterações a �m de propiciar melho-

rias na implementação para obtenção de um código mais completo e e�ciente. O código

proposto em [Moreno et al., 2005] apresenta uma entrada a mais que a proposta neste

trabalho para o módulo de cifragem/decifragem. Tal entrada tem por objetivo de�nir se

está sendo realizada a cifragem ou a decifragem para a obtenção dos textos ou chaves

parciais utilizadas no processo em questão. Como este trabalho tem por objetivo sim-

plesmente a obtenção do texto cifrado/decifrado �nal, tal entrada se torna obsoleta e foi

então removida da codi�cação criada. Essa remoção acarretou na modi�cação de todos

os componentes e subcomponentes que utilizavam a entrada removida.

41

Algoritmo 4.8 Módulo Principal por [Moreno et al., 2005].

1 entity s i s tema i s

2 port ( c l k : in s td_log i c ;

3 r e s e t : in s td_log i c ;

4 modo : s td_log i c ;

5 key : s td_log ic_vector (55 downto 0 ) ;

6 din : s td_log ic_vector (63 downto 0 ) ;

7 sa ida : out s td_log ic_vector (63 downto 0 ) ) ;

8 end s i s tema ;

Algoritmo 4.9 Módulo Principal deste Trabalho.

1 entity s i s tema i s

2 port ( c l k : in s td_log i c ;

3 r e s e t : in s td_log i c ;

4 key : s td_log ic_vector (63 downto 0 ) ;

5 din : s td_log ic_vector (63 downto 0 ) ;

6 sa ida : out s td_log ic_vector (63 downto 0 ) ) ;

7 end s i s tema ;

Outra alteração realizada que também é perceptível entre o Algoritmo 4.8 e o Al-

goritmo 4.9 é referente à chave criptográ�ca inserida no algoritmo. O código original

suprime a etapa de compressão inicial da chave descrita na Seção 3.2, passando então a

atuar desde o início com uma chave previamente permutada de 56 bits. O código criado

neste trabalho permite a efetiva inserção de uma chave de 64 bits e realiza internamente

ao módulo principal, antes de passá-la para o módulo gerador de subchaves, a operação de

compressão inicial (Algoritmo 4.10), deixando o processo do DES completo e eliminando

a necessidade de um processamento prévio da chave.

42

Algoritmo 4.10 Implementação da Compressão Inicial da Chave.

1 . . .

2 signal chave : s td_log ic_vector (55 downto 0 ) ;

3 . . .

4 chave<= key (56) & key (48) & key (40) & key (32) &

5 key (24) & key (16) & key (08) & key (00) &

6 key (57) & key (49) & key (41) & key (33) &

7 key (25) & key (17) & key (09) & key (01) &

8 key (58) & key (50) & key (42) & key (34) &

9 key (26) & key (18) & key (10) & key (02) &

10 key (59) & key (51) & key (43) & key (35) &

11 key (62) & key (54) & key (46) & key (38) &

12 key (30) & key (22) & key (14) & key (06) &

13 key (61) & key (53) & key (45) & key (37) &

14 key (29) & key (21) & key (13) & key (05) &

15 key (60) & key (52) & key (44) & key (36) &

16 key (28) & key (20) & key (12) & key (04) &

17 key (27) & key (19) & key (11) & key ( 0 3 ) ;

Todas as alterações efetuadas por este trabalho resultaram na melhoria do sistema

criado. Tais melhorias foram referentes à utilização de componentes internos do FPGA

em que o sistema será implantado e serão apresentadas na Seção 5.2 do Capítulo 5, capítulo

este que apresentará também todo o processo de veri�cação e simulação da implementação

aqui apresentada, bem como a transcrição do sistema para um FPGA, obtendo então o

hardware criptográ�co objetivado por este trabalho.

43

Capítulo 5

Construção do Hardware Criptográ�co

Este capítulo trata da efetiva implantação de um hardware criptográ�co com o algo-

ritmo DES em uma placa FPGA, bem como todos os materiais e processos intermediários

utilizados para tal, como a compilação e a simulação do código produzido que procedem

a criação do hardware.

5.1 Materiais e Programas Utilizados

Previamente à criação do sistema, houve a necessidade de selecionar os programas

a serem utilizados para as diversas etapas do processo de implementação do hardware

desejado.

Para a criação do hardware criptográ�co proposto por este trabalho, foi utilizada uma

placa cedida para a concepção deste projeto pelo Departamento de Engenharia Mecânica

da Universidade Federal de Uberlândia. A escolha pelo dispositivo utilizado se deu então,

de acordo com a placa disponível para uso.

A produção de um sistema a ser colocado em um FPGA necessita de algumas etapas

para obtenção de um melhor resultado. A primeira coisa a ser feita é a criação do código

a ser introduzido no sistema, código esse que teve sua estrutura explicada no Capítulo 4 e

pode ser veri�cado na íntegra no CD que acompanha esta monogra�a. Os demais passos

aqui realizados incluem a compilação de tal código, sua simulação, a atribuição de pinos

de entrada e saída de dados a serem utilizados no hardware e a colocação do código na

placa FPGA desejada. Com exceção à primeira etapa já concluída, as demais necessitam

de programas que executem e facilitem esses processos.

Existem diversos programas, especialmente para compilação e simulação, disponíveis

para uso, dentre eles, o ISE WebPack R© Software da Xilinx R©, o OrCad R© da Cadence R©, o

ALDEC R© Active-HDL Simulator e os programas fornecidos pela Alera R©, a fabricante da

placa utilizada neste trabalho.

Por ter disponível um FPGA da Altera R©, e também por essa fornecer uma ampla

44

gama de programas, documentações, tutoriais e vídeo-aulas, optou-se pela utilização de

programas de licença gratuita dessa empresa neste trabalho, já que também existem ou-

tros programas por ela fornecidos que são mais robustos e possuem mais funcionalidades,

porém, como o projeto aqui proposto é relativamente simples, a versão gratuita dos pro-

gramas utilizados é su�ciente para obtenção dos resultados desejados.

5.1.1 A Placa Utilizada

Existem diversas placas de dispositivos FPGA disponíveis no mercado produzidas

por diferentes fabricantes. Como dito anteriormente, este trabalho foi projetado com um

FPGA fornecido pela Universidade Federal de Uberlândia, cujo modelo é o EP2C20F484C7

da família de dispositivos Cyclone R© II da Altera R©. Por convenção, tal placa será aqui

referida apenas pelo nome da família a qual pertence, Cyclone II.

A placa supracitada é da família de desenvolvimento de sistemas embarcados de baixo

custo da Altera e já vem completamente pronta para o desenvolvimento de sistemas im-

plementados em hardware. Um processador NIOS R© II especí�co para a con�guração de

sistemas embarcados, memória �ash, Random Access Memory (RAM) e Static Random

Access Memory (SRAM) integradas, um circuito Universal Serial Bus (USB) Blaster para

conexão com computador para passagem de dados e programas, botões e interruptores,

diodos emissores de luz (LED's), extensores duais de 40 pinos, portas seriais para cone-

xão de diversos periféricos e diversos outros recursos já estão inclusos, (c.f. Figura 5.1)

assim, essa placa já fornece todas as funcionalidades necessárias para o desenvolvimento

de diversos tipos de sistemas.

Figura 5.1: Cyclone R© II EP2C20F484C7. Fonte: [ALTERA, 2006b].

45

É importante colocar que o processador presente no FPGA é o dispositivo que receberá

o projeto criado, as demais funcionalidades são apenas artifícios extras que vem a facilitar

a integração do hardware concebido. Assim sendo, por se tratar de um chip, sua pinagem1

deve ser especi�cada de acordo com a aplicação obtida para a utilização dos recursos

disponíveis na placa, tal especi�cação será melhor tratada na Seção 5.4.

5.1.2 O Programa Quartus II

Dentre os diversos programas para criação, compilação e simulação de projetos criados

em HDL's, dois em especial foram utilizados para concretizar este trabalho. O primeiro,

intitulado Quartus II, será aqui apresentado e o segundo, intitulado ModelSim, será visto

em seguida.

O programa Quartus II da Altera R© possui duas vertentes, uma paga, que oferece mais

recursos e funcionalidades para manipulação em geral de projetos a serem implantados em

sistemas embarcados, e uma versão gratuita (versão web) que é mais simpli�cada quanto

às facilidades e recursos que apresenta aos seus usuários. Por suprir as necessidades deste

trabalho, foi utilizada a distribuição gratuita do software em sua versão Quartus II 9.1sp2

Web Edition.

Esse software, que pode ter sua tela inicial visualizada na Figura 5.2, disponibiliza

desde um ambiente para edição do código criado em HDL's até uma API para simulação

da aplicação desenvolvida e uma ferramenta que faz a transcrição do sistema criado para

o FPGA desejado.

Figura 5.2: Tela Inicial do Quartus II Web Edition.

1Descrição de funcionamento, posição e sinais de cada um dos pinos de um circuito integrado.

46

O Quartus II será utilizado neste trabalho para os processos de compilação, que será

descrito na Seção 5.2, de atribuição de pinos, que será apresentado na Seção 5.4 e de

migração do sistema para a Cyclone II, que será visto na seção 5.5. Para tais, serão

utilizados respectivamente o compilador VHDL do Quartus II, a ferramenta Pin Planner

e a ferramenta Programmer, ambas inclusas nesse software. Cada utilização será melhor

explicada em sua respectiva seção.

5.1.3 O Programa ModelSim

Por se tratar de um programa de fácil entendimento, fornecido pela Altera e a �m de

manter a utilização dos softwares dessa empresa, foi utilizado o programa ModelSim para

a simulação do sistema criado neste trabalho e veri�cação dos dados de saída obtidos.

Também disponível nas duas vertentes, paga e gratuita, aqui também foi possível

realizar todas as atividades desejadas através da distribuição gratuita, sendo utilizada

então neste trabalho a versão ModelSim ALTERA STARTER EDITION 6.5b, cuja tela

inicial pode ser vista na Figura 5.3.

Figura 5.3: Tela Inicial do ModelSim ALTERA STARTER EDITION 6.5b.

Através do ModelSim é possível tanto a sua utilização para criação de simulações

por API quanto a execução de arquivos auxiliares de testbench e macro criados para

automação das simulações. Mais detalhes sobre o processo de simulação através dos

arquivos auxiliares com o ModelSim serão apresentados na Seção 5.3, onde é mostrada a

simulação do projeto realizado neste trabalho.

47

5.2 Compilação

A compilação de um projeto tem por objetivo a veri�cação do código criado e sua

transformação em um outro código intermediário para sua futura execução. No caso

das HDL's, o processo de compilação realiza, além dessas atividades, a veri�cação da

quantidade de componentes lógicos a serem utilizados internamente por um circuito criado

com sua utilização, possibilitando que o designer averigue a viabilidade de seu projeto. No

caso da compilação feita no software Quartus II, apresentado na Seção 5.1.2, todas essas

informações são fornecidas quando a compilação é completada com êxito, como pode ser

observado na �gura 5.4. Caso haja algum erro no código produzido, a tela apresentada não

aparecerá e serão lançadas mensagens de erro na caixa de diálogo do programa, indicando

onde está presente a falha do código.

Figura 5.4: Compilação da Implementação do DES deste Trabalho.

Além disso, é possível perceber que o FPGA (nome do dispositivo e a família a que per-

tence) em que o sistema criado será implantado é mostrado no resultado da compilação.

Isso se dá pois a porcentagem da quantidade de componentes internos e pinos utilizados

só é possível de ser analisada quando indicada a placa a ser utilizada, já que há diferen-

tes dispositivos disponíveis no mercado, cada um com suas peculiaridades e quantidade

variável de componentes internos. Assim, quando da criação do projeto para compilação

no Quartus II, a correta indicação do FPGA a ser futuramente utilizado possibilita um

48

fornecimento maior e mais preciso de informações acerca do dispositivo a ser criado.

Outras informações também estão presentes no resultado da compilação, como a versão

do software utilizado para tal, o nome do projeto criado, o nome do componente de maior

nível na hierarquia (Top-level Entity Name), o tipo de modelo de temporização utilizado

e se tal modelo foi atendido (Timing Models e Met timing requirements), a quantidade

de registradores utilizados do chip, a quantidade de pinos reais e virtuais utilizados, e

também de elementos multiplicadores binários e Phase-Locked Loops2 (PLL's). Algumas

funcionalidades e elementos presentes no FPGA a ser implantado, como os multiplicadores

e PLL's, não foram utilizados devido à simplicidade do design do sistema criado.

5.2.1 Análise do Resultado da Compilação

Como apresentado na Seção 4.3, o código resultante deste trabalho contribuiu para

uma redução dos componentes internos do hardware criado. Tal melhoria pode ser con�r-

mada comparando-se os resultados obtidos na compilação, já apresentados na Figura 5.4,

com o resultado da compilação do código presente em [Moreno et al., 2005], mostrado na

Figura 5.5.

Figura 5.5: Compilação da Implementação do DES de [Moreno et al., 2005].

Através da análise das duas compilações, é possível perceber que passa de 914 (5%) da

2Circuito eletrônico composto por um oscilador de frequência variável e um detector de fase que gera

sinais de saída dependentes da fase do sinal de entrada.

49

codi�cação de [Moreno et al., 2005] para 631 (3%) a utilização de elementos lógicos, de

um total de 18.752 disponíveis para uso na Cyclone II. Assim sendo, a codi�cação deste

trabalho produz uma redução de 44,84% na utilização interna dos elementos do chip da

placa, o que torna essa implementação visivelmente mais e�ciente.

5.3 Simulação

Veri�cada a codi�cação realizada, o sistema está pronto para ser simulado, a �m de

averiguar seu correto funcionamento através da análise dos valores de entrada fornecidos

e de saída obtidos. Além disso, na simulação é possível veri�car o tempo de execução do

sistema quando fornecida determinada entrada. Para essa etapa, foi utilizado o software

ModelSim da Altera.

Poderia ter sido utilizada a API do programa para criação da simulação, mas como

já dito na Seção 4.2, optou-se pela escrita de um código que de�ne todo um ambiente

de execução (testbench), contendo todos os dados de entrada, e outro que automatiza o

processo de simulação (macro), ambos descritos na Seção 4.2, e a chamada desse último

por meio de linhas de comando no ModelSim, produzindo então o resultado da simulação

visto na Figura 5.6. Isso permite a rápida execução da simulação e também a alteração

dos dados de entrada no ambiente de execução simulado.

Figura 5.6: Simulação do Sistema Criado Para Cifragem.

5.3.1 Análise dos Resultados da Simulação

Através da Figura 5.6 é possível veri�car as variáveis indicadas para visualização no

arquivo de macro juntamente com os dados de entrada de�nidos no testbench criado e o

tempo de execução gasto. O sistema criado realiza a execução de todas as suas funções

em menos de 1 nanossegundo.

A �m de veri�car o correto funcionamento do código criado, foi realizada uma segunda

simulação tendo-se como entrada o texto cifrado e a chave utilizados na simulação da

50

Figura 5.6. Seguindo a descrição do algoritmo DES utilizado neste trabalho feita no

Capítulo 3, o correto funcionamento do sistema deve então retornar como saída o texto

claro da primeira simulação, o que pode ser comprovado pela Figura 5.7.

Figura 5.7: Simulação do Sistema Criado Para Decifragem.

Para dar continuidade às comparações com o código fornecido em [Moreno et al., 2005],

foi executada uma simulação do código por ele proposto após as devidas correções apre-

sentadas na Seção 4.3. O resultado de tal simulação pode ser apreciado na Figura 5.8 e

apresenta algumas discrepâncias em relação à Figura 5.6 justamente pelo fato de utilizar

uma chave previamente permutada de 56 bits, como já descrito na Seção 4.3.

Figura 5.8: Simulação do Sistema de [Moreno et al., 2005].

Para a simulação acima, foi utilizado o mesmo arquivo de macro e de testbench que

a simulação do sistema desenvolvido neste trabalho, a alteração �ca apenas na chave

de entrada no algoritmo, que recebe o valor equivalente à chave já permutada, vista na

simulação do projeto aqui criado, e permanece a mesma posteriormente na execução. É

possível observar que a implementação de [Moreno et al., 2005] consome o mesmo tempo

de execução que o sistema criado neste trabalho, assim, �ca claro que a melhoria aqui

alcançada diz respeito apenas à utilização interna de componentes do chip presente no

FPGA.

51

5.4 Atribuição da Pinagem

Como já dito na seção 5.1.1, o sistema criado e implantado em um FPGA se compor-

tará efetivamente como um chip. Deste modo, cada dado3 de entrada e saída será visto

ao �nal como um pino acoplado a um chip, podendo receber ou retornar dados em forma

de alta ou baixa voltagem4, dependendo de sua funcionalidade.

O circuito criado (chip) por si só não é capaz de realizar nenhum processamento sem

que dados sejam inseridos, e também se torna inútil caso nenhum resultado possa ser

obtido dele. Para tanto, no desenvolvimento de uma placa FPGA se faz necessário o uso

dos artifícios nela presentes para que possam ser atribuídos os pinos do circuito criado

aos pinos5 presentes nas diversas funcionalidades presentes na placa.

As atribuições de pinos de um sistema embarcado em um FPGA devem ser feitas

quando da criação do sistema. O Quartus II fornece uma ferramenta especí�ca para

realizar tais atribuições, o Pin Planner, que pode ser visto na Figura 5.9, onde é possível

obter uma visão geral de como o chip do FPGA está organizado eletronicamente e de

sua pinagem interna, que é dividida em bancos de entrada e saída (I/O), bem como os

dados resultantes do projeto criado, possibilitando a atribuição dos dados do projeto aos

pinos presentes na placa. A descrição completa de todos os bancos de I/O pode ser

consultada em [ALTERA, 2005] e os pinos e sua nomenclatura podem ser apreciados em

[ALTERA, 2006a].

Figura 5.9: Ferramenta Pin Planner do Quartus II.

3Cada bit nesse caso é considerado um dado, um vetor de bits é visto como um conjunto de dados e

cada bit é atribuído a um pino.4A alta voltagem representará o bit 1 e a baixa voltagem o bit 05Por se tratar de uma placa eletrônica, todas as comunicações internas do FPGA, incluindo as diversas

interfaces que esta fornece, são feitas por meio de circuitos eletrônicos interligados por meio de pinos.

52

Atribuir pinos e fazer o interfaceamento entre as funcionalidades presentes em FPGA

e o circuito criado em seu chip não é uma tarefa fácil, pois requer um estudo aprofundado

de cada componente extra presente na placa, desde seu funcionamento interno até como

integrá-lo ao circuito.

O projeto criado neste trabalho possui uma quantidade de dados de entrada e saída

muito grande para interligar aos dispositivos presentes na Cyclone II, utilizando um total

de 194 pinos (c.f. Figura 5.4) para entrada e saída de dados, o que di�culta ainda mais o

interfaceamento. Neste trabalho foram utilizados alguns artifícios para facilitar a atribui-

ção da pinagem para inserção dos dados e visualização dos resultados, a �m de validar o

funcionamento do circuito criado.

Para a inserção de dados, os bits de controle (clock e reset) e os dados de entrada

(texto claro e chave) foram inseridos por meio dos interruptores presentes na Cyclone II,

que apresentam os valores lógicos 0 ou 1 quando posicionadas para baixo ou para cima,

respectivamente. O problema com essa abordagem, é que a placa dispõe apenas de 10

interruptores, e são um total de 130 bits de entrada no sistema. A solução encontrada foi

a atribuição dos 2 bits de controle e de apenas 8 bits de dados, 4 para a chave e 4 para o

texto claro, esses 4 bits são então replicados dentro do código do sistema6, formando um

texto claro e uma chave criptográ�ca de 64 bits replicados a partir dos 4 bits originais

cada uma.

Para visualização do texto cifrado foram utilizados os LED's do FPGA, que represen-

tam os valores lógicos 1 ou 0 quando ligados ou desligados, respectivamente. Aqui também

há o problema de haver mais bits presentes do projeto do que dispositivos disponíveis na

Cyclone II, sendo produzidos 64 bits de texto cifrado para apenas 18 LED's na placa.

Por se saber previamente os dados a serem obtidos através da simulação apresentada na

Seção 5.3, apenas os 167 primeiros bits de saída do sistema foram atribuídos aos LED's,

possibilitando sua conferência com a simulação, já que não foi possível a visualização de

todo o resultado.

5.5 A Migração da Aplicação para o Hardware

Após a atribuição dos pinos que serão gerados na criação do hardware, é necessário

realizar mais uma compilação para que o Quartus II possa incorporar ao projeto criado

tais atribuições e obter um sistema completo para implantação no FPGA, gerando um

6O código foi alterado apenas para a implantação do código no FPGA de forma a permitir a entrada

e saída de dados, seu funcionamento não foi prejudicado.7A escolha por representar apenas 16 bits, e não os 18 que poderiam ser atribuídos, se deu devido

ao fato de o número 16 poder ser escrito como 24, o que facilita a visualização quando se trata da

representação de números binários.

53

arquivo de extensão sof, que pode ser então transcrito para a placa. Após esse passo,

outra ferramenta do Quartus II, especí�ca para implantar um projeto criado em uma

HDL em um FPGA, chamada Programmer (c.f. Figura 5.10), é utilizada para esse �m.

Figura 5.10: Ferramenta Programmer do Quartus II.

O FPGA a receber o projeto criado deve ser conectado ao computador que possui essa

ferramenta instalada, nela então é possível indicar em qual hardware conectado ao com-

putador o projeto criado deve ser carregado, bem como qual arquivo .sof carregar. Uma

vez colocado na placa, o chip nela presente passa a agir como o hardware criptográ�co

projetado e o FPGA pode então ser desconectado do computador. A partir disso, os inter-

ruptores da placa podem ser organizados de modo a inserir os dados a serem processados

para produzir a saída do texto criptografado nos LED's.

5.6 A Execução do Sistema

Para execução do hardware criado, foram utilizados os mesmos dados inseridos no

arquivo de testbench8 utilizado na simulação da Seção 5.3. Os dados são então inseridos

através dos interruptores, de acordo com a ordem estabelecida quando da atribuição da

pinagem, produzindo a con�guração de interruptores e LED's vista na Figura 5.11.

8Os resultados da simulação foram apresentados em notação hexadecimal apenas para facilitar o

entendimento e tornar menos extensa a visualização dos dados, porém os dados foram inseridos no

arquivo de simulação em notação binária.

54

Figura 5.11: Dados de Entrada e Saída da Execução do Hardware Criado.

Para obtenção dos resultados acima, o clock do sistema foi iniciado com valor ló-

gico 0 e está representado pelo interruptor SW9, o sinal de reset que inicia o proces-

samento foi con�gurado com o valor lógico 1, sendo atribuído ao interruptor SW8, os

interruptores SW7, SW6, SW5 e SW4 foram con�gurados de modo a representarem o

número binário 1010, que quando replicado dentro do sistema produzirá a chave cripto-

grá�ca AAAAAAAAAAAAAAAAh9, por �m, os interruptores SW3, SW2, SW1 e SW0

apresentaram a con�guração equivalente ao valor binário 0101, que ao serem replicados

internamente ao sistema de hardware produzirá o texto claro 5555555555555555h.

Todos esses valores podem ser conferidos na simulação apresentada na Seção 5.3,

bem como a con�guração apresentada pelos LED's, que representam os 16 primeiros bits

do texto cifrado obtido e produzem a seguinte sequência: LEDR9 desligado, LEDR8

desligado, LEDR7 desligado, LEDR6 ligado, LEDR5 desligado, LEDR4 desligado,

LEDR3 desligado, LEDR2 ligado, LEDR1 desligado, LEDR0 ligado, LEDG7 desli-

gado, LEDG6 desligado, LEDG5 desligado, LEDG4 ligado, LEDG3 desligado e LEDG2

desligado, os LED's LEDG1 e LEDG0 se encontram desligados mas não fazem parte da

visualização do resultado, assim, a sequência de bits representada é 0001000101000100,

que são os primeiros 4 dígitos hexadecimais (1144h) apresentados no resultado da simu-

lação da Seção 5.3.

Por se tratar de um FPGA, os dados de entrada podem ser alterados a qualquer

momento para resultar em novos dados de saída sem a necessidade de se reiniciar o sistema,

como já citado na Seção 2.3.1, assim, se modi�cada a con�guração dos interruptores para

inserção dos dados de entrada apresentados na simulação da Figura 5.12 (1101 para a

chave e 0011 para o texto claro), os primeiros 16 bits do resultado (0011001000110111)

apresentados nos 16 primeiros LED's da placa passam a representar o resultado do novo

processamento (c.f. Figura 5.13), e os dados podem ser conferidos de acordo com a

simulação.

9Representação hexadecimal da cadeia de 64 bits que representa a chave.

55

Figura 5.12: Simulação do Sistema Criado com Outros Dados de Entrada.

Figura 5.13: Outros Dados de Entrada e Saída da Execução do Hardware Criado.

Desse modo, o hardware criptográ�co objetivado neste trabalho através do uso da lin-

guagem VHDL e da placa FPGA disponível foi alcançado com sucesso, podendo veri�car

a entrada e saída de dados obtidos em simulações através dos interruptores e LED's da

placa. E além disso, foi conseguido um ganho signi�cativo em relação à implementação

que norteou a construção do circuito aqui criado quanto ao uso de componentes internos.

5.7 As Di�culdades Encontradas

Durante todo o processo de produção do sistema aqui proposto, diversas di�culdades

foram encontradas e superadas, desde a obtenção do código em VHDL utilizado, sua

correção e melhoria, à utilização da placa Cyclone II, sua con�guração e interfaceamento.

Seguem abaixo as di�culdades que mais se destacaram durante a criação do hardware

desejado e as soluções encontradas para tais:

• Complexidade das VHDL's: Tais linguagens apresentam grande di�culdade de

entendimento devido à sua complexidade e diferente forma de se trabalhar para

obtenção de um sistema quando comparada às linguagens de programação. Para

ser possível a utilização de tal abordagem, foi escolhida a linguagem VHDL, que é

bem documentada e são presentes na literatura diversos exemplos que a utilizam, o

que vem a facilitar a adaptação à abordagem das HDL's, o entendimento e a futura

criação dos mais variados códigos descritos nessa linguagem.

56

• Obtenção/criação do código do DES em VHDL: Mesmo se tratando de um

algoritmo relativamente simples, a implementação do DES em uma linguagem de

descrição de hardware é bastante complexa, por esse motivo, optou-se pela utilização

de uma codi�cação já existente. Tal codi�cação, porém, necessitava de alterações e

correções para que seu funcionamento se desse corretamente, que foram apresentadas

na Seção 4.3 do Capítulo 4.

• Simulação do código: Previamente à concessão da placa Cyclone II pela Uni-

versidade Federal de Uberlândia, o trabalho de codi�cação do projeto já havia se

iniciado, trazendo então a necessidade de veri�cação do código através de simula-

ções, o que trouxe a di�culdade da utilização dos programas para esse �m disponíveis

no mercado, pois apresentavam pouca documentação ou difícil entendimento e ma-

nipulação de sua interface de utilização. A obtenção da placa e sua respectiva gama

de programas auxiliares veio a sanar tais di�culdades, pois os programas apresentam

uma solução completa para o desenvolvimento (c.f Seção 5.1) , interfaces amigáveis

e boa documentação para consulta e melhor entendimento.

• Utilização da placa: A efetiva utilização da placa e a transcrição do sistema para

esta foi a fase que mais apresentou di�culdades, que podem ser divididas em:

Instalação da placa: Para poder ser utilizada de modo a receber qualquer sis-

tema, o FPGA deve ser conectado a um computador que o contenha para que esse

último possa transcrever o projeto para o primeiro. O problema em tal utilização se

apresenta no fato de a placa não ser reconhecida automaticamente pelo computador

ao qual está acoplada, necessitando então, da instalação manual de seu driver que

é fornecido quando da instalação dos programas presentes no CD que acompanha o

FPGA.

Utilização dos recursos da placa: Embora a Cyclone II possua diversas fun-

cionalidades, a documentação referente à sua utilização é bastante de�ciente. A

documentação da placa e os textos presentes na literatura apenas indicam as fun-

cionalidades e seu funcionamento interno, �cando aquém às expectativas de quem

deseja utilizar tais documentos como guia para criação de sistemas que tirem má-

ximo proveito das funcionalidades desse FPGA. Assim, não foi possível, por falta de

tempo hábil para exploração da placa, a criação de interfaces de I/O mais amigáveis.

A solução encontrada foi a utilização dos artifícios descritos na Seção 5.4.

O entendimento do algoritmo escolhido e outras di�culdades também foram presen-

ciadas no desenvolvimento deste trabalho, porém não se equiparam em signi�cância

às descritas acima, que por meio de muita pesquisa e tempo dedicado foram sanadas.

57

Capítulo 6

Conclusão

Este trabalho teve como objetivo a criação um sistema criptográ�co embarcado, atra-

vés do qual dados podem ser cifrados diretamente pelo hardware criado em um tempo

de execução bem inferior ao que seria alcançado com o uso de um software equivalente,

o que é bastante desejável quando se trabalha em um ambiente que exige cada vez mais

segurança e rapidez na execução das mais diversas tarefas.

Foram discutidos os conceitos de criptogra�a, circuitos reprogramáveis, linguagens de

descrição de hardware e o clássico algoritmo criptográ�co DES, que utilizados em conjunto

tornaram possível a realização deste projeto. Foi possível perceber que a segurança de

dados é imprescindível no meio digital, e que sistemas criptográ�cos embarcados vem a

calhar nesse contexto. Também foram veri�cadas as vantagens de se utilizar HDL's, que

produzem sistemas com vantagens de hardware e software, e das placas FPGA's, que

permitem sua recon�guração para implantação de outro sistema sem o desperdício do

dispositivo.

Diversos passos foram executados para alcançar o circuito desejado, desde a criação

de um código em linguagem de descrição de hardware à manipulação da pinagem de um

circuito FPGA para delegação das operações de entrada e saída de dados do hardware,

cada etapa apresentando sua importância e contribuindo para a obtenção de um sistema

rápido e funcional.

Muitas foram as di�culdades encontradas, desde a complexidade da linguagem VHDL

utilizada à disponibilidade de recursos do FPGA utilizado, passando pelo entendimento

do algoritmo DES para sua implementação e das funcionalidades da placa para transcrição

do sistema criado.

Por �m, conseguiu-se a obtenção do hardware desejado, e através de simulações, foi

possível observar que este apresenta melhorias quanto à utilização de componentes inter-

nos do FPGA utilizado para sua criação. Tal ganho foi possível com melhoramento da

implementação de um código presente na literatura, que foi alterado de forma a obter um

código mais completo e e�ciente.

58

6.1 Trabalhos Futuros

Este trabalho apresentou uma introdução a um vasto campo de pesquisa, já que en-

volve os tanto a criptogra�a quanto sistemas embarcados. Deste modo, é possível dar

direcionamento a diversos trabalhos relacionados às duas áreas aqui envolvidas, dentre

elas, pode-se investir em:

• Utilização de outras modelagens: A modelagem do algoritmo DES apresentada

neste trabalho foi híbrida, pode-se futuramente fazer uso separadamente das abor-

dagens comportamental e funcional a �m de comparar resultados obtidos através

das três modelagens.

• Criação de Outros Hardwares Criptográ�cos: Pode-se realizar a implementa-

ção de outros algoritmos criptográ�cos em VHDL, ou outra HDL, com a utilização

de FPGA's ou mesmo de outas abordagens de implementação de sistemas embarca-

dos.

• Interfaceamento: Este trabalho utilizou interruptores e LED's para as operações

de I/O, �ca a cargo de trabalhos futuros o estudo das diversas formas de interface-

amento presentes na Cyclone II para facilitar a entrada e saída de dados do circuito

criado.

• Exploração das Funcionalidades da Cyclone II: Aqui foi apresentada a implan-

tação de criptogra�a em um sistema FPGA, porém essa não é a única aplicabilidade

desse tipo de circuito. Suas funcionalidades podem ser melhor investigadas para a

criação dos mais diversos sistemas.

• Veri�cação Formal de Sistemas Criptográ�cos Embarcados: Por se tratar

de um assunto relacionado à segurança da informação, é desejável que sistemas

criptográ�cos passem por processos de veri�cação formal que garantam sua cor-

retude, segurança e e�cácia, mesmo sendo um sistema embarcado. Deste modo,

futuramente pode-se investir em tal veri�cação e aplicá-la também a outros tipos

de sistemas embarcados que venham a ser criados.

59

Referências

Ali, L., Yunus, N., Jaafar, H., Wagiran, R., e Low, E. (2004). Implementation of triple data

encryption algorithm using vhdl. In IEEE International Conference on Semiconductor

Electronics, 2004. ICSE 2004., page 5 pp.

Almeida, A. A. e da Costa, V. G. (2011a). Implementação em VHDL do Algoritmo DES

Compilada no Altera Quartus II. In IX Encontro Anual de Computação - ENACOMP,

2011. Disponível em mídia digital.

Almeida, A. A. e da Costa, V. G. (2011b). Uso de VHDL no FPGA Altera Cyclone II

para construção de sistemas criptográ�cos. Revista Mediação, 6:249�257.

ALTERA (2005). Cyclone II Device Handbook. ALTERA, San Jose, CA - Estados Unidos.

ALTERA (2006a). Cyclone II FPGA Starter Development Board - Reference Manual.

ALTERA, San Jose, CA - Estados Unidos.

ALTERA (2006b). Cyclone II FPGA Starter Development Kit - User Guide. ALTERA,

San Jose, CA - Estados Unidos.

Arich, T. e Eleuldj, M. (2002). Hardware implementations of the data encryption stan-

dard. In The 14th International Conference on Microelectronics - ICM, pages 100 �

103.

Ashenden, P. J. (1990). The VHDL Cookbook. Dept. Computer Science of University of

Adelaide - South Australia.

Ashenden, P. J. (1995). The Designer's Guide to VHDL. Morgan Kaufmann, New York,

NY - Estados Unidos.

Badrignans, B., Danger, J. L., Fischer, V., Gogniat, G., e Torres, L., editors (2011).

Security Trends for FPGAs From Secured to Secure Recon�gurable Systems. Springer,

New York, NY - Estados Unidos.

Brown, R. H., Good, M. L., e Prabhakar, A. (1993). Data Encryption Standard. Technical

Report FIPS 46-2, National Institute of Standards and Technology. disponível em http:

//www.itl.nist.gov/fipspubs/fip46-2.htm#FORE_SEC, acessado em dezembro de

2011.

Chu, P. P. (2008). FPGA Prototyping by VHDL Examples Xilinx Spartan-3 Version. John

Wiley & Sons, Inc., New Jersey, NJ - Estados Unidos.

Churchhouse, R. F. (2004). Codes and ciphers Julius Caesar, the Enigma and the internet.

Cambridge University Press, 40 West 20th Street, New York, NY 10011-4211, USA.

60

Gaj, K. e Chodowiec, P. (2009). FPGA and ASIC Implementations of AES. In Çe-

tin Kaya Koç, editor, Cryptographic Engeneering. Springer, New York, NY - Estados

Unidos.

Hu�mire, T., Irvine, C., Nguyen, T. D., Levin, T., Kastner, R., e Sherwood, T. (2010).

Handbook of FPGA Design Security. Springer, New York, NY - Estados Unidos.

Kahn, D. (1967). The Codebreakers: The story of secret writing. Macmillan.

Li, F. e Ming, P. (2009). A simpli�ed FPGA implementation based on an improved des

algorithm. In 3rd International Conference on Genetic and Evolutionary Computing,

2009. WGEC '09., pages 227 �230.

Moreno, E. D., Pereira, F. D., e Chiaramonte, R. B. (2005). Criptogra�a em Software e

Hardware. Novatec, São Paulo, SP - Brasil.

NIST (1995). An Introduction to Computer Security: The NIST Handbook. Disponível

em: http://csrc.nist.gov/publications/nistpubs/800-12/handbook.pdf Aces-

sado em: Setembro de 2010.

Schneier, B. (1996). APPLIED CRYPTOGRAPHY Protocols, Algorithms, and Source

Code in C. John Wiley & Sons, Inc.

Singh, S. (2000). The Code Book: The Science of Secrecy from Ancient Egypt to Quantum

Cryptography. Anchor, New York, NY - Estados Unidos.

Stallings, W. (2008). Criptogra�a e Segurança de Redes: Princípios e Práticas - Título

Original: Criptography and Networking Security 4/E. Pearson Education, 4a edition.

Taherkhani, S., Ever, E., e Gemikonakli, O. (2010). Implementation of Non-Pipelined

and Pipelined Data Encryption Standard (DES) Using Xilinx Virtex-6 FPGA Techno-

logy. In IEEE 10th International Conference on Computer and Information Technology

(CIT), 2010, pages 1257 �1262.

Tanenbaum, A. S. (2003). Sistemas Operacionais Modernos. Pearson Education, São

Paulo, Sp - Brasil, 2 edition.

Tocci, R. J., Widmer, N. S., e Moss, G. L. (2007). Sistemas Digitais princípios e aplicações.

Pearson Prentice Hall, São Paulo, Sp - Brasil.

Wilson, P. e Brown, A. (2005). DES in four days using behavioural modeling synthesis.

In Proceedings of the 2005 IEEE International Behavioral Modeling and Simulation

Workshop, 2005. BMAS 2005., pages 82 � 87.

61