Buscar

Criptografia_em_software_e_hardware

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 292 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 292 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 292 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

3 
 
Dedicatória 
 Agradeço à minha familia pelo apoio, incentivo e compreensão nos 
momentos de ausência e, em especial, por terem sempre paciência e muito amor. À 
minha familia da Colômbia por seu eterno amor. 
Edward 
 
 Dedico este livro à minha esposa Ednéia, e ao meu filho, Pedro Luís, que 
iluminam o meu caminho. Aos meus pais que sempre me apoiaram, e aos meus 
amigos, que sempre me incentivaram em todos os sentidos. 
Fábio 
 
 Ofereço este livro aos meus pais Alcides e Marta, e à minha irmã Josiane, 
que sempre estiveram ao meu lado, apoiando-me e incentivando. Aos meus 
familiares pela compreensão e atenção em todos os momentos. 
Rodolfo 
 
 
4 
 
Agradecimentos 
A DEUS pois, sem Ele, não estaríamos aqui e não fariamos nada daquilo que 
fazemos. 
À Mantenedora do UNIVEM, Fundação de Ensino Eurípides Soares da Rocha, pelo 
comprometimento com a educação de ensino superior, formando profissionais com 
excelência acadêmica e responsabilidade social, e principalmente, por oferecer 
condições acadêmicas integradas à realização de pesquisas, pois entendem que é um 
dos caminhos para se alcançar excelência acadêmica, universitária e profissional. 
Aos amigos e colegas do UNIVEM (Centro Universitário Eurípides de Marília, S.P.) 
que trabalham no LAS – Laboratório de Arquitetura e Sistemas Computacionais. Em 
especial a Cesar Giacomini Penteado e Rodrigo de Almeida Pericini que dividiram 
momentos de dificuldade e sucesso nos projetos e na vida. 
Aos amigos Paulo Henrique Trecenti, Luis Fernando Ruivo Gatti, Eduardo Elias 
Laíno de Oliveira, Thiago Albuquerque Pinto; cujos trabalhos de Conclusão de curso 
apresentado no curso de Bacharelado em Ciência da Computação do UNIVEM 
auxiliaram e, muito, a realização deste livro. 
Aos profissionais da área de computação e informática: Emiliano da Silva Alves, 
Vivian Patricia Mascarin e Everson Luiz Vilela Tescaro, que fizeram a sua 
especialização em engenharia de software, nos cursos lato-sensu do UNIVEM. 
Aos alunos do Mestrado em Ciência da Computação e alunos da especialização em 
redes de computadores e segurança da informação do UNIVEM. 
A todas as outras pessoas que, mesmo não citadas aqui, deram muito apoio e 
incentivo, que, sem os quais, esse livro não chegaria à sua conclusão. 
 
 
 
5 
 
Sobre os autores 
Edward David Moreno é professor Doutor no UNIVEM (Centro Universitário 
Eurípides de Marília), e atua tanto no programa de mestrado stricto-sensu em ciência 
da computação quanto no curso de BCC (Bacharelado em Ciência da Computação). 
Também é Professor credenciado no programa de Pós-graduação da Universidade de 
São Paulo (USP, São Paulo) e membro do grupo HPCAC (High Performance 
Computer Architecture and Communications) da POLI-USP. 
O Prof. Moreno finalizou seu Pós-Doutorado na UFSCar (Universidade Federal de 
São Carlos), São Carlos/SP, 2000 na área de Aplicações em Computação de Alto 
Desempenho, o seu Doutorado em Eng. Elétrica/POLI-USP, 1998 na área de 
Computação de Alto Desempenho e Arquiteturas Avançadas de Computador e o seu 
Mestrado em Eng. Elétrica/POLI-USP, 1994 na área de Arquitetura de 
Computadores. Finalmente, a Graduação foi em Eng. Elétrica/Universidad del 
Valle, Cali,Colômbia,1991, com o projeto de Microcontroladores em Gate Arrays 
CMOS. No ano de 1999, fez uma especialização em Gestão de Projetos, na PUC-
Paraná. 
As áreas de interesse do Prof. Moreno são: Arquitetura de Computadores, 
Computação de Alto Desempenho, Avaliação de Desempenho, Computação 
Reconfigurável e Prototipação de Sistemas Digitais. 
O Prof. Moreno tem escrito e publicado, como autor principal e co-autor, 
aproximadamente 100 artigos em eventos nacionais e internacionais. Experiência 
internacional trabalhando como pesquisador convidado em projetos tais como 
“NUMAchine Multiprocessor” desenvolvido na universidade de Toronto, Canadá, e 
no projeto “Large Databases for Multiprocessors” desenvolvido em Chalmers 
University of Technology, Gotebörg, Suécia. Ele participa ativamente na 
comunidade internacional, tendo já colaborado como membro de comitê de 
programa em aproximadamente 50 eventos de renome internacional. 
Fábio Dacêncio Pereira é bacharel e Mestre em Ciência da Computação pelo 
UNIVEM (Centro Universitário Eurípides de Marília). O projeto do mestrado foi na 
área de processadores para Segurança. Foi monitor do Laboratório de Arquitetura e 
Sistemas Computacionais (LAS) e Bolsista de IC da FAPESP (Fundação de Amparo 
à Pesquisa do Estado de São Paulo), no período de Agosto 2000 a Dezembro 2002, e 
bolsista CAPES no ano de 2004. Atualmente professor do UNIVEM. As áreas de 
interesse são: Circuitos e Sistemas Digitais em FPGAs, Avaliacao de Desempenho e 
Projeto de Processadores em FPGAs. Tem publicado alguns trabalhos em eventos 
nacionais e internacionais na área com ênfase no livro recente: Projeto, 
Implementação e Desempenho de Sistemas Digitais em FPGAs. 
 
6 
 
Rodolfo Barros Chiaramonte é bacharel em Ciência da Computação pelo 
UNIVEM. Atualmente mestrando na mesma instituição, no projeto “Sistemas 
Inteligentes de Segurança”, com bolsa da CAPES. O Rodolfo foi monitor do 
Laboratório de Realidade Virtual (LRV) do UNIVEM e Bolsista de Iniciação 
Científica, durante 3 anos, da FAPESP (Fundação de Amparo à Pesquisa do Estado 
de São Paulo), no período de Março 2001 a Dezembro 2003. As áreas de interesse 
são: Segurança de dados, Algoritmos de Criptografia, Circuitos e Sistemas Digitais 
em FPGAs, Avaliação de Desempenho. Tem publicado alguns trabalhos em eventos 
nacionais na área de criptografia e segurança da informação. Além disso, tem 
participado em algumas palestras e workshops sobre os assuntos acima 
mencionados. 
 
7 
 
Prefácio 
Objetivos: 
• Apresentar os principais algoritmos de criptografia utilizados na área de 
segurança e respectiva implementação em software (linguagem C e Java) e 
hardware (VHDL e FPGAs); 
• Explicar alguns códigos em C, enfatizando nas similaridades e diferenças de 
se programar usando linguagem C e VHDL (amplamente usada em projetos 
de hardware); 
• Comparar o desempenho desses algoritmos, tanto na implementação em 
software quanto em hardware. A análise comparativa é realizada através de 
parâmetros tais como: desempenho (velocidade, utilização de memória, 
impacto provocado pelo tamanho das chaves, etc.), nível de segurança, 
flexibilidade e facilidade de implementação e utilização; 
• Mostrar a importância da criptografia implementada em hardware (usando-se 
de circuitos programáveis tais como FPGAs e equipamentos modernos tais 
como HSM e Smart Cards); 
• Facilitar o aprendizado de segurança da informação usando-se de algoritmos 
de criptografia e a existência de algumas bibliotecas tais como CryptoAPI, 
JCA, OpenSSL e JCA; 
• Motivar o aprendizado de projeto de sistemas digitais próprios da área de 
segurança de dados, usando-se de técnicas de prototipação rápida de sistemas 
de segurança em hardware. 
Dessa maneira, o livro oferece ao leitor uma ferramenta de aprendizagem sobre os 
diferentes algoritmos de criptografia atualmente utilizados, enfatizando em aspectos 
de desempenho, a qual está amplamente relacionada com a forma de implementação. 
O livro ensina os aspectos teóricos, relacionando-os com a parte prática 
(implementação e utilização), e pode ser lido tanto por iniciantes quanto por 
profissionais e acadêmicos que queiram se aprofundar mais no assunto. 
 
Resumo: 
O texto está composto de 17 capítulos, organizados em quatro partes: 
Parte I: Conceitos Básicos de Segurança, Software e Hardware 
Parte II: Algoritmos Clássicos de Criptografia 
 
8 
 
Parte III: Algoritmos Modernos de Criptografia 
Parte IV: Ferramentas e Dispositivos Modernos de Segurança 
 
Em termos gerais, a proposta do livro apresenta de maneira clara os principais 
algoritmos de criptografia (tanto simétricos e assimétricos), explicando de maneira 
simples o respectivo funcionamento, sem necessidade de aprofundamentos nos 
conceitosmatemáticos. 
O livro destaca a implementação de alguns algoritmos de criptografia utilizando 
principalmente a linguagem C, assim como, a liguagem JAVA e VHDL, enfatizando 
a analise de desempenho de cada algoritmo, permitindo que o leitor saiba quando um 
algoritmo é melhor do que outro e porque. Isto é, apresenta, pela primeira vez, 
detalhes de performance (desempenho) desses algoritmos. Além de apresentar os 
níveis de segurança e aplicações, apresenta-se a velocidade com que cada algoritmo 
pode executar para diferentes tipos de arquivos de diferentes aplicações. 
Mais uma grande diferença, é a apresentação das potencialidades oferecidas por 
implementações em hardware desses algoritmos. Assim, ele apresenta uma nova 
técnica de projetar sistemas digitais em uma tecnologia moderna chamada de 
circuitos programáveis (FPGAs). Para isso se mostram os conceitos da linguagem 
própria para hardware (VHDL) e como se projetam esses circuitos específicos de 
criptografia a partir das respectivas implementações em software (a maioria em 
linguagem C e alguns outros algoritmos em Java). Finalmente, se faz uma 
comparação entre as respectivas implementações em Software e Hardware. 
Finalmente, no último capítulo, o décimo sétimo (17) se oferecem informações de 
uma ferramenta, chamada pelos autores de WEBCRY, e se disponibiliza um site na 
Internet com algumas informações públicas para que os leitores se atualizem a 
respeito dos algoritmos discutidos no livro, assim como a possibilidade de acessar 
alguns códigos e exemplos fornecidos no livro e a utilização da ferramenta 
WEBCRY criada pelos autores. Dessa maneira, os leitores e usuários podem 
exercitar a parte prática do livro e vivenciar por si mesmos os conhecimentos, 
experiências, resultados e os efeitos de desempenho desses algoritmos. 
 
Público alvo: 
Estudantes e Professores da área da Computação e Informática (tais como Ciência da 
Computação, Sistemas de Informação, Engenharia da Computação, Engenharia 
Elétrica, Engenharia Eletrônica), interessados em adquirir e aprofundar os 
conhecimentos na área de segurança, do ponto de vista de algoritmos, sistemas 
digitais e desempenho. 
Profissionais que estejam realizando pós graduação lato sensu ou stricto sensu, nas 
áreas de segurança de dados e da informação. 
 
9 
 
Engenheiros e profissionais atuando na área de segurança de dados e da tecnologia 
da informação, com interesse em programação, no projeto de circuitos e sistemas 
digitais, e principalmente, no desempenho de sistemas de segurança. 
 
Informações adicionais, tais como códigos da maioria dos algoritmos apresentados 
no livro podem ser acessados no link 
http://www.novateceditora.com.br/downloads.php, assim como detalhes da 
ferramenta WEBCRY. 
 
 
10 
 
Parte I 
Conceitos Básicos de Criptografia, Software e 
Hardware 
A primeira parte divide-se em cinco capítulos, e é é feita uma introdução sobre o 
que será abordado no livro, como ele está estruturado e como pode ser lido. Este 
capítulo apresenta o assunto e motiva a necessidade do estudo de VHDL e a possível 
inserção de FPGAs como alternativa de projeto de circuitos e sistemas digitais, 
enfatiza principalmente os aspectos de implementação e desempenho de algoritmos 
de criptografia tanto em software quanto em hardware. Apresenta um algoritmo de 
criptografia, criado pelos autores e denominado de ALPOS, o qual visa, 
fundamentalmente, mostrar aos leitores com pouca experiência na área, como é 
possível criar soluções criptográficas. Esse algoritmo não é muito seguro, mas é 
uma versão didática que facilita o entendimento de vários conceitos relacionados à 
segurnaça de dados. 
 
 
 
 
11 
 
Capítulo 1 
Conceitos de Segurança de Dados e Criptografia 
Neste primeiro capítulo, Conceitos de Segurança de Dados e Criptografia, se 
apresenta e enfatiza a necessidade da segurança de dados nos tempos modernos, 
focalizando principalmente o papel dos algoritmos de criptografia e as vantagens de 
se ter conhecimento dos conceitos, implementação e, principalmente, do seu 
desempenho. 
1.1 A Criptografia 
A criptografia pode ser entendida como um conjunto de métodos e técnicas para 
cifrar ou codificar informações legíveis através de um algoritmo, convertendo um 
texto original em um texto ilegível, sendo possível através do processo inverso 
recuperar as informações originais (SIMON, 1999), ver processo na figura 1.1. 
 
 
Figura 1.1 – Esquema geral para cifragem de um texto. 
Pode-se criptografar informações basicamente através de códigos ou de cifras. Os 
códigos protegem as informações trocando partes da informação por códigos 
predefinidos. Sendo que todas as pessoas autorizadas a ter acesso à uma 
determinada informação devem conhecer os códigos utilizados. 
As cifras são técnicas nas quais a informação é cifrada através da transposição e/ou 
substituição das letras da mensagem original. Assim, as pessoas autorizadas podem 
ter acesso às informações originais conhecendo o processo de cifragem. As cifras 
incluem o conceito de chaves, que será apresentado em outra seção. 
Os principais tipos de cifra são: as cifras de transposição que é a mistura dos 
caracteres da informação original. Por exemplo, pode-se cifrar a palavra 
"CRIPTOGRAFIA" e escrevê-la "RPORFACITGAI"; e as cifras de substituição que 
através de uma tabela de substituição predefinida é possível trocar ou substituir um 
caractere ou caracteres de uma informação. 
 
12 
 
1.1.1 Uma Breve História da Criptografia 
A criptografia é tão antiga quanto a própria escrita, já estava presente no sistema de 
escrita hieroglífica dos egípcios. Os romanos utilizavam códigos secretos para 
comunicar planos de batalha. Com as guerras mundiais e a invenção do computador, 
a criptografia cresceu incorporando complexos algoritmos matemáticos. 
A criptologia faz parte da história humana porque sempre houve fórmulas secretas e 
informações confidenciais que não deveriam cair no domínio público ou na mão de 
inimigos. 
Segundo Kahn (1967), o primeiro exemplo documentado da escrita cifrada 
aconteceu aproximadamente no ano de 1900 a.C, quando o escriba de Khnumhotep 
II teve a idéia de substituir algumas palavras ou trechos de texto. Caso o documento 
fosse roubado, o ladrão não encontraria o caminho que o levaria ao tesouro e 
morreria de fome perdido nas catacumbas da pirâmide. 
Em 50 a.C, Júlio César usou sua famosa cifra de substituição para cifrar 
(criptografar) comunicações governamentais. Para compor seu texto cifrado, César 
alterou letras desviando-as em três posições; A se tornava D, B se tornava E, e etc. 
Às vezes, César reforçava seu método de criptografar mensagens substituindo letras 
latinas por gregas. O código de César é o único da antigüidade que é usado até hoje. 
Atualmente qualquer cifra baseada na substituição cíclica do alfabeto denomina-se 
de código de César. Apesar da sua simplicidade (ou exatamente devido a ela), esta 
cifra foi utilizada pelos oficiais sulistas na Guerra de Secessão americana e pelo 
exército russo em 1915. 
Em 1901, iniciou-se a era da comunicação sem fio. Apesar da vantagem de uma 
comunicação de longa distância sem o uso de fios ou cabos, o sistema é aberto e 
aumenta o desafio da criptologia. Em 1921, Edward Hugh Hebern funda a Hebern 
Electric Code, uma empresa produtora de máquinas de cifragem eletro-mecânicas 
baseadas em rotores que giram a cada caracter cifrado (TKOTZ, 2003). 
Entre 1933 e 1945, a máquina Enigma que havia sido criada por Arthur Scherbius 
foi aperfeiçoada até se transformar na ferramenta criptográfica mais importante da 
Alemanha nazista. O sistema foi quebrado pelo matemático polonês Marian 
Rejewski que se baseou apenas em textos cifrados interceptados e numa lista de 
chaves obtidas através de um espião (KAHN, 1967). 
A seguir, outros acontecimentos relacionados à utilização da criptografia (TKOTZ, 
2003): 
1943 - Máquina Colossus projetada para quebrar códigos. 
1969 - James Ellis desenvolve um sistemade chaves públicas e chaves privadas 
separadas. 
1976 – Diffie-Hellman é um algoritmo baseado no problema do logaritmo discreto, é 
o criptosistema de chave pública mais antigo ainda em uso. 
 
13 
 
1976 - A IBM apresenta a cifra Lucifer ao NBS (National Bureau of Standards) o 
qual, após avaliar o algoritmo com a ajuda da NSA (National Security Agency), 
introduz algumas modificações (como as Caixas S e uma chave menor) e adota a 
cifra como padrão de criptografia de dados nos EUA (FIPS46-3, 1999), conhecido 
hoje como DES (Data Encryption Standard). Hoje o NBS é chamado de National 
Institute of Standards and Technology, NIST. 
1977 - Ronald L. Rivest, Adi Shamir e Leonard M. Adleman começaram a discutir 
como criar um sistema de chave pública prático. Ron Rivest acabou tendo uma 
grande idéia e a submeteu à apreciação dos amigos: era uma cifra de chave pública, 
tanto para confidencialidade quanto para assinaturas digitais, baseada na dificuldade 
da fatoração de números primos grandes. Foi batizada de RSA, de acordo com as 
primeiras letras dos sobrenomes dos autores (TKOTZ, 2003). 
1978 - O algoritmo RSA é publicado na ACM (Association for Computing 
Machinery), um dos melhores meios de divulgação de pesquisas científicas. 
Maiores detalhes desta organização podem ser obtidos no link www.acm.org. 
1990- Xuejia Lai e James Massey publicam na Suiça "A Proposal for a New Block 
Encryption Standard" ("Uma Proposta para um Novo Padrão de Encriptação de 
Bloco")(LAI, 1990), o assim chamado IDEA (International Data Encryption 
Algorithm), para substituir o DES. O algoritmo IDEA utiliza uma chave de 128 bits 
e emprega operações adequadas para computadores de uso geral, tornando as 
implementações em software mais eficientes (SCHNEIER, 1996). 
1991- Phil Zimmermann torna pública sua primeira versão de PGP (Pretty Good 
Privacy) como resposta ao FBI, o qual invoca o direito de acessar qualquer texto 
claro da comunicações entre usuários que se comunicam através de uma rede 
comunicação digital. O PGP oferece uma segurança alta para o cidadão comum e, 
como tal, pode ser encarado como um concorrente de produtos comerciais como o 
Mailsafe da RSADSI. Entretanto, o PGP é especialmente notável porque foi 
disponibilizado como freeware e, como resultado, tornou-se um padrão mundial 
enquanto que seus concorrentes da época continuaram absolutamente desconhecidos 
(BROWN, 2000). 
1994- Novamente o professor Ronald L. Rivest, autor dos algoritmos RC2 e RC4 
incluídos na biblioteca de criptografia BSAFE do RSADSI, publica a proposta do 
algoritmo RC5 na Internet. Este algoritmo usa rotação dependente de dados como 
sua operação não linear e é parametrizado de modo que o usuário possa variar o 
tamanho do bloco, o número de estágios e o comprimento da chave. 
1994- O algoritmo Blowfish, uma cifra de bloco de 64 bits com uma chave de até 
448 bits de comprimento, é projetado por Bruce Schneier (SCHNEIER, 1993). 
1997- O PGP 5.0 Freeware é amplamente distribuído para uso não comercial. 
1997- O código DES de 56 bits é quebrado por uma rede de 14.000 computadores 
(CURTIN, 1998). 
 
14 
 
1998 - O código DES é quebrado em 56 horas por pesquisadores do Vale do Silício 
(DESKEY, 2001). 
1999 - O DES é quebrado em apenas 22 horas e 15 minutos, através da união da 
Electronic Frontier Foundation e a Distributed.Net, que reuniram em torno de 
100.000 computadores pessoais ao DES Cracker pela Internet (MESERVE, 1999). 
2000 - O NIST (National Institute of Standards and Technology) anunciou um novo 
padrão de uma chave secreta de cifragem, escolhido entre 15 candidatos. Este novo 
padrão foi criado para substituir o algoritmo DES, cujo tamanho das chaves tornou-
se insuficientes para conter ataques de força bruta (MESERVE, 1999). O algoritmo 
Rijndael cujo o nome é uma abreviação dos nomes dos autores Rijmen e Daemen - 
foi escolhido para se tornar o futuro AES (Advanced Encryption Standard) 
(FIPS197, 2001). 
2000 – 2004 – Muitos professores e profissionais da computação com vínculo em 
centros de pesquisa, universidades e empresas motivam-se e começam a pesquisar 
novas formas de implementar algoritmos e soluções de segurança. Surge assim, uma 
“onda” de pesquisas e desenvolvimentos voltados a realizar otimizações dessas 
primeiras implementações e uma dessas tendências é a implementação em hardware. 
Assim, este livro, mostra a importância de se implementar alguns desses algoritmos 
criptográficos em hardware, em especial, através do uso da tecnologia de circuitos 
programáveis (FPGAs), a qual é acessível e diminui de forma significativa os 
tempos e custos associados à realização de projetos e protótipos. 
Os computadores são a expressão maior da era digital, marcando presença em 
praticamente todas as atividades humanas. Da mesma forma com que 
revolucionaram a informação, também influenciaram na criptologia: por um lado 
ampliaram seus horizontes, por outro, tornaram a criptologia quase que 
indispensável. Na próxima seção apresenta-se a importância da criptografia. 
1.1.2 A Importância da Criptografia 
Nesta seção é discutida a importância da criptografia, a segurança dos sistemas 
operacionais e porque se deve utilizar este recurso contra intrusos que desejam 
acessar informações alheias. 
A segurança eletrônica nunca foi tão amplamente discutida: casos de violação de 
contas bancárias, acesso a informações sigilosas, invasão e destruição de sistemas 
são cada vez mais comuns. Informações são transmitidas com mais eficiência e 
velocidade, mas como se sabe, nem sempre de forma segura. 
A privacidade é importante para pessoas e para as empresas. Muitos problemas 
podem acontecer se uma pessoa não autorizada tiver acesso a dados pessoais como: 
contracheque, saldo bancário, faturas do cartão de crédito, diagnósticos de saúde e 
senhas bancárias ou de credito automático. No caso de empresas, os danos podem 
ser de maior magnitude, atingindo a organização e os próprios funcionários. Dados 
estratégicos da empresa, previsão de venda, detalhes técnicos de produtos, resultados 
 
15 
 
de pesquisas e arquivos pessoais são informações valiosas que caso alguma empresa 
concorrente tiver acesso de forma indevida, pode acarretar em sérios problemas. 
A Internet é um ambiente que viabiliza principalmente a comunicação, a divulgação, 
a pesquisa e o comercio eletrônico. Em 1999 havia mais de 100 milhões de usuários 
da Internet nos Estados Unidos. No final de 2003 esse número alcançou 177 milhões 
nos Estados Unidos e 502 milhões no mundo todo (BURNETT, 2002). O comércio 
eletrônico emergiu como um novo setor da economia norte-americana, sendo 
responsável por cerca de U$100 bilhões em vendas durante 1999, em 2003 o 
comércio eletrônico excedeu a U$1 trilhão. Ao mesmo tempo, o Computer Security 
Institute (CSI) constatou um aumento de crimes cibernéticos, 55% dos entrevistados 
na pesquisa informaram atividades maliciosas relacionadas com pessoas da própria 
organização. Ciente disso pode-se ter certeza que as empresas em expansão precisam 
de produtos, mecanismos e soluções de segurança (BURNETT, 2002). 
Não muito tempo atrás a segurança era uma questão de se trancar uma porta ou um 
cofre. Atualmente as informações geralmente não estão armazenadas somente em 
papéis e sim em banco de dados. Como proteger essas informações? O que os 
sistemas operacionais (SO) oferecem para essa proteção ? 
Os sistemas operacionais oferecem um sistema de proteção através de permissões 
(ver figura 1.2). Isto é, através do SO é possível criar usuários com diferentes níveis 
de acesso para as informações contidas em um computador. Tal acesso é 
implementado via procedimento de login. Assim quando um determinado usuário 
fazer login em um computador terá acesso às pastas e arquivos designados pelo seu 
nível de permissão, isto é, se um usuário tiver restrições para o acesso de pasta, 
arquivos e programas, este não conseguirá acessar. 
Os cadastros de usuários e as permissões são concedidos pelo superusuárioou 
administrador do sistema. Este é responsável pelo gerenciamento do sistema, 
inclusive pode permitir que outros usuários possam alterar algumas permissões, 
como de uma pasta pessoal. Independente das restrições impostas, com o login de 
superusuário pode-se ter acesso a todas as funções do sistema. 
A questão é como o sistema operacional sabe que a pessoa que está acessando o 
sistema é realmente o superusuário? O SO concede a permissão através de um nome 
de usuário e senha, normalmente os nomes de usuários administradores são “root”, 
“su” ou “administrador” e infelizmente sabe-se que as técnicas para superar essas 
defesas são amplamente conhecidas (BURNETT, 2002). A seguir são descritos 
alguns dos principais ataques. 
 
 
16 
 
 
Figura 1.2 – Configuração da permissão de acesso a uma pasta no Windows 2000. 
Ataque contra senhas: Vários sistemas operacionais vêm com um nome de usuário 
e senhas predefinidas e muitas vezes o mesmo login é utilizado para realizar várias 
tarefas como: criação de usuários, manutenção e backup, instalação de programas 
assim por diante. 
Não é uma boa prática utilizar o login predefinido. A utilização da senha predefinida 
ou de uma senha derivada de uma data de aniversário ou qualquer dado pessoal, 
pode facilitar o ataque ao sistema. Se o invasor não tiver a competência para 
descobrir a senha, este poderá utilizar aplicativos, chamados de software de cracking 
de senha. Esses softwares testam exaustivamente as possibilidades de senhas até 
encontrar uma válida, se a senha for fraca, em questão de minutos o invasor terá 
acesso ao sistema. 
Seria interessante dar preferência a diferentes senhas de superusuário para cada 
função do sistema, pois se o sistema for invadido, o intruso não terá acesso a todas 
as informações do sistema, mesmo acessando com um login de superusuário. Uma 
outra maneira para invadir e recuperar os dados do sistema é desviando do controle 
de permissões do SO, chamado de ataque de recuperação de dados. 
Ataques de recuperação de dados: O sistema operacional organiza as informações 
em arquivos e diretórios para que o usuário possa fazer um acesso rápido a uma 
determinada informação. Contudo, os dados assim como o controle de acesso a esses 
dados são bits eletrônicos. Assim, é possível fazer uma leitura destes bits não como 
arquivos de texto ou de números e sim como bits, independente do SO. Estes ataques 
 
17 
 
desviam do SO e capturam os bits brutos, reconstituindo-os em arquivos originais, 
burlando os controles de permissão do SO. 
Ataque de reconstrução de memória: Freqüentemente, o material sigiloso está 
armazenado na memória do computador. Quando executar um programa, este será 
armazenado em uma área da memória principal e o SO marca esta área como 
indisponível. Quando o programa é finalizado, o SO apenas disponibiliza a área sem 
sobrescrevê-la. O invasor simplesmente aloca a memória liberada e examina o que 
sobrou (BURNETT, 2002). 
Como impedir que um invasor tenha acesso a informações privadas? 
Para impedir o acesso a informação privada pode-se utilizar a proteção por 
criptografia. A proteção por criptografia é uma solução prática para proteger 
informações sigilosas, independente do algoritmo criptográfico utilizado sempre 
ocorrerá uma transformação de um texto legível em um ilegível. Mesmo que o 
invasor obtenha o conteúdo de um arquivo, este será ilegível. Para ter acesso à 
informação original, o invasor terá que resolver um problema matemático de difícil 
solução. A criptografia pode adicionar também maior segurança ao processo de 
identificação de pessoas, criando identidades digitais fortes. 
De modo algum a criptografia é a única ferramenta necessária para assegurar a 
segurança de dados, nem resolverá todos os problemas de segurança. É um 
instrumento entre vários outros. Além disso, a criptografia não é à prova de falhas. 
Toda criptografia pode ser quebrada e, sobretudo, se for implementada 
incorretamente, ela não agrega nenhuma segurança real (BURNETT, 2002). 
1.1.3 Alguns Termos utilizados na Criptografia 
Junto com o conceito de criptografia, tem-se alguns termos oficiais comumente 
utilizados, que são conceituados nesta seção. 
O ato de transformar um texto legível (texto claro, texto original, texto simples) em 
algo ilegível (cifra, texto cifrado, texto código) é chamado de “encriptar” (codificar, 
criptografar, cifrar). A transformação inversa é chamada de “decriptar” (decodificar, 
decriptografar, decifrar). 
O algoritmo de criptografia é uma seqüência de procedimentos que envolvem uma 
matemática capaz de cifrar e decifrar dados sigilosos. O algoritmo pode ser 
executado por um computador, por um hardware dedicado e por um humano. Em 
todas as situações o que diferencia é a velocidade de execução e a probabilidade de 
erros. Existem vários algoritmos de criptografia, neste livro apresenta-se 
especificamente o DES, AES, RC5, IDEA e RSA, MD5 e SHA-1, pois são os mais 
utilizados atualmente, além do ALPOS (um algoritmo didático criado pelos autores). 
Além do algoritmo, utiliza-se uma chave. A chave na criptografia computadorizada 
é um número ou um conjunto de números. A chave protege a informação cifrada. 
Para decrifrar o texto cifrado o algoritmo deve ser alimentado com a chave correta, 
 
18 
 
que é única. Na figura 1.3 tem-se a ilustração do esquema geral de cifragem 
utilizando chave. 
 
Figura 1.3 – Esquema geral de cifragem com chave. 
Na história da criptografia sempre ficou evidente que não existe um algoritmo que 
não possa ser quebrado (descoberto ou solucionado). Com a criptografia 
computadorizada, atualmente, os algoritmos são divulgados à comunidade e o sigilo 
das informações é garantido apenas pela chave. Isto significa que se alguém 
descobrir a chave para decifrar uma determinada informação, todas as outras 
informações cifradas com este algoritmo ainda estarão protegidas, por terem chaves 
diferentes. 
Já um algoritmo criptográfico que não utiliza o recurso de chaves para cifrar as 
informações pode levar a um efeito cascata perigoso. Se este algoritmo for quebrado, 
todas as informações cifradas com ele estarão desprotegidas, pois o que garante o 
sigilo das informações seria o próprio algoritmo. Assim, toda criptografia moderna e 
computadorizada opera com chaves. 
A criptografia desde seu inicio, foi desenvolvida para impedir que um invasor ou 
intruso, alguém que está tentando acessar informações sigilosas tivesse sucesso. Há 
pouco tempo a criptografia era amplamente utilizada para proteger informações 
militares. Atualmente protege uma gama maior de diferentes informações. Os 
invasores não necessariamente só querem acessar informações sigilosas, mas 
também desativar sites, excluir informações de uma pessoa ou empresa, danificar 
sistemas em geral. 
O estudo sobre a quebra de sistemas criptográficos é conhecido como análise 
criptográfica. Semelhante ao invasor, o criptoanalista procura as fraquezas dos 
algoritmos. O criptógrafo desenvolve sistemas de criptografia. É importante que a 
comunidade de criptografia conheça as fraquezas, pois os invasores também estão 
procurando por elas. É quase certo que os invasores não irão publicar suas 
descobertas para o mundo (BURNETT, 2002). 
 
19 
 
1.1.4 Algoritmos de Bloco e Fluxo 
Pode-se classificar os algoritmos de criptografia através tratamento dado as 
informações que serão processadas assim, tem-se os algoritmos de bloco e os 
algoritmos de fluxo. 
A cifra de blocos opera sobre blocos de dados. O texto antes de ser cifrado é 
dividido em blocos que variam normalmente de 8 a 16 bytes que serão cifrados ou 
decifrados. Quando o texto não completa o número de bytes de um bloco, este é 
preenchido com dados conhecidos (geralmente valor zero “0”) até completar o 
número de bytes do bloco, cujo tamanho já é predefinido pelo algoritmo sendo 
usado. 
A forma mais comum de preenchimento é determinar o número de bytes que deve 
ser preenchido e utilizar este valor parapreencher o bloco. Por exemplo: Suponha 
que o tamanho do bloco em um determinado algoritmo seja de 16 bytes e foi 
utilizado apenas 9. Deve-se preencher os 7 bytes restantes com o valor 07. 
Um problema na cifra de bloco é que se o mesmo bloco de texto simples aparecer 
mais de uma vez, a cifra gerada será a mesma facilitando o ataque ao texto cifrado. 
Para resolver este problema são utilizados os modos de realimentação. 
O modo mais comum de realimentação é a cifragem de blocos por encadeamento 
(Cipher Block Chaining - CBC). Neste modo é realizada uma operação de XOR do 
bloco atual de texto simples com o bloco anterior de texto cifrado. Para o primeiro 
bloco não há bloco anterior de texto cifrado assim, faz-se uma XOR com um vetor 
de inicialização. Este modo não adiciona nenhuma segurança extra. Apenas evita o 
problema citado da cifra de bloco. 
Portanto, os algoritmos de blocos processam os dados como um conjunto de bits, 
são os mais rápidos e seguros para a comunicação digital. Tem ainda como 
vantagem que os blocos podem ser codificados fora de ordem, o que é bom para 
acesso aleatório, além de ser resistente a erros, uma vez que um bloco não depende 
do outro. Entretanto, possuem como desvantagem que se a mensagem possui 
padrões repetitivos nos blocos, o texto cifrado também o apresentará, o que facilita o 
serviço do criptoanalista. Outra desvantagem é que um bloco pode ser substituído 
por outro modificando a mensagem original. 
Os algoritmos de fluxo criptografam (cifram) a mensagem bit a bit, em um fluxo 
contínuo, sem esperar que se tenha um bloco completo de bits. É também chamado 
de criptografia em Stream de dados, onde a criptografia se dá através de uma 
operação XOR entre o bit de dados e o bit gerado pela chave. 
A tabela 1.1 mostra algumas recomendações para selecionar o tipo de algoritmo que 
deverá ser usado em uma determinada aplicação. 
 
 
Tabela 1.1 - Escolhendo um algoritmo por aplicação (BURNETT, 2002) 
 
20 
 
Aplicação 
Cifragem 
Recomendada 
Comentários 
Banco de 
Dados 
Bloco 
A interoperabilidade com um outro software não é uma 
questão, mas é necessário reutilizar as chaves. 
E-mail AES 
Ganha-se interoperabilidade em todos os pacotes de e-mail 
utilizando o AES padrão. 
SSL RC4 
A velocidade é extremamente importante, cada conexão 
pode ter uma nova chave. Assim, na prática, a maioria dos 
navegadores e servidores possuem o RC4. 
Criptografia de 
Arquivos 
Bloco 
A interoperabilidade não é uma questão, porém cada 
arquivo pode ser cifrado com a mesma chave e então 
proteger essa chave. 
 
1.1.5 Vírus ou Informação Cifrada 
Fernando de la Cuadra, editor técnico internacional da empresa Panda Software, 
empresa de software de segurança e antivírus, aponta em seu artigo vantagens e 
problemas da criptografia atual (CUADRA, 2003). 
Enviar uma mensagem cifrada por correio eletrônico traz vantagens tanto para o 
emissor como para o receptor. A confidencialidade está praticamente assegurada. 
Ninguém que não conheça a chave utilizada na cifragem poderá entender as 
informações da mensagem. Assim, pode-se enviar todo tipo de informação com um 
bom nível de segurança, e praticamente estará salvo de teóricas interceptações na 
comunicação. 
Mas quem intercepta uma comunicação? Em principio imagina-se que seja um 
hacker, um espião ou qualquer outro usuário que queira acessar as informações da 
comunicação, mas também pode ser um antivírus fazendo uma verificação. 
Um antivírus sempre tentará impedir o ataque de um vírus, para isso, este examinará 
a mensagem enviada pelo correio eletrônico. O que pode acontecer é que dentro do 
conteúdo de uma mensagem cifrada pode existir um vírus e o antivírus não o 
identificará. Ou ainda, o antivírus pode identificar uma mensagem cifrada como 
sendo um vírus e esta mensagem poderá ser excluída. 
Atualmente 90% dos vírus estão espalhados pela Internet. Sendo assim, o mais 
lógico é a instalação de antivírus nos firewalls, proxys, etc. Mas se o vírus estiver em 
uma mensagem de correio eletrônico cifrada, até o melhor antivírus poderá falhar 
em seu objetvo de proteger as informações. E os usuários que receberem a 
mensagem cifrada, inconscientemente, serão infectados (CUADRA, 2003). 
Em definitivo, ninguém dúvida que os sistemas de criptografia sejam uma 
ferramenta que fornece segurança às comunicações, mas podem ter uma deficiência: 
podem esconder vírus. Uma solução para evitar que o vírus cifrado entre em uma 
determinada companhia ou organização, deveria ser uma proteção efetiva que 
bloqueia as mensagens cifradas não autorizadas, antes de chegar aos usuários finais 
(CUADRA, 2003). 
 
21 
 
1.2 Importância da Chave ou “senha” 
O termo “chave” vem do fato de que o número secreto, a famosa senha usada nos 
nos sistemas computacionais, funciona da mesma maneira que uma chave 
convencional usada nas portas e entradas a lugares fechados de residências, 
empresas e etc. de modo a proteger o patrimônio de um determinado usuário. 
Assim, de forma similar acontece com a criptografia, onde para proteger a 
informação de um determinado usuário (armazenada em arquivos de computador), 
se deve instalar uma fechadura (algoritmo de criptografia). Para operar a fechadura 
precisa-se da famosa chave ou senha (número secreto), a qual permite cifrar ou 
decifrar a informação desejada. 
O algoritmo realiza seus passos utilizando a chave para alterar o texto simples 
(mensagem original) e convertê-lo em texto cifrado. Para recuperar a informação em 
forma legível, é necessário inserir a mesma chave ou alguma que esteja relacionada 
com aquela que foi usada no processo anterior, e executar a operação inversa. O 
algoritmo inverte os passos e converte o texto cifrado de volta no texto simples 
original. 
Assim como apenas a chave correta de um determinado prédio pode abrir sua 
entrada, apenas a chave correta usada em criptografia pode cifrar ou decifrar os 
dados. Na criptografia de chave simétrica, a chave que é utilizada para criptografar 
os dados é a mesma chave que é utilizada para decifrá-los. Na criptografia 
assimétrica, usa-se outra chave que possui um valor relacionado com essa primeira 
chave, na seção 1.3 apresenta-se mais detalhes sobre criptografia simétrica e 
assimétrica. 
Toda criptografia moderna e computadorizada opera com chaves. Por que uma 
chave é necessária? Por que não criar um algoritmo que não necessite de uma 
chave?. Se os invasores podem entender o algoritmo, eles podem recuperar os dados 
secretos simplesmente executando o algoritmo. 
Uma primeira solução seria manter o algoritmo em segredo, mas essa abordagem 
tem vários problemas. Um deles é, supondo que não seja possível manter o 
algoritmo em segredo, os invasores sempre quebram o algoritmo. Isso não seria 
possível se houvesse especialistas em criptografia que desenvolvem seus próprios 
algoritmos, mas neste caso também deve-se confiar que a empresa ou usuário que 
escreveu o algoritmo nunca o revele. 
Neste ponto aparece um aspecto relevante em criptografia: o que é mais importante, 
um algoritmo que deve ser mantido em segredo ou um algoritmo que pode fazer seu 
trabalho de cifrar informações mesmo que os usuários de sistemas computacionais 
saibam como ele funciona. Neste segundo aspecto, aparece a importância dos 
algoritmos com chave, e principalmente, a relevância da chave. 
As chaves aliviam a preocupação com o algoritmo utilizado no esquema de 
criptografia. Em termos computacionais para proteger os dados com uma chave, é 
necessário proteger apenas a chave, algo que é mais fácil de ser feito do que proteger 
 
22 
 
um algoritmo. Além disso, se utilizar chaves para proteger os segredos, é possível 
utilizar diferentes chaves para proteger diferentes segredos. Isso significa que se 
alguém descobrir (“quebrar”) uma das chaves, os outros segredos ainda poderão 
estar seguros. Se alguma informação depender somente de um algoritmo secreto, 
algum invasor que quebre esse segredo obterá acesso a todasas informações 
contidas em um determinado sistema computacional. 
Assim, as chaves são muito importantes em criptografia. Esse é o princípio de 
Kerckhoffs, que diz da relevância do espaço de chaves, é muito mais seguro um 
sistema onde se conhece o algoritmo de criptografia, do que o espaço de chaves. 
Manter em segredo as chaves, e supondo conhecer o algoritmo usado, gera-se um 
sistema incondicional e computacionalmente seguro. 
Esse princípio ainda é válido, por várias razões (KERCKHOFFS, 1983). Os 
invasores podem deduzir um algoritmo sem ajuda nenhuma. Na história da 
criptografia nunca alguém foi capaz de manter um algoritmo criptográfico em 
segredo. Eles sempre o descobrem. 
Um exemplo disso é que durantes as guerras, os espiões sempre encontraram 
maneiras de descobrir o algoritmo, seja ele originado de uma operação matemática 
ou de uma máquina. Eles o roubam ou fazem com que alguém o revele (por meio de 
chantagem, extorsão ou pelo uso de técnicas de análise criptográfica). Agentes 
sempre descobriam o algoritmo ou obtinham uma cópia da máquina. 
Por exemplo, na Segunda Guerra Mundial, os soldados poloneses capturaram a 
máquina alemã Enigma, logo no início da guerra. A Enigma era uma máquina de 
criptografia que o exército alemão utilizava. Os aliados (isto é, os britânicos) foram 
capazes de quebrar o código mais facilmente porque tinham a posse dessa máquina. 
Alternativamente, os analistas criptográficos descobrem o algoritmo. Na Segunda 
Guerra Mundial, decifradores de código dos Estados Unidos foram capazes de 
determinar o funcionamento interno das máquinas codificadas japonesas sem ter a 
posse de uma dessas máquinas. 
Um caso mais recente, refere-se ao exemplo do algoritmo RC4, um algoritmo 
inventado em 1987, mas nunca publicado. Os analistas de criptografia e outros 
especialistas o estudaram e determinaram que o RC4 era uma boa maneira de manter 
os dados em segredo. Atualmente o RC4 é utilizado como parte do Secure Sockets 
Layer (SSL), o protocolo de comunicação segura da WEB (World Wide Web). 
Mas a empresa que o criou, a RSA Data Security, nunca tornou público o 
funcionamento interno do algoritmo RC4. Esse segredo tinha interesses financeiros e 
não de segurança. A empresa esperava que mantendo-o em segredo ninguém mais o 
implementaria e o comercializaria. Em 1994, hackers anônimos divulgaram o 
algoritmo na Internet. Acredita-se que eles provavelmente o descobriram usando um 
depurador de linguagem assembly, após terem tido acesso a uma cópia do código-
objeto. 
Se um sistema criptográfico estiver baseado no hardware, os engenheiros abrem-no e 
examinam as partes internas. Em 1998, David Wagner e Ian Goldherg, nessa época 
 
23 
 
alunos graduados da Universidade da Califórnia em Berkeley, abriram um telefone 
celular digital, supostamente seguro, e quebraram seu código. 
Às vezes é possível manter um algoritmo em segredo por um período 
suficientemente longo para que ele seja eficaz, mas após certo tempo alguém acaba 
descobrindo-o. 
A segunda razão de relevância da senha, mais do que o algoritmo usado refere-se à 
assuntos comerciais. Empresários e usuários sempre desejam saber como um 
determinado software de interesse foi realizado. Caso a empresa não revele os 
segredos de implementação e construção, através de técnicas de reengenharia 
reversa sobre um software pode-se conhecer detalhes da sua criação e respectiva 
implementação. 
Soma-se a isso o fato que somente pessoas que adquiriram o produto podem se 
comunicar entre si. Isso enviabiliza a comunicação com pessoas que não adquiriram 
ou compraram o algoritmo de um mesmo fornecedor. Dessa maneira, como 
resultado, os algoritmos devem ser padronizados e isso significa que eles devem ser 
públicos. 
Se alguém quiser utilizar a criptografia, é necessário empregar um dispositivo de 
hardware ou um programa de software. Portanto, se faz necessário adquirir o 
produto em algum lugar. Assim, como os usuários podem ter acesso a ele, os 
invasores também têm. Desse modo, possíveis invasores podem ir à mesma fonte e 
conseguir suas próprias cópias. Isso faz com que os algoritmos devem ser 
disponibilizados, e melhor então, deve-se cuidar da chave. 
Uma outra razão para cuidar da chave e não do algoritmo refere-se ao fato que é 
possível construir sistemas criptográficos no qual o algoritmo é completamente 
conhecido, mas é seguro pois os possíveis invasores precisam conhecer a chave para 
descobrir as informações. Estes sistemas são mais seguros do que aqueles que não 
tem chave, e somente confiam no segredo de não se conhecer o algoritmo. 
Quando os algoritmos se tornam públicos, os analistas criptográficos e os 
profissionais da área de computação têm uma chance de examinar suas fraquezas. Se 
um algoritmo for vulnerável, pode optar por não utilizá-lo. Caso contrário, pode ter 
certeza de que os dados estão seguros. Por outro lado, se um algoritmo for mantido 
em segredo, os analistas não serão capazes de encontrar nenhuma fraqueza que ele 
possa ter, assim não se sabe se ele é ou não é vulnerável. 
 
 
1.2.1 Como Gerar a Chave 
Em um sistema criptográfico de chave simétrica, a chave é formada por um conjunto 
de caracteres. Ele pode ser um número qualquer, ou uma seqüência de caracteres 
 
24 
 
alfanuméricos (letras e símbolos especiais) contanto que tenha um tamanho correto e 
adequado àquele que o algoritmo criptográfico selecionado permitir. 
Geralmente, aconselha-se que a chave seja formada por números ou caracteres 
alfanuméricos sem coerência nenhuma entre si, pois assim fica mais díficil descobrí-
la (ou em termos criptográficos, quebrá-la). A chave deve ser, dentro do possível, 
selecionada de forma aleatória. Para os criptógrafos, valores aleatórios são 
simplesmente conjuntos de números que passam em testes estatísticos de 
aleatoriedade e não são repetíveis. 
Com esse intuito, de gerar chaves, há várias técnicas usadas. Entre elas destaca-se a 
utilização de sistema geradores de número aleatórios (GNA) ou RNG (Random 
Number Generator). Esses dispositivos funcionam agrupando números de diferentes 
tipos de entradas imprevisíveis como a medição da desintegração espontânea de 
radioatividade, o exame das condições atmosféricas ou o cálculo de minúsculas 
variâncias na corrente elétrica. Esses números passam por testes de aleatoriedade. Se 
solicitar um segundo grupo de números, a nova seqüência será completamente 
diferente, isto é, nunca receberá a mesma seqüência novamente. Isso ocorre porque a 
saída é baseada em uma entrada que sempre está mudando. 
Esses números podem ser obtidos utilizando algoritmos chamados de GNPA 
geradores de números pseudo-aleatórios (pseudo-random number generators - 
PRNGs). Se um desses algoritmos for utilizado para gerar alguns milhares de 
números e aplicar testes estatísticos, os números passariam no teste de aleatoriedade. 
O que torna esses números pseudo-aleatórios, e não aleatórios, é que eles são 
repetíveis. Se for instalado o mesmo GNPA em um outro computador, os mesmos 
resultados poderão vir a ser obtidos. Se o programa for executado um tempo depois, 
os mesmos resultados podem ser obtidos. 
Para evitar esse problema, costuma-se usar GNPA com uma entrada diferente em 
cada evento de utilização (chamada de semente). Assim, gerar-se-á dados diferentes, 
pois alterando a entrada, a saída será alterada. A geração aleatória dessa chave está 
associada a dois parâmetros importantes: velocidade de geração e entropia, as quais 
estão intimamente relacionadas com o tamanho da chave. 
1.2.2 Importância do Tamanho da Chave 
Se os invasores puderem descobrir qual é a chave usada na cifragem dos dados, eles 
podem decifrar a mensagem enviada e obter os dados contidos nela. 
Um método, conhecido como ataque de força bruta, consiste em tentar todas as 
possíveis chaves até que a correta seja identificada. Ele funciona dessa maneira. 
Suponha que a chave seja um número entre 0 e 1.000.000 (um milhão). O invasor 
pega o texto cifradoe alimenta o algoritmo de criptografia junto com a “suposta 
chave” de valor “0”. O algoritmo realiza seu trabalho e produz um resultado. Se os 
dados resultantes parecerem razoáveis, “0” provavelmente é a chave correta. Se for 
um texto sem sentido, “0” não é a verdadeira chave. Nesse caso, ele tenta outro 
valor, por exemplo “1” e em seguida “2”, “3”, “4” e assim por diante. 
 
25 
 
Um algoritmo simplesmente realiza os passos, independentemente da entrada. Ele 
não tem nenhuma maneira de saber se o resultado que ele produz é o correto. Mesmo 
se o valor for um próximo da chave, talvez errado em apenas “1”, o resultado será 
um texto sem sentido. 
Assim, é necessário examinar o resultado e compará-lo para identificar algum 
sentido e assim informar se o valor usado como chave pode ser a chave realmente 
usada para cifrar as mensagens. 
Como isso depende de uma seqüência de entrada e saída, com valores supostos de 
chaves, um método consiste em criar programas que façam esses passos até 
descobrirem alguma informação. 
Normalmente, esse processo requer pouco tempo para testar uma chave. Assim, 
pode-se escrever um programa que verifique várias chaves por segundo. 
Computacionalmente isso torna possível descobrir qualquer chave, somente precisa-
se de tempo. 
Interessante perceber que esse tempo de procura está fortemente associado ao 
tamanho da chave. Chaves criptográficas são medidas em bits. O intervalo de 
possíveis respostas para identificar uma chave está em correspondência ao número 
2TC, onde “TC” é o Tamanho da Chave em bits. 
Assim, tendo-se uma chave de 2 bits significa que o intervalo de possíveis valores é 
de 0 até 22 = 4. Uma chave de 40 bits significa que o intervalo dos possíveis valores 
é de 0 até aproximadamente 1 trilhão (240). Uma chave de 56 bits é de 0 até 
aproximadamente 72 quatrilhões (256). O intervalo de uma chave de 128 bits é tão 
grande que é mais fácil apenas dizer que ela é uma chave de 128 bits (número de 
possibilidades igual a 2128). 
Cada bit adicionado ao tamanho da chave dobrará o tempo requerido para um ataque 
de força bruta. Se uma chave de 40 bits levasse três horas para ser quebrada, uma 
chave de 41 bits levaria seis horas, uma chave de 42 bits, 12 horas e assim por 
diante. Isso acontece pois cada bit adicional da chave dobra o número de chaves 
possíveis, (lembrar que esse número está em função de 2TC). Assim ao adicionar um 
bit o número de chaves possíveis é dobrado. Dobrando o número de chaves 
possíveis, o tempo médio que um ataque de força bruta leva para encontrar a chave 
correta também é dobrado. 
Portanto, para se ter maior segurança, isto é tornar o trabalho de um determinado 
invasor mais difícil, deve-se escolher uma chave maior. Chaves mais longas 
significam maior segurança. A tabela 1.2 mostra o impacto de se aumentar o 
tamanho da chave e o respectivo tempo de quebrar a chave usando ataque por força 
bruta, assim como a respectiva estimativa de custo (em doláres) da tecnologia 
necessária para encontrar a chave. Pode-se ver que tendo mais recursos disponíveis 
(em tecnologia e portanto maior custo em doláres) é possível diminuir o tempo de se 
encontrar uma determinada chave. Não obstante seja possível achar a chave, há 
tamanhos de chave que inviabilizam esse fato, pois demandaria muito tempo. 
 
26 
 
Nessa tabela, o termo 2s significa 2 segundos; 200ms siginifica que o tempo é dado 
em milisegundos (10-3 segundos); 200 us significa que o tempo é dado em 
microsegundos (isto é, 10-6 segundos). 
 
Tabela 1.2 – Tempo gasto para quebra de chaves por força bruta (SCHNEIER, 1996) 
 Tamanho da Chave (bits) 
Custo U$ 40 56 64 80 112 128 
100000 2s 35 horas 1 ano 70000 anos 10 e 14 10 e 19 
1 Milhão 200 ms 3,5 h 37 dias 7000 anos 10 e 13 10 e 18 
10M Milhões 20s 21 m 4 dias 700 anos 10 e 12 10 e 17 
100 M 2 ms 2m 9 h 70 anos 10 e 11 10 e 16 
1G 200 us 13 s 1 h 7 anos 10 e 10 10 e 15 
10G 20 us 1 s 5,4 m 245 anos 10 e 9 10 e 14 
100G 2 us 100 ms 32 s 24 anos 10 e 8 10 e 13 
1T 0,2 us 10 ms 3 s 2,4 anos 10 e 7 10 e 12 
10T 0,02 us 1 ms 300 ms 6 horas 10 e 6 10 e 11 
 
 
Importante lembrar que o poder computacional dobra a cada 1.5 anos, e que o tempo 
de existência do universo, segundo os últimos estudos científicos, está em torno de 
10 10e10 anos. Assim, chega-se à conclusão que sempre é possível decrifrar uma 
determinada mensagem, pois sempre será possível descobrir a chave: basta testar 
todas as chaves possíveis –é somente uma questão de tempo. Mas pode demorar 
mais que o tempo de duração do Universo (SCHNEIER, 1996). 
Então, qual o tamanho máximo que uma chave deve ter? Com o passar dos anos, o 
RSA Laboratories propôs alguns desafios. A primeira pessoa ou empresa a quebrar 
uma mensagem em particular ganharia um prêmio em dinheiro. Alguns desafios 
foram testes do tempo de um ataque de força bruta. Em 1997, uma chave de 40 bits 
foi quebrada em três horas e uma chave de 48 bits durou 280 horas. Em 1999, a 
Electronic Frontíer Foundation encontrou uma chave de 56 bits em 24 horas. Em 
cada um dos casos, pouco mais de 50% do espaço de chave foi pesquisado antes de a 
chave ser encontrada. 
Em todas essas situações, centenas ou até milhares de computadores operavam 
conjuntamente para quebrar as chaves. Na realidade, com o desafio de 56 bits de 
DES que a Electronic Frontier Foundation quebrou em 24 horas, um dos 
computadores era um cracker especializado em DES. Esse tipo de computador faz 
apenas uma coisa: verifica as chaves de DES. 
Um invasor que trabalhe secretamente, provavelmente não seria capaz de reunir a 
força de centenas de computadores e talvez não possua uma máquina 
especificamente construída para quebrar um algoritmo em particular. Para a maioria 
dos invasores, essa é a razão pela qual o tempo que leva para quebrar a chave quase 
certamente seria significativamente mais alto. Por outro lado, se o invasor fosse uma 
agência governamental de inteligência com grandes recursos, a situação seria 
diferente. 
 
27 
 
Pode-se pensar em situações ainda mais críticas. Suponha que examinar 1% do 
espaço de chave de uma chave de 56 bits leva 1 segundo e examinar 50% leva 1 
minuto. Todas as vezes que se adicionar um bit ao tamanho de chave dobra-se então 
o tempo de pesquisa. Os resultados são mostrados na tabela 1.3, onde se percebe 
que o impacto e observações realizadas para os dados da tabela 1.2, são também 
aplicavéis. 
 
Tabela 1.3 – Tempo gasto para quebra de chaves (BURNETT, 2002) 
Bits 1% do Espaço da Chave 50% do Espaço da Chave 
56 1 segundo 1 minuto 
57 2 segundos 2 minutos 
58 4 segundos 4 minutos 
64 4,2 minutos 4,2 horas 
72 17,9 horas 44,8 dias 
80 190,9 dias 31,4 anos 
90 535 anos 321 séculos 
108 140.000 milênios 8 milhões de milênios 
128 146 bilhões de milênios 8 trilhões de milênios 
 
 
Atualmente, 128 bits é o tamanho de chave simétrica mais comumente utilizado. Se 
a tecnologia avançar e os invasores de força bruta puderem melhorar esses números 
(talvez eles possam reduzir para alguns anos o tempo das chaves de 128 bits), então 
precisar-se-á de chaves de 256 bits ou ainda maiores. 
Assim, considerando que a tecnologia sempre está avançando, então teremos de 
aumentar repetidas vezes o tamanho das chaves. Então, com o passar do tempo 
sempre será necessário aumentar o tamanho das chaves. É bom lembrar que 
aumentar a chave significa também em aumentar o tempo cifragem e decifragem. 
Por isso é recomnedável ter cuidados com a escolha do tamanho da chave. Assim, é 
possível pensar que pode chegar um um momento quando precisaremos de uma 
chave tão grande que ela se tornará muito difícil de lidar. No momento atual, e 
considerando os conhecimnentos adquiridos na área de segurança, quase certamente 
nunca precisaremos de uma chave mais longa do que 512 bits (64 bytes). Supondo 
que cada átomo no universo conhecido (há aproximadamente 2300) fosse um 
computador e que cada um desses computadores pudesse verificar 2300 chaves por 
segundo, isso levariacerca de 2162 milênios para pesquisar 1% do espaço de chave 
de uma chave de 512 bits. De acordo com a teoria do Big Bang, o tempo decorrido 
desde a criação do universo é menor de 224 milênios. Em outras palavras, é 
 
28 
 
altamente improvável que a tecnologia vá tão longe para forçar a utilizar chaves que 
sejam “muito grandes” (BURNETT, 2002). 
Apesar do ataque de força bruta precisar de muito tempo, principalmente quando a 
chave possui um tamanho razoável, há outros ataques que exploram as fraquezas nos 
algoritmos criptográficos, e tendem a diminuir o tempo do ataque. Por esse motivo, 
no momento recomenda-se usar chaves relativamente longas, superiores a 128 bits. 
Já aplicações comerciais e financeiras (por exemplo, transações bancárias), é 
necessário que a chave seja maior que 128 bits. Isso significa que usuário comum 
que tente fazer um ataque de força bruta, precisará de muito tempo para ter uma 
invasão considerada bem sucedida. 
1.3 Criptografia de Chave Simétrica e Assimétrica 
Na criptografia de chave simétrica os processos de cifragem e decifragem são feitos 
com uma única chave, ou seja, tanto o remetente quanto o destinatário usam a 
mesma chave. Em algoritmos simétricos, como por exemplo o DES (Data 
Encription Standard), ocorre o chamado "problema de distribuição de chaves". A 
chave tem de ser enviada para todos os usuários autorizados antes que as mensagens 
possam ser trocadas. Isso resulta num atraso de tempo e possibilita que a chave 
chegue a pessoas não autorizadas. 
A criptografia assimétrica contorna o problema da distribuição de chaves através do 
uso de chaves públicas. A criptografia de chaves públicas foi inventada em 1976 por 
Whitfield Diffie e Martin Hellman a fim de resolver o problema da distribuição de 
chaves. Neste novo sistema, cada pessoa tem um par de chaves chamadas: chave 
pública e chave privada. A chave pública é divulgada enquanto que a chave privada 
é deixada em segredo. Para mandar uma mensagem privada, o transmissor cifra a 
mensagem usando a chave pública do destinatário pretendido, que deverá usar a sua 
respectiva chave privada para conseguir recuperar a mensagem original. 
Atualmente, um dos mecanismos de segurança mais usados é a assinatura digital, a 
qual precisa dos conceitos de criptografia assimétrica. A assinatura digital é uma 
mensagem que só uma pessoa poderia produzir, mas que todos possam verificar. 
Normalmente autenticação se refere ao uso de assinaturas digitais: a assinatura é um 
conjunto inforjável de dados assegurando o nome do autor que funciona como uma 
assinatura de documentos, ou seja, que determinada pessoa concordou com o que 
estava escrito. Isso também evita que a pessoa que assinou a mensagem depois possa 
se livrar de responsabilidades, alegando que a mensagem foi forjada. Um exemplo 
de criptossistema de chave pública é o RSA (Rivest-Shamir-Adelman). Sua maior 
desvantagem é a sua capacidade de canal limitada, ou seja, o número de bits de 
mensagem que ele pode transmitir por segundo (BURNETT, 2002). 
A figura 1.4 ilustra o funcionamento da criptografia simétrica e assimétrica. 
Observa-se que existem duas chaves na criptografia assimétrica. 
 
 
29 
 
 
Figura 1.4 – Modelo simétrico e assimétrico de criptografia. 
Após analisar o exposto acima, pode-se ficar em dúvida de qual modelo utilizar: 
simétrico ou assimétrico. Pois bem, devido a isso foi desenvolvido um modelo 
híbrido, ou seja, que aproveitasse as vantagens de cada tipo de algoritmo. O 
algoritmo simétrico, por ser muito mais rápido, é utilizado no ciframento da 
mensagem em si, enquanto o assimétrico, embora lento, permite implementar a 
distribuição de chaves e alguns a assinatura digital. 
Então, os algoritmos criptográficos podem ser combinados para a implementação 
dos três mecanismos criptográficos básicos: o ciframento, a assinatura digital e o 
hashing, sendo que estes últimos dois conceitos ainda serão descritos e analisados 
em capítulos posteriores. Estes mecanismos são componentes de protocolos 
criptográficos, embutidos na arquitetura de segurança dos produtos destinados ao 
comércio eletrônico. Estes protocolos criptográficos, portanto, provêm os serviços 
associados à criptografia que viabilizam o comércio eletrônico. 
Descreve-se abaixo alguns exemplos de protocolos que empregam sistemas 
criptográficos híbridos. 
O IPSec é o padrão de protocolos criptográficos desenvolvidos para o IPv6. Realiza 
também o tunelamento de IP sobre IP. Prometido como futuro padrão para todas as 
formas de VPN – Virtual Private Network(MAIA, 1999). 
O SSL e TLS oferecem suporte de segurança criptográfica para os protocolos NTTP, 
HTTP, SMTP e Telnet. Permitem utilizar diferentes algoritmos simétricos, message 
digest e métodos de autenticação e gerência de chaves para algoritmos assimétricos 
(MAIA, 1999). O SSL, que significa Security Socket Layer, é o protocolo mais 
 
30 
 
conhecido em transações via WEB e hoje domina esse mercado, estando presente 
principalmente em vendas on-line envolvendo cartão de crédito. Foi criado pela 
Netscape, sendo o padrão livre para uso pessoal e empresarial. Ressalte-se 
novamente o nível de segurança deste protocolo, o qual assegura a inviolabilidade 
das vendas on-line com cartão de crédito (GEEK, 2002). 
Pode-se citar também como exemplo o PGP, já descrito anteriormente, lembrando-se 
de que se trata de um programa de criptografia famoso e bastante difundido na 
internet, destinado a criptografia de e-mail. Suporta os algoritmos hashing MD5 e 
SHA-1. 
O S/MIME (Secure Multipurpose Internet Mail Extensions) consiste em um esforço 
de um consórcio de empresas, tendo inclusive como um dos líderes a Microsoft, para 
adicionar segurança a mensagens eletrônicas no formato MIME. Acredita-se que o 
S/MIME deverá se estabelecer no mercado corporativo, enquanto que o PGP atuará 
no mundo do e-mail pessoal (MAIA, 1999). 
Já o SET é um conjunto de padrões e protocolos para realizar transações financeiras 
seguras, como as realizadas com cartões de crédito na internet. Oferece um canal 
seguro entre todos os envolvidos na transação, bem como autenticidade e 
privacidade entre as partes envolvidas. 
A especificação X.509 define o relacionamento entre as autoridades de certificação. 
Baseado em criptografia de chave pública e assinatura digital (MAIA,1999). 
Pode-se então traçar um comparativo entre os modelos vistos (criptografia simétrica 
e assimétrica), conforme se mostra na Tabela 1.4. 
 
Tabela 1.4 Comparação entre os Tipos de Algoritmos de Criptografia 
Criptografia Simétrica Criptografia Assimétrica 
Rápida Lenta 
Gerência e distribuição das 
chaves é complexa 
Gerência e distribuição é simples 
Não oferece assinatura digital. Oferece assinatura digital 
 
A tabela 1.5, mostra detalhes dos algoritmos simétricos mais conhecidos pela 
comunidade da área de segurança da informação e criptografia. 
 
 
 
Tabela 1.5 Características dos Algoritmos Simétricos mais Conhecidos 
 
31 
 
Algoritmo Tipo Tamanho Chave Tamanho Bloco 
DES Bloco 56 64 
Triple Des (2 chaves) Bloco 112 64 
Triple DES (3 chaves) Bloco 168 64 
IDEA Bloco 128 64 
Blowfish Bloco 32 a 448 64 
RC5 Bloco 0 a 2040 32, 64, 128 
CAST-128 Bloco 40 a 128 64 
RC2 Bloco 0 a 1024 64 
RC4 Stream (fluxo) 0 a 256 -- 
Rijndael (AES) Bloco 128, 192, 256 128, 192, 256 
MARS Bloco Variável 128 
RC6 Bloco Variável 128 
Serpent Bloco Variável 128 
Twofish Bloco 128, 192, 256 128 
 
 
Nessa tabela é possível observar que a maioria dos algoritmos criptográficos modernos, os 
mais usados na atualidade, são baseados no sistema de cifrar as informações por bloco, 
cujo tamanho de bloco mais usado é de 64 bits e possuem chaves de tamanho 
relativamente grande, superior a 56 bits. Outro aspecto que merece destaque, é o fato de 
alguns algoritmos possuem tamanhos de chave e/ou de bloco variável (ver situação dos 
algoritmos blowfish, RC5, CAST, RC2, RC4, Rijndael - AES, MARS, RC6, Serpent e 
Twofish, que casualmente foramos algoritmos que fizeram parte do projeto AES) 
(BIHAM, 1999). 
1.4 Assinatura Digital 
Alguns algoritmos criptográficos de chave-pública permitem a sua utilização para 
gerar o que se denomina de assinaturas digitais. O algoritmo RSA é um destes 
algoritmos, assim, além da operação normal de cifrar com a chave-pública e decifrar 
com a chave-privada, permitir que, cifrando-se com a chave-privada, o processo de 
decifrar com a chave-pública resulta na recuperação da mensagem (BUCHMANN, 
2001). 
Obviamente esta forma de uso não assegura o sigilo da mensagem, uma vez que 
qualquer um pode decifrar a mensagem, dado que a chave-pública é de 
conhecimento público. Entretanto, se esta operação resulta na mensagem esperada 
pode-se ter a certeza de que somente o detentor da correspondente chave-privada 
poderia ter realizado a operação de cifragem. 
Assim, uma assinatura digital é o criptograma resultante da cifração de um 
determinado bloco de dados (documento) pela utilização da chave-privada de quem 
assina em um algoritmo assimétrico. A verificação da assinatura é feita decifrando-
se o criptograma (assinatura) com a suposta chave-pública correspondente. Se o 
resultado for válido, a assinatura é considerada válida, ou seja, autêntica, uma vez 
que apenas o detentor da chave privada, par da chave pública utilizada, poderia ter 
gerado aquele criptograma. Na figura 1.5 ilustra-se este procedimento. 
 
 
32 
 
 
Figura 1.5 – Geração de Assinatura Digital de um documento (BURNETT, 2002). 
Nesta figura um usuário de nome Fábio assina um documento, cifrando-o com sua 
chave-privada e enviando tanto o documento original quanto a assinatura para um 
outro usuário chamado de Edward. Este usuário verifica a assinatura decifrando-a 
com a chave-pública de Fábio (de conhecimento público), e comparando o resultado 
com o documento recebido. Se estiverem de acordo, a assinatura confere, caso 
contrário a assinatura é considerada inválida, significando que ou não foi Fábio 
quem assinou, ou o documento foi adulterado após a assinatura. Interessante 
observar que este procedimento é capaz de garantir tanto a origem (autenticação do 
emissor), tendo em vista que supostamente somente Fábio conhece sua chave 
privada e portanto somente ele é capaz de gerar uma assinatura que possa ser 
verificada com sua chave-pública, como também a integridade do documento, já 
que, se o mesmo for alterado, a verificação da assinatura irá indicar isto, caso tenha 
vindo efetivamente do pretenso emissor. 
Usualmente, face à ineficiência computacional dos algoritmos assimétricos, os 
métodos para assinatura digital empregados na prática não assinam o documento que 
se deseja autenticar em si, mas uma súmula deste, obtida pelo seu processamento 
através do que se denomina uma função de Hashing. Uma função de hashing é uma 
função criptográfica que gera uma saída de tamanho fixo (geralmente 128 a 256 bits) 
independentemente do tamanho da entrada. A esta saída se denomina de hash da 
mensagem (ou documento ou o que quer que seja a entrada). Segundo Burnett 
(BURNETT, 2002), para ter utilidade criptográfica, a função de hashing deve ser: 
• Simples (eficiente, rápido) se computar o hash de dada mensagem; 
• Impraticável se determinar a entrada a partir de seu hash; 
• Impraticável se determinar uma outra entrada que resulte no mesmo hash de 
uma dada entrada; 
• Valores de hash possíveis são estatisticamente equiprováveis. 
 
33 
 
A tabela 1.6 mostra as características dos algoritmos de hashing mais conhecidos 
pela comunidade da área de segurança de dados. 
 
Tabela 1.6 Características dos Algoritmos de hashing mais conhecidos (GUELFI,2002) 
Algoritmo de Hash Tamanho HASH Kbytes/s 
Abreast Bavies-Meyer (c/IDEA) 128 22 
Davies-Meyer (c/DES) 64 9 
GOST-Hash 256 11 
NAVAL (3 passos) Variável 168 
NAVAL (4 passos) Variável 118 
NAVAL (5 passos) Variável 95 
MD4 – Message Digest 4 128 236 
MD5 – Message Digest 5 128 174 
N-HASH (12 rounds) 128 29 
N-HASH (15 rounds) 128 24 
RIPE-MD 128 182 
RIPE-MD-160 160 -- 
SHA – Secure Hash Algorithm 160 75 
SNEFRU (4 passos) 128 48 
SNEFRU (8 passos) 128 23 
 
 
Nessa tabela é possível observar que a maioria dos algoritmos de hashing usam um 
tamanho de hash fixo, com destaque para 128 e 160 bits, que são os tamanhos mais 
usados pela comunidade. Os algoritmos mais conhecidos pela comunidade 
acadêmica e com utilidade comercial são o algoritmo SHA, MD4 e MD5. Já os 
outros, como o nome indicado na tabela 1.6 sugere, pertencem a aplicações 
governamentais e de uso privado, como por exemplo aplicações militares e navais. 
1.5 Considerações Finais do Capítulo 
Ainda no contexto da visão atual de criptografia, pode-se elencar outros fatores que 
impulsionam seu estudo e evolução: 
• A tecnologia de protocolos de rede tornará a Internet uma rota vulnerável à 
invasões e furto de informações; 
• Crackers de todas as partes estão dispostos a destruir até mesmo os mais 
sólidos negócios on-line e possuem armas intelectuais para isso; 
• E-commerce começou a perder adeptos, por ser suscetível a fraudes em 
operações envolvendo transferência de dinheiro e cartões de crédito; 
• Correio eletrônico também não é seguro; 
• Diversos serviços on-line aproveitam a ingenuidade do internauta para 
invadir um microcomputador e obter dados pessoais; 
• Pelo computador é muito mais fácil e provável a aplicação de métodos de 
monitoramento; 
 
34 
 
• Ainda existe um sentimento de insegurança quando se realiza alguma 
transação comercial via internet, fazendo com que não seja aproveitado todo 
o potencial neste tipo de comércio; 
• A invasão de máquinas/sistemas e roubo de informação é uma realidade, 
deixando de lado a imagem fictícia e cinematográficas; 
• Os algoritmos de criptografia ainda são um conceito distante da grande 
massa de usuários, se apresentado como algo abstrato e intangível. 
Por esse motivo, este livro além de apresentar de forma clara os algoritmos 
criptográficos mais usados no momento, preocupa-se em apresentar dados de 
desempenho: tempos de execução do processo de cifragem e decifragem, tempo de 
processamento de alguns algoritmos simétricos (DES, AES, IDEA, RC5) e 
assimétricos como o RSA e funções de hashing (MD5 e SHA-1), quando 
implementados em software (usando-se da linguagem C e alguns deles em Java) e 
hardware (em circuitos programáveis – FPGAs através da linguagem especial para 
descrição de sistemas digitais, conhecida como VHDL). 
Um dos pontos de interesse ao leitor é destacar que ao aumentar o tamanho da chave 
aumenta o nível de segurança, mas aumenta-se também o tempo de processamento 
do processo de cifragem e decifragem. Neste livro mostra-se qual é o real impacto 
desse processo, tais como impacto do algoritmo no tempo de processamento, 
impacto do sistema operacional (Windows, Linux), impacto do processador e etc. 
 
35 
 
Capítulo 2 
Conceitos de Circuitos Programáveis FPGAs e 
VHDL e VHDL 
Neste capítulo, apresentam-se conceitos básicos de circuitos programáveis FPGAs e 
da linguagem de descrição de hardware VHDL. Inicialmente é apresentada a 
estrutura interna e roteamento dos circuitos FPGAs, discutindo conceitos de 
reconfiguração. Posteriormente tem-se a definição das formas de descrever um 
circuito utilizando VHDL, exemplificando cada metodologia de descrição de 
hardware, onde a sintaxe da linguagem é baseada no padrão VHDL’93. Além de 
descrever os principais elementos que compõem a estrutura da linguagem como: 
operadores, expressões, atributos, tipos da linguagem, declaração de entidades e 
arquiteturas, expressões concorrentes, expressões seqüenciais, processos, comando 
seqüenciais e outros. 
 
2.1 Estrutura Interna de um FPGA 
Como ponto de partida para este capítulo, faz-se necessário apresentar a estrutura 
interna de circuitos programáveis FPGAs, mostrando algumas arquiteturas desta 
tecnologia, bem como discutir os conceitos de reconfiguração e roteamento desses 
circuitos. Não é objetivo destelivro explorar em profundidade detalhes da tecnologia 
FPGA, mas apenas alguns conceitos básicos quse serão importantes para entender o 
projeto e desempenho dos algoritmos criptográficos implementados através desta 
tecnologia. 
A figura 2.1 apresenta quatro principais arquiteturas internas utilizadas em circuitos 
programáveis: matriz simétrica, sea-of-gates, row-based e PLD hierárquico. Já a 
figura 2.2 mostra que um FPGA (Field Programmable Gate Arrays) são circuitos 
programáveis compostos de CLBs, switch boxes, IOBs e canais de roteamento. 
 
 
36 
 
 
Figura 2.1 – Arquiteturas interna de circuitos programáveis FPGA. 
A arquitetura sea-of-gates é um circuito composto por transistores ou blocos lógicos 
de baixa complexidade. A vantagem dessa arquitetura é a grande disponibilidade de 
portas lógicas por área. Porém, como não há uma área dedicada para o roteamento, é 
necessário que o mesmo seja feito sobre as células, muitas vezes inutilizando áreas 
disponíveis para implementação de uma determinada lógica. 
Nos circuitos de arquitetura row-based os blocos lógicos estão dispostos 
horizontalmente. Existe uma área dedicada de roteamento localizada entre as linhas 
de blocos lógicos. As arquiteturas row-based e sea-of-gates originaram-se das 
metodologias de projeto de ASICs, standard-cells e gate-array. 
A arquitetura tipo PLD hierárquico é constituído por uma matriz de blocos lógicos, 
denominados logic arrays blocks, sendo interligados através do recurso de 
roteamento conhecido como matriz programável de interconexão (PIA). Esse tipo de 
dispositivo é dito hierárquico, porque os blocos lógicos podem ser agrupados entre 
si. 
A arquitetura tipo matriz simétrica é flexível no roteamento, pois possui canais 
verticais e horizontais. 
 
 
37 
 
 
 
Figura 2.2 – Dispositivos internos de um FPGA. 
Já a figura 2.2 mostra que um FPGA (Field Programmable Gate Arrays) são 
circuitos programáveis compostos de CLBs, switch boxes, IOBs e canais de 
roteamento. 
2.2 Roteamento e Configuração de um FPGA 
Nesta seção são discutidos conceitos básicos de roteamento e reconfiguração de 
circuitos programáveis e reconfiguráveis FPGAs. 
O roteamento é a interconexão entre blocos lógicos através de uma rede de camadas 
de metal. As conexões físicas entre os blocos lógicos são feitas com transistores 
controlados por bits de memória (PIP) ou por chaves de interconexão (switch 
matrix). 
Eis alguns elementos básicos utilizados na malha de roteamento da família XC4000 
da Xilinx: 
Conexões globais: estas formam uma rede de interconexão em linhas e colunas 
ligadas através de chaves de interconexão. Esta rede circunda os blocos lógicos 
(CLBs) e os blocos de E/S (IOBs). 
Matriz de conexão (Switch Matrix): são chaves de interconexão que permitem o 
roteamento entre os blocos lógicos através das conexões globais. 
Conexões diretas: interligam CLBs vizinhos e permitem conectar blocos com 
menor atraso, pois não utilizam recursos globais de roteamento. 
Linhas longas: são conexões que atravessam todo o circuito sem passar pelas 
matrizes de conexão e são utilizadas para conectar sinais longos. 
A exigência de alto poder de processamento e o surgimento de novas aplicações, 
promovem uma constante busca por alternativas e arquiteturas que visem melhorar a 
performance dos computadores, especialmente em aplicações de tempo real. Uma 
destas alternativas é a reconfiguração. 
 
38 
 
Acoplando um dispositivo programável FPGA a um processador de propósito geral 
(GPP), torna-se possível a exploração eficiente do potencial das chamadas 
arquiteturas reconfiguráveis. 
Arquiteturas reconfiguráveis permitem ao projetista a criação de novas funções, e 
possibilita a execução de operações com um número consideravelmente menor de 
ciclos do que necessário em GPPs. Em uma arquitetura reconfigurável, são 
desnecessárias muitas das unidades funcionais complexas usualmente encontradas 
em processadores de propósito geral. 
Os métodos de reconfiguração de um dispositivo programável e reconfigurável 
podem ser classificados como: 
Reconfiguração total: é a forma de configuração, onde o dispositivo 
reconfigurável é inteiramente alterado. Também tratada apenas como 
configuração. 
Reconfiguração parcial: é a forma de configuração que permite que somente 
uma parte do dispositivo seja reconfigurada. A reconfiguração parcial pode 
ser: não-disruptiva, onde as partes do sistema que não estão sendo 
reconfiguradas permanecem completamente funcionais durante o ciclo de 
reconfiguração; ou disruptiva, onde a reconfiguração parcial afeta outras partes 
do sistema, necessitando de uma parada no funcionamento do mesmo. 
Reconfiguração dinâmica: também chamada de run-time reconfiguration 
(RTR), on-the-fly reconfiguration ou in-circuit reconfiguration. Todas essas 
expressões podem ser traduzidas também como reconfiguração em tempo de 
execução. Nesse tipo de reconfiguração não há necessidade de reiniciar o 
circuito ou remover elementos reconfiguráveis para programação. 
Reconfiguração extrínseca: reconfigura parcialmente o sistema, mas somente 
considerando cada FPGA que o compõe como unidade atômica de 
reconfiguração. 
Reconfiguração intrínseca: reconfigura parcialmente cada FPGA que 
compõe o sistema. 
A partir desta seção apresentam-se conceitos básicos da linguagem VHDL utilizados 
nas implementações dos circuitos digitais básicos descritos no capítulo 3, os quais 
serão úteis para entender o projeto em hardware dos algoritmos criptográficos 
focados neste livro. 
2.3 VHDL - Descrição Estrutural e Comportamental 
Na linguagem VHDL (VHSIC Hardware Description Language) existem duas 
formas para a descrição de circuitos digitais: a estrutural e a comportamental. A 
forma estrutural indica os diferentes componentes que constituem o circuito e suas 
respectivas interconexões. Desta maneira pode-se especificar um circuito e saber 
como é seu funcionamento. 
 
39 
 
A forma comportamental consiste em descrever o circuito pensando no seu 
comportamento e funcionamento e não na sua estrutura. Essa metodologia facilita a 
descrição de circuitos onde a estrutura interna não está disponível, mas o seu 
funcionamento e comportamento podem ser interpretados. Assim, esse tipo de 
descrição vem se desenvolvendo a cada dia. A descrição comportamental pode-se 
dividir em duas metodologias, dependendo do nível de abstração: a descrição 
algorítmica e de fluxo de dados. 
Na descrição de um circuito utilizando a linguagem VHDL, é comum ter-se trechos 
implementados de maneira comportamental e estrutural, sendo de responsabilidade 
do projetista a utilização correta dos métodos de implementação de circuitos em 
VHDL. 
2.4 Exemplo dos Estilos de Descrições em VHDL 
A figura 2.3 representa um comparador de 1 bit simplificado. Este será descrito nos 
dois estilos de descrição de circuitos digitais em VHDL, estrutural e 
comportamental. Onde U1, U2 são os componentes do circuito, L1 é uma linha de 
conexão entre os componentes, e E1, E2 e S são as portas de entrada e saída do 
circuito. 
 
Figura 2.3 - Representação de um comparador de 1 bit 
O funcionamento do comparador de 1 bit é simplificado, onde os valores lógicos da 
portas de entrada E1 e E2 serão comparados. Se E2 for menor que E1 a saída S 
recebe o valor lógico ‘1’, caso contrário, ‘0’. Este exemplo do comparador de 1 bit 
será utilizado para demostrar as formas de descrição de circuito digitais em VHDL 
nas seções 2.4.1, 2.4.2 e 2.4.3. 
2.4.1 Descrição Algorítmica 
A descrição algorítmica é um conjunto de passos que descreve de forma 
comportamental o circuito digital projetado. Em primeiro lugar, deve-se descrever a 
entidade do circuito, onde são definidas as portas de entrada e saída. A entidade 
(entity) independente do método de descrição de circuitos digitais sempre se mantém 
a mesma. Já a arquitetura (architecture) é responsável pela descrição do circuito de 
maneira estrutural ou comportamental. Neste caso, o comparador de 1 bit (figura

Outros materiais