View
2
Download
0
Category
Preview:
Citation preview
UNIVERSIDADE FEDERAL DE GOIÁS � UFG
CAMPUS CATALÃO � CaC
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO � DCC
Bacharelado em Ciência da Computação
Projeto Final de Curso
Construção de um Hardware Criptográ�co doAlgoritmo DES com a Linguagem VHDL em um
Circuito FPGA
Autor: Ariane Alves Almeida
Orientador: Vaston Gonçalves da Costa
Catalão - 2012
Ariane Alves Almeida
Construção de um Hardware Criptográ�co do Algoritmo DES com a
Linguagem VHDL em um Circuito FPGA
Monogra�a apresentada ao Curso de
Bacharelado em Ciência da Computação da
Universidade Federal de Goiás � Campus Catalão
como requisito parcial para obtenção do título de
Bacharel em Ciência da Computação
Área de Concentração: Sistemas de Computação
Orientador: Vaston Gonçalves da Costa
Catalão - 2012
Almeida, Ariane Alves
Construção de um Hardware Criptográ�co do Algoritmo DES com a Lin-
guagem VHDL em um Circuito FPGA/Ariane Alves Almeida- Catalão -
2012
Número de paginas: 61
Projeto Final de Curso (Bacharelado) Universidade Federal de Goiás, Campus
Catalão, Curso de Bacharelado em Ciência da Computação, 2012.
Palavras-Chave: 1. Circuitos reprogramáveis. 2. Criptogra�a. 3. Linguagem de
descrição de hardware
Ariane Alves Almeida
Construção de um Hardware Criptográ�co do Algoritmo DES com a
Linguagem VHDL em um Circuito FPGA
Monogra�a apresentada e aprovada em de
Pela Banca Examinadora constituída pelos professores.
Vaston Gonçalves da Costa � Presidente da Banca
Roberto Mendes Finzi Neto
Mônica Sakuray Pais
Dedico este trabalho a todos que de alguma forma contribuíram para a concretização do
mesmo. Em especial aos meus pais, que tanto me incentivaram e apoiaram.
AGRADECIMENTOS
Quero agradecer primeiramente a Deus, por ter me dado forças para aqui estar, pois
sem fé e esperança é impossível concretizar qualquer coisa que seja.
Segundo, um muito obrigada para minha família, especialmente meus pais, Tânia
e Evaldo, que mesmo se privando da minha presença para que eu pudesse estudar em
outra cidade, sempre me deram o apoio, força e coragem necessários, principalmente nos
momentos mais difíceis, para a conclusão desse trabalho.
Também �ca registrada minha gratidão ao meu marido, José Rafael, que sempre foi
paciente e compreensivo comigo e nunca me deixou desamparada quando as di�culdades
do caminho me abalaram.
Não poderia deixar de agradecer também a todos os professores e professoras que já
lecionaram para mim, desde aqueles do Ensino Fundamental àqueles com quem convivi
nos últimos quatro anos aqui na Graduação, e que de uma forma ou outra deram sua con-
tribuição para a concretização de uma incrível jornada. Em especial, a Professora Mônica,
que participa da banca de avaliação deste trabalho e in�uenciou a escolha deste curso de
graduação quando da minha realização do curso Técnico em Sistemas de Informação no
Centro Federal de Educação Tecnológica de Urutaí, hoje com nome de Instituto Federal
Goiano - Campus Urutaí.
Aqui também �ca um agradecimento especial ao meu orientador, Prof. Vaston, que
me apresentou o tema de que trata este trabalho e na medida do possível me deu sua
assistência para a conclusão deste. E também ao Prof. Roberto, que forneceu o material
necessário para a concretização deste projeto.
E por último, mas não menos importante, gostaria também de deixar meu muito
obrigada a todos os meus colegas e amigos que percorreram esse caminho comigo, aqueles
com quem compartilhei aulas, trabalhos, noites sem dormir para fazer algum trabalho
ou estudar para provas, alegrias e descontrações nos momentos de descanso, ou apenas
a companhia que alivia a saudade da família e nos faz sentir queridos. A todos esses
que me auxiliaram de alguma maneira, �ca minha gratidão. Entre esses, sem desmérito
dos demais que aqui se encaixam, cito em especial a amiga Amanda, que participou de
todo o processo de confecção desta monogra�a e auxiliou de diversas formas, e o amigo
Elias, que mesmo não estando mais na mesma universidade, me ajudou e direcionou nesse
trabalho de forma que não seria possível ter alcançado os resultados aqui obtidos sem sua
colaboração.
�O sucesso nasce do querer, da determinação e persistência em se chegar a
um objetivo. Mesmo não atingindo o alvo, quem busca e vence obstáculos, no
mínimo fará coisas admiráveis.� (José de Alencar)
RESUMO
Com os avanços na área de segurança da informação, diversas técnicas têm sido desen-
volvidas e/ou aprimoradas para garantir que apenas agentes autorizados tenham acesso às
informações. Dentre estas técnicas se destaca a criptogra�a, que pode ser implementada
tanto em software quanto em hardware. Este trabalho aborda a utilização de circui-
tos reprogramáveis para a implementação de sistemas criptográ�cos embarcados com a
utilização de linguagens de descrição de hardwares, pois tais linguagens e equipamentos
permitem ao projetista certa facilidade e �exibilidade na construção de seu projeto. É
apresentado o algoritmo criptográ�co a ser utilizado na construção do sistema proposto,
bem como os passos percorridos para isso. Através da análise dos resultados obtidos, é
possível veri�car o correto funcionamento do projeto proposto e também as melhorias
desse em relação a outra codi�cação proposta na literatura, alcançando um ganho signi�-
cativo no uso de componentes internos do sistema. Conclui-se então o texto apresentando
os resultados alcançados e as di�culdades encontradas, bem como as pesquisas que podem
vir a desenrolar a partir deste trabalho inicial no campo da criptogra�a e dos sistemas
embarcados.
Palavras-Chaves: Circuitos reprogramáveis, Criptogra�a, Linguagem de descrição
de hardware
ABSTRACT
With advances in information security, several techniques have been developed and/or
enhanced to ensure that only authorized agents have access to information. Among these,
stands out the encryption techniques that can be implemented in both software and hard-
ware. This work discusses the use of reprogrammable circuits for implementing embedded
cryptographic systems by using hardware description languages, since these languages and
equipments allow the designer relative ease and �exibility in building his project. It is
presented the cryptographic algorithm used in the construction of the proposed system,
as well as the steps traversed to it. By analyzing the results, it is possible to verify the
correct operation of the proposed project and also that the improvements over other en-
coding proposed in the literature, reaching a signi�cant gain in the use of internal system
components. This work is then concluded by presenting the results achieved and di�-
culties encountered, and also the researchs that may unfold from this initial work in the
cryptography and embedded systems �elds.
Keywords: Reprogrammable Circuits, Cryptography, Hardware Description Lan-
guage
Sumário
1 Introdução 14
2 Revisão Bibliográ�ca 15
2.1 Segurança da informação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Criptogra�a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 Histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.2 Classi�cação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3 Circuitos Reprogramáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.1 FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4 Linguagem de Descrição de Hardware . . . . . . . . . . . . . . . . . . . . . 21
2.4.1 VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5 Criptogra�a em Software X Criptogra�a em Hardware . . . . . . . . . . . 24
2.6 Trabalhos Correlatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3 O Algoritmo DES 27
3.1 O Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2 Módulo Gerador de Chaves . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3 Processamento Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4 O DES em VHDL 36
4.1 Estrutura do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 Arquivos Auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3 Comparativo de implementações . . . . . . . . . . . . . . . . . . . . . . . . 40
5 Construção do Hardware Criptográ�co 44
5.1 Materiais e Programas Utilizados . . . . . . . . . . . . . . . . . . . . . . . 44
5.1.1 A Placa Utilizada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.1.2 O Programa Quartus II . . . . . . . . . . . . . . . . . . . . . . . . 46
5.1.3 O Programa ModelSim . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.2 Compilação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.2.1 Análise do Resultado da Compilação . . . . . . . . . . . . . . . . . 49
5.3 Simulação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3.1 Análise dos Resultados da Simulação . . . . . . . . . . . . . . . . . 50
5.4 Atribuição da Pinagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.5 A Migração da Aplicação para o Hardware . . . . . . . . . . . . . . . . . . 53
5.6 A Execução do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.7 As Di�culdades Encontradas . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6 Conclusão 58
6.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Referências 60
Lista de Figuras
2.1 Desempenho do algoritmo RSA em software. Fonte: [Moreno et al., 2005]. . 25
2.2 Desempenho do algoritmo RSA em hardware. Fonte: [Moreno et al., 2005]. 25
3.1 Módulo Gerador de Subchaves do DES. Fonte: [Brown et al., 1993]. . . . . 28
3.2 Processamento Principal do DES. Fonte: [Brown et al., 1993] . . . . . . . . 30
5.1 Cyclone R© II EP2C20F484C7. Fonte: [ALTERA, 2006b]. . . . . . . . . . . 45
5.2 Tela Inicial do Quartus II Web Edition. . . . . . . . . . . . . . . . . . . . . 46
5.3 Tela Inicial do ModelSim ALTERA STARTER EDITION 6.5b. . . . . . . . 47
5.4 Compilação da Implementação do DES deste Trabalho. . . . . . . . . . . . 48
5.5 Compilação da Implementação do DES de [Moreno et al., 2005]. . . . . . . 49
5.6 Simulação do Sistema Criado Para Cifragem. . . . . . . . . . . . . . . . . . 50
5.7 Simulação do Sistema Criado Para Decifragem. . . . . . . . . . . . . . . . 51
5.8 Simulação do Sistema de [Moreno et al., 2005]. . . . . . . . . . . . . . . . . 51
5.9 Ferramenta Pin Planner do Quartus II. . . . . . . . . . . . . . . . . . . . . 52
5.10 Ferramenta Programmer do Quartus II. . . . . . . . . . . . . . . . . . . . . 54
5.11 Dados de Entrada e Saída da Execução do Hardware Criado. . . . . . . . . 55
5.12 Simulação do Sistema Criado com Outros Dados de Entrada. . . . . . . . . 56
5.13 Outros Dados de Entrada e Saída da Execução do Hardware Criado. . . . . 56
Lista de Tabelas
2.1 Temporização do algoritmo DES em C. Fonte: [Moreno et al., 2005]. . . . . 25
2.2 Desempenho do algoritmo DES em VHDL. Fonte: [Moreno et al., 2005]. . 25
3.1 Permutação de Compressão Inicial. Fonte: [Brown et al., 1993] . . . . . . . 29
3.2 Número da Iteração e Quantidade de Rotaçãoes. Fonte: [Brown et al., 1993] 29
3.3 Permutação de Compressão. Fonte: [Brown et al., 1993] . . . . . . . . . . . 29
3.4 Permutação Inicial. Fonte: [Brown et al., 1993] . . . . . . . . . . . . . . . 31
3.5 Permutação de Expansão. Fonte: [Brown et al., 1993] . . . . . . . . . . . . 31
3.6 S-Box 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.7 S-Box 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.8 S-Box 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.9 S-Box 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.10 S-Box 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.11 S-Box 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.12 S-Box 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.13 S-Box 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.14 Permutação Comum. Fonte: [Brown et al., 1993] . . . . . . . . . . . . . . . 34
3.15 Permutação Final. Fonte: [Brown et al., 1993] . . . . . . . . . . . . . . . . 35
Lista de Algoritmos
2.1 Descrição Comportamental de Comparador de 1 bit por [Moreno et al., 2005]. 22
2.2 Descrição Estrutural de Comparador de 1 bit por [Moreno et al., 2005]. . . 23
4.1 Exemplo de Descrição Híbrida Criada. . . . . . . . . . . . . . . . . . . . . 37
4.2 Entidade do Módulo sistema.vhd. . . . . . . . . . . . . . . . . . . . . . . . 37
4.3 Arquitetura do Módulo sistema.vhd. . . . . . . . . . . . . . . . . . . . . . . 38
4.4 Arquitetura do Testbench. . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.5 Arquivo Auxiliar Macro. . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.6 Incrementação das Iterações por [Moreno et al., 2005]. . . . . . . . . . . . . 41
4.7 Incrementação das Iterações deste Trabalho. . . . . . . . . . . . . . . . . . 41
4.8 Módulo Principal por [Moreno et al., 2005]. . . . . . . . . . . . . . . . . . 42
4.9 Módulo Principal deste Trabalho. . . . . . . . . . . . . . . . . . . . . . . . 42
4.10 Implementação da Compressão Inicial da Chave. . . . . . . . . . . . . . . . 43
14
Lista de Siglas
AES Advances Encryption Standard
ANSI American National Standards Institute
API Application Programming Interface
ASIC Application-Speci�c Integrated Circuit
CPLD Complex Programmable Logic Device
DEA Data Encryption Algorithm
DES Data Encryption Standard
FPGA Field Programable Gate Array
GPP General Purpose Processor
HDL Hardware Description Language
I/O Entrada/saída, do inglês �input/output�
IEEE Institute of Electrical and Electronics Engineers
LED Diodo Emissor de Luz
NBS Nacional Bureau of Standards
NIST National Institute of Standards and Technology
RAM Random Access Memory
S-Box Substitution Box
SRAM Static Random Access Memory
VHDL Very High Speed Integrated Circuits (VHSIC) HDL
XOR Exclusive or.
Capítulo 1
Introdução
Com o surgimento e aumento do uso de meios digitais para os mais diversos objetivos,
também aumentou sua utilização para armazenamento e transmissão de dados. Arquivos
que há tempos atrás eram mantidos em armários e grafados em papel, agora pertencem
a um universo de dados codi�cados em bits que estão armazenados em discos magnéticos
ou outros tipos de mídia digital, e trafegam para diversas partes do mundo através de �os
de cobre, �bra ótica, e até mesmo pelo ar, através de ondas de rádio.
Assim, se faz necessário o uso de mecanismos que prezem pela segurança dos dados
digitais, tanto para impedir que aqueles que não estejam autorizados a acessá-los o façam,
quanto para assegurar que seu conteúdo original permaneça �dedigno quando transmitido
de um ponto a outro. Dentre os artifícios utilizados para garantir a acessibilidade aos
dados apenas por pessoas autorizadas, este trabalho trata da criptogra�a, que objetiva
ocultar o conteúdo de uma informação daqueles que não deveriam ter acesso a ela.
Além de garantir a segurança, é necessário que tal processo seja executado cada vez
mais rapidamente e que o custo computacional para isso se mantenha baixo. Com a
utilização de sistemas embarcados, que possibilitam que os mais diversos processamentos
sejam executados em hardwares dedicados a �m de aliviar os processadores de propósito
geral presente na maioria dos sistemas computadorizados, essas aspirações são possíveis.
Deste modo, o objetivo deste trabalho é a con�guração de um hardware criptográ�co
que atenda tais necessidades, para isso, são descritos no Capítulo 2 os conceitos necessários
para a compreensão deste trabalho, como a contextualização da segurança da informação,
os conceitos básicos de linguagens de descrição de hardware e de circuitos reprogramáveis.
Posteriormente no Capítulo 3 é descrito o algoritmo que será utilizado para a criação do
sistema criptográ�co proposto, que tem sua estrutura apresentada no Capítulo 4 e sua
efetiva implantação exposta no Capítulo 5. Por �m, são apresentadas as conclusões aqui
obtidas no Capítulo 6, bem como os trabalhos futuros que este trabalho pode nortear.
14
Capítulo 2
Revisão Bibliográ�ca
Este capítulo aborda todos os conceitos necessários para a realização do trabalho
proposto, discorre brevemente sobre criptogra�a, seu histórico resumido e seus tipos, bem
como é apresentado um algoritmo clássico que será implementado. Também neste capítulo
são introduzidos conceitos básicos de linguagens de descrição de hardware e de circuitos
reprogramáveis (ou recon�guráveis), que utilizados em conjunto podem produzir diversos
tipos de sistemas embarcados1, inclusive sistemas criptográ�cos, que é o objetivo principal
deste trabalho.
2.1 Segurança da informação
Há muito tempo o ser humano sente necessidade de garantir a segurança de suas
informações. Com o uso de ambientes digitais para armazenamento de informações tal
necessidade aumenta, já que meios físicos como armários e cadeados já não são su�cientes
para mantê-las a salvo. Os sistemas informatizados de hoje tentam de diversas maneiras
salvaguardar dados armazenados ou transmitidos de forma e�ciente e e�caz, de modo que
apenas pessoas autorizadas possam ter acesso ao seu conteúdo.
Um sistema, por exemplo, pode exigir que um usuário insira alguma prova de que
realmente é a pessoa que pode acessá-lo. Esse mecanismo de segurança é chamado de
autenticação do usuário e pode ocorrer apenas por uso de algo que o usuário sabe, e/ou
pelo que o usuário é, ou seja, por alguma característica que ele possua [Tanenbaum, 2003].
No caso descrito acima, pode-se utilizar um login e senha para que cada pessoa possa
acessar o sistema. Num segundo caso pode-se fazer uso da biometria2, pedindo ao usuário
que efetue por meio de algum dispositivo a leitura de alguma característica sua, como a
impressão digital, que é única em cada pessoa, para veri�car sua autenticidade.
1Sistema microprocessado no qual o computador é completamente encapsulado ou dedicado ao dispo-
sitivo ou sistema que ele controla.2Uso de características biológicas em mecanismos de identi�cação.
15
Caso haja alguma falha de segurança e as informações sejam acessadas por agentes não
autorizados, ainda é possível utilizar a criptogra�a para que esses não consigam entender
seu conteúdo. Junção das palavras em latim kryptós, que signi�ca "secreto", "oculto", e
gráphein, que signi�ca "escrita", a criptogra�a permite que um texto seja escrito, porém
com signi�cado oculto, já que quem não souber a forma correta de extrair o signi�cado
dele, não o entenderá. Esse assunto será melhor explanado mais adiante na Seção 2.2.
Em contraposição à criptogra�a, existe a criptoanálise, que faz a análise de conteúdos
criptografados a �m de descobrir a informação original. A criptoanálise também tem
como objetivo apontar falhas em sistemas criptográ�cos com propósito de melhorá-los.
Em conjunto, a criptogra�a e a criptoanálise formam a ciência da criptologia. Neste
trabalho será abordada apenas a criptogra�a em um tipo de aplicação especí�ca, porém
mais detalhes sobre este e outros tópicos sobre segurança da informação podem ser obtidos
em [Badrignans et al., 2011].
2.2 Criptogra�a
A criptogra�a tem por objetivo a transformação de um texto claro (nome dado à
informação original) em um texto cifrado (nome dado à informação criptografada) através
do uso de uma chave, que pode ser considerada análoga às chaves do mundo físico, já que
ela é o �segredo� para realização do processo, e de um sistema criptográ�co, chamado
cifra. Uma cifra é a implementação de um algoritmo que recebe a chave e o texto claro e
dá como resposta o texto cifrado no caso da cifragem, e recebe o texto cifrado juntamente
com a chave para obtenção do texto claro no caso da decifragem.
O uso de métodos criptográ�cos é de grande valia quando se deseja armazenar ou
transmitir dados de forma segura, impedindo o acesso de agentes não autorizados, eles
também podem garantir a autenticidade de algum documento digital, por meio de assi-
naturas digitais por exemplo, além de sua integridade [NIST, 1995]. E também há outras
aplicações, como as funções de via única3 utilizadas em funções hash4.
2.2.1 Histórico
O uso da criptogra�a, mesmo que não aquela conhecida atualmente, feita por meio
de sistemas computadorizados, mas a escrita, objetivando o ocultamento de seu conteúdo
daqueles que não devem acessá-lo, é feito há muito tempo. Seus primeiros relatos datam
3Funções que dada uma entrada qualquer, é fácil calcular o resultado, porém, dado o resultado �nal,
é difícil chegar ao dado que o originou.4Função matemática que dado um valor retorna um código que o representa, comumente utilizada
quando se deseja obter identi�cadores únicos para dados que possuem identi�cadores numéricos idênticos.
16
de cerca de 1.900 anos antes da era Cristã, no Egito antigo, com o uso de hieróglifos
para escrita, bem como com a substituição de alguns destes em textos que levavam, por
exemplo, a túmulos e catacumbas que continham tesouros encerrados junto aos faraós.
Deste modo, se alguém tivesse a intenção de saquear as tumbas, seguiria as instruções
cifradas e provavelmente se perderia nas câmaras das pirâmides, podendo não mais achar
o caminho de volta e morrer ao tentar chegar ao seu destino [Kahn, 1967].
Na Grécia antiga, por volta do ano 400 antes de Cristo, também foram observadas
tentativas de manter informações em segredo, e pela primeira vez, mensagens secretas
foram utilizadas com propósito militar em Esparta. Conhecida pelo nome de scylate,
a técnica utilizada consistia em enrolar uma tira de couro em um bastão, a mensagem
então era escrita horizontalmente no couro enrolado, cada letra ocupando uma tira de
largura em volta do bastão. Ao �nal obtinha-se uma tira de couro com letras en�leira-
das verticalmente de forma aparentemente aleatória e sem sentido, ou seja, a mensagem
cifrada, bastando apenas enrolar novamente o couro em um bastão, de mesmo tamanho
do utilizado para a cifragem, para obter o texto claro.
Posteriormente, na Roma antiga, é relatado o primeiro uso da criptogra�a como co-
nhecida nos dias atuais. Querendo mandar em segredo mensagens e planos de guerra aos
seus generais nos campos de batalha, o imperador romano Caio Júlio César (100 a.C. -
44 a.C.) engenhou o que hoje se conhece por Cifra de César ou Troca de César. A cifra
em questão era feita substituindo cada letra do alfabeto pela terceira letra subsequente a
ela, as três últimas assumiam como as três primeiras, como se o alfabeto fosse circular.
Assim sendo, caso as mensagens fossem interceptadas pelo exército inimigo, eles teriam
acesso a um texto ininteligível, aparentemente formado por um emaranhado desconexo
de letras. A Cifra de César foi a precursora da chamada cifra por substituição, que será
explicada posteriormente na Subseção 2.2.2, e é a única da antiguidade cujo princípio
ainda é utilizado em cifras modernas.
Além de sua conhecida cifra, Júlio César também fez uso de métodos criptográ�cos
mais complexos, como a Caixa de César, onde suas mensagens eram escritas de forma que
a quantidade de letras fosse um número quadrado perfeito5, assim, ele distribuía as letras
em uma tabela cujo número de linhas e de colunas era a raiz quadrada da quantidade de
letras da mensagem, preenchendo as letras sequencialmente pelas colunas, de cima para
baixo e da esquerda para a direita. A mensagem cifrada era obtida copiando as letras da
tabela seguindo pelas linhas, da esquerda para a direita e de cima para baixo. Realocando
as letras na tabela e repetindo o processo, a decifragem da mensagem era obtida.
Na Idade Média, embora em menor quantidade e menos documentada, também houve
produção criptográ�ca, foi nesse período que surgiram as cifras polialfabéticas. Nesse tipo
5Número inteiro positivo que pode ser expresso como o quadrado de outro número inteiro.
17
de cifra, dois ou mais alfabetos são utilizados para as substituições, podendo um mesmo
símbolo, ou mesma letra, representar mais de um correspondente do texto claro.
Nos séculos seguintes também há registros de uso de métodos criptográ�cos, como
na Europa do século XV, com as escritas espelhadas de Leonardo Da Vinci, onde ele
escrevia de modo que somente era possível a leitura de seus manuscritos mediante um
espelho. E também no século XVI, em que Maria, a Rainha da Escócia (1542 - 1587),
utilizou mensagens cifradas, também por substituição, ao conspirar para o assassinato
de sua prima, a Rainha Elizabeth (1533 - 1603), a �m de tomar para si a coroa inglesa.
A conspiração, da qual eram participantes ingleses católicos, tinha objetivo de retirar do
trono a Rainha Elizabeth, que era protestante, para a ascensão de Maria, que era católica,
à coroa. As cartas de Maria aos conspiradores foram interceptadas e criptoanalisadas,
posteriormente, ela foi condenada e executada por traição [Singh, 2000].
Foi com o advento dos meios de comunicação e de transmissão de dados, que permi-
tiam que mensagens fossem transmitidas para distâncias muito grandes e de certa forma
desprotegidas, que surgiu a necessidade de meios criptográ�cos mecanizados. Nesse con-
texto, a criptogra�a teve um grande avanço, sendo criados diversos métodos de cifragem e
decifragem mecanizados culminando com a invenção da máquina Enigma, que era elétrica
e baseada em um sistema com discos rotativos, e foi utilizada para cifrar informações
militares alemãs durante a Segunda Guerra Mundial (1939 - 1945). Desde então, muito
se tem avançado no meio da criptologia, já que a difusão de meios digitais para armaze-
namento e transmissão de dados evoluíram em níveis gigantescos e a segurança de tais
processos é crucial.
2.2.2 Classi�cação
Existem três classi�cações que podem ser aplicadas à criptogra�a, cada uma delas
analisando determinada característica, podendo ser a forma em que a cifragem ocorre, o
modo de entrada do texto claro e o tipo de chave utilizada.
Quanto à forma de cifragem
Quanto à forma em que a cifragem é realizada, ela pode ocorrer de duas maneiras,
chamadas de substituição e transposição. Na primeira, somente os símbolos do texto são
substituídos por outros, e a ordem dos símbolos presentes no texto permanece inalterada.
Em oposição a esse método, também pode ser aplicada a criptogra�a por transposição,
onde os símbolos do texto claro se mantêm inalterados, porém a ordem deles no texto
cifrado é modi�cada, assim sendo, a informação criptografada torna-se um anagrama6 da
original [Churchhouse, 2004].
6Palavra ou frase formada com as letras de outra.
18
Quanto à inserção de dados
O texto claro pode ser inserido em um sistema criptográ�co de duas maneiras, a
primeira é realizada por bloco, onde o texto é dividido em blocos de determinado tamanho
admitido pela cifra e cada um deles é cifrado individualmente, obtendo-se ao �nal um
conjunto de blocos cifrados que colocados juntos formam o texto cifrado total.
O segundo modo de inserção de texto para cifragem é por meio de bit a bit, a chamada
cifra por �uxo, onde o texto total é desmembrado em bits e cada um deles é inserido
e cifrado individualmente, obtendo-se ao término da cifragem, uma sequência de bits
cifrados que juntos formam o texto cifrado �nal.
Quanto à chave
A última classi�cação se dá de acordo com o tipo de chave utilizada para o a cifragem.
Quando tanto o processo de cifragem quanto o de decifragem utilizam a mesma chave
em sua execução, chamada de chave privada, a criptogra�a é classi�cada como simétrica.
Geralmente os algoritmos que utilizam esse tipo de chave são mais simples e rápidos,
porém exigem que remetente e destinatário tenham a chave compartilhada a priori.
Em contraste, existe a criptogra�a assimétrica, que utiliza a premissa das chaves pú-
blicas, onde esta chave é disponibilizada a qualquer indivíduo que queira cifrar e mandar
informações e apenas o destinatário tem acesso a uma chave privada que permite a deci-
fragem para obtenção do texto claro. Embora mais lentos e complexos que os algoritmos
que utilizam apenas chaves privadas, os sistemas criptográ�cos assimétricos provêm uma
maior segurança e con�abilidade contra criptoanálise, já que suas chaves geralmente são
baseadas em operações com números primos grandes, o que torna extremamente laborosa
sua descoberta.
2.3 Circuitos Reprogramáveis
Ao se falar em implementação de sistemas, a maioria das pessoas tem em mente o
uso de alguma linguagem de programação e um compilador que a traduz para a criação
de um programa que objetiva realizar alguma tarefa. Porém, essa não é a única forma
de alcançar esse objetivo, já que um sistema pode ser implementado diretamente via
hardware [Almeida e da Costa, 2011b], ou seja, pela manipulação de circuitos elétricos,
seja diretamente com uso de circuitos digitais interligados ou pela utilização de circuitos
reprogramáveis, que permitem a programação através de uma linguagem de descrição de
hardware, que serão vistas na Seção 2.4, de forma que é possível indicar ao circuito qual
deve ser seu comportamento e organização, fazendo com que este atue efetivamente como
um circuito digital [Tocci et al., 2007].
19
A implementação concebida em hardware pode ser feita com o uso de dispositivos
eletrônicos de propósitos especí�cos e arquitetura �xa, os Application-Speci�c Integrated
Circuit (ASIC) ou de dispositivos programáveis de propósito geral de arquitetura recon-
�gurável, como os Field Programable Gate Array (FPGA) e os Complex Programmable
Logic Device (CPLD's) [Gaj e Chodowiec, 2009].
Quando utilizada uma arquitetura �xa, uma vez que um projeto de sistema embarcado
seja implementado, a arquitetura não mais pode ser alterada, o que faz os circuitos re-
programáveis mais atrativos, já que uma mesma pastilha (circuito) pode receber diversos
projetos, desde que não concomitantemente. Porém estes últimos, na maioria das vezes,
não possuem características que podem ser úteis e que estão presentes nos primeiros, como
a presença de memória não volátil7 [Badrignans et al., 2011].
Com o uso de circuitos recon�guráveis, o projetista pode criar novas funções que façam
com que operações sejam realizadas com muito menos ciclos do que seria necessário usando
um processador de propósito geral, do inglês General Purpose Processor (GPP), assim a
acoplação de um FPGA a um GPP possibilita uma melhor exploração do potencial dos
mesmos. Deste modo, podem ser criados programas para execução direta no processador
da placa de um circuito reprogramável, o que alivia o GPP de uma máquina que tenha
tal placa acoplada. Assim, é possível utilizar esse equipamento de diversas maneiras,
seja para criar efetivamente um sistema embarcado, usando Very High Speed Integrated
Circuits (VHSIC) Hardware Description Language (VHDL) ou Verilog por exemplo, ou
apenas para poder fazer um processamento paralelo e�ciente.
A implementação tratada neste trabalho foi projetada para sua inserção em um FPGA,
que oferece entre outras vantagens, o fato de não possuir necessariamente uma execução
sequencial, o que permite a realização de centenas a milhares de operações a cada ci-
clo [Hu�mire et al., 2010], através da linguagem VHDL, uma linguagem de descrição de
hardware que será discutida na Subseção 2.4.1.
2.3.1 FPGA
FPGA's são dispositivos lógicos constituídos de um array bidimensional de células
lógicas genéricas e comutadores programáveis. Essas últimas podem ser con�guradas de
modo a executarem uma função simples e os comutadores podem ser customizados para
fornecerem as interconexões entre as células [Chu, 2008]. Esses circuitos são atualmente o
cerne de diversos dispositivos que realizam performances críticas, desde pontos de acesso
wireless até sistemas comerciais de reconhecimento facial. E por não serem sequenci-
ais, como um processador de propósito geral, possibilitam a realização de centenas de
7Memória que guarda todas as informações nela armazenadas mesmo quando não estiver recebendo
alimentação de energia.
20
multiplicações ou milhares de adições por ciclo [Hu�mire et al., 2010].
Em um FPGA o roteamento é a interconexão entre os blocos lógicos por meio de
uma rede de camadas de metal, já a conexão física entre os blocos lógicos é realizada por
transistores controlados através de bits de memória ou de chaves de comutação (switch
matrix ). A recon�guração desses dispositivos pode ocorrer de várias formas, permitindo
desde uma recon�guração total do mesmo, ou apenas parte dele, que pode ser feita sem a
necessidade de remover ou reiniciar o circuito, o que se apresenta como uma grande vanta-
gem ao permitir a alteração mesmo em tempo de execução [Almeida e da Costa, 2011a].
O uso de FPGA's oferece algumas vantagens sobre a utilização de circuitos de propósito
especí�co e de arquitetura �xa além do reuso do circuito, como ganho em velocidade de
processamento, a possibilidade de evolutibilidade em tempo real do sistema, já que podem
ser realizadas alterações em tempo real do sistema con�gurado, e também o aumento
da segurança do sistema, que pode ser possibilitado pelo versionamento ou correção da
con�guração do circuito em tempo de execução.
Existem algumas fabricantes de FPGA's mais conhecidas no mercado, como a Xilinx R©,
que foi a primeira empresa a fornecer circuitos programáveis e é uma das maiores fornece-
doras, possuindo diversas famílias de circuitos, entre estas tem-se como mais populares as
placas de desenvolvimento Spartan R© e Virtex R©. Outra empresa bastante conhecida que
vem fornecido placas para desenvolvimento FPGA completas e de manipulação relativa-
mente simples, é a Altera R©, que também apresenta diversas famílias de desenvolvimento,
como a Cyclone R© e a Stratix R©.
2.4 Linguagem de Descrição de Hardware
As linguagens de descrição de hardware, do inglês Hardware Description Language
(HDL), podem ser vistas como análogas às linguagens de programação de software, pois
ambas de�nem como uma determinada tarefa deve ser realizada, as primeiras através da
descrição do comportamento e das interligações que os circuitos devem ter, e as segundas
pela descrição detalhada de passos a serem seguidos para realização de uma tarefa.
Existem atualmente no mercado diversas HDL's, dentre as quais podem ser citadas
como mais populares: VHDL e Verilog [Chu, 2008], e ambas, bem como as demais exis-
tentes são muito utilizadas para a programação de sistemas recon�guráveis.
Essas linguagens possuem grande pro�cuidade quando comparadas às linguagens de
programação, pois permitem que seja feito um sistema com vantagens de hardware e
software, já que combina a rapidez e maior con�abilidade do primeiro, com a �exibilidade
e facilidade de design do segundo, além de dar ao projetista, a possibilidade de recomeçar
tudo em um mesmo circuito caso algum erro seja cometido no processo de criação. A maior
di�culdade dessa abordagem, é inserida na sua complexidade e necessidade de grande
21
entendimento por parte do projetista da linguagem para poder executar satisfatoriamente
o proposto.
A linguagem utilizada para o projeto executado neste trabalho foi a VHDL. A se-
guir são abordados brevemente os principais pontos desta linguagem e alguns conceitos
necessários para o entendimento do sistema criptográ�co criado.
2.4.1 VHDL
Essa linguagem foi desenvolvida pelo Departamento de Defesa Norte Americano (DoD)
na década de 1980 e foi a primeira linguagem do gênero a ser padronizada pelo Institute
of Electrical and Electronics Engineers (IEEE), assim sendo, é uma das mais conhecidas
e utilizadas para aplicações descritas em circuitos recon�guráveis.
Um sistema descrito em VHDL pode ser assim feito ou de forma comportamental, onde
é conhecido o comportamento do circuito que se deseja implantar ou de forma estrutural,
onde é desprezado o comportamento do sistema e/ou apenas a estrutura do circuito é
conhecida [Moreno et al., 2005]. Os Algoritmos 2.1 e 2.2 exempli�cam respectivamente as
descrições comportamental e estrutural, o primeiro apresenta nas linhas 7 e 8 os comandos
when e else, que indicam a presença do comportamento do sistema (tais linhas representam
um comportamento similar ao obtido através dos comandos condicionais if e else das
linguagens de programação), já no segundo, as linhas 5 e 6 mostram a criação de entidades
por meio da passagem dos sinais que essas devem mapear para realizar o processamento.
Algoritmo 2.1 Descrição Comportamental de Comparador de 1 bit por
[Moreno et al., 2005].
1 entity comp i s
2 port ( e1 , e2 : in b i t ;
3 s : out b i t ) ;
4 end comp ;
5 architecture comp_fluxo_dados of comp i s
6 begin
7 s<= e1 when e2>e1
8 else e2 ;
9 end comp_fluxo_dados ;
22
Algoritmo 2.2 Descrição Estrutural de Comparador de 1 bit por [Moreno et al., 2005].
1 . . .
2 architecture comp_fluxo_dados of comp i s
3 signal l 1 : b i t ;
4 begin
5 u1 : entity xor2 port map ( e1 , e2 , l 1 ) ;
6 u2 : entity and2 port map ( e1 , l1 , s ) ;
7 end comp_fluxo_dados ;
Também é possível criar sistemas utilizando as duas abordagens acima concomitante-
mente, criando uma descrição híbrida, o que pode ser bastante desejável quando não se
sabe totalmente o comportamento ou a estrutura de todos os componentes do sistema a
ser criado, ou mesmo quando algum módulo pode ser mais facilmente implementado com
uma descrição diferente do restante do sistema.
De qualquer uma das formas descritas acima, a implementação é feita de forma hi-
erárquica, onde são implementados blocos ou módulos, que são pequenas estruturas do
sistema, que podem ser então interligadas e utilizadas para a formação de blocos maiores
até a formação do sistema completo [Ashenden, 1990].
Em VHDL são utilizadas entidades para de�nir uma estrutura e arquiteturas para a
implementação do proposto por elas, são essas últimas que realizam as funcionalidades de
um projeto e podem ser executadas de forma concorrente, como processos, fazendo com
que uma mesma entidade possa ter diversas arquiteturas. A estrutura da utilização de
entidade e arquitetura também pode ser observada no Algoritmo 2.1.
Outros pontos que podem ser comparados com as linguagens de programação é a
colocação de parênteses para estruturar e separar comandos e blocos de comandos e o uso
de pacotes e bibliotecas, os pacotes encapsulam funcionalidades para seu reaproveitamento
posterior no mesmo ou em outros projetos e são agrupados em bibliotecas.
A execução de um sistema implementado nessa linguagem ocorre em ciclos, ou seja,
o sistema será executado por uma determinada quantidade de tempo e a cada ciclo de
relógio do processador os processos são realizados até �ndar o tempo previsto para a
execução.
O IEEE, ao padronizar a linguagem, criou para esta uma biblioteca que é utilizada na
maioria dos projetos em VHDL. Isto porque tal biblioteca fornece de antemão elementos
úteis para a construção de qualquer projeto. Seus dois principais pacotes, o standard e
o textio fornecem, por exemplo, os tipos de constantes, variáveis e sinais que podem ser
utilizados para operações simples ou que trabalham com arquivos.
Essa linguagem oferece os tipos primitivos de dados para manipulação, como os bits
23
e dados booleanos8. Também são fornecidos tipos que permitem a declaração de objetos,
como as constantes, que possuem valor �xo, e as variáveis e os sinais, que podem ser
utilizados para o armazenamento de valores que se alteram durante a execução, esses
elementos em VHDL são considerados como objetos. A diferença entre as variáveis e
os sinais é que as primeiras são atualizadas imediatamente quando da sua alteração,
enquanto os sinais são atualizados ao �nal do ciclo de execução. Além desses tipos mais
comuns, também é possível a utilização de subtipos e de vetores de dados primitivos,
como os arrays de bits que serão amplamente utilizados na implementação apresentada
no Capítulo 4.
Por ser uma linguagem hierárquica, é necessária a comunicação entre os módulos do
projeto criado. Assim sendo, pode-se utilizar funções quando se tem apenas um retorno
do módulo subordinado ou procedimentos quando este prover mais de um retorno ao
módulo do qual faz parte.
Existem outas características inerentes ao VHDL, porém fogem ao escopo deste tra-
balho e podem ser veri�cadas em [Ashenden, 1995] e [Ashenden, 1990].
2.5 Criptogra�a em Software X Criptogra�a emHard-
ware
Com a utilização de circuitos reprogramáveis e HDL's em conjunto, é possível a cons-
trução de diversos sistemas diretamente em hardware, inclusive de sistemas criptográ�cos,
que apresentem vantagens sobre os implementados em software.
A posição do National Institute of Standards and Technology (NIST) sobre o assunto
é de que a implementação de criptogra�a em software é mais barata e lenta que em
hardware, embora para aplicações grandes pode se tornar mais cara, porém menos segura
devido à maior facilidade de ser modi�cada ou ignorada do que um produto equivalente de
hardware, e também, a resistência à adulteração em hardware é comumente considerada
melhor [NIST, 1995].
Sendo o proposto neste trabalho a construção do algoritmo Data Encription Stan-
dart (DES) em um FPGA utilizando VHDL, é válido apresentar um comparativo que
ilustre a vantagem em relação ao tempo de execução de criptogra�as realizada com um
hardware sobre uma executada com software, como por exemplo as apresentadas em
[Moreno et al., 2005], onde são feitas implementações em software usando a linguagem C
e em hardware com o VHDL.
Entre os algoritmos analisados, é possível ver na Tabela 2.1 a temporização do al-
goritmo DES feito em C e na Tabela 2.2 o desempenho do mesmo em VHDL. Para um
8Dados que assumem valor verdadeiro ou falso.
24
arquivo de 10MB o DES implementado em linguagem C, no melhor cenário, consome um
tempo superior a 7 segundos para realizar a cifragem. Já a implementação em VHDL
para um arquivo de 25 MB consome 1 segundo.
Tabela 2.1: Temporização do algoritmo DES em C. Fonte: [Moreno et al., 2005].Tamanho do arquivo
criptografado
Tempo (segundos) gasto
com arquivo armazenado
em disco
Tempo (segundos) gasto
com arquivo armazenado
na memória
% de melhora do desem-
penho em disco e em me-
mória
1 MB 1,25s 0,94s 25,39 %
5 MB 5,82 s 3,90 s 32,96 %
10 MB 10,27 s 7,08 s 30,96 %
Tabela 2.2: Desempenho do algoritmo DES em VHDL. Fonte: [Moreno et al., 2005].Tempo de Propagação Frequência Máxima
19,55ns 51,146 MHz
Taxa de ocupação do FPGA
CLBs FLIP-FLOPs LUTs (Look-Up Table)
No de componentes utilizados 381 68 755
No de componentes disponíveis 9.48 18.816 18.816
Porcentagem de Ocupação 4,04% 0,30% 4,01%
Consumo de tempo para cifragem
Tamanho do texto claro (MB) Tempo (segundos)
25 1
Desempenho análogo pode ser observado em sistemas criptográ�cos de chave pública,
como a RSA, onde em um arquivo de 1 MB o tempo de cifragem passa de 20 segundos
em VHDL (Figura 2.2) para aproximadamente 80 segundos em C (Figura 2.1).
Figura 2.1: Desempenho do algoritmo RSA em software. Fonte: [Moreno et al., 2005].
Figura 2.2: Desempenho do algoritmo RSA em hardware. Fonte: [Moreno et al., 2005].
25
2.6 Trabalhos Correlatos
Muitos trabalhos tem sido desenvolvidos a respeito do desenvolvimento de sistemas
embarcados recon�guráveis com a utilização de HDL's. Aqui serão apresentados alguns
que tratam da criação de sistemas criptográ�cos em hardware, mais especi�camente os
que utilizam o algoritmo DES, que será apresentado no Capítulo 3, e da linguagem VHDL
já apresentada na Seção 2.4.1.
As metodologias dos ciclos de design e ferramentas de hardware e software que podem
ser utilizadas para desenvolvimento do DES são estudadas em [Arich e Eleuldj, 2002], que
fazem uso de plataformas tanto da Altera R© quanto da Xilinx R© para análise da melhor
maneira de se implementar tal algoritmo em sistemas embarcados.
Uma variação do DES, o 3-DES, que também será apresentado no Capítulo 3, recebe
também implementações embarcadas, como visto em [Ali et al., 2004].
A modelagem comportamental é discutida em [Wilson e Brown, 2005], onde pode ser
visto o uso de descrição em alto nível para criação de um sistema DES, bem como é
possível observar a divisão modular do sistema.
Em [Li e Ming, 2009], os autores propõem simpli�cações em relação à chave cripto-
grá�ca utilizada na cifragem do DES, bem como das tabelas de substituição que este
algoritmo utiliza. A �m de melhorar sua segurança quanto à criptoanálise, é utilizada a
linguagem VHDL e um circuito FPGA da Altera R© para realizar esta tarefa. Com o uso
de pipeline9 de múltiplos estágios, foi possivel conseguir um uso e�ciente do hardware em
termos de consumo de tempo.
Outro trabalho que trata do uso de pipeline para aceleração do hardware é proposto
em [Taherkhani et al., 2010], que também apresentam a possibilidade da utilização de
máquinas de estados �nitos para implementações sem pipeline, neste trabalho é utilizada
a arquitetura da Xilinx R© e também a linguagem VHDL para apresentação das abordagens
realizadas.
Cada trabalho apresenta suas peculiaridades, porém é possível observar que todos tem
como objetivo a implantação de um sistema de hardware rápido e e�ciente, independen-
temente da abordagem de desenvolvimento ou da plataforma de FPGA's utilizadas.
9Técnica de hardware que permite que a CPU realize a busca de uma ou mais instruções além da
próxima a ser executada.
26
Capítulo 3
O Algoritmo DES
Este trabalho tem por objetivo criar um hardware criptográ�co através do algoritmo
DES. A escolha por essa cifra foi feita devido à sua ampla aplicação em dispositivos
de hardware e também por ser um algoritmo bastante divulgado e conhecido no meio
acadêmico. O fato de haver códigos de fácil entendimento presentes na literatura também
in�uenciou a escolha dessa cifra em detrimento das demais, adiciona-se também o fato
de DES utilizar o mesmo processo para cifragem e decigragem e ter um funcionamento
interno relativamente simples. Neste capítulo o DES será explanado, apresentando suas
peculiaridades e funcionalidades.
3.1 O Algoritmo
Anunciado pelo NIST com sua descrição algorítmica e matemática em 1993, porém, já
adotado desde 1977 pelo Nacional Bureau of Standards (NBS) e em 1981 pelo American
National Standards Institute(ANSI) com o nome de Data Encryption Algorithm (DEA), o
DES é talvez o mais conhecido e utilizado algoritmo de criptogra�a [Moreno et al., 2005].
Sendo um algoritmo criptográ�co de chave privada que realiza a cifragem por blocos
com ambos os processos de substituição e transposição, o DES cifra blocos de 64 bits com
uma chave de 64 bits, onde apenas 56 são utilizados e os outros 8 desprezados, podendo
ser utilizados posteriormente para detecção de erros, para geração de blocos de 64 bits
criptografados.
O funcionamento deste algoritmo se dá de forma relativamente simples, sendo com-
posto basicamente do processamento principal e do módulo gerador de subchaves, este
último fornece as chaves parciais para cada rodada de processamento do primeiro. A ci-
fragem e decifragem utilizam o mesmo processo, assim sendo, a cifragem dupla, utilizando
a mesma chave, de um texto retorna o texto original [Schneier, 1996].
27
3.2 Módulo Gerador de Chaves
A cada iteração do processamento principal do algoritmo é utilizada uma subchave
derivada da chave inicial, no caso da primeira subchave, ou da sua antecessora, no caso
das demais subchaves. A Figura 3.1 ilustra o modo como as subchaves são geradas para
sua inserção a cada iteração do módulo de processamento principal.
Figura 3.1: Módulo Gerador de Subchaves do DES. Fonte: [Brown et al., 1993].
Para a criação das subchaves (K1, ..., K16), a chave inicial de 64 bits passa pela pri-
meira operação, uma permutação de compressão (PC-1), que a transforma em uma chave
comprimida de 56 bits permutados de acordo com a tabela Tabela 3.11, para a obtenção
da chave que dará origem às subchaves subsequentes.
1A Tabela 3.1 e as demais que representam as tabelas de compressão, expansão e permutação (exceto
as S-Boxes) de chaves e textos tem como elementos os números que indicam a posição dos bits na chave
ou texto original que passará pelo processo, assim sendo, ao reagrupar os bits após sua inserção na tabela
de ordem da esquerda para a direita e de cima para baixo, é obtida a chave ou texto transformados pela
operação em questão.
28
Tabela 3.1: Permutação de Compressão Inicial. Fonte: [Brown et al., 1993]
PC-1
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
A chave comprimida é dividida em duas partes de 28 bits cada, na Figura 3.1 é possível
observar essa divisão, onde C0 representa os 28 bits mais signi�cativos da chave compri-
mida e D0 os 28 bits restantes. Cada parte sofre rotações à esquerda cuja quantidade
varia de acordo com o número da iteração de que faz parte de acordo com a Tabela 3.2.
Tabela 3.2: Número da Iteração e Quantidade de Rotaçãoes. Fonte: [Brown et al., 1993]
Número da Iteração 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Rotações à Esquerda 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1
As partes da chave são então reunidas e passam por mais uma operação de permutação
de compressão (PC-2) conforme a Tabela 3.3 para a formação de uma subchave �nal de
48 bits.
Tabela 3.3: Permutação de Compressão. Fonte: [Brown et al., 1993]
PC-2
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
29
3.3 Processamento Principal
O processamento principal recebe o texto claro e as chaves produzidas pelo módulo
gerador de chaves para realizar as operações que ao �nal fornecem o texto cifrado. Seu
funcionamento pode ser observado na Figura 3.2.
Figura 3.2: Processamento Principal do DES. Fonte: [Brown et al., 1993]
O texto claro de 64 bits é recebido pelo algoritmo e sofre uma permutação inicial (IP)
conforme a Tabela 3.4.
30
Tabela 3.4: Permutação Inicial. Fonte: [Brown et al., 1993]
IP
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
O texto resultante do passo anterior é dividido em duas partes de 32 bits cada uma,
essas estão representadas na Figura 3.2 por L0 e R0, contendo respectivamente os 32 bits
mais e menos signi�cativos.
A subchave referente à iteração atual é introduzida no algoritmo para realização das
operações designadas pela função f(Ri−1, Ki), onde i é o número da iteração. A primeira
parte dessa função é realizar uma permutação de expansão (E BIT-SELECTION) sobre
R0 (ou Ri, dependendo da iteração) que passa então a ter 48 bits e não mais 32, de acordo
com a Tabela 3.5 .
Tabela 3.5: Permutação de Expansão. Fonte: [Brown et al., 1993]
E BIT-SELECTION
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
Depois, o vetor resultante da operação acima passa por uma operação ou-exclusivo
(Exclusive-or ou XOR) com a subchave da iteração. Os bits resultantes dessa operação
são agrupados sequencialmente em 8 grupos de 6 bits. Cada grupo passa por uma operação
de compressão através de uma substitution box (S-Box) , que é uma tabela de substituição
31
de 4 linhas e 16 colunas. Ao total são 8 S-Boxes, cada uma referente a um grupo de 6 bits,
sendo respetivamente a S-Box 1 utilizada para a operação do primeiro grupo, a S-Box 2
para o segundo e assim por diante. Pode-se veri�car abaixo as 8 S-Boxes de�nidas pelo
NIST em [Brown et al., 1993]:
Tabela 3.6: S-Box 1.
S1
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
Tabela 3.7: S-Box 2.
S2
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
Tabela 3.8: S-Box 3.
S3
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
Tabela 3.9: S-Box 4.
S4
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
32
Tabela 3.10: S-Box 5.
S5
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
Tabela 3.11: S-Box 6.
S6
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
Tabela 3.12: S-Box 7.
S7
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 7 5 0 15 14 2 3 12
Tabela 3.13: S-Box 8.
S8
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
A operação de compressão realizada pelas S-Boxes são diferentes da mera supressão de
bits, como ocorre com a compressão das chaves. Tendo a S-Box 4 linhas, pode-se numerá-
las de 0 a 3, assim sendo, o primeiro e o sexto bit do grupo se combinam para formar
33
o número binário correspondente ao número da linha a ser analisada para a substituição
de compressão. Do mesmo modo, tendo a S-Box 16 colunas, o segundo, o terceiro, o
quarto e o quinto bits combinados formam o número binário correspondente à coluna,
que numerada de 0 a 15, será analisada. Assim sendo, o valor binário correspondente
ao número posicionado nas coordenadas indicadas pela linha e pela coluna obtidas pelo
método descrito anteriormente substitui os 6 bits originais. Assim, como cada valor �nal
de cada grupo terá 4 bits, serão um total de 32 bits, voltando o texto ao tamanho de Ri
para dar sequência ao processo.
Por �m, é feita uma permutação comum (P-Box) com o vetor de 32 bits obtido no
passo anterior conforme a Tabela 3.14.
Tabela 3.14: Permutação Comum. Fonte: [Brown et al., 1993]
P
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25
Findados os passos da função f(Ri−1, Ki), seu vetor resultante passa por uma operação
XOR com Li, o resultado dessa operação passa então a ser armazenado em Ri e o valor
de Ri−1 passa a ser armazenado em Li.
As operacões supracitadas são realizadas por 16 vezes, cada uma delas com uma
subchave distinta fornecida pelo módulo gerador de chaves. Os valores de L16 e R16
são então unidos, formando novamente um vetor de 64 bits, que sofre a permutação �nal
(IP-1) indicada pela Tabela 3.15.
34
Tabela 3.15: Permutação Final. Fonte: [Brown et al., 1993]
IP-1
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
Existe também outra versão do DES chamada de 3DES ou Triple-DES, que realiza
o mesmo processo do DES repetido por 3 vezes. A segurança do 3DES é superior à
do DES somente se utilizadas chaves diferentes em cada vez da sua execução, pois para
o processo de decifragem basta inserir o texto cifrado e a chave para obtenção do texto
claro, fazendo o 3DES equivalente ao DES caso a mesma chave seja utilizada nas três fases
do processo. Estes dois foram por muito tempo utilizados como padrões de criptogra�a,
porém apresentaram falhas de segurança quando submetidos a processos de criptoanálise e
atualmente foram substituídos pelo NIST por um novo algoritmo, o Advances Encryption
Standard (AES) [Stallings, 2008].
Pode ser observado que a estrutura desse algoritmo possui funcionalidades distintas
bem de�nidas, isso possibilita uma implementação modular, que facilita o entendimento
do código, sua implementação, a reutilização posterior de partes do código e a detecção
e correção de erros concebidos a nível de implementação. Isso é bastante desejável para
a implementação proposta neste trabalho, já que a linguagem aqui utilizada, a VHDL,
possui um alto nível de di�culdade de design e exige um profundo conhecimento do projeto
a ser implementado, logo, com a criação separada de pequenos módulos, a criação do
sistema como um todo se torna mais simples.
35
Capítulo 4
O DES em VHDL
Este capítulo apresenta como foi implementado o algoritmo DES, descrito no capítulo
anterior, com a linguagem VHDL já apresentada no Capítulo 2, do sistema criptográ�co
aqui criado. Ainda em VHDL, foram construídos arquivos de testes que foram utilizados
para a simulação do sistema, que será vista no Capítulo 5 juntamente com a efetiva
implantação do sistema em hardware.
Neste trabalho a implementação em VHDL do DES teve dois momentos distintos. No
primeiro, dentre as diversas referências na literatura, uma que se destacou por apresentar
uma implementação simples do algoritmo pretendido foi a de Moreno [Moreno et al., 2005],
então foi reproduzido o código presente nesta e correções foram realizadas a �m de obter
uma compilação correta do sistema. Num segundo momento, a implementação sofreu
alterações com objetivo de torná-la mais completa e e�ciente. Tais alterações serão apre-
sentadas na Seção 4.3.
4.1 Estrutura do Sistema
Como já foi apresentado na Seção 2.4.1, podem ser utilizadas tanto descrições compor-
tamentais quanto estruturais e até mesmo híbridas para criação de sistemas em VHDL.
Neste trabalho optou-se por uma abordagem híbrida, já que ora foram descritos compor-
tamentos para criação dos componentes, como pode ser observado nas linhas de 1 a 4 no
Algoritmo 4.1, ora foi necessária a descrição da estrutura a ser criada, como por exemplo,
para a criação e chamada dos subcomponentes que criam a estrutura hierárquica presente
nesta implementação (linhas 5 e 6 do Algoritmo 4.1).
36
Algoritmo 4.1 Exemplo de Descrição Híbrida Criada.
1 Lout <= PI (32 to 63) when i t e r a c a o = "0000" else R;
2 Aux <= PI (0 to 31) when i t e r a c a o = "0000" else L ;
3 Rout <= Aux xor Pout ;
4 PF <= Rout&Lout ;
5 i t e r a : rounds port map ( Lout , SubChave , Pout ) ;
6 chaves : keys port map (K, i t e r a cao , SubChave ) ; ;
A codi�cação foi realizada de forma modular, ou seja, cada funcionalidade foi im-
plementada em um arquivo em VHDL diferente, totalizando 12 módulos (ou arquivos)
distintos e interligados entre si de forma hierárquica.
O primeiro arquivo intitulado sistema.vhd1, recebe os dados de entrada, que serão o
texto a ser cifrado (64 bits), a chave criptográ�ca (64 bits), o sinal de relógio do hardware
(clock) e o sinal de reset do sistema para a produção de um texto cifrado (64 bits) como
sinal de saída (descrição dada pela entidade criada nas linhas de 1 a 7 do Algoritmo 4.2).
Dentro de sua arquitetura (linhas 1 a 11 do Algoritmo 4.3) é de�nido o subcomponente
des.vhd (linhas 2 a 8 do Algoritmo 4.3), que recebe a chave permutada previamente pelo
sistema.vhd, o texto claro, a rodada do processo de cifragem e o sinal de relógio do sistema
para geração e retorno do texto cifrado. O subcomponente descrito por des.vhd é então
chamado ao �nal da arquitetura do módulo sistema.vhd (linha 10 do Algoritmo 4.3).
Algoritmo 4.2 Entidade do Módulo sistema.vhd.
1 entity s i s tema i s
2 port ( c l k : in s td_log i c ;
3 r e s e t : in s td_log i c ;
4 K : std_log ic_vector (63 downto 0 ) ;
5 din : s td_log ic_vector (63 downto 0 ) ;
6 sa ida : out s td_log ic_vector (63 downto 0 ) ) ;
7 end s i s tema ;
1Extensão dos arquivos em VHDL.
37
Algoritmo 4.3 Arquitetura do Módulo sistema.vhd.
1 architecture sistema_arch of s i s tema i s
2 component des
3 port ( c l k : in s td_log i c ;
4 i t e r a c a o : s td_log ic_vector (3 downto 0 ) ;
5 K : std_log ic_vector (55 downto 0 ) ;
6 din : s td_log ic_vector (63 downto 0 ) ;
7 sa ida : out s td_log ic_vector (63 downto 0 ) ) ;
8 end component ;
9 . . .
10 U1 :DES port map (Clk , Rodada , chave , din , sa ida ) ;
11 end sistema_arch ;
Seguindo a mesma estrutura do módulo principal, os demais arquivos também reali-
zam parte do processamento e delegam parte para outros componentes. O módulo des.vhd
realiza a permutação inicial do texto claro e utiliza um componente para a criação de sub-
chaves (keys.vhd) e outro para realizar as demais partes do processamento (rounds.vhd),
com excessão à permutação �nal, que é realizada por este com o resultado �nal retornado
por rounds.vhd.
A última camada da hierarquia tem presente os módulos referentes às S-Boxes descritas
na Seção 3.3 e tem suas funções delegadas pelo módulo rounds.vhd, os arquivos das S-
Boxes realizam as permutações que lhes cabem e retornam o resultado ao módulo a que
é subordinado, que executa as demais funções e retorna ao módulo des.vhd as subchaves.
Todos os componentes e maiores detalhes da implemetação podem ser encontrados no CD
que acompanha esta monogra�a.
Juntos, todos os componentes formam o sistema �nal, que após sua implementação
deve ser compilado para a veri�cação de erros e criação �nal do sistema. Esse processo
será melhor explicado na Seção 5.2.
4.2 Arquivos Auxiliares
Após a compilação de um projeto e antes da efetiva implantação de um sistema descrito
em uma HDL em um circuito reprogramável, recomenda-se sua simulação para veri�cação
dos resultados parciais e �nais, bem como do funcionamento do projeto. Embora existam
softwares que permitam a construção de simulações por meio de interfaces grá�cas, co-
nhecidos como Application Programming Interfaces (API's), através deles não é possível
a fácil alteração dos dados de entrada utilizados, já que cada bit de entrada deve ser
alterado por meio da interface fornecida pelo software.
38
É possível realizar simulações também através do uso de arquivos auxiliares, que
mesmo sendo mais complexos quando da sua criação do que as simulações via API's,
permitem uma maior �exibilidade e controle na sua criação e na alteração dos dados de
entrada, o que é desejável quando se quer testar um projeto com diversas entradas a �m
de veri�car seu funcionamento. Por esse motivo, neste trabalho optou-se pela criação de
arquivos auxiliares que automatizam o processo de simulação.
Os arquivos auxiliares utilizados neste trabalho foram os testbenchs e as macros, os
primeiros são arquivos que criam um ambiente virtual a �m de veri�car o correto funcio-
namento de um determinado projeto, já as macros são arquivos utilizados para armazenar
as con�gurações de formato de onda a serem mostrados na simulação de um projeto em
VHDL ou outra HDL.
No testbench criado, foi virtualizado um ambiente em que todas os dados de entrada
do sistema são inseridos com intuito de testar seu funcionamento através dos dados de
saída obtidos. Todo o ambiente criado é assim feito com base no arquivo VHDL principal
da aplicação projetada, ou seja, o arquivo sistema.vhd. Por se tratar de um arquivo
especí�co para um projeto em VHDL, o arquivo de testbench também deve ser criado
nessa linguagem, logo, apresenta estrutura semelhante ao arquivo principal ao qual remete
e o utiliza como componente, o que pode ser visto no Algoritmo 4.4, podendo assim passar
os dados de entrada a serem testados para o sistema projetado.
Algoritmo 4.4 Arquitetura do Testbench.
1 architecture ac_sistema_tb of sistema_tb i s
2 component s i s tema
3 port (
4 c l k : in s td_log i c ;
5 r e s e t : in s td_log i c ;
6 din : in s td_log ic_vector (63 downto 0 ) ;
7 K : in s td_log ic_vector (63 downto 0 ) ;
8 sa ida : out s td_log ic_vector (63 downto 0)
9 ) ;
10 end component s i s tema ;
11 −−Declarações e a t r i b u i ç õ e s de s i n a i s e proces sos
O arquivo de macro apresentado no Algoritmo 4.5 foi feito para encapsular todas as
execuções a serem realizadas quando da execução de simulações. Deste modo, todos os
comandos de simulação podem ser executados sequencialmente de forma automática.
39
Algoritmo 4.5 Arquivo Auxiliar Macro.
1 v l i b work
2 vcom sbox1 . vhd
3 . . .
4 vcom des . vhd
5 vcom si s tema . vhd sistema_tb . vhd
6 vsim −t ns work . sistema_tb
7 view wave
8 add wave −rad ix hex / din_s i s
9 add wave −rad ix hex /K_sis
10 add wave −rad ix hex /sis_cmp/U1/k
11 add wave −rad ix hex /sis_cmp/U1/PF
12 add wave −rad ix hex / sa ida_s i s
13
14 run 3 ns
Para uma correta execução, todos os componentes e subcomponentes do sistema devem
ser adicionados ao arquivo, a começar por aquele mais interno (ou subordinado) e a
terminar pelo mais externo, precedidos do comando vcom, e então deve-se acrescentar as
variáveis cujas ondas devem ser visualizadas no simulador com sua respectiva con�guração
de visualização e seu caminho de acordo com a hierarquia dos arquivos, ao �nal, deve-se
colocar também o nome do arquivo de testbench a ser executado e as variáveis que se
deseja avaliar com suas devidas con�gurações de formato de onda a ser exibida, além do
tempo que a execução deve durar.
A macro criada no Algoritmo 4.5 apresenta as ondas de saída das variáveis que repre-
sentam o texto claro inserido, a chave original inserida, a chave permutada, o texto cifrado
antes da permutação �nal, e o texto cifrado �nal em formato de valor hexadecimal, com
efeito de facilitar o entendimento das saídas geradas e executa por um total de tempo de
3 nanossegundos.
4.3 Comparativo de implementações
Como dito anteriormente, o código presente em [Moreno et al., 2005] norteou a realiza-
ção deste trabalho, porém, algumas alterações que serão aqui exploradas foram necessárias
para que seu funcionamento fosse satisfatório.
Primeiramente, o módulo principal sistema.vhd sofreu alteração quanto às iterações
do processamento e sua incrementação. O código original fornecia uma codi�cação falha
em seu processo interno referente ao incremento das rodadas do processamento principal
40
do DES (Algoritmo 4.6), tal código tratava o vetor de rodadas como uma variável in-
teira, logo, quando da simulação, que será apresentada no Capítulo 5, são criados erros
de execução que impedem o funcionamento do sistema. Assim sendo, a incrementação
apropriada do vetor em questão foi alterada para uma adequada execução do projeto, fa-
zendo a incrementação total do vetor de 4 bits que representa as 16 rodadas do algoritmo
(Algorimto 4.7).
Algoritmo 4.6 Incrementação das Iterações por [Moreno et al., 2005].
1 process ( Clk )
2 begin
3 i f Clk ' event and Clk= '1 ' then
4 Rodada<=Rodada+1;
5 end i f ;
6 end process ;
Algoritmo 4.7 Incrementação das Iterações deste Trabalho.
1 process (Clk , r e s e t )
2 begin
3 i f r e s e t = '1 ' then
4 Rodada (3 downto 0)<="0000" ;
5 e l s i f r i s ing_edge ( c l k ) then
6 Rodada (3 downto 0)<=Rodada (3 downto 0)+"0001" ;
7 end i f ;
8 end process ;
Após a correção inicial do código, foram realizadas alterações a �m de propiciar melho-
rias na implementação para obtenção de um código mais completo e e�ciente. O código
proposto em [Moreno et al., 2005] apresenta uma entrada a mais que a proposta neste
trabalho para o módulo de cifragem/decifragem. Tal entrada tem por objetivo de�nir se
está sendo realizada a cifragem ou a decifragem para a obtenção dos textos ou chaves
parciais utilizadas no processo em questão. Como este trabalho tem por objetivo sim-
plesmente a obtenção do texto cifrado/decifrado �nal, tal entrada se torna obsoleta e foi
então removida da codi�cação criada. Essa remoção acarretou na modi�cação de todos
os componentes e subcomponentes que utilizavam a entrada removida.
41
Algoritmo 4.8 Módulo Principal por [Moreno et al., 2005].
1 entity s i s tema i s
2 port ( c l k : in s td_log i c ;
3 r e s e t : in s td_log i c ;
4 modo : s td_log i c ;
5 key : s td_log ic_vector (55 downto 0 ) ;
6 din : s td_log ic_vector (63 downto 0 ) ;
7 sa ida : out s td_log ic_vector (63 downto 0 ) ) ;
8 end s i s tema ;
Algoritmo 4.9 Módulo Principal deste Trabalho.
1 entity s i s tema i s
2 port ( c l k : in s td_log i c ;
3 r e s e t : in s td_log i c ;
4 key : s td_log ic_vector (63 downto 0 ) ;
5 din : s td_log ic_vector (63 downto 0 ) ;
6 sa ida : out s td_log ic_vector (63 downto 0 ) ) ;
7 end s i s tema ;
Outra alteração realizada que também é perceptível entre o Algoritmo 4.8 e o Al-
goritmo 4.9 é referente à chave criptográ�ca inserida no algoritmo. O código original
suprime a etapa de compressão inicial da chave descrita na Seção 3.2, passando então a
atuar desde o início com uma chave previamente permutada de 56 bits. O código criado
neste trabalho permite a efetiva inserção de uma chave de 64 bits e realiza internamente
ao módulo principal, antes de passá-la para o módulo gerador de subchaves, a operação de
compressão inicial (Algoritmo 4.10), deixando o processo do DES completo e eliminando
a necessidade de um processamento prévio da chave.
42
Algoritmo 4.10 Implementação da Compressão Inicial da Chave.
1 . . .
2 signal chave : s td_log ic_vector (55 downto 0 ) ;
3 . . .
4 chave<= key (56) & key (48) & key (40) & key (32) &
5 key (24) & key (16) & key (08) & key (00) &
6 key (57) & key (49) & key (41) & key (33) &
7 key (25) & key (17) & key (09) & key (01) &
8 key (58) & key (50) & key (42) & key (34) &
9 key (26) & key (18) & key (10) & key (02) &
10 key (59) & key (51) & key (43) & key (35) &
11 key (62) & key (54) & key (46) & key (38) &
12 key (30) & key (22) & key (14) & key (06) &
13 key (61) & key (53) & key (45) & key (37) &
14 key (29) & key (21) & key (13) & key (05) &
15 key (60) & key (52) & key (44) & key (36) &
16 key (28) & key (20) & key (12) & key (04) &
17 key (27) & key (19) & key (11) & key ( 0 3 ) ;
Todas as alterações efetuadas por este trabalho resultaram na melhoria do sistema
criado. Tais melhorias foram referentes à utilização de componentes internos do FPGA
em que o sistema será implantado e serão apresentadas na Seção 5.2 do Capítulo 5, capítulo
este que apresentará também todo o processo de veri�cação e simulação da implementação
aqui apresentada, bem como a transcrição do sistema para um FPGA, obtendo então o
hardware criptográ�co objetivado por este trabalho.
43
Capítulo 5
Construção do Hardware Criptográ�co
Este capítulo trata da efetiva implantação de um hardware criptográ�co com o algo-
ritmo DES em uma placa FPGA, bem como todos os materiais e processos intermediários
utilizados para tal, como a compilação e a simulação do código produzido que procedem
a criação do hardware.
5.1 Materiais e Programas Utilizados
Previamente à criação do sistema, houve a necessidade de selecionar os programas
a serem utilizados para as diversas etapas do processo de implementação do hardware
desejado.
Para a criação do hardware criptográ�co proposto por este trabalho, foi utilizada uma
placa cedida para a concepção deste projeto pelo Departamento de Engenharia Mecânica
da Universidade Federal de Uberlândia. A escolha pelo dispositivo utilizado se deu então,
de acordo com a placa disponível para uso.
A produção de um sistema a ser colocado em um FPGA necessita de algumas etapas
para obtenção de um melhor resultado. A primeira coisa a ser feita é a criação do código
a ser introduzido no sistema, código esse que teve sua estrutura explicada no Capítulo 4 e
pode ser veri�cado na íntegra no CD que acompanha esta monogra�a. Os demais passos
aqui realizados incluem a compilação de tal código, sua simulação, a atribuição de pinos
de entrada e saída de dados a serem utilizados no hardware e a colocação do código na
placa FPGA desejada. Com exceção à primeira etapa já concluída, as demais necessitam
de programas que executem e facilitem esses processos.
Existem diversos programas, especialmente para compilação e simulação, disponíveis
para uso, dentre eles, o ISE WebPack R© Software da Xilinx R©, o OrCad R© da Cadence R©, o
ALDEC R© Active-HDL Simulator e os programas fornecidos pela Alera R©, a fabricante da
placa utilizada neste trabalho.
Por ter disponível um FPGA da Altera R©, e também por essa fornecer uma ampla
44
gama de programas, documentações, tutoriais e vídeo-aulas, optou-se pela utilização de
programas de licença gratuita dessa empresa neste trabalho, já que também existem ou-
tros programas por ela fornecidos que são mais robustos e possuem mais funcionalidades,
porém, como o projeto aqui proposto é relativamente simples, a versão gratuita dos pro-
gramas utilizados é su�ciente para obtenção dos resultados desejados.
5.1.1 A Placa Utilizada
Existem diversas placas de dispositivos FPGA disponíveis no mercado produzidas
por diferentes fabricantes. Como dito anteriormente, este trabalho foi projetado com um
FPGA fornecido pela Universidade Federal de Uberlândia, cujo modelo é o EP2C20F484C7
da família de dispositivos Cyclone R© II da Altera R©. Por convenção, tal placa será aqui
referida apenas pelo nome da família a qual pertence, Cyclone II.
A placa supracitada é da família de desenvolvimento de sistemas embarcados de baixo
custo da Altera e já vem completamente pronta para o desenvolvimento de sistemas im-
plementados em hardware. Um processador NIOS R© II especí�co para a con�guração de
sistemas embarcados, memória �ash, Random Access Memory (RAM) e Static Random
Access Memory (SRAM) integradas, um circuito Universal Serial Bus (USB) Blaster para
conexão com computador para passagem de dados e programas, botões e interruptores,
diodos emissores de luz (LED's), extensores duais de 40 pinos, portas seriais para cone-
xão de diversos periféricos e diversos outros recursos já estão inclusos, (c.f. Figura 5.1)
assim, essa placa já fornece todas as funcionalidades necessárias para o desenvolvimento
de diversos tipos de sistemas.
Figura 5.1: Cyclone R© II EP2C20F484C7. Fonte: [ALTERA, 2006b].
45
É importante colocar que o processador presente no FPGA é o dispositivo que receberá
o projeto criado, as demais funcionalidades são apenas artifícios extras que vem a facilitar
a integração do hardware concebido. Assim sendo, por se tratar de um chip, sua pinagem1
deve ser especi�cada de acordo com a aplicação obtida para a utilização dos recursos
disponíveis na placa, tal especi�cação será melhor tratada na Seção 5.4.
5.1.2 O Programa Quartus II
Dentre os diversos programas para criação, compilação e simulação de projetos criados
em HDL's, dois em especial foram utilizados para concretizar este trabalho. O primeiro,
intitulado Quartus II, será aqui apresentado e o segundo, intitulado ModelSim, será visto
em seguida.
O programa Quartus II da Altera R© possui duas vertentes, uma paga, que oferece mais
recursos e funcionalidades para manipulação em geral de projetos a serem implantados em
sistemas embarcados, e uma versão gratuita (versão web) que é mais simpli�cada quanto
às facilidades e recursos que apresenta aos seus usuários. Por suprir as necessidades deste
trabalho, foi utilizada a distribuição gratuita do software em sua versão Quartus II 9.1sp2
Web Edition.
Esse software, que pode ter sua tela inicial visualizada na Figura 5.2, disponibiliza
desde um ambiente para edição do código criado em HDL's até uma API para simulação
da aplicação desenvolvida e uma ferramenta que faz a transcrição do sistema criado para
o FPGA desejado.
Figura 5.2: Tela Inicial do Quartus II Web Edition.
1Descrição de funcionamento, posição e sinais de cada um dos pinos de um circuito integrado.
46
O Quartus II será utilizado neste trabalho para os processos de compilação, que será
descrito na Seção 5.2, de atribuição de pinos, que será apresentado na Seção 5.4 e de
migração do sistema para a Cyclone II, que será visto na seção 5.5. Para tais, serão
utilizados respectivamente o compilador VHDL do Quartus II, a ferramenta Pin Planner
e a ferramenta Programmer, ambas inclusas nesse software. Cada utilização será melhor
explicada em sua respectiva seção.
5.1.3 O Programa ModelSim
Por se tratar de um programa de fácil entendimento, fornecido pela Altera e a �m de
manter a utilização dos softwares dessa empresa, foi utilizado o programa ModelSim para
a simulação do sistema criado neste trabalho e veri�cação dos dados de saída obtidos.
Também disponível nas duas vertentes, paga e gratuita, aqui também foi possível
realizar todas as atividades desejadas através da distribuição gratuita, sendo utilizada
então neste trabalho a versão ModelSim ALTERA STARTER EDITION 6.5b, cuja tela
inicial pode ser vista na Figura 5.3.
Figura 5.3: Tela Inicial do ModelSim ALTERA STARTER EDITION 6.5b.
Através do ModelSim é possível tanto a sua utilização para criação de simulações
por API quanto a execução de arquivos auxiliares de testbench e macro criados para
automação das simulações. Mais detalhes sobre o processo de simulação através dos
arquivos auxiliares com o ModelSim serão apresentados na Seção 5.3, onde é mostrada a
simulação do projeto realizado neste trabalho.
47
5.2 Compilação
A compilação de um projeto tem por objetivo a veri�cação do código criado e sua
transformação em um outro código intermediário para sua futura execução. No caso
das HDL's, o processo de compilação realiza, além dessas atividades, a veri�cação da
quantidade de componentes lógicos a serem utilizados internamente por um circuito criado
com sua utilização, possibilitando que o designer averigue a viabilidade de seu projeto. No
caso da compilação feita no software Quartus II, apresentado na Seção 5.1.2, todas essas
informações são fornecidas quando a compilação é completada com êxito, como pode ser
observado na �gura 5.4. Caso haja algum erro no código produzido, a tela apresentada não
aparecerá e serão lançadas mensagens de erro na caixa de diálogo do programa, indicando
onde está presente a falha do código.
Figura 5.4: Compilação da Implementação do DES deste Trabalho.
Além disso, é possível perceber que o FPGA (nome do dispositivo e a família a que per-
tence) em que o sistema criado será implantado é mostrado no resultado da compilação.
Isso se dá pois a porcentagem da quantidade de componentes internos e pinos utilizados
só é possível de ser analisada quando indicada a placa a ser utilizada, já que há diferen-
tes dispositivos disponíveis no mercado, cada um com suas peculiaridades e quantidade
variável de componentes internos. Assim, quando da criação do projeto para compilação
no Quartus II, a correta indicação do FPGA a ser futuramente utilizado possibilita um
48
fornecimento maior e mais preciso de informações acerca do dispositivo a ser criado.
Outras informações também estão presentes no resultado da compilação, como a versão
do software utilizado para tal, o nome do projeto criado, o nome do componente de maior
nível na hierarquia (Top-level Entity Name), o tipo de modelo de temporização utilizado
e se tal modelo foi atendido (Timing Models e Met timing requirements), a quantidade
de registradores utilizados do chip, a quantidade de pinos reais e virtuais utilizados, e
também de elementos multiplicadores binários e Phase-Locked Loops2 (PLL's). Algumas
funcionalidades e elementos presentes no FPGA a ser implantado, como os multiplicadores
e PLL's, não foram utilizados devido à simplicidade do design do sistema criado.
5.2.1 Análise do Resultado da Compilação
Como apresentado na Seção 4.3, o código resultante deste trabalho contribuiu para
uma redução dos componentes internos do hardware criado. Tal melhoria pode ser con�r-
mada comparando-se os resultados obtidos na compilação, já apresentados na Figura 5.4,
com o resultado da compilação do código presente em [Moreno et al., 2005], mostrado na
Figura 5.5.
Figura 5.5: Compilação da Implementação do DES de [Moreno et al., 2005].
Através da análise das duas compilações, é possível perceber que passa de 914 (5%) da
2Circuito eletrônico composto por um oscilador de frequência variável e um detector de fase que gera
sinais de saída dependentes da fase do sinal de entrada.
49
codi�cação de [Moreno et al., 2005] para 631 (3%) a utilização de elementos lógicos, de
um total de 18.752 disponíveis para uso na Cyclone II. Assim sendo, a codi�cação deste
trabalho produz uma redução de 44,84% na utilização interna dos elementos do chip da
placa, o que torna essa implementação visivelmente mais e�ciente.
5.3 Simulação
Veri�cada a codi�cação realizada, o sistema está pronto para ser simulado, a �m de
averiguar seu correto funcionamento através da análise dos valores de entrada fornecidos
e de saída obtidos. Além disso, na simulação é possível veri�car o tempo de execução do
sistema quando fornecida determinada entrada. Para essa etapa, foi utilizado o software
ModelSim da Altera.
Poderia ter sido utilizada a API do programa para criação da simulação, mas como
já dito na Seção 4.2, optou-se pela escrita de um código que de�ne todo um ambiente
de execução (testbench), contendo todos os dados de entrada, e outro que automatiza o
processo de simulação (macro), ambos descritos na Seção 4.2, e a chamada desse último
por meio de linhas de comando no ModelSim, produzindo então o resultado da simulação
visto na Figura 5.6. Isso permite a rápida execução da simulação e também a alteração
dos dados de entrada no ambiente de execução simulado.
Figura 5.6: Simulação do Sistema Criado Para Cifragem.
5.3.1 Análise dos Resultados da Simulação
Através da Figura 5.6 é possível veri�car as variáveis indicadas para visualização no
arquivo de macro juntamente com os dados de entrada de�nidos no testbench criado e o
tempo de execução gasto. O sistema criado realiza a execução de todas as suas funções
em menos de 1 nanossegundo.
A �m de veri�car o correto funcionamento do código criado, foi realizada uma segunda
simulação tendo-se como entrada o texto cifrado e a chave utilizados na simulação da
50
Figura 5.6. Seguindo a descrição do algoritmo DES utilizado neste trabalho feita no
Capítulo 3, o correto funcionamento do sistema deve então retornar como saída o texto
claro da primeira simulação, o que pode ser comprovado pela Figura 5.7.
Figura 5.7: Simulação do Sistema Criado Para Decifragem.
Para dar continuidade às comparações com o código fornecido em [Moreno et al., 2005],
foi executada uma simulação do código por ele proposto após as devidas correções apre-
sentadas na Seção 4.3. O resultado de tal simulação pode ser apreciado na Figura 5.8 e
apresenta algumas discrepâncias em relação à Figura 5.6 justamente pelo fato de utilizar
uma chave previamente permutada de 56 bits, como já descrito na Seção 4.3.
Figura 5.8: Simulação do Sistema de [Moreno et al., 2005].
Para a simulação acima, foi utilizado o mesmo arquivo de macro e de testbench que
a simulação do sistema desenvolvido neste trabalho, a alteração �ca apenas na chave
de entrada no algoritmo, que recebe o valor equivalente à chave já permutada, vista na
simulação do projeto aqui criado, e permanece a mesma posteriormente na execução. É
possível observar que a implementação de [Moreno et al., 2005] consome o mesmo tempo
de execução que o sistema criado neste trabalho, assim, �ca claro que a melhoria aqui
alcançada diz respeito apenas à utilização interna de componentes do chip presente no
FPGA.
51
5.4 Atribuição da Pinagem
Como já dito na seção 5.1.1, o sistema criado e implantado em um FPGA se compor-
tará efetivamente como um chip. Deste modo, cada dado3 de entrada e saída será visto
ao �nal como um pino acoplado a um chip, podendo receber ou retornar dados em forma
de alta ou baixa voltagem4, dependendo de sua funcionalidade.
O circuito criado (chip) por si só não é capaz de realizar nenhum processamento sem
que dados sejam inseridos, e também se torna inútil caso nenhum resultado possa ser
obtido dele. Para tanto, no desenvolvimento de uma placa FPGA se faz necessário o uso
dos artifícios nela presentes para que possam ser atribuídos os pinos do circuito criado
aos pinos5 presentes nas diversas funcionalidades presentes na placa.
As atribuições de pinos de um sistema embarcado em um FPGA devem ser feitas
quando da criação do sistema. O Quartus II fornece uma ferramenta especí�ca para
realizar tais atribuições, o Pin Planner, que pode ser visto na Figura 5.9, onde é possível
obter uma visão geral de como o chip do FPGA está organizado eletronicamente e de
sua pinagem interna, que é dividida em bancos de entrada e saída (I/O), bem como os
dados resultantes do projeto criado, possibilitando a atribuição dos dados do projeto aos
pinos presentes na placa. A descrição completa de todos os bancos de I/O pode ser
consultada em [ALTERA, 2005] e os pinos e sua nomenclatura podem ser apreciados em
[ALTERA, 2006a].
Figura 5.9: Ferramenta Pin Planner do Quartus II.
3Cada bit nesse caso é considerado um dado, um vetor de bits é visto como um conjunto de dados e
cada bit é atribuído a um pino.4A alta voltagem representará o bit 1 e a baixa voltagem o bit 05Por se tratar de uma placa eletrônica, todas as comunicações internas do FPGA, incluindo as diversas
interfaces que esta fornece, são feitas por meio de circuitos eletrônicos interligados por meio de pinos.
52
Atribuir pinos e fazer o interfaceamento entre as funcionalidades presentes em FPGA
e o circuito criado em seu chip não é uma tarefa fácil, pois requer um estudo aprofundado
de cada componente extra presente na placa, desde seu funcionamento interno até como
integrá-lo ao circuito.
O projeto criado neste trabalho possui uma quantidade de dados de entrada e saída
muito grande para interligar aos dispositivos presentes na Cyclone II, utilizando um total
de 194 pinos (c.f. Figura 5.4) para entrada e saída de dados, o que di�culta ainda mais o
interfaceamento. Neste trabalho foram utilizados alguns artifícios para facilitar a atribui-
ção da pinagem para inserção dos dados e visualização dos resultados, a �m de validar o
funcionamento do circuito criado.
Para a inserção de dados, os bits de controle (clock e reset) e os dados de entrada
(texto claro e chave) foram inseridos por meio dos interruptores presentes na Cyclone II,
que apresentam os valores lógicos 0 ou 1 quando posicionadas para baixo ou para cima,
respectivamente. O problema com essa abordagem, é que a placa dispõe apenas de 10
interruptores, e são um total de 130 bits de entrada no sistema. A solução encontrada foi
a atribuição dos 2 bits de controle e de apenas 8 bits de dados, 4 para a chave e 4 para o
texto claro, esses 4 bits são então replicados dentro do código do sistema6, formando um
texto claro e uma chave criptográ�ca de 64 bits replicados a partir dos 4 bits originais
cada uma.
Para visualização do texto cifrado foram utilizados os LED's do FPGA, que represen-
tam os valores lógicos 1 ou 0 quando ligados ou desligados, respectivamente. Aqui também
há o problema de haver mais bits presentes do projeto do que dispositivos disponíveis na
Cyclone II, sendo produzidos 64 bits de texto cifrado para apenas 18 LED's na placa.
Por se saber previamente os dados a serem obtidos através da simulação apresentada na
Seção 5.3, apenas os 167 primeiros bits de saída do sistema foram atribuídos aos LED's,
possibilitando sua conferência com a simulação, já que não foi possível a visualização de
todo o resultado.
5.5 A Migração da Aplicação para o Hardware
Após a atribuição dos pinos que serão gerados na criação do hardware, é necessário
realizar mais uma compilação para que o Quartus II possa incorporar ao projeto criado
tais atribuições e obter um sistema completo para implantação no FPGA, gerando um
6O código foi alterado apenas para a implantação do código no FPGA de forma a permitir a entrada
e saída de dados, seu funcionamento não foi prejudicado.7A escolha por representar apenas 16 bits, e não os 18 que poderiam ser atribuídos, se deu devido
ao fato de o número 16 poder ser escrito como 24, o que facilita a visualização quando se trata da
representação de números binários.
53
arquivo de extensão sof, que pode ser então transcrito para a placa. Após esse passo,
outra ferramenta do Quartus II, especí�ca para implantar um projeto criado em uma
HDL em um FPGA, chamada Programmer (c.f. Figura 5.10), é utilizada para esse �m.
Figura 5.10: Ferramenta Programmer do Quartus II.
O FPGA a receber o projeto criado deve ser conectado ao computador que possui essa
ferramenta instalada, nela então é possível indicar em qual hardware conectado ao com-
putador o projeto criado deve ser carregado, bem como qual arquivo .sof carregar. Uma
vez colocado na placa, o chip nela presente passa a agir como o hardware criptográ�co
projetado e o FPGA pode então ser desconectado do computador. A partir disso, os inter-
ruptores da placa podem ser organizados de modo a inserir os dados a serem processados
para produzir a saída do texto criptografado nos LED's.
5.6 A Execução do Sistema
Para execução do hardware criado, foram utilizados os mesmos dados inseridos no
arquivo de testbench8 utilizado na simulação da Seção 5.3. Os dados são então inseridos
através dos interruptores, de acordo com a ordem estabelecida quando da atribuição da
pinagem, produzindo a con�guração de interruptores e LED's vista na Figura 5.11.
8Os resultados da simulação foram apresentados em notação hexadecimal apenas para facilitar o
entendimento e tornar menos extensa a visualização dos dados, porém os dados foram inseridos no
arquivo de simulação em notação binária.
54
Figura 5.11: Dados de Entrada e Saída da Execução do Hardware Criado.
Para obtenção dos resultados acima, o clock do sistema foi iniciado com valor ló-
gico 0 e está representado pelo interruptor SW9, o sinal de reset que inicia o proces-
samento foi con�gurado com o valor lógico 1, sendo atribuído ao interruptor SW8, os
interruptores SW7, SW6, SW5 e SW4 foram con�gurados de modo a representarem o
número binário 1010, que quando replicado dentro do sistema produzirá a chave cripto-
grá�ca AAAAAAAAAAAAAAAAh9, por �m, os interruptores SW3, SW2, SW1 e SW0
apresentaram a con�guração equivalente ao valor binário 0101, que ao serem replicados
internamente ao sistema de hardware produzirá o texto claro 5555555555555555h.
Todos esses valores podem ser conferidos na simulação apresentada na Seção 5.3,
bem como a con�guração apresentada pelos LED's, que representam os 16 primeiros bits
do texto cifrado obtido e produzem a seguinte sequência: LEDR9 desligado, LEDR8
desligado, LEDR7 desligado, LEDR6 ligado, LEDR5 desligado, LEDR4 desligado,
LEDR3 desligado, LEDR2 ligado, LEDR1 desligado, LEDR0 ligado, LEDG7 desli-
gado, LEDG6 desligado, LEDG5 desligado, LEDG4 ligado, LEDG3 desligado e LEDG2
desligado, os LED's LEDG1 e LEDG0 se encontram desligados mas não fazem parte da
visualização do resultado, assim, a sequência de bits representada é 0001000101000100,
que são os primeiros 4 dígitos hexadecimais (1144h) apresentados no resultado da simu-
lação da Seção 5.3.
Por se tratar de um FPGA, os dados de entrada podem ser alterados a qualquer
momento para resultar em novos dados de saída sem a necessidade de se reiniciar o sistema,
como já citado na Seção 2.3.1, assim, se modi�cada a con�guração dos interruptores para
inserção dos dados de entrada apresentados na simulação da Figura 5.12 (1101 para a
chave e 0011 para o texto claro), os primeiros 16 bits do resultado (0011001000110111)
apresentados nos 16 primeiros LED's da placa passam a representar o resultado do novo
processamento (c.f. Figura 5.13), e os dados podem ser conferidos de acordo com a
simulação.
9Representação hexadecimal da cadeia de 64 bits que representa a chave.
55
Figura 5.12: Simulação do Sistema Criado com Outros Dados de Entrada.
Figura 5.13: Outros Dados de Entrada e Saída da Execução do Hardware Criado.
Desse modo, o hardware criptográ�co objetivado neste trabalho através do uso da lin-
guagem VHDL e da placa FPGA disponível foi alcançado com sucesso, podendo veri�car
a entrada e saída de dados obtidos em simulações através dos interruptores e LED's da
placa. E além disso, foi conseguido um ganho signi�cativo em relação à implementação
que norteou a construção do circuito aqui criado quanto ao uso de componentes internos.
5.7 As Di�culdades Encontradas
Durante todo o processo de produção do sistema aqui proposto, diversas di�culdades
foram encontradas e superadas, desde a obtenção do código em VHDL utilizado, sua
correção e melhoria, à utilização da placa Cyclone II, sua con�guração e interfaceamento.
Seguem abaixo as di�culdades que mais se destacaram durante a criação do hardware
desejado e as soluções encontradas para tais:
• Complexidade das VHDL's: Tais linguagens apresentam grande di�culdade de
entendimento devido à sua complexidade e diferente forma de se trabalhar para
obtenção de um sistema quando comparada às linguagens de programação. Para
ser possível a utilização de tal abordagem, foi escolhida a linguagem VHDL, que é
bem documentada e são presentes na literatura diversos exemplos que a utilizam, o
que vem a facilitar a adaptação à abordagem das HDL's, o entendimento e a futura
criação dos mais variados códigos descritos nessa linguagem.
56
• Obtenção/criação do código do DES em VHDL: Mesmo se tratando de um
algoritmo relativamente simples, a implementação do DES em uma linguagem de
descrição de hardware é bastante complexa, por esse motivo, optou-se pela utilização
de uma codi�cação já existente. Tal codi�cação, porém, necessitava de alterações e
correções para que seu funcionamento se desse corretamente, que foram apresentadas
na Seção 4.3 do Capítulo 4.
• Simulação do código: Previamente à concessão da placa Cyclone II pela Uni-
versidade Federal de Uberlândia, o trabalho de codi�cação do projeto já havia se
iniciado, trazendo então a necessidade de veri�cação do código através de simula-
ções, o que trouxe a di�culdade da utilização dos programas para esse �m disponíveis
no mercado, pois apresentavam pouca documentação ou difícil entendimento e ma-
nipulação de sua interface de utilização. A obtenção da placa e sua respectiva gama
de programas auxiliares veio a sanar tais di�culdades, pois os programas apresentam
uma solução completa para o desenvolvimento (c.f Seção 5.1) , interfaces amigáveis
e boa documentação para consulta e melhor entendimento.
• Utilização da placa: A efetiva utilização da placa e a transcrição do sistema para
esta foi a fase que mais apresentou di�culdades, que podem ser divididas em:
Instalação da placa: Para poder ser utilizada de modo a receber qualquer sis-
tema, o FPGA deve ser conectado a um computador que o contenha para que esse
último possa transcrever o projeto para o primeiro. O problema em tal utilização se
apresenta no fato de a placa não ser reconhecida automaticamente pelo computador
ao qual está acoplada, necessitando então, da instalação manual de seu driver que
é fornecido quando da instalação dos programas presentes no CD que acompanha o
FPGA.
Utilização dos recursos da placa: Embora a Cyclone II possua diversas fun-
cionalidades, a documentação referente à sua utilização é bastante de�ciente. A
documentação da placa e os textos presentes na literatura apenas indicam as fun-
cionalidades e seu funcionamento interno, �cando aquém às expectativas de quem
deseja utilizar tais documentos como guia para criação de sistemas que tirem má-
ximo proveito das funcionalidades desse FPGA. Assim, não foi possível, por falta de
tempo hábil para exploração da placa, a criação de interfaces de I/O mais amigáveis.
A solução encontrada foi a utilização dos artifícios descritos na Seção 5.4.
O entendimento do algoritmo escolhido e outras di�culdades também foram presen-
ciadas no desenvolvimento deste trabalho, porém não se equiparam em signi�cância
às descritas acima, que por meio de muita pesquisa e tempo dedicado foram sanadas.
57
Capítulo 6
Conclusão
Este trabalho teve como objetivo a criação um sistema criptográ�co embarcado, atra-
vés do qual dados podem ser cifrados diretamente pelo hardware criado em um tempo
de execução bem inferior ao que seria alcançado com o uso de um software equivalente,
o que é bastante desejável quando se trabalha em um ambiente que exige cada vez mais
segurança e rapidez na execução das mais diversas tarefas.
Foram discutidos os conceitos de criptogra�a, circuitos reprogramáveis, linguagens de
descrição de hardware e o clássico algoritmo criptográ�co DES, que utilizados em conjunto
tornaram possível a realização deste projeto. Foi possível perceber que a segurança de
dados é imprescindível no meio digital, e que sistemas criptográ�cos embarcados vem a
calhar nesse contexto. Também foram veri�cadas as vantagens de se utilizar HDL's, que
produzem sistemas com vantagens de hardware e software, e das placas FPGA's, que
permitem sua recon�guração para implantação de outro sistema sem o desperdício do
dispositivo.
Diversos passos foram executados para alcançar o circuito desejado, desde a criação
de um código em linguagem de descrição de hardware à manipulação da pinagem de um
circuito FPGA para delegação das operações de entrada e saída de dados do hardware,
cada etapa apresentando sua importância e contribuindo para a obtenção de um sistema
rápido e funcional.
Muitas foram as di�culdades encontradas, desde a complexidade da linguagem VHDL
utilizada à disponibilidade de recursos do FPGA utilizado, passando pelo entendimento
do algoritmo DES para sua implementação e das funcionalidades da placa para transcrição
do sistema criado.
Por �m, conseguiu-se a obtenção do hardware desejado, e através de simulações, foi
possível observar que este apresenta melhorias quanto à utilização de componentes inter-
nos do FPGA utilizado para sua criação. Tal ganho foi possível com melhoramento da
implementação de um código presente na literatura, que foi alterado de forma a obter um
código mais completo e e�ciente.
58
6.1 Trabalhos Futuros
Este trabalho apresentou uma introdução a um vasto campo de pesquisa, já que en-
volve os tanto a criptogra�a quanto sistemas embarcados. Deste modo, é possível dar
direcionamento a diversos trabalhos relacionados às duas áreas aqui envolvidas, dentre
elas, pode-se investir em:
• Utilização de outras modelagens: A modelagem do algoritmo DES apresentada
neste trabalho foi híbrida, pode-se futuramente fazer uso separadamente das abor-
dagens comportamental e funcional a �m de comparar resultados obtidos através
das três modelagens.
• Criação de Outros Hardwares Criptográ�cos: Pode-se realizar a implementa-
ção de outros algoritmos criptográ�cos em VHDL, ou outra HDL, com a utilização
de FPGA's ou mesmo de outas abordagens de implementação de sistemas embarca-
dos.
• Interfaceamento: Este trabalho utilizou interruptores e LED's para as operações
de I/O, �ca a cargo de trabalhos futuros o estudo das diversas formas de interface-
amento presentes na Cyclone II para facilitar a entrada e saída de dados do circuito
criado.
• Exploração das Funcionalidades da Cyclone II: Aqui foi apresentada a implan-
tação de criptogra�a em um sistema FPGA, porém essa não é a única aplicabilidade
desse tipo de circuito. Suas funcionalidades podem ser melhor investigadas para a
criação dos mais diversos sistemas.
• Veri�cação Formal de Sistemas Criptográ�cos Embarcados: Por se tratar
de um assunto relacionado à segurança da informação, é desejável que sistemas
criptográ�cos passem por processos de veri�cação formal que garantam sua cor-
retude, segurança e e�cácia, mesmo sendo um sistema embarcado. Deste modo,
futuramente pode-se investir em tal veri�cação e aplicá-la também a outros tipos
de sistemas embarcados que venham a ser criados.
59
Referências
Ali, L., Yunus, N., Jaafar, H., Wagiran, R., e Low, E. (2004). Implementation of triple data
encryption algorithm using vhdl. In IEEE International Conference on Semiconductor
Electronics, 2004. ICSE 2004., page 5 pp.
Almeida, A. A. e da Costa, V. G. (2011a). Implementação em VHDL do Algoritmo DES
Compilada no Altera Quartus II. In IX Encontro Anual de Computação - ENACOMP,
2011. Disponível em mídia digital.
Almeida, A. A. e da Costa, V. G. (2011b). Uso de VHDL no FPGA Altera Cyclone II
para construção de sistemas criptográ�cos. Revista Mediação, 6:249�257.
ALTERA (2005). Cyclone II Device Handbook. ALTERA, San Jose, CA - Estados Unidos.
ALTERA (2006a). Cyclone II FPGA Starter Development Board - Reference Manual.
ALTERA, San Jose, CA - Estados Unidos.
ALTERA (2006b). Cyclone II FPGA Starter Development Kit - User Guide. ALTERA,
San Jose, CA - Estados Unidos.
Arich, T. e Eleuldj, M. (2002). Hardware implementations of the data encryption stan-
dard. In The 14th International Conference on Microelectronics - ICM, pages 100 �
103.
Ashenden, P. J. (1990). The VHDL Cookbook. Dept. Computer Science of University of
Adelaide - South Australia.
Ashenden, P. J. (1995). The Designer's Guide to VHDL. Morgan Kaufmann, New York,
NY - Estados Unidos.
Badrignans, B., Danger, J. L., Fischer, V., Gogniat, G., e Torres, L., editors (2011).
Security Trends for FPGAs From Secured to Secure Recon�gurable Systems. Springer,
New York, NY - Estados Unidos.
Brown, R. H., Good, M. L., e Prabhakar, A. (1993). Data Encryption Standard. Technical
Report FIPS 46-2, National Institute of Standards and Technology. disponível em http:
//www.itl.nist.gov/fipspubs/fip46-2.htm#FORE_SEC, acessado em dezembro de
2011.
Chu, P. P. (2008). FPGA Prototyping by VHDL Examples Xilinx Spartan-3 Version. John
Wiley & Sons, Inc., New Jersey, NJ - Estados Unidos.
Churchhouse, R. F. (2004). Codes and ciphers Julius Caesar, the Enigma and the internet.
Cambridge University Press, 40 West 20th Street, New York, NY 10011-4211, USA.
60
Gaj, K. e Chodowiec, P. (2009). FPGA and ASIC Implementations of AES. In Çe-
tin Kaya Koç, editor, Cryptographic Engeneering. Springer, New York, NY - Estados
Unidos.
Hu�mire, T., Irvine, C., Nguyen, T. D., Levin, T., Kastner, R., e Sherwood, T. (2010).
Handbook of FPGA Design Security. Springer, New York, NY - Estados Unidos.
Kahn, D. (1967). The Codebreakers: The story of secret writing. Macmillan.
Li, F. e Ming, P. (2009). A simpli�ed FPGA implementation based on an improved des
algorithm. In 3rd International Conference on Genetic and Evolutionary Computing,
2009. WGEC '09., pages 227 �230.
Moreno, E. D., Pereira, F. D., e Chiaramonte, R. B. (2005). Criptogra�a em Software e
Hardware. Novatec, São Paulo, SP - Brasil.
NIST (1995). An Introduction to Computer Security: The NIST Handbook. Disponível
em: http://csrc.nist.gov/publications/nistpubs/800-12/handbook.pdf Aces-
sado em: Setembro de 2010.
Schneier, B. (1996). APPLIED CRYPTOGRAPHY Protocols, Algorithms, and Source
Code in C. John Wiley & Sons, Inc.
Singh, S. (2000). The Code Book: The Science of Secrecy from Ancient Egypt to Quantum
Cryptography. Anchor, New York, NY - Estados Unidos.
Stallings, W. (2008). Criptogra�a e Segurança de Redes: Princípios e Práticas - Título
Original: Criptography and Networking Security 4/E. Pearson Education, 4a edition.
Taherkhani, S., Ever, E., e Gemikonakli, O. (2010). Implementation of Non-Pipelined
and Pipelined Data Encryption Standard (DES) Using Xilinx Virtex-6 FPGA Techno-
logy. In IEEE 10th International Conference on Computer and Information Technology
(CIT), 2010, pages 1257 �1262.
Tanenbaum, A. S. (2003). Sistemas Operacionais Modernos. Pearson Education, São
Paulo, Sp - Brasil, 2 edition.
Tocci, R. J., Widmer, N. S., e Moss, G. L. (2007). Sistemas Digitais princípios e aplicações.
Pearson Prentice Hall, São Paulo, Sp - Brasil.
Wilson, P. e Brown, A. (2005). DES in four days using behavioural modeling synthesis.
In Proceedings of the 2005 IEEE International Behavioral Modeling and Simulation
Workshop, 2005. BMAS 2005., pages 82 � 87.
61
Recommended