Você está na página 1de 63

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 do


Algoritmo 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

Monograa 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. Criptograa. 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

Monograa 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 diculdades

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 inuenciou 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 monograa 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 criptograa, 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 hardware s, 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 vericar o correto funcionamento do projeto proposto e também as melhorias

desse em relação a outra codicaçã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 diculdades encontradas, bem como as pesquisas que podem

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

embarcados.

Palavras-Chaves: Circuitos reprogramáveis, Criptograa, 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 signicant 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 Criptograa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

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

2.2.2 Classicaçã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 Criptograa em Software X Criptograa 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 Diculdades 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-Specic Integrated Circuit

CPLD Complex Programmable Logic Device

DEA Data Encryption Algorithm

DES Data Encryption Standard

FPGA Field Programable Gate Arra y

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 codicados 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 criptograa, 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 conguraçã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 criptograa, 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 reconguráveis), que utilizados em conjunto podem produzir diversos


1
tipos de sistemas embarcados , 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 sucientes

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

salvaguardar dados armazenados ou transmitidos de forma eciente e ecaz, 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
2
acessar o sistema. Num segundo caso pode-se fazer uso da biometria , 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 vericar sua autenticidade.

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


sitivo ou sistema que ele controla.
2 Uso de características biológicas em mecanismos de identicaçã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 criptograa para que esses não consigam entender

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

gráphein, que signica "escrita", a criptograa permite que um texto seja escrito, porém

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

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

Em contraposição à criptograa, 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 criptograa e a criptoanálise formam a ciência da criptologia. Neste

trabalho será abordada apenas a criptograa 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 Criptograa
A criptograa 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 única


3 utilizadas em funções hash .
4

2.2.1 Histórico
O uso da criptograa, 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

3 Funçõ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.
4 Função matemática que dado um valor retorna um código que o representa, comumente utilizada

quando se deseja obter identicadores únicos para dados que possuem identicadores 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 enleira-

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 criptograa 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
5
a quantidade de letras fosse um número quadrado perfeito , 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

5 Nú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 criptograa 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 Classicação
Existem três classicações que podem ser aplicadas à criptograa, 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 criptograa por transposição,

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

cifrado é modicada, assim sendo, a informação criptografada torna-se um anagrama


6 da
original [Churchhouse, 2004].

6 Palavra 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 classicaçã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 criptograa é classicada 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 criptograa 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 conabilidade 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-Specic 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átil


7 [Badrignans et al., 2011].

Com o uso de circuitos recongurá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 eciente.

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 [Humire 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 conguradas 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

7 Memó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 [Humire 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 reconguração desses dispositivos pode ocorrer de várias formas, permitindo

desde uma reconguraçã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 congurado, e também o aumento

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

conguração do circuito em tempo de execução.


R

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

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
R

e Virtex . 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 denem 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 reconguráveis.

Essas linguagens possuem grande procuidade 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 conabilidade 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

diculdade 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 recongurá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 exemplicam 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 , e 2 : in b i t ;
3 s : out b i t ) ;

4 end comp ;
5 architecture comp_fluxo_dados of comp is
6 begin
7 s<= e 1 when e2>e 1

8 else e 2 ;
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 is


3 signal l 1 : b i t ;
4 begin
5 u1 : entity x o r 2 port map ( e1 , e2 , l 1 ) ;

6 u2 : entity and2 port map ( e1 , l 1 , 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 denir 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
8
e dados booleanos . 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 vericadas em [Ashenden, 1995] e [Ashenden, 1990].

2.5 Criptograa em Software X Criptograa em Hard-


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 criptograa 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 modicada 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 criptograas 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

8 Dados 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 Tempo (segundos) gasto Tempo (segundos) gasto % de melhora do desem-
criptografado com arquivo armazenado com arquivo armazenado penho em disco e em me-
em disco na memória 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 recongurá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 especicamente 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 simplicaçõ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 pipeline
9 de múltiplos estágios, foi possivel conseguir um uso eciente 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 eciente, independen-

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

9 Té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

inuenciou 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 criptograa [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.1 , para a obtenção
1
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 signicativos 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 signicativos.

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 vericar abaixo as 8 S-Boxes denidas 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]

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 criptograa,

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 denidas, 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 diculdade 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 eciente. 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 ( 3 2 to 6 3 ) when i t e r a c a o = " 0000 " e l s e R;
2 Aux <= PI ( 0 to 3 1 ) when i t e r a c a o = " 0000 " e l s e L ;
3 Rout <= Aux xor Pout ;
4 PF <= Rout&Lout ;
5 itera : rounds port map ( Lout , SubChave , Pout ) ;
6 c h a v e s : k e y s port map (K, i t e r a c a o , SubChave ) ; ;

A codicaçã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.


1
O primeiro arquivo intitulado sistema.vhd , 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) é denido 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 t e m a i s
2 port ( c l k : in std_logic ;
3 r e s e t : in s t d _ l o g i c ;
4 K : s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ;
5 din : s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ;
6 saida : out s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ) ;
7 end s i s t e m a ;

1 Extensão dos arquivos em VHDL.

37
Algoritmo 4.3 Arquitetura do Módulo sistema.vhd.
1 architecture si st em a_a rc h of s i s t e m a i s
2 component d e s
3 port ( c l k : in s t d _ l o g i c ;
4 i t e r a c a o : s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ;
5 K : s t d _ l o g i c _ v e c t o r ( 5 5 downto 0 ) ;
6 din : s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ;
7 saida : out s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ) ;
8 end component ;
9 ...
10 U1 : DES port map ( Clk , Rodada , chave , din , s a i d a ) ;
11 end si st em a_a rc h ;

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 monograa.

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

deve ser compilado para a vericaçã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 vericaçã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 vericar 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 vericar o correto funcio-

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

as conguraçõ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 t e m a
3 port (
4 c l k : in s t d _ l o g i c ;
5 r e s e t : in s t d _ l o g i c ;
6 d i n : in s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ;
7 K : in s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ;
8 s a i d a : out s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 )
9 );
10 end component s i s t e m a ;
11 −− Declarações e a t r i b u i ç õ e s de s i n a i s e processos

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 d e s . vhd
5 vcom s i s t e m a . vhd sistema_tb . vhd
6 vsim − t ns work . sistema_tb
7 view wave
8 add wave − r a d i x hex / d i n _ s i s
9 add wave − r a d i x hex / K_sis
10 add wave − r a d i x hex / sis_cmp /U1/k
11 add wave − r a d i x hex / sis_cmp /U1/PF
12 add wave − r a d i x hex / s a i d a _ 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 conguraçã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 conguraçõ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 codicaçã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 ' e v e n t 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 i n g _ e d g e ( 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 eciente. 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 denir 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 codicação criada. Essa remoção acarretou na modicaçã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 t e m a i s
2 port ( c l k : in std_logic ;
3 r e s e t : in s t d _ l o g i c ;
4 modo : std_logic ;
5 key : s t d _ l o g i c _ v e c t o r ( 5 5 downto 0 ) ;
6 din : s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ;
7 saida : out s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ) ;
8 end s i s t e m a ;

Algoritmo 4.9 Módulo Principal deste Trabalho.


1 entity s i s t e m a i s
2 port ( c l k : in std_logic ;
3 r e s e t : in s t d _ l o g i c ;
4 key : s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ;
5 din : s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ;
6 saida : out s t d _ l o g i c _ v e c t o r ( 6 3 downto 0 ) ) ;
7 end s i s t e m a ;

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 t d _ l o g i c _ v e c t o r ( 5 5 downto 0 ) ;
3 ...
4 chave<= key ( 5 6 ) & key ( 4 8 ) & key ( 4 0 ) & key ( 3 2 ) &
5 key ( 2 4 ) & key ( 1 6 ) & key ( 0 8 ) & key ( 0 0 ) &
6 key ( 5 7 ) & key ( 4 9 ) & key ( 4 1 ) & key ( 3 3 ) &
7 key ( 2 5 ) & key ( 1 7 ) & key ( 0 9 ) & key ( 0 1 ) &
8 key ( 5 8 ) & key ( 5 0 ) & key ( 4 2 ) & key ( 3 4 ) &
9 key ( 2 6 ) & key ( 1 8 ) & key ( 1 0 ) & key ( 0 2 ) &
10 key ( 5 9 ) & key ( 5 1 ) & key ( 4 3 ) & key ( 3 5 ) &
11 key ( 6 2 ) & key ( 5 4 ) & key ( 4 6 ) & key ( 3 8 ) &
12 key ( 3 0 ) & key ( 2 2 ) & key ( 1 4 ) & key ( 0 6 ) &
13 key ( 6 1 ) & key ( 5 3 ) & key ( 4 5 ) & key ( 3 7 ) &
14 key ( 2 9 ) & key ( 2 1 ) & key ( 1 3 ) & key ( 0 5 ) &
15 key ( 6 0 ) & key ( 5 2 ) & key ( 4 4 ) & key ( 3 6 ) &
16 key ( 2 8 ) & key ( 2 0 ) & key ( 1 2 ) & key ( 0 4 ) &
17 key ( 2 7 ) & key ( 1 9 ) & key ( 1 1 ) & 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 vericaçã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 vericado na íntegra no CD que acompanha esta monograa. 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
R

Software da Xilinx , 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 é suciente 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 conguraçã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 pinagem
1
deve ser especicada de acordo com a aplicação obtida para a utilização dos recursos

disponíveis na placa, tal especicaçã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 simplicada 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.

1 Descriçã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 vericaçã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 vericaçã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 vericaçã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 Loops


2 (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 conr-

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

2 Circuito 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
codicaçã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 codicaçã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 eciente.

5.3 Simulação
Vericada a codicaçã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 vericar 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 dene 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 vericar as variáveis indicadas para visualização no

arquivo de macro juntamente com os dados de entrada denidos 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 vericar 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 dado


3 de entrada e saída será visto

ao nal como um pino acoplado a um chip, podendo receber ou retornar dados em forma
4
de alta ou baixa voltagem , 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 pinos
5 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.

3 Cada bit nesse caso é considerado um dado, um vetor de bits é visto como um conjunto de dados e
cada bit é atribuído a um pino.
4 A alta voltagem representará o bit 1 e a baixa voltagem o bit 0
5 Por 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 diculta 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
6
texto claro, esses 4 bits são então replicados dentro do código do sistema , 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 16


7 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.
7 A 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 testbench
8 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 conguração de interruptores e LED's vista na Figura 5.11.

8 Os 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 SW 9, o sinal de reset que inicia o proces-

samento foi congurado com o valor lógico 1, sendo atribuído ao interruptor SW 8, os

interruptores SW 7, SW 6, SW 5 e SW 4 foram congurados de modo a representarem o

número binário 1010, que quando replicado dentro do sistema produzirá a chave cripto-
9
gráca AAAAAAAAAAAAAAAAh , por m, os interruptores SW 3, SW 2, SW 1 e SW 0
apresentaram a conguraçã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 conguraçã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 modicada a conguraçã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.

9 Representaçã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 vericar

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 signicativo em relação à implementação

que norteou a construção do circuito aqui criado quanto ao uso de componentes internos.

5.7 As Diculdades Encontradas


Durante todo o processo de produção do sistema aqui proposto, diversas diculdades

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 conguração e interfaceamento.

Seguem abaixo as diculdades 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 diculdade 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 codicação já existente. Tal codicaçã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 codicação do projeto já havia se

iniciado, trazendo então a necessidade de vericação do código através de simula-

ções, o que trouxe a diculdade 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 diculdades, 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 diculdades, 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 deciente. 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 diculdades também foram presen-

ciadas no desenvolvimento deste trabalho, porém não se equiparam em signicâ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 criptograa, 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 vericadas as vantagens de se utilizar HDL's, que

produzem sistemas com vantagens de hardware e software, e das placas FPGA's, que

permitem sua reconguraçã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 diculdades 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 eciente.

58
6.1 Trabalhos Futuros
Este trabalho apresentou uma introdução a um vasto campo de pesquisa, já que en-

volve os tanto a criptograa 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 criptograa 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.

• Vericaçã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 vericação formal que garantam sua cor-

retude, segurança e ecácia, mesmo sendo um sistema embarcado. Deste modo,

futuramente pode-se investir em tal vericaçã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:249257.

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 Recongurable 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.

Humire, 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 simplied 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). Criptograa 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). Criptograa 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

Você também pode gostar