UNIVERSIDADE CATÓLICA DE GOIÁS
DEPARTAMENTO DE COMPUTAÇÃO
GRADUÇÃO EM CIÊNCIA DA COMPUTAÇÃO
ESTUDO DE ALGORITMOS CRIPTOGRAFICOS E
IMPLEMENTAÇÃO DE UMA ENTIDADE CERTIFICADORA
AUDIR DA COSTA OLIVEIRA FILHO
JUNHO, 2008
UNIVERSIDADE CATÓLICA DE GOIÁS
DEPARTAMENTO DE COMPUTAÇÃO
GRADUÇÃO EM CIÊNCIA DA COMPUTAÇÃO
ESTUDO DE ALGORITMOS CRIPTOGRAFICOS E
IMPLEMENTAÇÃO DE UMA ENTIDADE CERTIFICADORA
Trabalho de Conclusão de Curso apresentado por Audir
da Costa Oliveira Filho à Universidade Católica de Goiás,
como requisito parcial para obtenção do título de Bacharel
em Ciência da Computação, aprovado em 12/06/2008
pela Banca Examinadora:
Prof. José Luiz de Freitas Júnior, Dr. UCG – Orientador
Prof. Ivon Rodrigues Canedo, Esp. UCG
Prof. Wilmar Oliveira de Queiroz, Msc. UCG
ii
ESTUDO DE ALGORITMOS CRIPTOGRAFICOS E IMPLEMENTAÇÃO DE
UMA ENTIDADE CERTIFICADORA
AUDIR DA COSTA OLIVEIRA FILHO
Trabalho de Conclusão de Curso apresentado por Audir da Costa Oliveira Filho à
Universidade Católica de Goiás, como parte dos requisitos para obtenção do título
Bacharel em Ciência da Computação.
Prof. José Luiz de Freitas Júnior, Dr.
Orientador
Prof. Jeová Martins Ribeiro, Esp
Coordenador do TCC
iii
DEDICATÓRIA
À Deus pela vida e oportunidades.
Aos meus pais e familiares que nunca mediram
esforços para que eu pudesse vencer.
iv
AGRADECIMENTOS
Aos meus pais, por todo o apoio e incentivo em todos os momentos da minha vida.
Ao professor Dr. José Luiz de Freitas Júnior, pela confiança e paciência, durante
todo o curso de graduação e muito contribuiu para minha formação acadêmica.
A Milena Pacheco Ivo, por todo amor e carinho.
Agradeço aos amigos e amigas que estiveram ao meu lado durante estes anos e que
comigo partilharam felicidades, decepções e lutas.
Agradeço a todos que contribuíram de alguma forma para a realização deste
trabalho.
v
RESUMO
O presente trabalho consiste em um estudo de algoritmos criptográficos,
envolvendo a criptografia simétrica, assimétrica e função hash, e a implementação de uma
entidade certificadora capaz de emitir certificados digitais auto-assinados. No
desenvolvimento do projeto foram utilizados técnicas de criptografia como o algoritmo
RSA responsável pela emissão do par de chaves e o algoritmo SHA-1 utilizado para gerar
código hash, podendo assim assinar certificados digitais.
Palavras-chave: criptografia, autoridade certificadora, assinatura digital, certificado
digital.
vi
ESTUDO DE ALGORITMOS CRIPTOGRAFICOS E IMPLEMENTAÇÃO DE
UMA ENTIDADE CERTIFICADORA
SUMÁRIO
LISTA DE FIGURAS............................................................................................................x
LISTA DE TABELAS..........................................................................................................xi
LISTA DE ABREVIATURAS E SIGLAS..........................................................................xii
1. INTRODUÇÃO................................................................................................................1
1.1. Justificativa...............................................................................................................1
1.2. Objetivos...................................................................................................................2
1.3. Estado da Arte...........................................................................................................2
1.4. Organização...............................................................................................................3
2. CRIPTOGRAFIA COMPUTACIONAL.........................................................................4
2.1. Definições Básicas....................................................................................................4
2.2. Objetivos dos Protocolos Criptográficos..................................................................4
2.3. Modelos de um Sistema Criptográfico......................................................................5
2.4. Classificação da Criptografia....................................................................................5
2.4.1. Criptografia Simétrica....................................................................................6
2.4.1.1. Cifra de Bloco.......................................................................................6
2.4.1.2. Cifra de Fluxo........................................................................................6
2.4.2. Criptografia Assimétrica.................................................................................7
2.5. Resumo de mensagens (Message Digests) ...............................................................7
2.6. Código de Autenticação de Mensagens....................................................................8
2.7. Assinaturas Digitais..................................................................................................8
3. FUNDAMENTOS MATEMÁTICOS...........................................................................10
3.1. Teorema da Fatoração Única..................................................................................10
3.2. Teorema de Fermat.................................................................................................10
3.3. Teorema de Euler....................................................................................................11
3.4. Algoritmo de Euclides.............................................................................................11
3.5. Algoritmo Estendio de Euclides..............................................................................12
3.6. Grupos.....................................................................................................................13
vii
3.6.1. Grupos Abelianos.........................................................................................13
3.6.2. Grupos Finitos..............................................................................................15
3.7. Anéis.......................................................................................................................15
3.8. Corpos.....................................................................................................................16
3.8.1. GF(p).............................................................................................................18
3.8.2. Corpos GF(28)...............................................................................................18
4. O ALGORITMO AES....................................................................................................20
4.1. Breve Histórico do AES..........................................................................................20
4.2. Detalhes de Funcionamento do AES.......................................................................21
4.3. Especificação do Algoritmo....................................................................................22
4.4. Processo de Cifragem..............................................................................................23
4.4.1. Transformação SubBytes..............................................................................24
4.4.2. Transformaçào ShiftRows............................................................................26
4.4.3. Transformação MixColumns........................................................................27
4.4.4. Transformação AddRoundKey.....................................................................28
4.5. Processo de Expensão de Chaves............................................................................29
4.6. Processo de Decifragem..........................................................................................30
5. SEGURE HASH ALGORITM 1 (SHA-1)....................................................................32
5.1. Introdução...............................................................................................................32
5.2. Definições...............................................................................................................33
5.3. Operações sobre palavras.......................................................................................33
5.4. Geração do Hash.....................................................................................................34
6. O ALGORITMO RSA...................................................................................................36
6.1. Introdução...............................................................................................................36
6.2. Geração de chaves...................................................................................................36
6.3. Processo de cifragem e decifragem.........................................................................37
7. INFRA ESTRUTURA DE CHAVE PÚBLICA............................................................40
7.1. Introdução...............................................................................................................40
7.2. Certificados e Certificações....................................................................................40
7.2.1. Tipos de Certificados....................................................................................41
7.2.2. X.509............................................................................................................41
7.2.3. PKCS (Public Key Cryptography Standards)...............................................43
7.3. Autoridade Certificadora.........................................................................................44
viii
7.4. Autoridade Registradora.........................................................................................45
7.5. Repositório de Certificados.....................................................................................45
7.5.1. Serviço de Diretórios X.500.........................................................................46
7.5.2. LDAP............................................................................................................46
7.6. Revogação de Certificados......................................................................................46
7.6.1. Lista de Certificados Revogados..................................................................47
7.6.2. Extensões da Entrada de CRL......................................................................48
7.6.3. Extensões de CRL.........................................................................................48
8. MÉTODOS E FERRAMENTAS UTILIZADAS..........................................................50
8.1. Hardware, Plataforma e Considerações de Implementação....................................50
8.2. APIs Java.................................................................................................................50
8.3. Bouncy Castle Provider...........................................................................................51
8.4. HTTP / HTTPS.......................................................................................................51
8.5. TomCat....................................................................................................................52
8.6. Eclipse.....................................................................................................................52
8.7. PostgresSQL............................................................................................................53
9. IMPLEMENTAÇÃO E ANÁLISES..............................................................................54
9.1. Principais Requisitos do Sistema............................................................................54
9.1.1. Requisitos Funcionais...................................................................................54
9.1.2. Requisitos Não Funcionais...........................................................................54
9.2. Especificação...........................................................................................................55
9.2.1. Diagrama de Classes.....................................................................................55
9.2.2. Diagrama de Casos de Uso...........................................................................58
9.2.3. Diagrama de Seqüência................................................................................62
9.3. Implementação........................................................................................................62
10. CONSIDERAÇÕES FINAIS E SUGESTÕES PARA TRABALHOS FUTUROS......68
10.1. Considerações Finais...........................................................................................68
10.2. Sugestões para Trabalhos Futuros.......................................................................69
REFERÊNCIAS BIBLIOGRÁFICAS.................................................................................70
ix
LISTA DE FIGURAS
Figura 2.1 – Processo de Criptografia Simétrica ...................................................................6
Figura 2.2 – Processo de Criptografia Assimétrico................................................................7
Figura 2.3 – Processo de Assinatura Digital..........................................................................9
Figura 3.1 – Quadro com cálculos parciais para encontrar mdc(26, 7)................................12
Figura 4.1 – Bytes de entrada, matriz estado e bytes de saída.............................................22
Tabela 4.2 – Processo de Cifragem do AES........................................................................24
Figura 4.3 – Transformação no AES....................................................................................25
Figura 4.4 – Transformação SubBytes..................................................................................25
Figura 4.5 – Transformação ShiftRows................................................................................27
Figura 4.6 – Transformação MixColumns............................................................................28
Figura 4.7 – Transformação AddRoundKey.........................................................................29
Figura 4.8 – Visualização do vetor de chaves do AES........................................................29
Figura 4.9 – Processo de Decifragem do AES.....................................................................30
Figura 7.1 – Estrutura do Certificado X.509........................................................................42
Figura 7.2 – Estrutura Padrão de uma CRL.........................................................................47
Figura 9.1 – Diagrama de Classes do Sistema Autoridade Certificadora............................55
Figura 9.2 – Diagrama de Casos de Uso do Sistema Autoridade Certificadora..................58
Figura 9.3 – Diagrama de Seqüência do Sistema Autoridade Certificadora........................62
Figura 9.4 – Interface da Implementação do sistema de autoridade certificadora...............63
Figura 9.5 – Interface do Sistema para cadastrar um novo certificado................................64
Figura 9.6 – Interface do Sistema para Buscar Certificados Cadastrados............................65
Figura 9.7 – Certificado Raiz da Autoridade Certificadora.................................................66
Figura 9.6 – Certificado Raiz da Autoridade Certificadora Detalhado................................66
x
LISTA DE TABELAS
Tabela 3.1 – Soma módulo 3................................................................................................18
Tabela 3.2 – Multiplicação módulo 3...................................................................................18
Tabela 4.1 – Nr em função do tamanho de blocos e chave..................................................21
Tabela 4.2 – Deslocamento em função do tamanho do bloco..............................................22
Tabela 4.3 – Tabela de substituição S-box em notação hexadecimal...................................26
Tabela 4.4 – Tabela de substituição S-box inversa em notação hexadecimal......................31
Tabela 5.1 – Valores para preencher o buffer do SHA-1.....................................................34
Tabela 5.2 – Funções e constantes utilizadas pelo SHA-1...................................................35
Tabela 7.1 – Tabela de padrões de criptografia de chaves pública definidos pela RSA......43
xi
LISTA DE ABREVIATURAS E SIGLAS
AC
Autoridade Certificadora
AES
Advanced Encryption Standard
API
Application Programming Interface
AR
Autoridade Registradora
CRL
Certificate Revocation List
CSP
Cryptographic Service Providers
DES
Data Encryption Standard
FIPS
Federal Information Processing Standard
HTTP
HyperText Transfer Protocol
HTTPS
HyperText Transfer Protocol Secure
ICP
Infra-estrutura de Chaves Públicas
ICP-Brasil
Infra-estrutura de Chaves Públicas Brasileira
IDE
Integrated Development Environment
IDEIA
International Data Encryption Algorithm
IPSec
IP Security Protocol
JCA
Java Cryptography Architecture
JCE
Java Cryptography Extension
JEE
Java Enterprise Edition
JSP
Java Server Pages
JSSE
Java Secure Socket Extension
KR
Chave privada
KU
Chave pública
LDAP
Lightweight Directory Access Protocol
MAC
Message Authentication Code
MIT
Massachusetts Institute of Tecnology
MD
Message Digest
MDC
Máximo Divisor Comum
Nb
Tamanho do bloco
ND
Distinguished Name
NIST
National Institute of Standards and Technology
xii
Nk
Tamanho da chave
Nr
Número de rodadas
PGP
Pretty Good Privacy
PKCS
Public Key Cryptography Standards
RA
Registration Autority
RSA
Rivest, Shamir e Adleman
SHA-1
Secure Hash Algorithm 1
SQL
Structured Query Language
SSH
Secure Shell
SSL
Secure Sockets Layer
TCP
Transmission Control Protocol
TLS
Transport Layer Security
xiii
1
ESTUDO E IMPLEMENTAÇÃO DE UMA ENTIDADE CERTIFICADORA
CAPÍTULO I
INTRODUÇÃO
A internet é um meio de comunicação que vem crescendo a cada ano, trazendo
muitas vantagens, como por exemplo, agilidade em vários processos burocráticos que antes
gastariam horas. Além de agilidade, a internet também está oferecendo muitas outras
vantagens como facilidade e conforto para realizar operações que antes eram exaustivas.
Porém, por ser um meio de comunicação de caráter público, têm acesso a informações que
nela transita qualquer tipo de pessoa, fazendo com que dados que deveriam ser sigilosos
fiquem expostos na mesma.
Nesta rede, vários negócios são feitos, tornando-se necessário assim a criação de
mecanismos que garantam a integridade e a autenticidade das informações confidenciais
que trafegam por esta rede.
Uma das maneiras de se evitar o acesso indevido a informações confidenciais é
através da cifragem da informação, conhecida como criptografia, fazendo com que apenas
as pessoas às quais estas informações são destinadas, consigam compreendê-la. A
criptografia fornece técnicas para codificar e decodificar os dados, tais que os mesmos
possam ser armazenados, transmitidos e recuperados sem sua alteração ou exposição [1].
1.1 – Justificativa
A escolha pelo referido tema, deve-se ao fato da criação de um mundo virtual como
conseqüência da popularização da internet, por intermédio da qual pessoas realizam
compras, transações bancárias, cadastramento de clientes em uma empresa, dentre outras.
Por isso, a certificação digital vem, em amplo crescimento, fazendo com que
surjam sempre novos protocolos criptográficos que implementam formas mais seguras de
realizarem a certificação das entidades pela internet. Junto a estes métodos surgem a
Entidade Certificadora que tem como objetivo principal regularizar e tornar legal toda
assinatura no meio digital.
2
1.2 – Objetivos
Este trabalho tem como objetivos:

estudo de algoritmos criptográficos envolvendo criptografia simétrica, assimétrica e
funções de hash;

a descrição dos algoritmos criptográficos AES (Advanced Encryption Standard) e
RSA (Rivest, Shamir e Adleman), e da função de hash criptográfica SHA-1 (Secure
Hash Algorithm 1);

Estudo da Infra-Estrutura de Chave Pública e implementação de uma entidade
certificadora em um ambiente Web.
1.3 – Estado da Arte
Dentre alguns serviço e empresas que já vem utilizando a inovação das entidades
certificadoras pode-se citar:

A Secretaria da Receita Federal do Brasil que já vem utilizando o processo
eletrônico através da assinatura digital. Implantado em 2005, o e-Processo hoje
representa 90% dos novos processos cadastrados nos Estados da Bahia e Sergipe.
Segundo a Receita Federal, esta estrutura será estendida em julho próximo para 21
de suas unidades nos estados, principalmente nas capitais. Este sistema de processo
eletrônico elimina a utilização de papel nos processos gerados, em petições, entrega
de documentos e apresentações de consulta [18].

Com foco exclusivo em certificação digital desde 1996, a Certisign emite
certificados digitais utilizando a tecnologia mais avançada no desenvolvimento e
prestação deste serviço. A companhia está credenciada pela ICP-Brasil (Infraestrutura de Chaves Públicas Brasileira), instituída pela Medida Provisória 2200/2,
e autorizada por seu Comitê Gestor a emitir e validar certificados de todos os tipos,
na condição de Autoridade Certificadora e Autoridade Registradora. Além disso, a
Certisign credencia e oferece sua infra-estrutura para outras organizações [18].

O Tribunal de Contas de Santa Catarina disponibilizou, no dia 05 de maio de 2008,
a primeira edição do Diário Oficial Eletrônico DOTC-e — veículo de comunicação
oficial dos atos processuais e administrativos do TCE. Para garantir a veracidade do
documento, o presidente José Carlos Pacheco, assinou eletronicamente a primeira
edição. Neste ato, ele destacou que os avanços tecnológicos têm de ser utilizados
3
pela administração pública na adoção de mecanismos mais modernos, eficazes e
eficientes, necessários ao desenvolvimento de suas atividades, em prol da sociedade
[18].
1.4 – Organização
Este trabalho está dividido em dez capítulos. Neste primeiro capítulo foram
apresentadas as motivações que levaram ao tema deste trabalho.
No segundo capítulo são apresentados alguns conceitos de criptografia moderna.
No terceiro capítulo são mostrados os conceitos matemáticos e teoremas
fundamentais necessários para a compreensão dos algoritmos estudados.
No quarto capítulo é apresentada uma descrição do algoritmo criptográfico AES,
tido como padrão de criptografia simétrica.
No quinto capítulo é apresentada uma descrição da função hash SHA-1, sendo este
utilizado por uma grande quantidade de aplicações e protocolos de segurança.
No sexto capítulo é apresentada uma descrição do algoritmo criptográfico
assimétrico RSA, sendo este, a implementação melhor sucedida de sistema de criptografia
de chave pública.
No sétimo capitulo é apresentada uma descrição de uma Infra Estrutura de Chave
Pública, sendo destacado suas principais funcionalidade.
No oitavo capitulo é apresentado os matérias e métodos que viabilizaram a
implementação da entidade certificadora.
No
nono
capitulo
é
apresentada
a
aplicação
desenvolvida
mostrando
descritivamente a análise da mesma.
No décimo capitulo são apresentadas as considerações finais deste trabalho de
conclusão de curso e algumas sugestões para trabalhos futuros.
4
CAPÍTULO II
CRIPTOGRAFIA COMPUTACIONAL
Do grego, kryptós significa secreto ou oculto e gráphos que se refere à escrita,
sendo assim a criptografia pode ser definida como a ciência de escrever em códigos
secretos. Portanto, a criptografia estuda meios de cifrar informações de modo que só o
destinatário possa interpretá-la, isto se dá por meio de algoritmos (métodos matemáticos) e
uma chave, que tem como função dar privacidade ao mecanismo, tornando-o secreto para
pessoas que não a possuírem.
Neste capítulo serão vistos algumas definições e conceitos básicos sobre
criptografia, assim como também seus objetivos.
2.1 – Definições Básicas
O processo de transformar uma mensagem legível em uma mensagem ilegível
equivalente é chamado de cifragem e o processo inverso, realizado por um usuário
legítimo, é chamado de decifragem. As transformações realizadas por estes processos são
executadas por uma função que é parametrizada por uma chave [17].
Em cofres, apesar de todo mundo saber como funciona a sua segurança, ninguém
pode entrar se não souber a combinação que abre a porta. A segurança de um algoritmo de
criptografia é parecida. Algoritmos criptográficos são divulgados a toda sociedade e a
segurança do processo reside apenas na chave, esta deve ser secreta.
Existem estudos que tem como objetivo a quebra de sistemas criptográficos, estes
são conhecidos como criptoanálise. O criptoanalista tem como finalidade descobrir
fraquezas nos algoritmos. Do mesmo modo que os criptógrafos têm por finalidade a
criação de novos algoritmos.
2.2 – Objetivos dos Protocolos Criptográficos
A criptografia possui quatro objetivos principais, são eles:

Confidencialidade: esta propriedade garante que só o destinatário autorizado deve
ser capaz de ter acesso às informações a ele destinadas e ninguém mais;
5

Autenticidade: é a propriedade necessária para garantir que uma pessoa é quem ele
realmente diz ser e se as ações feitas por ele sejam realmente de sua autoria, ou
seja, deverá ser capaz de identificar o remetente e verificar que foi ele mesmo que
enviou a mensagem;

Integridade: garante que um documento autêntico não foi alterado de forma
acidental, intencional ou até mesmo que ele esteja sendo utilizado por pessoas não
autorizadas sem que este fato possa ser detectado, ou seja, deve permitir ao
destinatário descobrir se uma mensagem foi alterada durante a transmissão;

Não-Repúdio: esta propriedade garante que um documento autêntico, assinado
digitalmente, possa ser negado pelo seu autor, ou seja, não é possível ao remetente
negar o envio da mensagem.
2.3 – Modelos de um Sistema Criptográfico
Há duas maneiras básicas de se criptografar mensagens: através de códigos ou de
cifras. A primeira delas procura esconder o conteúdo da mensagem utilizando códigos
predefinidos entre as partes envolvidas na troca da mensagem. Neste caso, todas as pessoas
que podem ter acesso às informações, devem conhecer os códigos utilizados.
O outro método usado para criptografar mensagens é a cifra, técnica na qual o
conteúdo da mensagem é cifrado através da transposição e/ou substituição das letras da
mensagem original [2]. Sendo assim, a transposição é um processo onde se mistura os
caracteres de uma informação original, já a substituição, utiliza-se de uma tabela de
substituição predefinida, onde se trocam ou substituem os caracteres de uma informação.
Para este tipo de método, utiliza-se o conceito de chaves.
2.4 – Classificações da Criptografia
Uma forma de classificar a criptografia moderna é através da forma como se usam
as chaves. Neste sentido, uma criptografia pode ser simétrica ou assimétrica.
6
2.4.1 – Criptografia Simétrica
Na criptografia simétrica, também chamada de criptografia convencional ou de
chave única, os processos de cifragem e decifragem são realizados através de uma única
chave, ou seja, tanto o remetente quanto o destinatário usam a mesma chave, conforme
apresentado na figura 2.1.
Os sistemas criptográficos de chave simétrica mais conhecidos são: o DES (Data
Encryption Standard), o IDEIA (International Data Encryption Algorithm) e o AES
(Advanced Encryption Standard).
Figura 2.1 – Processo de Criptografia Simétrica
2.4.1.1 – Cifra de Bloco
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 que está sendo usado [8].
2.4.1.2 – Cifra de Fluxo
Os algoritmos de fluxo 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 de
7
stream de dados, onde a criptografia se dá mediante a operação xor entre o bit de dados e o
bit gerado pela chave [8].
2.4.2 – Criptografia Assimétrica
A criptografia assimétrica, também conhecida como criptografia de chave pública,
foi proposta publicamente pela primeira vez por Diffie e Hellman em 1976 [9].
Este tipo de técnica consiste em um par de chaves diferentes para o processo de
cifragem e decifragem. Sendo assim, uma chave conhecida como chave pública é utilizada
para cifrar e outra chave conhecida como chave privada é utilizada para decifrar, conforme
mostrado na figura 2.2.
Dentre os sistemas criptográficos que utilizam este tipo de criptografia está o RSA
que será visto mais detalhadamente em capítulos posteriores.
Figura 2.2 – Processo de Criptografia Assimétrica
2.5 – Resumos de Mensagens (Message Digests)
Resumos de mensagem são baseadas na idéia de funções hash. Uma função hash
criptográfica recebe como entrada uma mensagem de comprimento variável e produz um
bloco de comprimento fixo, que representa o conteúdo da mensagem.
Uma função hash deve ter seu funcionamento de tal maneira que uma simples
alteração na mensagem produza uma alteração em muitos bits no bloco de saída. Sendo
que, a probabilidade de duas mensagem diferentes produzirem o mesmo bloco deve ser
praticamente nula.
Os algoritmos hash mais conhecidos são:
8

"Message-Digest" (MD2; MD4 e MD5) – aceita mensagens de qualquer tamanho e
produz um bloco de 128 bits ("digest"), a mensagem é inicialmente dividida em
blocos de 512 bits que são processados.

SHA (Secure Hash Algorithm) – aceita mensagens de comprimento inferior a 264 e
produz um "digest" de 160 bits. Baseado no MD4, o fato de gerar mais 32 bits do
que o MD4 torna-o mais seguro.
2.6 – Códigos de Autenticação de Mensagens
MAC (Message Authentication Code) é uma técnica de autenticação de mensagem
que envolve o uso de uma chave secreta para gerar um pequeno bloco de dados, conhecido
como código de autenticação de mensagem, que é anexado a mensagem.
HMAC é um algoritmo de autenticação de mensagens baseado em hash, onde “H”
significa hash ou função baseada em hash [17].
Assim como os resumos de mensagens, um HMAC é utilizado para garantir a
integridade do conteúdo da mensagem que está sendo representada. Um MAC é capaz de
detectar alterações nos dados ou na soma. Para detectar as alterações nos dados, um MAC
pode estar baseado em um resumo, cifra de bloco ou cifra de fluxo. Para detectar alterações
na soma de verificação real, o MAC utiliza uma chave [17].
2.7 – Assinaturas Digitais
A assinatura digital pode ser analisada analogamente como uma assinatura
manuscrita, uma vez que uma entidade pode assinar uma informação e qualquer entidade
poder ler essa assinatura e verificar se ela é verdadeira. A grande vantagem da assinatura
digital é que ela é virtualmente impossível de ser forjada, em virtude das técnicas
matemáticas e da criptografia assimétrica [17].
Uma assinatura digital é o criptograma – resumo de mensagem – 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
9
apenas o detentor da chave privada poderia ter gerado esse criptograma, conforme
apresentado na figura 2.3.
Figura 2.3 – Processo de Assinatura Digital
10
CAPÍTULO III
FUNDAMENTOS MATEMÁTICOS
Neste capitulo será visto algumas definições matemáticas importantes para a
compreensão dos algoritmos apresentados neste trabalho.
3.1 – Teorema da Fatoração Única
Definição. Dado um inteiro positivo n  2, pode-se sempre escrevê-lo, de modo único, na
forma:
n  p1e1 ... pkek ,
onde 1  p1  p 2  ...  p k são números primos e e1 ,..., ek são inteiros positivos.
Desta forma, o teorema demonstra duas coisas: primeiro, todo inteiro pode ser
escrito como produto de potências de primos, e segundo, só há uma escolha possível de
primos e expoentes para a fatoração de um inteiro dado.
3.2 – Teorema de Fermat
Seja p um número primo e a um número inteiro, então:
a p  a (mod p).
Segundo esse teorema, a é invisível módulo p. Seja a’ um inteiro positivo tal que
aa’  1 (mod p). Multiplicando ambos os membros de a p  a (mod p) por a’, é obtida a
nova versão do teorema de Fermat:
a p–1  1 (mod p).
Exemplo: Calcular 25432675 (mod 13) com simplificação de cálculos pelo teorema de
Fermat.
Utilizando a idéia apresentada anteriormente, basta calcular o resto da divisão de
5432675 por 12, que é igual a 11. Assim, 25432675 211  7 (mod 13).
11
3.3 – Teorema de Euler
O teorema de Euler é uma generalização do teorema de Fermat para o caso em que
o módulo não é primo.
Definição: Se n é um número positivo e a é um inteiro tal que mdc (máximo divisor
comum) (a, n) = 1, então.
a (n)  1 (mod n)
Definição. Seja n inteiro positivo. A função de Euler  (n) é definida como o número de
inteiros positivos não excedendo n que são relativamente primos com n.
∅( ) =
−
Propriedades da função  de Euler
(i)
Se p é primo, então  (p) = p – 1;
(ii)
A função  de Euler é multiplicativa. Isto é, mdc (m, n) = 1, então  (m n) = 
(m)   (n).
Exemplo: Seja m = 8 e a Z*8, onde  (m) = 4 e Z*8 = {1, 3, 5, 7}. Dessa forma, tem-se
que: 14  1 (mod 8), 34  1 (mod 8), 5 4  1 (mod 8) e 74  1 (mod 8). Multiplicando ambos
os lados desta equação por a, tem-se o seguinte:
(a)(a
 (m)
mod m) = (1)(a)  a
 (m)+1
(mod m)  a
Dessa forma, 1 5  1 (mod 8), 35  3 (mod 8), 5 5  5 (mod 8) e 7 5  7 (mod 8) . Este ajuste
algébrico garante o funcionamento do RSA, pois permite que se possa cifrar os dados e
depois decifrá-los.
3.4 – Algoritmo de Euclides
O objetivo do algoritmo de Euclides é calcular o máximo divisor comum entre dois
números inteiros positivos. Seja a e b inteiros positivos e que a ≥ b. O algoritmo de
12
Euclides consiste em dividir a por b, obtendo o resto r1. Se r1  0, divide-se b por r1,
obtendo o resto r2. Se r2  0, divide-se r1 por r2, obtendo-se o resto r3 e assim por diante. O
último resto diferente de zero desta seqüência de divisões é o máximo divisor comum entre
a e b. Os quocientes não são usados diretamente no cálculo do máximo divisor comum.
Exemplo: Calcular o mdc(26, 7)
A seguir é apresentado um exemplo didático, utilizando o algoritmo de Euclides,
onde o quadro da figura 3.1 é preenchido com os cálculos parciais das divisões necessárias
para encontrar o mdc(26, 7).
Figura 3.1 – Quadro com cálculos parciais para encontrar mdc(26, 7)
Dessa forma, tem-se que o mdc(26, 7) = 1, que é o último resto não nulo da
seqüência de divisões. Analogamente, pode-se observar que:
mdc(26, 7) = mdc(7, 5) = mdc(5, 2) = mdc(2, 1) = mdc(1, 0) = 1.
3.5 – Algoritmo Estendido de Euclides
Assim como o nome indica, o algoritmo estendido de Euclides é uma extensão do
algoritmo original de Euclides. Através deste algoritmo é fácil calcular tanto o Máximo
Divisor Comum (MDC), neste caso representado por d, entre dois números inteiros  e 
através da expressão:   a +   b = d, onde a e b são números inteiros positivos, como
também o inverso multiplicativo de um inteiro positivo em um módulo m.
Exemplo: Calcular 7-1 em Z26.
A seguir é apresentado um exemplo didático do cálculo do inverso multiplicativo
de 7 em Z26, utilizando o algoritmo estendido de Euclides. Conforme a figura 3.1,
calculando o mdc(26, 7), obtemos a seqüência de divisões que são escritas a seguir:
26 = 3  7 + 5, 7 = 1  5 + 2 e 5 = 2  2 + 1
Resolvendo a equação linear modular:
1=5-22
13
= 5 - (7 - 5)  2
=35-27
= 3  (26 - 3  7) - 2  7
= 3 26 - 11  7
Logo, 7 -1 = -11 (mod 26) = 15
3.6 – Grupos
Um grupo é constituído de dois componentes básicos: um conjunto e uma operação
definida neste conjunto. Define-se o conjunto de G e a operação de *. Por esta operação
entende-se como uma regra que a cada dois elementos a, b  G associa um terceiro
elemento a * b que também está em G. Entretanto nem toda associação “conjunto e
operação” constituem um grupo. Para obter-se um grupo, é necessário que a operação
satisfaça algumas propriedades [17].
Seja G um conjunto munido de uma operação * . Diz-se que a operação * define
uma estrutura de grupo sobre o conjunto G ou que o conjunto G é um grupo em relação à
operação * se, e somente se [17]:
1.
para qualquer elemento a, b  G, a * b  G. Isto é, o resultado de uma
operação entre dois elementos do grupo G vai ser um elemento do grupo G
(propriedade de fechamento);
2.
a operação * é associativa, isto é, a*(b*c) = (a*b)*c para todo a,b,c  G
(propriedade associativa);
3.
existe um elemento identidade e  G, tal que a*e = e*a = a para todo a  G
(propriedade identidade);
4.
para cada a  G existe um elemento a-1  G, chamado inverso de a, tal que
a*a-1 = a -1*a = e (propriedade inversa).
3.6.1 – Grupos Abelianos
Um grupo (G,*) é abeliano se ele for um grupo comutativo. O grupo G é
comutativo ou abeliano se, e somente se:
a*b = b*a,  a, b  G, conhecida como propriedade comutativa.
14
Exemplo: Seja o conjunto dos números inteiros (Z) e a operação de adição usual (+), para
todo a, b, c  Z, tem-se [17]:
 a + b = c. Assim, a operação + é fechada em Z.
 a + (b + c) = (a + b) + c. A propriedade associativa da operação (+) é
assegurada.
 o elemento identidade da adição é 0, como 0  Z, logo temos que,
a + 0 = 0 + a = a.
 para cada elemento a  Z existe um elemento -a  Z, chamado de inverso de a.
Assim tem-se que, a + (-a) = -a + a = 0 (elemento identidade).
 a + b = b + a. Logo Z é um grupo abeliano, ou seja, a propriedade comutativa
é garantida em Z.
Todas as propriedades de grupo foram satisfeitas, por isso o conjunto dos números
inteiros e a operação de adição é um grupo, denotado pelo par (Z,+).
Contra-exemplo: Seja o conjunto dos números inteiros (Z) com a operação de
multiplicação usual (), para todo a, b, c  Z, tem-se [17]:
 a  b = c. Assim, a operação  é fechada em Z.
 a  (b  c) = (a  b)  c. A propriedade associativa da operação foi assegurada.
 O elemento identidade da multiplicação é 1, como 1  Z logo, tem-se que,
a  1 = 1  a = a.
 para todo elemento a  Z não existe o elemento a -1  Z, chamado de inverso
de a. Portanto essa propriedade não é satisfeita.
Como mostrado, os elementos do conjunto Z, exceto o elemento 1, não possuem
inversos multiplicativos em Z. Por esse motivo, o conjunto dos números inteiros com a
operação de multiplicação usual não é um grupo.
15
3.6.2 – Grupos Finitos
Um grupo é finito se seu conjunto possui um número finito de elementos, ou seja,
um grupo (G,*) é finito se G é um conjunto finito, onde o número de elementos de G é
chamado de ordem do grupo.
Exemplo: Seja o conjunto G={1,-1} e a operação de multiplicação usual (), temos:
 1  (-1) = -1. A propriedade de fechamento é satisfeita.
 1  (-1  1) = (1  (-1))  1. A propriedade associativa da operação é
assegurada.
 -1  1 = 1  (-1) = 1. Como 1 é o elemento identidade da multiplicação e 1  G,
então o conjunto G possui o elemento identidade.
 o inverso de 1 = 1 -1 = 1 e o inverso de -1 = (-1)-1 = -1. Observa-se que todos os
elementos de G possui inverso multiplicativo.
Todas as propriedades de grupo foram satisfeitas e como G{-1,1} é um conjunto
finito, logo (G,) é um grupo finito.
3.7 – Anéis
Um anel é um conjunto A munido de duas operações: uma de adição que é
representada por + e uma de multiplicação que é representada por , onde as seguintes
propriedades são satisfeitas [17]:
 em relação à adição, A é um grupo comutativo (abeliano) com o elemento
identidade da adição (0).
 a operação de multiplicação () é associativa.
a  (b  c) = (a  b)  c
 a operação de multiplicação () é distributiva em relação à operação de
adição (+).
a  (b + c) = a  b + a  c,  a, b, c  A.
Um anel é anel comutativo, se
 a  b = b  a,  a, b  A.
16
Um anel é anel com identidade, se,
 existe o elemento identidade da multiplicação 1  A, sendo,
a  1 = 1  a = a,  a  A.
Sendo a  0 e b  0 com a  b = 0, a e b são chamados divisores próprios de zero.
Esta propriedade é conhecida como lei do cancelamento do produto.
Exemplo 1: Dado Z6 = {0,1,2,3,4,5}, tem-se que
2  3 = 0 (mod 6).
Um anel comutativo com unidade e sem divisores de zero é chamado de anel de
integridade.
Exemplo 2: Um exemplo típico de anel de integridade é o conjunto dos números inteiros
(Z) com as operações usuais de adição e multiplicação.
3.8 – Corpos
Os anéis dos conjuntos Z e Q são ambos comutativos com unidade. Para ambos
vale a lei do cancelamento do produto. Mas, enquanto que no anel Z somente o elemento 1
admite simétrico multiplicativo, no anel Q todo elemento não nulo admite simétrico
multiplicativo. Fatos como esses sugerem a definição a seguir [17].
Definição 1: Um anel A, comutativo com unidade, recebe o nome de corpo, se todo
elemento a, não nulo do anel A, admite simétrico multiplicativo (a-1). Ou seja:
a  a-1 = 1,  a  0, a -1  A
Usando conceitos de grupos, define-se corpos. Um corpo é um conjunto de
elementos nos quais pode-se fazer adição, subtração, multiplicação e divisão sem deixar o
conjunto. A adição e a multiplicação devem satisfazer as propriedades comutativa,
associativa e distributiva. Uma definição formal de corpo é apresentada a seguir.
17
Definição 2: Seja F um conjunto de elementos no qual duas operações binárias, a adição
(+) e a multiplicação (), são definidas. O conjunto F juntamente com duas operações
binárias + e , é um corpo se as seguintes propriedades forem satisfeitas [17]:
1.
F é um grupo comutativo (abeliano) em relação à operação de adição (+). O
elemento identidade da adição é denotado por 0 (zero).
2.
o conjunto dos elementos do grupo F sem o elemento zero (F – {0}) é um
grupo comutativo em relação à operação de multiplicação (). O elemento
identidade da multiplicação é denotado por 1.
3.
a operação de multiplicação () é distributiva em relação à operação de adição
(+), isto é:
a  (b + c) = a  b + a  c,  a,b,c  F.
Da definição anterior, um corpo F consiste em pelo menos dois elementos, a
identidade aditiva e a identidade multiplicativa. O inverso aditivo de um elemento a é
denotado por –a ( a  F), e o inverso multiplicativo de um elemento a é denotado por
a-1 ( a  0  F).
Ainda, em relação a corpo, pode-se afirmar:
1.
subtraindo um elemento b de um corpo de um outro elemento a desse mesmo
corpo, é o mesmo que somar o elemento a com o inverso aditivo de b (-b), isto
é, a – b = a + (-b),  a,b  F.
2.
sendo b  0, dividir o elemento a por b, é o mesmo que multiplicar a pelo
inverso multiplicativo de b (b-1), isto é, a  b = a  b -1,  a,b  F.
Corpos finitos são corpos que possuem um número finito de elementos. O número
de elementos em um corpo é chamado de ordem do corpo. Os corpos finitos também são
conhecidos como Corpos de Galois (GF – Galois Field). As operações do algoritmo AES
são realizadas sobre o corpo finito GF(2 8).
O conjunto Zn é definido como o conjunto de restos módulo n, ou seja,
Zn = {0, 1, 2,..., n-1}. Quando existe o inverso multiplicativo para todo elemento  0 em
Zn, então Zn é denotado como um corpo.
Se a é primo relativo a n, seu máximo divisor comum é 1, então pelo algoritmo
estendido de Euclides, existem números s e t tais que 1 = s  a + t  n. Isso significa que
um número a  Z tem inverso multiplicativo se, e somente se, a for primo relativo a n.
18
Zn é corpo se, e somente se, n for um número primo, já que neste caso todos os
números 0 < a < n são primos relativo a n, e portanto tem inverso multiplicativo.
Corpo de Galois de tamanho p, denotado por GF(p), onde p é um número primo,
pode ser construído considerando o conjunto de inteiros Zp = {0,1,2,...,p-1}. Em relação à
adição modulo p, os elementos de Zp formam um grupo comutativo aditivo. Em relação à
multiplicação módulo p, os elementos de Zp sem o elemento 0 (Zp – {0}), formam um
grupo comutativo multiplicativo e como as duas operações são distributivas, então tem-se
um corpo.
3.8.1 – GF(p)
Os inteiros {0,1,2,...,p-1}, onde p é um número primo, formam um corpo GF(p) em
relação à adição e à multiplicação módulo p.
Exemplo: Construção do GF(3)
Os inteiros {0,1,2} usando a adição e a multiplicação módulo 3, tem-se que a
propriedade distributiva é assegurada  a, b, c  GF(3). Esse corpo pode ser representado
pelas seguintes tabelas:
Tabela 3.1 – Soma módulo 3
Tabela 3.2 – Multiplicação módulo 3
3.8.2 – Corpo GF(28)
Na implementação do algoritmo AES, a forma como os números serão
representados pode influenciar na construção do código. Visto que os elementos do GF(2 8)
podem ser representados de várias maneiras diferentes, a representação binária
proporciona, inclusive, o uso de polinômios no que diz respeito às operações sobre esses
elementos.
19
Cada elemento do GF(2 8) pode ser visto com um byte B que consiste em
b7,.b6,.b 5,.b4,.b3,.b 2,.b1.e.b0 com coeficientes em GF{2}. Assim sua representação como
polinômio é
Exemplo:
87 = 01010111b = x6 + x4 + x2 + x1 + 1
131 = 10000011b = x7 + x1 + 1
20
CAPÍTULO IV
O ALGORITMO AES
Neste capítulo será apresentada uma descrição do novo padrão de criptografia
simétrica, AES (Advanced Encryption Standard), mostrando de forma detalhada todo seu
funcionamento.
4.1 – Breve Histórico do AES
Com o grande avanço computacional, uma chave de 56 bits como usada pelo
algoritmo DES não poderia mais garantir a segurança das informações, isto levou o NIST
(National Institute of Standards and Technology) a propor um novo padrão criptográfico.
Sendo assim, em 1997 deu-se início ao concurso que escolheria o sucessor do DES, este
seria chamado de AES. O NIST especificou que os candidatos deveriam operar com chave
e bloco variando com tamanho mínimo de 128 bits e estabeleceu alguns requisitos [8]:

Segurança forte: O algoritmo deveria suportar ataques futuros.

Projeto simples: Facilitar a análise e certificação matemática da segurança
oferecida pelo algoritmo.

Desempenho: ser razoavelmente bom em uma variedade de plataformas, variando
de Smart Cards a servidores.

Não serem patenteados: os algoritmos devem ser de domínio público e estar
disponíveis mundialmente.
Além destes requisitos gerais, o NIST especificou que o AES precisaria ser de
cifragem em bloco simétrico, com um tamanho de bloco de 128 bits e suporte para
tamanhos de chaves de 128, 192 e 256 bits [9].
Na primeira rodada do concurso, o NIST recebeu 21 submissões, sendo que apenas
15 atendiam às exigências. Sendo que estes foram submetidos a testes e avaliados pela
comunidade científica.
Para a segunda rodada foram selecionados apenas cinco algoritmos: MARS, RC6,
Rijndael, Serpent e TwoFish. Todos esses algoritmos satisfaziam as condições
estabelecidas, assim como a de ser mais rápido que o 3DES.
Três anos e meio após o início do concurso, no dia 2 de outubro de 2000, o NIST
chega à escolha do vencedor: Rijndael. O nome é uma fusão de Vincent Rijmen e Joan
21
Daemen, os dois belgas criadores do algoritmo. Deste momento em diante, esse cifrador
passou a ser chamado de AES, sendo publicado como FIPS 197 (Federal Information
Processing Standard) [10].
A escolha do cifrador Rijndael contra outros quatro finalistas do processo, os quais
também foram classificados como altamente seguros pelo NIST, baseou-se na eficiência e
baixa requisição de recursos [8].
4.2 – Detalhes de funcionamento do AES
Ao contrário dos outros algoritmos, o AES apresenta conceitos algébricos e
matemáticos diferentes dos utilizados anteriormente, pois o projeto do AES está voltado
para o paralelismo, o que o torna mais rápido que os demais.
No AES os dados são agrupados em uma estrutura chamada de estado, onde são
realizadas operações em cada parte do programa. Os estados são representados por uma
matriz.
Cada matriz estado pode variar de acordo com o tamanho do da chave utilizada.
Desta forma, ela apresenta três opções de tamanho de chave, sendo estas de 128, 192 ou
256 bits.
Quanto as suas iterações, o AES varia o Nr (número de rodadas) de acordo com o
Nb (tamanho do bloco) e o Nk (Tamanho da chave), como mostrado na tabela 4.1.
Tabela 4.1 – Nr em função do tamanho de blocos e chave
Nr
Nb = 4
Nk = 128 bits
10
Nk = 192 bits
12
Nk = 256 bits
14
Para cada rodada, o AES realiza quatro funções: ByteSub, Deslocamento de linhas,
MixColumn e Adição de chave de rodada, sendo que a cada transformação ocorrida em
uma determinada função, a matriz resultante serve como entrada para a próxima função
[6].
22
No estado, denotado pelo símbolo s, cada byte individual possui dois índices: um
número de linha r, variando de 0 ≤ r  4 e um número de coluna c, variando de 0 ≤ c  Nb
[17].
Ao iniciar o processo de cifragem ou decifragem, o texto a ser cifrado é colocado
em uma matriz de entrada seguindo a mesma configuração da matriz estado, como
ilustrado na figura 4.1. As operações de cifragem ou decifragem são realizadas no estado,
onde o valor final é copiado para a saída – os bytes out0, out1, ..., out15.
Figura 4.1 – Bytes de entrada, matriz estado e bytes de saída
4.3 – Especificação do Algoritmo
A transformação ByteSub modifica cada byte usando uma matriz conhecida como
S-BOX. Esta matriz é gerada matematicamente durante a execução.
A próxima operação que o AES realiza é a de deslocamento de linhas. Aqui as
linhas do estado sofrem uma rotação de acordo com a tabela 4.2.
Tabela 4.2 – Deslocamento em função do tamanho do bloco
L1
L2
L3
Nb = 4
1
2
3
Nb = 6
1
2
3
Nb = 8
1
3
4
No caso da função MixColumn, o programa vê cada coluna do estado como um
polinômio, onde, com os mesmos realiza uma multiplicação módulo x4 + 1 com o
polinômio a(x) = {03}x3+{01}x2+{01}x+{02} [6].
23
No algoritmo AES, na cifragem e decifragem, cada bloco (estado) utiliza uma
função que é composta de quatro diferentes transformações orientadas a bytes:
1. SubBytes: Os bytes de cada bloco são substituídos por seus equivalentes em
uma tabela de substituição (S-box);
2. ShiftRows: Nesta etapa, os bytes são rotacionados em grupos de quatro bytes;
3. MixColumns: Cada grupo de quatro bytes sujeita-se a uma multiplicação em
GF(28), o que proporciona a cada byte do grupo influenciar todos os outros
bytes;
4. AddRoundKey: Nesta fase, o bloco de dados é alterado por meio da subchave
da rodada, que realiza uma operação xor com o bloco inteiro.
Um detalhe interessante notado no algoritmo foi que, diferentemente do DES que é
reversível apenas invertendo a seqüência das chaves, no AES, deve-se realizar as inversas
matemáticas de cada função.
4.4 – Processo de Cifragem
No processo de cifragem, os bytes de entrada são copiados para uma matriz estado
conforme a figura 4.1. Após a adição inicial da chave de rodada, o estado é transformado
pela aplicação das funções que compõe o AES, para este processo o algoritmo deve ser
executado em um número definido de rodadas de acordo com o tamanho da chave e o
tamanho do bloco.
Para cada rodada do algoritmo o processo deve seguir uma ordem definida de
funções já apresentadas, assim como na figura 4.2, sendo que a rodada final é ligeiramente
diferente das Nr – 1 rodadas.
As transformações SubBytes, ShiftRows, MixColumns e AddRoundKey são descritas
a seguir. As subchaves k0, k1,..., knr são geradas através do processo de expansão de chaves,
descrito na seção 4.8.
Como apresentado na figura 4.2, todas as Nr rodadas são idênticas com exceção da
rodada final, na qual não inclui a transformação MixColumns.
24
Figura 4.2 – Processo de cifragem do AES
4.4.1 – Transformação SubBytes
A transformação SubBytes modifica cada byte por meio do uso de uma tabela de
substituição chamada S-box, que pode ser criada em tempo de execução, visto que é
constituída por meio de uma operação matemática. A S-box é construída por meio da
composição de duas transformações:
25
1. realiza o inverso multiplicativo do elemento em GF(28), com a representação
definida por um polinômio com coeficientes em {0,1} e o elemento 0x00 é
mapeado em si mesmo.
2. Aplicando-se uma operação similar de transformação definida na figura4.3.
A aplicação dessa operação para cada byte do estado consiste na operação denotada
por SubByte. Para realizar o processo de decifragem é necessário efetuar a operação por
meio da matriz inversa, que é obtida com a inversa multiplicativa desta sobre o corpo
GF(28) [8].
Figura 4.3 – Transformação no AES
Na figura 4.4, é possível visualizar a forma de atuação da operação SubByte sobre o
estado. Do lado esquerdo, um estado com Nb = 4, isto é, um bloco de dados de 128 bits.
Cada elementodo estado S é mapeado por meio da S-box em um novo elemento no estado
no S’, ocupando exatamente a mesma posição em S´.
Figura 4.4 – Transformação SubBytes
26
A tabela de substituição S-box utilizada na transformação SubBytes é apresentada
em notação hexadecimal na tabela 4.3. Por exemplo, se s1,1 =
0x53,
então o valor de
substituição será determinado pela interseção da linha com índice 5 e coluna com índice 3
na tabela 4.2. O resultado atribuído em s’1,1 será o valor 0xed.
Tabela 4.3 – Tabela de substituição S-box em notação hexadecimal
4.4.2 – Transformação ShiftRows
Na transformação ShiftRows, os bytes das últimas três linhas são deslocados
circularmente em diferentes números de bytes. A primeira linha, r = 0, não é deslocada.
Mais especificamente, a transformação ShiftRows procede da seguinte forma:
onde o valor de rotação de shift(r, Nb) depende da linha de número r, como a seguir
(lembrando que Nb = 4 para o padrão AES):
O emprego do deslocamento circular tem por finalidade aumentar a difusão
(propagação dos efeitos de um bit de texto simples para outros bits no texto cifrado) sobre
os elementos do estado. É importante notar que de modo diferente ao que ocorre com os
outros cifradores da atualidade, onde a rotação é realizada em bits, no AES a rotação é
realizada em bytes [10].
27
A motivação para essa operação ser realizada em bytes relaciona-se ao fato de que
o estado já sofreu alterações em bits no processo de adição de chaves, no início do
processo de cifragem. A figura 4.5 ilustra o efeito da transformação ShiftRows.
Figura 4.5 – Transformação ShiftRows
4.4.3 – Transformação MixColumns
Na transformação MixColumn, as colunas do estado são consideradas como
polinômios sobre GF(2 8), sendo efetuada uma multiplicação módulo (x4 + 1) com um
polinômio fixo a(x), com coeficientes em notação hexadecimal, dado por:
Isto pode ser escrito como uma multiplicação matricial. Assim, tem-se que:
Como resultado dessa multiplicação, os quatro bytes de cada coluna são
substituídos pelo seguinte cálculo:
28
A figura 4.6 ilustra o efeito da transformação MixColumns.
Figura 4.6 – Transformação MixColumns
4.4.4 – Transformação AddRoundKey
Na transformação AddRoundKey, a chave de rodada é adicionada ao estado através
de uma operação xor. Cada chave de rodada consiste em Nb palavras originadas do
processo de expansão de chaves (descrito na seção 4.4), que é adicionada a uma coluna do
estado, como a seguir:
onde w[i] são as chaves expandidas e round é um valor na faixa de 0 ≤ round ≤ Nr.
No processo de cifragem, a adição inicial da chave de rodada ocorre quando
round = 0, antes do início das iterações do processo de cifragem. A aplicação da
transformação AddRoundKey nas Nr rodadas ocorre quando 1 ≤ round ≤ Nr. A figura 4.7
ilustra o efeito desta transformação.
29
Figura 4.7 – Transformação AddRoundKey
4.5 – Processo de Expansão de chaves
O processo de expansão de chaves gera um total de Nb(Nr + 1) palavras a partir da
chave principal. O algoritmo AES necessita inicialmente de um conjunto de Nb palavras e
cada um das Nr rodadas necessita de Nb palavras de chave. O resultado do processo de
expansão de chaves consiste em um vetor unidimensional de palavras e cada rodada utiliza
como subchave a quantidade de quatro palavras seqüencialmente (no caso de Nb = 4 e
Nk = 4), caminhando progressivamente sobre os elementos do vetor. O processo de
expansão de chaves também é conhecido como processo de geração de subchaves. A figura
4.8 apresenta o vetor de chaves expandidas, onde cada palavra é nomeada como wi, onde i
é a posição da palavra dentro vetor [17].
Figura 4.8 – Visualização do vetor de chaves do AES
30
4.6 – Processo de Decifragem
O processo de decifragem no AES consiste na execução de diferentes operações,
em virtude de sua essência matemática. O AES necessita de inversas matemáticas de suas
transformações para realizar o processo de decifragem [8].
O processo de decifragem é ilustrado na figura 4.9.
Figura 4.9 – Processo de Decifragem do AES
Realizando-se operações inversas da ShiftRow efetuando-se rotacionamento cíclico
à direita na mesma quantidade de bytes da operação de cifragem. A operação inversa que
31
possui maior complexidade é a MixColumn. Do mesmo modo que o processo de cifragem,
na transformação InvMixColumn as colunas dos estados são considerados polinômicos
sobre um corpo GF(28) e sofrem multiplicação modulo x4 – 1 com um polinômio fixo a-1
(x) dado por:
a-1 (x) = 0Bx3 + 0Dx2 + 09x + 0E
A operação inversa da adição de chave de rodada é a mesma operação utilizada
para o processo de cifrar. A operação inversa de SubByte consiste no uso da inversa
matemática da S-box utilizada para cifrar. A S-box invertida pode ser analisada por meio
da tabela 4.4.
Tabela 4.4 – Tabela substituição S-box inversa em notação hexadecimal
Neste capítulo foi apresentado o algoritmo AES, que é o novo padrão de
criptografia simétrica de dados. O quarto capítulo descreve o algoritmo SHA-1, que gera
resumos de mensagens de 160 bits.
32
CAPÍTULO V
SECURE HASH ALGORITHM 1 (SHA-1)
Neste capítulo será apresentado o algoritmo de hash criptográfico SHA-1 (Secure
Hash Algorithm), que atualmente é o mais utilizado em uma grande variedade de
aplicações e protocolos, incluindo TLS (Transport Layer Security), SSL (Secure Sockets
Layer), PGP (Pretty Good Privacy), SSH (Secure Shell e IPSec (IP Security Protocol).
5.1 – Introdução
A família de algoritmos SHA foi desenvolvida pela NSA (National Security
Agency) juntamente como NIST (National Institute of Standards and Technology) e
publicadas como um padrão do governo Norte-Americano, sendo que o primeiro membro
da família, publicado em 1993, foi oficialmente chamado de SHA, no entanto, é
freqüentemente chamado de SHA-0. Logo em seguida, em 1994, foi publicado o algoritmo
SHA-1, sendo uma revisão do SHA.
O algoritmo SHA-1 produz uma representação compactada de uma mensagem. Esta
representação possui um tamanho definido de 160 bits de saída, chamados também de
resumo da mensagem.
Este tamanho de saída é gerado independente do tamanho da mensagem, ou seja,
mesmo para uma mensagem de tamanho menor que 264 bits a saída resultante do algoritmo
será uma seqüência de 160 bits.
Sendo assim, o resumo da mensagem pode ser utilizado como entrada para
algoritmos de assinatura digital, visto que este processo torna o método de assinatura
eficiente, pois qualquer mudança na mensagem irá resultar em um diferente resumo,
tornando assim a verificação da assinatura errada.
O SHA-1 é considerado seguro, pois é computacionalmente difícil reconstruir uma
mensagem a partir de um determinado resumo ou encontrar duas diferentes mensagens que
correspondem ao mesmo resumo [11].
Atualmente existem novas funções da família SHA, que estão sendo testadas e
verificadas quanto a sua eficiência, são eles o SHA-256, SHA-384 e SHA-512.
33
5.2 – Definições
A seguir são apresentadas as terminologias para seqüências de bits e inteiros,
utilizadas na descrição do SHA-1:

um dígito hexadecimal é um elemento do conjunto {0, 1, …, 9, A, … , F}. Um
dígito hexadecimal é representado por 4 bits.

uma palavra equivale a uma seqüência de 32 bits, que pode ser representada
como um seqüência de 8 dígitos hexadecimais.

um inteiro entre 0 e 232 – 1 inclusive, pode ser representado como uma palavra.
Os quatro bits menos significativos de um inteiro são representados pelos
dígitos mais à direita de uma palavra em notação hexadecimal. Se Z é um
inteiro, 0  Z  264, então Z = 232  X + Y, onde 0  X  232 e 0  Y  2 32.
Uma vez que X e Y podem ser representados como palavras x e y,
respectivamente, Z pode ser representado como um par de palavras (x, y).

um bloco equivale a uma seqüência de 512 bits. Um bloco (isto é, B) pode se
representado como uma seqüência de 16 palavras.
5.3 – Operações sobre palavras
Sobre as palavras são realizadas as seguintes operações:

operações lógicas bit a bit sobre palavras:
AND, OR, XOR e NOT.

adição realizada módulo 2 32.
A operação x + y é definida a seguir. As palavras x e y representam inteiros X e
Y, onde 0  X  232 e 0  Y  232.
Para um inteiro positivo U e V, U mod V
é resto da divisão de U por V. Calculando Z = (X + Y) mod 232, então 0  Z 
2 32. Convertendo Z para uma palavra z, defini-se z = x + y.

a operação de deslocamento circular à esquerda ROTLn(x), onde x é uma
palavra e n é um inteiro 0  n  232, é definida por
ROTLn(x) = (x << n) OR (x >> 32 – n).
Na definição anterior, x << n é obtido da seguinte forma: descartando os n bits
mais à esquerda de x e então preenchendo o resultado com n zeros à direita (o
resultado continua sendo uma palavra de 32 bits). x >> n é obtido descartando
34
os n bits mais à direita de x e então preenchendo o resultado com n zeros à
esquerda. Assim, ROTLn(x) é equivalente a um deslocamento circular de x por
n posições à esquerda.
5.4 – Geração do Hash
O SHA-1, possui um buffer que é atualizado a cada operação e que será o resultado
final do hash, sendo que, neste caso como a saída é de 160 bits, o buffer é composto de 5
partes de 32 bits cada. Estas partes são denominadas A, B, C, D e E. O SHA-1 possui
também outro buffer de cinco parte de 32 bits que é chamado de H0, H1, H2, H3 e H4 [8].
Os valores do buffer do algoritmo SHA-1 deve ser iniciado com os valores contidos
na tabela 5.1.
Tabela 5.1 – Valores para preencher o buffer do SHA-1
Buffer
Valor Inicial
H0
67
45
23
01
H1
EF
CD
AB
89
H2
98
BA
DC
FE
H3
10
32
54
76
H4
C3
D2
E1
F0
No início de cada passo, um bloco de entrada x de 512 bits é utilizado para criar um
vetor W de 80 palavras de 32 bits. Inicialmente, o bloco de entrada x é dividido para
formar as 16 primeiras palavras do vetor W(W0 a W15). As palavras de W16 a W79 são
formadas segundo a expressão:
Wi = (Wi - 3 XOR Wi - 8 XOR Wi - 14 XOR Wi - 16) << 1
O algoritmo SHA-1 possui quatro funções e quatro constantes que são utilizadas de
acordo com a interação que estiver sendo processada. Desta forma, as constantes utilizadas
que indicam em qual interação devem ser aplicadas segue como na tabela 5.2.
35
Tabela 5.2 – Funções e constantes utilizadas pelo SHA-1
Funções
Constante
Iteração
5A827999
0 a 19
f(B, C, D) = B XOR C XOR D
6ED9EBA1
20 a 39
f(B, C, D) = (B AND C) OR (B AND D) OR (C AND D)
8F1BBCDC
40 a 59
f(B, C, D) = B XOR C XOR D
CA62C1D6
60 a 79
f(B, C, D) = (B AND C) OR ((NOT B) AND D)
Antes de executar as iterações necessárias para o processamento de um bloco com o
algoritmo SHA-1, realiza-se uma cópia de valores contidos no buffer H0, H1, H2, H3 e H4
para o buffer A, B, C, D e E.
O processamento de um bloco com o SHA-1 consiste em 80 iterações, sendo estas
de 0 a 79, em que são processadas as seguintes operações:
TEMP = (A<<5) + f(B, C, D) + E +W +Ki;
E = D;
D = C;
C = (B<<30);
B = A;
A = TEMP;
Após a execução do laço principal, realiza-se o somatório dos dois buffers como
segue:
H0 = H0 + A;
H1 = H1 + B;
H2 = H2 + C;
H3 = H3 + D;
H4 = H4 + E;
Após processar todos os blocos da mensagem, o valor do hash estará armazenado
no buffer H0, H1, H2, H3 e H4.
36
CAPÍTULO VI
O ALGORITMO RSA
Neste capítulo será apresentado o algoritmo criptográfico de chave assimétrica
conhecido como RSA.
6.1 – Introdução
O RSA foi desenvolvido no MIT (Massachusetts Institute of Tecnology) em 1978
por Ron Rivest, Adi Shamir e Len Adleman, sendo assim o primeiro algoritmo assimétrico ou
de chaves públicas [5].
Apesar de estar sob ataques há mais de vinte e cinco anos, desde sua apresentação,
nenhum desses ataques exigiu sequer uma mudança na estrutura do mesmo. Contudo, o RSA
possui pontos fracos sendo que o principal deles é o alto tempo computacional [5].
Os algoritmos de chave pública devem ser funções de difícil inversão, para que
outros usuários em geral não consigam obter a chave privada a partir da chave pública.
Além disso, os inteiros envolvidos devem ser extremamente grandes, da ordem de centenas
de dígitos decimais, para que um computador avançado não consiga testar todas as
combinações possíveis em tempo hábil [4].
6.2 – Geração de chaves
As duas chaves do RSA são obtidas por um cálculo que é computacionalmente
fácil, sendo um algoritmo de tempo polinomial, porém é computacionalmente difícil obter
uma das chaves a partir do conhecimento de somente uma delas [5], ou seja, mesmo uma
das chaves sendo pública, é extremamente difícil obter a outra chave através desta.
Para a obtenção do par de chaves no algoritmo RSA, é necessário seguir alguns
passos, como descrito a seguir;
1. Selecionar dois números primos p e q, sendo p ≠ q;
2. Calcule o valor de n = p × q;
3. Calcule  (n) = (p – 1) × (q – 1);
4. Selecione um inteiro e relativamente primo à  (n);
37
5. Calcula-se d de forma que (d × e) mod  (n) = 1.
Sendo assim, obtêm-se a chave pública KU = {e, n} e a chave privada KR = {d, n}.
Um exemplo do processo de geração das chaves do algoritmo RSA pode ser vista
no exemplo a seguir:
1. Geração de dois primos p e q
p = 17 e q = 23
2. Calcular n
n = pq = 391
3. Calcular (n)
(n) = (p – 1)(q – 1) = 352
4. Escolher um inteiro e relativamente primo a (n)
e=7
5. Calcular o inverso de e módulo (n)
d = e-1 mod (n) = 151

Chave pública: n = 391, e = 7

Chave privada: n = 391, d = 151
6.3 – Processo de cifragem e decifragem
Obtida as chaves o próximo passo do algoritmo RSA é a cifragem e decifragem,
estes se baseiam basicamente em dois cálculos, sendo uma para cifrar e outro para decifrar.
Sendo M a mensagem a ser cifrada, C o texto cifrado, e a chave pública, d a chave
privada e n um número do módulo calculado e conhecido por todos. Os cálculos do
algoritmo RSA são:
Criptografar: C = Me mod n
Decriptografar: M = Cd mod n
38
Deste modo, o método RSA só será útil se utilizando a operação de decifragem
sobre um bloco de dados codificado obtêm-se o bloco original, ou seja, o método tem que
realmente ser reversível para funcionar corretamente.
Sendo um sistema com os parâmetros p e q, com n = p × q. Tendo assim n e e para
o processo de codificação e n e d para o de decodificação, como provar que o método
citado anteriormente funciona?
Considerando que um bloco b é um inteiro e 1  b  n-1, sabendo também que C é a
função para cifrar e D a função para decifrar, desta forma D(C(b)) = b. Sendo assim, podese provar que D(C(b))  b (mod n), pois tanto D(C(b)) quanto b estão no intervalo que vai
de 1 a n-1. Logo, só podem ser congruente módulo n se são iguais [3].
Seguindo a definição tem-se que:
CD (b )  (b e ) d  b ed (mod n)
Sabendo que d é o inverso de e modulo  (n), então ed = 1 + k  (n), para algum k
[3]. Observe que, como d e e são inteiros maiores que 2 e  (n) > 0, então K > 0.
Substituindo na equação anterior temos:
b ed  b1 k ( n )  (b ( n ) ) k b (mod n)
De acordo com o Teorema de Euler, a ( n) mod n  1 , logo é possível provar que
a ( n) mod n  1 (mod n). Portanto
DC(b)  b (mod n),
Esta afirmação estaria completa se não estivesse um pouco errada, pois foi usado
apenas o teorema de Euler, que neste caso só pode ser usado para concluir que b  (n)
≡1(mod n) se mdc(b,n =1).
Tendo-se que n = pq, pode-se calcular a forma reduzida de bed módulo p e módulo
q. Sendo o cálculo análogo a ambos, bastando calcular apenas uma delas. Sendo:
ed = 1 + k  (n) = 1 + k(p – 1)(q – 1),
39
b ed ≡ b * (b p – 1)k(q – 1) (mod p).
Logo:
Supondo que p não divide b, usando o Teorema de Fermat onde tem-se que bp – 1 ≡
1 (mod p), obtêm-se bed ≡ b (mod p).
Através desta, caí-se no mesmo problema, porém o fato de p ser primo nos permite
tratar facilmente o caso em que p divide b. Tendo assim, b ≡ 0 (mod p), é possível notar
que a congruência é facilmente verificada. Assim, bed ≡ b (mod p) vale para qualquer valor
de b.
Desta forma, sabendo-se que bed ≡ b (mod p) vale para qualquer que seja p. Sendo
assim, é possível mostrar que b ed ≡ b (mod q), ou seja, bed – b é divisível por p e por q.
Como n = pq, concluí-se que bed ≡ b (mod p), para qualquer número inteiro b. Desta forma,
tem-se a prova que o algoritmo RSA funciona [3].
Sendo assim, tendo a descrição detalhada de seu funcionamento e provando que
funciona, surge então uma pergunta: o que faz do RSA um algoritmo seguro? Basicamente,
o RSA concentra sua segurança apenas na dificuldade de se fatorar um número inteiro
muito grande. Hoje em dia não existem algoritmos eficientes que resolvam este problema
em tempo hábil.
Atualmente, o algoritmo RSA vem sendo muito utilizado em diversos serviços,
como por exemplo, para solucionar um problema certificação digital onde é possível
garantir a autenticidade e a integridade de muitas informações que trafegam neste meio
inovador que é a Internet. Dentre os protocolos e serviços que utilizam o RSA são eles:
Certificados de Segurança, Assinaturas Digitais e PGP, assim como também os protocolos
SSL, TLS e IPSec [7].
40
CAPÍTULO VII
INFRA-ESTRUTURA DE CHAVE PÚBLICA
Esta parte do trabalho destina-se a explicar os principais elementos que compõe
uma infra-estrutura de chaves públicas.
7.1 – Introdução
A tecnologia das comunicações evoluiu a um ponto que processos que antes eram
realizados através de presença física passaram a ser realizados pela Internet, facilitando
assim a abrangência, a flexibilidade e a redução de custos. Desta forma documentos que
antes eram assinados de forma manuscrita, e que eram validados por cartórios, passaram a
serem migrados para este novo ambiente.
Para dar validade a assinaturas geradas no meio digital, surge a ICP (InfraEstrutura de Chave Pública). Uma ICP torna possível identificar e confiar em um usuário
da Internet, que pode ser outra pessoa, uma estação de trabalho ou qualquer outra entidade
eletrônica.
A partir de 2001, o governo brasileiro deu legitimidade à ICP-Brasil, por meio de
uma medida provisória, a partir deste momento vem credenciando empresas para emitirem
certificados digitais.
7.2 – Certificação e Certificados
Uma assinatura sozinha não garante a autenticidade de quem a assinou, ou seja,
qualquer pessoa tem a possibilidade de gerar um par de chaves correlacionadas e publicar
uma delas, isto não garante que esta pessoa é realmente quem ela diz ser.
Sendo assim, ao utilizar uma chave pública, uma entidade precisa ter a garantia de
que está usando uma chave que efetivamente corresponde à chave privada de outra
entidade, haja visto que qualquer entidade tem a possibilidade de gerar um par de chaves
correlacionadas e publicar uma delas [12].
Desta forma, uma entidade tem a necessidade de verificar se a chave utilizada para
assinar um documento pertence realmente a quem o assinou. Para evitar que uma terceira
41
pessoa se passe pela entidade que assinou o documento, faz-se necessário a utilização de
uma entidade certificadora que possibilite dar validade ao processo.
Essa entidade confiável equivale a um cartório eletrônico, onde se pode depositar
uma chave pública, obtendo um certificado e associando tal chave pública com o seu
proprietário, ou seja, com a entidade que gerou e detém a chave privada correspondente.
Assim, quando uma entidade apresenta um certificado registrado é como se esta entidade
estivesse apresentando uma carteira de identidade digital cuja validade pode ser verificada
junto à entidade confiável que gerou o certificado [12].
Tento em vista que as entidades que se comunicam possuem cada uma, um
certificado assinado por uma autoridade confiável, garante que cada entidade destas seja
vista por outra de forma bem identificada e autêntica.
7.2.1. – Tipos de Certificados
Existem diversos tipos de certificados digitais, cada qual com sua particularidade.
Eles foram surgindo deve ao início do conceito de chave assimétrica, sendo desenvolvidos
para atender as necessidades da época.
Atualmente com a grande utilização destas soluções alguns padrões foram criados
com o intuito de reunir o que há de melhor em cada proposta.
Na ICP-Brasil, o padrão que vem sendo utilizado é o X.509, mais especificamente a
versão 3, que foi publicada em 2002.
7.2.2. – X.509
O padrão X.509 é o formato padrão mais usado para certificados. Embora o
formato de certificados X.509 faça parte do padrão X.500 para a construção de diretórios
globais de nomes e atributos, ele é comumente usado em trabalhos de criptografia com
uma definição de formato para certificados [13].
Assim, como ilustrado na Figura 7.1, o certificado X.509 contém os seguintes
campos:
42
Figura 7.1 – Estrutura do Certificado X.509.

Versão: Este campo indica as versões de formato do certificado, estes podem ser
versão 1, versão 2 ou versão 3.

Número serial de certificado: É um número inteiro único do certificado emitido
pela entidade certificadora.

Identificador do algoritmo de assinatura: Identifica o algoritmo utilizado para
assinar o certificado.

Nome do emissor: Esse campo identifica o nome distinto ND (Nome Distinto) com
o qual a autoridade certificadora cria e assina esse certificado. O ND é uma
convenção de nomes hierárquicos definidos na recomendação X.500, cujo objetivo
é garantir que o nome seja único.

Validade – Não antes / Não depois: Este campo identifica o período que o
certificado é considerado válido. Caso o certificado esteja dentro de período
descrito neste campo ele só perderá a validade caso seja revogado.

Nome do sujeito: Este campo identifica o ND do dono do certificado. Este campo
não poderá ser nulo.
43

Informações sobre a chave pública do sujeito: Contém a chave pública e a
identificação do algoritmo do proprietário do certificado.

Identificador único de emissor: Campo opcional presente na versão 2 e 3. Contém o
identificador único que é utilizado para exibir de maneira não-ambígua o nome
X.500 da autoridade certificadora.

Identificador único de sujeito: Campo opcional presente na versão 2 e 3. Contém
um identificador único que é utilizado para exibir de maneira não-ambígua o nome
X.500 do proprietário do certificado.

Extensões: Possibilita que uma autoridade certificadora inclua informações que
normalmente não seria fornecida pelo conteúdo básico de um certificado.

Assinatura: Identificador do algoritmo utilizado e a assinatura digital da autoridade
que emitiu o certificado.
7.2.3. – PKCS (Public Key Cryptography Standards)
A Empresa RSA, portadora de um papel importante no mercado de normalizações,
mantém uma série de padrões para o uso de criptografia de chave pública. Estes padrões
são denominados PKCS (Public Key Cryptography Standards). Atualmente, existem 15
padrões já definidos, assim como descrito na tabela 7.1.
Tabela 7.1 – Tabela de padrões de criptografia de chaves pública definidos pela RSA.
Padrão
PKCS#1
Definição
Define padrões para criptografia de chaves pública usando o algoritmo
RSA.
PKCS#2
Incluído dentro do PKCS #1
PKCS#3
Especifica um padrão para o estabelecimento de uma conexão segura
usando o algoritmo Diffie-Hellman
Incluído dentro do PKCS #1
PKCS#4
PKCS#5
Define recomendações para a implementação de algoritmos baseados em
senhas
PKCS#6
Estabelece um padrão de sintaxe para certificados estendidos
PKCS#7
Descreve a sintaxe para dados assinados ou cifrados
PKCS#8
Estabelece um padrão para informações de chaves privadas
44
PKCS#9
PKCS#10
Define tipos de atributos a serem usados nos padrões PKCS #6, PKCS #7,
PKCS #8 e PKCS #10
Descreve a sintaxe para requisições de assinaturas de certificados de chaves
públicas
PKCS#11 Define uma API para dispositivos de armazenamento de informações de
criptografia e funções de performance de criptografia
PKCS#12 Descreve um formato para o armazenamento e transporte de chaves
privadas, certificados, etc..
PKCS#13 Especifica padrões para criptografia usando curvas elípticas.
PKCS#14 Define padrão para geração de números pseudo-aleatórios
PKCS#15 Estabelece um padrão para assegurar que usuários poderão usar criptografia
para autenticar-se em aplicações
7.3 – Autoridade Certificadora
Uma AC (Autoridade Certificadora) tem como responsabilidade emitir certificados
digitais. Estes certificados podem ser emitidos para diversos tipos de entidades, tais como:
pessoa, computador, departamento de uma instituição, empresa etc [11].
Devido a autoridade certificadora ser uma entidade reconhecida para todos como
confiável, a possibilita gerar certificados digitais que possuam a assinatura eletrônica da
AC. Cada certificado também conterá um nome único ND além de uma série de
informações pertinentes a ele, dentre estas a chave pública, que neste caso será utilizada
para comprovar sua identidade.
Um certificado digital, assim que criado, recebe uma data que marca o período de
validade do mesmo. Esta data pode variar de um a três anos e caso exceda este período, o
certificado perde a validade, sendo enviado para uma Lista de Certificados Revogados
CRL (Certificate Revocation List). Todos os certificados contidos nesta lista serão negados
por serem considerados inválidos.
Sendo as autoridades certificadoras entidades que determinam as políticas e os
procedimentos que orientam o uso de certificados por todo o sistema, cabe a esta, diversas
atribuições importantes, que são:

Manter a mais rígida segurança possível para a chave privada a AC;

Assegurar que o seu próprio certificado seja amplamente distribuído;

Emissão de certificados;

Revogação de certificados;
45

Emissão da lista de certificados revogados;

Publicação da lista de certificados revogados;

Disponibilizar a situação do certificado quando requerida;

Gerência de chaves criptográficas;

Publicação de suas regras operacionais;

Fiscalização do cumprimento dessa política pelos usuários.
7.4 – Autoridade Registradora
Uma AR (Autoridade Registradora) pode ser considerada como um componente
estendido de uma ICP. A medida que aumenta o número de entidades finais dentro de uma
dada comunidade da ICP, também aumenta a carga de trabalho de um AC. Desta forma
uma AR pode servir como uma entidade intermediária entra a AC e seus usuários finais,
ajudando a AC em suas funções rotineiras para processamento de certificados [14].
Uma AR fornece as seguintes funcionalidades:

Aceitar e verificar as informações de registro sobre novos registradores;

Gerar chaves em favor de usuários finais;

Aceitar e autorizar solicitações para um backup e uma recuperação de chave;

Aceitar e autorizar solicitações para revogação de certificado;

Distribuir ou recuperar dispositivos de hardware como tokens, quando necessário.
7.5 – Repositório de Certificados
Depois que um certificado for gerado, ele precisa ser armazenado para uma
utilização posterior. As Autoridades Certificadoras freqüentemente utilizam um diretório
de certificado ou uma localização central de armazenamento. Tais repositórios, além de
armazenarem os certificados dos usuários finais, são utilizados para armazenar também
certificado das AC e listas de certificados revogados.
O diretório público não necessita estabelecer uma conexão segura com o usuário no
momento da busca e download de um certificado. O certificado é conferido através de sua
assinatura digital. O diretório público deve somente possuir os dados atualizados, além de
assegurar ao usuário mecanismos para manter se nível de disponibilidade muito alto [15].
46
Sendo componente importante de uma ICP, um diretório de certificados fornece um
único local público para a administração e distribuição de certificados.
Os diretórios, em sua grande maioria são baseados nos serviços de diretório X.500
e LDAP.
7.5.1. – Serviço de Diretórios X.500
O padrão X.500 foi criado pela ISO em 1988, desde então tem sofrido uma série de
revisões que incluíram suporte para controle de acesso e programa de gerenciamento. O
X.500 permite a usuários e aplicações acessar diretórios sem a consciência de que os
servidores de acesso estão distribuídos [15].
X.500 é um protocolo desenvolvido para trabalhar com o modelo OSI, desta forma
este não tornou-se padrão da Internet, pois o modelo OSI não é compatível com a Internet.
7.5.2. – LDAP
Buscando solucionar o problema do serviço de diretórios X.500, onde o mesmo não
pode ser compatível com a Internet, um grupo da Universidade de Michigan propôs uma
estratégia mais leve, esta passou a ser chamada de LDAP (Lightweight Directory Access
Protocol).
O LDAP foi desenvolvido para ser um protocolo leve e flexível e, diferentemente
do X.500 que trabalha somente com o protocolo OSI, ele trabalha com o protocolo TCP/IP.
Desta forma, ele rapidamente tornou-se um padrão de acesso de diretórios na Internet [15].
7.2 – Revogação de Certificados
A ICP é responsável não só pelo processo de criação do certificado e sim por todo o
ciclo de vida deste certificado, ou seja, deste a requisição do certificado até sua revogação.
Quando um certificado é gerado, ele recebe um período de validade. O período é
definido pela autoridade certificadora que o emitiu. No entanto, algumas circunstâncias
podem levar o certificado a perder sua validade, mesmo que ele ainda não tenha alcançado
seu período de validade. Dentre as possíveis razões estão mudança de atributos do
47
certificado, ou seja, troca de endereço ou email do proprietário do certificado, ou até
mesmo alguma perda da chave privada, levando a perda de confiança no certificado.
O método mais comum para revogar um certificado é através do uso de uma CRL
(Certificate Revocation List). Em sua forma básica, uma CRL é uma estrutura de dados
assinada contendo uma lista de data/hora dos certificados revogados. O assinante de uma
CRL é, em geral, a mesma entidade que originalmente a emitiu, neste caso a AC [14].
Um CRL, logo após ser criado, pode ser distribuído livremente ou armazenado em
um diretório público assim como os certificados digitais.
7.6.1. – Lista de Certificados Revogados
A LCR é uma estrutura que contém a lista de certificados revogados. Ela descreve
em detalhes os vários campos que compõe uma CRL na figura 7.2.
Figura 7.2 – Estrutura Padrão de uma CRL.

Versão: Este campo indica a versão da CRL.
48

Identificador do Algoritmo de Assinatura: Este campo contém o identificador do
algoritmo utilizado para assinar a CRL.

Nome do Emissor: Esse campo identifica o ND, com o formato X.500, da entidade
que emitiu a CRL.

Esta atualização(data/hora): Esse campo contém um valor de data/hora indicando
quando a CRL foi emitida.

Esta atualização(data/hora): Esse campo opcional contem um valor de data/hora
indicando qual a próxima CRL será emitida.

Número serial do certificado de usuário / Data de revogação: Esse campo contém a
lista dos certificados que foram revogados ou suspensos.

Extensões da entrada de CRL: Esse campo é discutido na seção 7.6.2.

Extensões de CRL: Esse campo é discutido na seção 7.6.3.

Assinatura: Esse campo contém a assinatura da AC.
7.6.2. – Extensões da Entrada de CRL
O padrão X.509 define as quatro extensões seguintes para utilização com uma
CRL:

Código de Razão: Essa extensão especifica a razão da revogação de certificado.

Código de Instrução de Porte: Essa extensão não-crítica suporta a suspensão
temporária de um certificado.

Emissores de Certificados: Essa extensão identifica o nome do emissor de
certificado associado a uma CRL indireta, que neste caso é uma alternativa para
melhorar a distribuição de CRLs.

Data de Invalidade: Essa extensão não-crítica contém um valor de data/hora
mostrado quando ocorreu um comprometimento suspeito ou conhecido pela chave
privada.
7.6.3. – Extensões de CRL
As seguintes extensões de CRL foram definidas baseadas por CRL:
49

Identificador de Chave Autoridade: Essa extensão pode ser usada para diferenciar
entre múltiplas chaves de assinatura de CRL mantidas por essa AC.

Nome Alternativo do Emissor: Essa extensão associa uma ou mais formas
alternativas de nome com o emissor de CRL.

Número de CRL: Essa extensão não-crítica fornece um meio para facilmente
reconhecer se uma dada CRL foi substituída.

Indicador Delta de CRL: Essa extensão crítica identifica a CRL como uma CRL
delta, ou seja, lista apenas as alterações incrementais que ocorreram a partir da CRL
precedente.

Emitindo um ponto de Distribuição: Essa extensão crítica identifica o nome do
ponto de distribuição da CRL para uma dada CRL.
50
CAPÍTULO VIII
MÉTODOS E FERRAMENTAS UTILIZADAS
Este capítulo apresenta os métodos e ferramentas utilizadas para o processo de
implementação das aplicações contidas neste trabalho de conclusão de curso.
Inicialmente, descreve-se a plataforma de programação utilizada assim com a
linguagem de programação.
8.1 – Hardware, Plataforma e Considerações de Implementação
As implementações que serão apresentadas em anexo foram desenvolvidas
utilizando um computador com um processador Intel Pentium M 1,73 GHz, 1 GB de
memória RAM, executando o sistema operacional Windows XP Professional Versão 2002
Service Pack 2 instalado. A linguagem utilizada para as implementações foi a Linguagem
Java®, devido o fato de esta oferecer um maior suporte em aplicações criptográficas. Pelo
fato do sistema desenvolvido ser voltado para WEB, foi utilizada a plataforma JEE (Java
Enterprise Edition), sendo que a Máquina Virtual Java utilizado foi a JDK 6.0.5. Para o
desenvolvimento foi utilizado o ambiente Eclipse 3.3.1.1.
A aplicação foi desenvolvida para serem utilizadas em um ambiente WEB, podendo
assim ser utilizada por qualquer browser.
8.2 – APIs JAVA
O Java possui uma arquitetura bem definida para implementação de funções
relativas à segurança e criptografia. Na arquitetura de segurança modelada para o Java
existem três APIs.
 A JCA (Java Cryptography Architecture) é responsável por definir uma arquitetura
baseada em CSP (Cryptographic Service Providers). Nesta arquitetura, o
desenvolvedor que consome os serviços criptográficos de um CSP não o utiliza
diretamente. O desenvolvedor deve utilizar a API definida pela JCA e caberá a API
chamar o CSP responsável pela implementação real do serviço requisitado.
 A JCE (Java Cryptography Extension) segue o conceito de CSPs definidos pela
JCA e é responsável por funções específicas de criptografia (simétrica e
51
assimétrica), geração e troca de chaves e algoritmos para MAC (Message
Authentication Code).
 A JSSE (Java Secure Socket Extension) é responsável por implementar conexões
seguras em SSL e TLS. Com ele é possível desenvolver aplicações clientes que se
comunicam com um servidor de forma segura.
8.3 – Bouncy Castle Provider
O Bouncy Castle é um CSP muito famoso no mercado por ser OpenSource
(código aberto). Escrito por um grupo de desenvolvedores australianos, o Bouncy Castle
CSP é mais um CSP para JCA e JCE. Dentre suas principais características pode-se citar:

Implementa uma série de algoritmos de geração de Hash, Assinatura Digital e
criptografia simétrica e assimétrica;

Permite a geração e leitura de pacotes PKCS7;

Permite a geração de conteúdo S/MINE para envido de emails assinados e
criptografados;

Compatível com J2SE, J2EE e J2ME;

Está sendo portado para o mundo .NET, implementado em C#.

Entre outros...
8.4 – HTTP / HTTPS
O HTTP (HyperText Transfer Protocol) é um protocolo de comunicação que está
presente na camada de aplicação. Ele é utilizado para a transferência de dados por intranets
e pela World Wide Web.
O uso mais típico do HTTP é entre um navegação WEB e um servidor WEB. Para
garantir confiabilidade, o HTTP utiliza TCP. Apesar disso ele é um protocolo sem estados,
ou seja, cada transação é tratada independentemente [9].
Desta maneira, uma implementação do protocolo HTTP cria uma nova conexão
TCP (Transmission Control Protocol) entre o cliente e o servidor e terminara a conexão
assim que terminada a transação.
O HTTPS (HyperText Trasnfer Protocol Secure), é uma implementação do
protocolo HTTP sobre uma camada SSL ou do TLS, essa camada adicional permite que os
52
dados sejam transmitidos através de uma conexão criptografada e que se verifique a
autenticidade do servidor e do cliente através de certificados digitais. Normalmente é
utilizada a porta TCP 443 para o protocolo HTTPS.
8.5 – Tomcat
O Tomcat é software livre e de código aberto, surgido dentro do conceituado
projeto Apache Jakarta e que teve apoio e endosso oficial da Sun Microsystems como
implementação de referência para as tecnologias Java Servlet e JavaServer Pages (JSP).
Atualmente, o Tomcat tem seu próprio projeto de desenvolvimento independente, dentro
da Apache Software Foundation.
Tecnicamente, o Tomcat é um Contêiner Web, parte da plataforma corporativa
JEE que abrange as tecnologias Servlet e JSP (Java Server Pages), incluindo tecnologias
de apoio relacionadas como Realms e segurança, JNDI Resources e JDBC DataSources. O
Tomcat tem a capacidade de atuar também como servidor web/HTTP autônomo, ou pode
funcionar integrado a um servidor web dedicado, como Apache httpd ou Microsoft IIS, ou
ainda como parte integrante de um servidor de aplicações mais amplo, como JBoss AS,
provendo os recursos de Java Servlet e JSP.
8.6 – Eclipse
O Eclipse é uma IDE (Integrated Development Environment) de código aberto
para a construção de sistemas. No princípio, ele era substituto patenteado do Visual Age
for Java, da IBM, mas teve seu código-fonte aberto (open source) em novembro de 2001.
Atualmente, o Eclipse é controlado por uma organização sem fins lucrativos independente,
chamado Eclipse Foundation [16].
Atualmente o Eclipse é uma das IDEs Java mais utilizada no mundo. Possui
como característica marcante a forte orientação ao desenvolvimento baseado em plugins.
O Eclipse oferece uma estrutura flexível, pois utiliza linguagem Java e vem com
exemplos de construção. Isso torna mais fácil a criação, integração e utilização das
ferramentas, economizando tempo e dinheiro.
53
8.7 – PostgresSQL
Como base de dados para o armazenamento dos certificados digitais cadastrados no
sistema, foi utilizado o banco de dados PostgresSQL.
Inicialmente desenvolvido na Universidade de Berkeley, Califórnia, a partir de
1996, depois se firmou como um projeto open source coordenado pelo PostgreSQL Global
Development Group. Embora as atividades do grupo sejam patrocinadas por diversas
organizações de todo o mundo.
A escolha para este banco de dados para o sistema se deu pela facilidade na
obtenção do mesmo, visto que este é livremente distribuído.
54
CAPÍTULO IX
IMPLEMENTAÇÃO E ANÁLISES
Este capítulo é destinado à apresentação e análise da implementação do sistema de
autoridade certificado.
9.1 – Principais Requisitos do Sistema
O sistema desenvolvido obedece aos seguintes requisitos funcionais e não funcionais:
9.1.1. – Requisitos Funcionais
 Requisito Funcional 1: O sistema deve gerar um par de chaves, sendo que, uma deve ser
pública e a outra deve ser privada.
 Requisito Funcional 2: O sistema deve emitir certificados digitais auto-assinados
obedecendo ao padrão X.509.
 Requisito Funcional 3: O sistema deve permitir ao usuário a inclusão dos seus dados
pessoais para a obtenção de um certificado digital.
 Requisito Funcional 4: O sistema deve permitir ao usuário buscar por algum certificado
já cadastrado na entidade certificadora.
 Requisito Funcional 5: O sistema deve emitir uma listagem dos certificados
cadastrados.
 Requisito Funcional 6: O sistema deve disponibilizar para download o certificado da
Entidade Certificadora Raiz, assim como também, os certificados dos usuários.
9.1.2. – Requisitos Não Funcionais
Requisito não Funcional 1: O sistema desenvolvido foi implementado utilizando a
linguagem de programação Java 6 Enterprise Edition, utilizando-se para isto a IDE Eclipse
3.3.1.1.
Requisito não Funcional 2: O sistema deve utilizar um sistema gerenciador de banco de
dados Postgres.
55
Requisito não Funcional 3: O sistema deve ser desenvolvido para ser utilizado em uma
interface WEB, sendo assim, deverá ser disponibilizado na Internet e visualizado pelos
usuários por meio de um navegador Web.
Requisito não Funcional 4: O sistema deve possuir alta usabilidade, constituindo facilidade
para que os usuários aprendam a operá-lo, tempo e esforço mínimos para que os usuários
atinjam um nível aceitável de desempenho e mínimo esforço físico e cognitivo dos
usuários durante o processo de interação.
9.2 – Especificação
Esta seção apresenta o diagrama de classes, o diagrama de casos de uso e o
diagrama de seqüência do sistema desenvolvido. Para a criação destes diagramas foi
utilizada a ferramenta Jude Community 5.0b1.
9.2.1. – Diagrama de Classes
O diagrama de classes exibido na figura 9.1 mostra as classes responsáveis pela
emissão do certificado digital para a raiz e o certificado digital para os usuários.
Figura 9.1 – Estrutura Padrão de uma CRL.
56
O diagrama da figura 9.1 representa o relacionamento das classes que compõe o
sistema da autoridade certificadora, sendo suas descrições apresentadas a seguir:

Classe Mfunc
A Classe Mfunc foi estruturada com dois métodos importantes para este sistema. O
primeiro método é o criarParChaves(), este método é responsável por criar o par de chaves
utilizando o algoritmo RSA para serem utilizados na criação do certificado. Neste método,
é instanciado um objeto do tipo SecureRandom(), que é usado para gerar um número
aleatório, este por sua vez é informado ao RSA e assim gerado o par de chaves.
O segundo método é o gravaCertificado(X509Certificate certificate, File file), este
método tem por finalidade gravar o certificado gerado em um diretório especificado pelo
sistema.

Classe CAcertificado e Classe Raiz
As classes CAcertificado e Raiz são duas estruturas base para a geração de
certificados digitais. É através destas classes que o certificado é gerado obedecendo a
estrutura do X.509.
Nesta classe existem dois métodos, o primeiro montarCertificado(Certificado
cert) tem por finalidade ajustar os dados para a criação do certificado. Logo após montado
os dados, este método chama o método criarCertificado(cert).
Desta forma, o método criarCertificado(cert) tem por finalidade emitir os
certificados. Ele recebe o objeto montado no método montarCertificado(Certificado cert) e
através das informações deste objeto gera o certificado.
No
método
criarCertificado(cert),
um
objeto
é
criado
do
tipo
X509V3CertificateGenerator(), neste objeto criado são informados os dados que compõe o
certificado digital.
57

Classe EditarCertificado
Esta Classe é um servlet que tem por finalidade receber as requisições das
páginas JSP, tratá-las e devolver o resultado. Um servlet é considerado uma extensão de
servidores. Esta tecnologia disponibiliza ao programador da linguagem Java uma interface
para o servidor Web através de uma API (Application Programming Interface).

Classe Certificado
A classe Certificado é uma estrutura base para um modelo de certificado, nela
contem alguns atributos que fazem parte de um certificado digital.
Os atributos declarados nesta classe assim como mostrado no diagrama de classe
na figura 9.1 são todos do tipo private, sendo assim a existência dos métodos gets e sets
para cada atributo, sendo que os métodos gets para buscar algum dado contido nos
atributos e os métodos sets utilizado para escrever algum dado nos atributos desta classe.

Classe Conexao
A classe Conexão contém um algoritmo para ser utilizado para conexão com o
banco de dados, neste caso o Postgres.
Esta classe apresenta um atributo do tipo Connection, esta é responsável por criar
uma comunicação com o banco de dados.
Nesta classe são apresentados três métodos importantes, são eles: conectar(),
getConnection() e fechar().
Os métodos que fazem parte desta classe são todos static, sendo assim, qualquer
método que queria estabelecer uma conexão com o banco de dados, pode fazer isso de
forma direta.

Classe CertificadoDao
A classe CertificadoDao é uma estrutura que contem métodos que serão
responsáveis em organizar os dados a serem manipulados pelo banco de dados.
58
Nesta classe existem métodos como o inserirCertificado(Certificado cert), este
método recebe como parâmetro um objeto do tipo Certificado como parâmetro e através
deste monta a estrutura SQL (Structured Query Language) para ser adicionado no banco
de dados
9.2.2. – Diagrama de Casos de Uso
O diagrama de Casos de Uso exibido na figura 9.2 mostra a interação do usuário
com o sistema, ou seja, as funcionalidades do sistema de autoridade certificadora.
Figura 9.2 – Diagrama de Casos de Uso do Sistema Autoridade Certificadora

Caso de Uso 1: Cadastrar Certificado
Ator Principal:
Usuário
Sumário:
59
Este caso de uso é utilizado para cadastrar informações referente ao certificado
digital. O principal objetivo deste caso de uso é informar ao sistema dados pessoais do
usuário para a criação do certificado.
Pré-Condições:
Não apresenta nenhuma pré- condição.
Fluxo Principal:
1. Logo após a abertura do sistema, o usuário informa que deseja cadastrar um novo
certificado acessando o menu certificação;
2. O sistema apresenta um formulário para que o usuário possa entrar com seus dados
pessoais;
3. Concluído o preenchimento do formulário o usuário envia ao sistema;
4. O sistema coleta as informações e manda para uma classe especifica que gera o
certificado;
5. O sistema gera o certificado e as chaves, pública e privada, e as envia ao cliente
para que este as armazene com segurança.
Fluxo Alternativo:
Não se Aplica
Pós-Condições:
Efetuar o download dos arquivos de certificado digital e da chave privada do
usuário.

Caso de Uso 2: Gerar Certificado
Ator Principal:
Usuário
Sumário:
Este caso de uso é utilizado para gerar o par de chaves assim como também é
responsável pela elaboração do certificado digital.
60
Pré-Condições:
É necessário que o usuário informe seus dados pessoais para que o sistema possa
gerar o seu certificado.
Fluxo Principal:
1. Informado os dados pessoais, o sistema os envia para o método responsável em
gera o certificado;
2. O sistema gera um par de chaves;
3. O sistema utilizando o par de chaves e os dados do usuário gera um certificado
seguindo o padrão X.509;
4. O sistema gera o arquivo do certificado e o armazena em um diretório público;
5.
O sistema armazena os dados em uma base de dados.
Fluxo Alternativo:
Não se Aplica
Pós-Condições:
Não se Aplica

Caso de Uso 3: Buscar Certificado
Ator Principal:
Usuário
Sumário:
Este caso de uso é utilizado para que o usuário possa buscar os certificados
cadastrados na Entidade Certificadora.
Pré-Condições:
Não apresenta nenhuma pré- condição.
Fluxo Principal:
61
1. Logo após a abertura do sistema, o usuário informa que deseja buscar um
certificado cadastrado no sistema acessando o menu validação;
2. O sistema apresenta um formulário para que o usuário possa entrar com o nome do
usuário e assim o sistema realizar a busca do certificado;
3. Concluído o preenchimento do formulário o usuário envia ao sistema;
4. O sistema buscar o certificado cadastrado;
5. O sistema mostra ao usuário através de uma lista o certificado cadastrado.
Fluxo Alternativo:
Não se Aplica
Pós-Condições:
Apresenta uma listagem de certificados pelo qual o usuário poderá fazer o
download do arquivo de certificado digital que se fizer necessário.

Caso de Uso 4: Buscar Certificado Raiz
Ator Principal:
Usuário
Sumário:
Este caso de uso é utilizado para que o usuário possa buscar o certificado Raiz da
Autoridade Certificadora. Este certificado é disponibilizado para que o usuário verifique a
validade dos certificados emitidos por ela, dando assim validade a esta autoridade
certificadora.
Pré-Condições:
Não apresenta nenhuma pré- condição.
Fluxo Principal:
1. Logo após a abertura do sistema, o usuário informa que deseja buscar o certificado
Raiz da autoridade certificadora.
62
2. É apresentado para o usuário logo no inicio do sistema um link chamado certificado
Raiz.
3. O usuário clica neste link e começa o processo de download do certificado.
Fluxo Alternativo:
Não se Aplica
Pós-Condições:
Não se Aplica
9.2.3. – Diagrama de Seqüência
O diagrama de Seqüência exibido na figura 9.3 mostra a interação do usuário
com o sistema, ou seja, neste diagrama é apresentado os passos de como o usuário
interagem com as funcionalidades do sistema.
Figura 9.3 – Diagrama de Seqüência do Sistema Autoridade Certificadora
9.3 – Implementação
Na figura 9.4, apresenta-se a implementação da Autoridade Certificadora, onde esta
interface é a página inicial do sistema. Nesta página apresenta-se um “menu” com as
63
funcionalidades do sistema. Na parte inferior desta página de apresentação, está o link para
que seja possível baixar o certificado raiz da autoridade certificadora. Pressionando sobre o
link “Certificado Raiz” disponibilizará para o usuário a opção para que este possa fazer o
download do arquivo de certificado raiz da autoridade certificadora.
Pressionando o link presente no menu, que tem como nome “Certificação”, abrirá
uma nova pagina assim como na figura 9.5. Esta apresenta-se a interface de cadastro de um
novo certificado. Nesta figura, quando o usuário opta por gerar um novo certificado é
apresentado para ele este formulário. É através destes dados que será montado o certificado
do usuário.
Figura 9.4 – Interface da Implementação do sistema de autoridade certificadora
64
Figura 9.5 – Interface do Sistema para cadastrar um novo certificado
Na figura 9.6, apresenta-se a interface para efetuar a busca por um certificado já
cadastro na entidade certificadora. Quando o usuário clicar sobre o “menu” “Validação”
será abre-se a janela mostrada na figura 9.6. Nesta página, quando acessada pela primeira
vez, será mostrado uma listagem com todos os certificados cadastrados. Na mesma página,
é apresentado um campo de busca onde o usuário poderá digitar um nome e efetuar a busca
somente do certificado que desejar.
65
Figura 9.6 – Interface do Sistema para Buscar Certificados Cadastrados
Com o download do certificado, emitido pela autoridade certificadora, um arquivo
será salvo, este certificado pode ser visto nas figuras 9.7 e 9.8. Este certificado poderá ser
instalado no repositório de certificados digitais tanto do sistema operacional como também
do browser para possíveis verificações.
Na figura 9.8 são apresentados os campos que fazem parte do certificado digital,
como por exemplo, a versão, seu número de série, o algoritmo de assinatura, etc.
66
Figura 9.7 – Certificado Raiz da Autoridade Certificadora
Figura 9.8 – Certificado Raiz da Autoridade Certificadora Detalhado
67
A entidade certificadora implementada neste trabalho, mostrou-se eficiente no que
se refere as funcionalidades descritas neste capítulo. Algumas funcionalidades, como é o
caso da função para revogação de certificados digitais, não puderam ser concluídas devido
ao curto tempo proposto, porém esta fica como principal tema para trabalhos futuros.
Neste capítulo apresentou-se a implementação da entidade certificadora e a análise
da mesma. O décimo capítulo será apresentado as considerações finais deste Trabalho de
Conclusão de Curso e algumas sugestões para trabalhos futuros.
68
CAPÍTULO X
CONSIDERAÇÕES FINAIS E SUGESTÕES PARA TRABALHOS FUTUROS
Este capítulo é destinado à apresentação das considerações finais deste Trabalho de
Conclusão de Curso e algumas sugestões para trabalhos futuros.
10.1 – Considerações Finais
Este Trabalho de Conclusão de Curso teve como objetivo estudar e descrever os
algoritmos criptográficos envolvendo criptografia simétrica, assimétrica e funções hash,
assim como estudar e implementar uma entidade certificadora em um ambiente Web.
Apresentou-se o algoritmo AES, que é o sistema padrão de criptografia de chave
secreta, o algoritmo RSA que é a mais bem sucedida implementação de sistemas de chave
pública e o algoritmo de hash criptográfico SHA-1, utilizado em uma grande variedade de
aplicações e protocolos de segurança.
Em seguida, apresentou-se os conceitos de uma Infra-Estrutura de Chaves Pública,
mostrando como ela é estruturada. Pode-se destacar nesta parte do projeto os certificados
digitais, sendo tomado como foco o padrão X.509, utilizado pela ICP-Brasil em sua versão
3.
Com relação aos estudos realizados e a implementação da autoridade certificadora
destaca-se:

A criação de um sistema Web, utilizando o contêiner Tomcat, sendo que este foi
configurado para ser utilizado o protocolo HTTPS para a transmissão da
informação;

A implementação de um sistema capaz de emitir certificados seguindo o padrão
X.509 para certificados digitais;

Através do sistema é possível verificar os certificados cadastrados, sendo que é
dada a possibilidade de o usuário do sistema buscar e baixar um certificado já
cadastrado.
Considerando os estudos e a implementação realizada, verifica-se que os objetivos
deste trabalho foram alcançados. Portanto, observa-se que:

a matemática está cada vez mais presente na criptografia moderna;
69

analisando as características e os fatores de segurança do algoritmo RSA, observase que a aritmética de precisão múltipla é uma necessidade, pois este trabalha com
números cada vez maiores;

a linguagem Java possui uma arquitetura bem definida para a implementação de
funções relativas à segurança e criptografia, sendo que tais funções são
satisfatórias, possibilitando o desenvolvimento de aplicações que utilizam
operandos grandes, facilitando a implementação do algoritmo RSA;

a linguagem Java possui uma arquitetura baseada em CSP, ou seja, em provedores
de serviço criptográfico, sendo destacado o Bouncy Castle. Este mostrou-se
eficiente para a criação de certificados digitais.
Conclui-se que os estudos, as propostas e implementações realizadas revelaram
importantes ganhos de aprendizagem em nível teórico e prático, além de embasamento
para análise crítica e reflexiva dos assuntos abordados.
10.2 – Sugestões para Trabalhos Futuros
Como sugestão para trabalhos futuros, baseado nos resultados obtidos neste
Trabalho de Conclusão de Curso, cita-se:

Conclusão da implementação da entidade certificadora, em destaque a parte
a qual se refere a revogação de certificados digitais;

Estudo de outras técnicas para o aprimoramento da implementação da
entidade certificadora, utilizando agora para sua implementação o LDAP
como repositório público de certificados;

Estudo comparativo com outras entidades certificadoras já existentes.
70
REFERÊNCIAS BIBLIOGRÁFICAS
[1] TRINTA, FERNANDO ANTONIO MOTA; MACÊDO, RODRIGO CAVALCANTI.
Um Estudo sobre Criptografia e Assinatura Digital. Pernambuco: Universidade
Federal de Pernambuco (UFPE), 1998.
[2] FRANCISCO, JOSÉ LUIZ MARTINS. Certificação Digital do Correio Eletrônico
na Rede Municipal de Informática. Belo Horizonte: Prodabel / PUC (IRT), 2000.
[3] COUTINHO, S. C. Números Inteiros e Criptografia RSA. Rio de Janeiro:
IMPA/SBM, 2000.
[4] SILVEIRA, Aline Sousa. Criptografia de chave publica – O papel da aritmética em
precisão múltipla. ITA.
[5] PAIXÃO, César Alison Monteiro. Implementação e Análise Comparativa de
Variações do Criptossistema RSA. USP, 2003.
[6] MIERS, Charles Christian; CUSTÓDIO, Ricardo Felipe. Modelo Simplificado do
AES. Universidade Federal de Santa Catarina, 2002.
[7] BARBOSA, Luis Alberto de Morais. RSA Criptografia Assimétrica e Assinatura
Digital. Unicamp, 2003.
[8] MORENO, Edward David. PEREIRA, Fábio Dacêncio. CHIARAMONTE, Rodolfo
Barro. Criptografia em Software e Hardware. São Paulo: Novatec Editora Ltda,
2005.
[9] STALLINGS, Willian. Redes e Sistemas de Comunicação de Dados: Teoria e
Aplicações Corporativas. Rio de Janeiro: Elsevier, 2005.
[10] NIST. FIPS 197. Federal Information Processing Standards Publication 197.
Announcing the ADVANCED ENCRYPTION STANDARD, 2001. Disponível em:
71
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf – 26/11/2007.
[11] SILVA, LINO SARLO DA. Public key Infrastructure PKI. São Paulo: Novatec
Editora Ltda, 2004.
[12] MARTINS, ALESSANDRO. Autoridade Certificadora para Acesso Seguro. Rio
de Janeiro: Laboratório RAVEL/COPPE/UFRJ, 2001.
[13] COULORIS, GEORGE. Sistemas Distribuídos: Conceito e Projeto. Porto Alegre:
Bookman, 2007, 4.ed.
[14] BURNETT, STEVE. Criptografia e Segurança: O Guia Oficial RSA. Rio de
Janeiro: Campus, 2002.
[15] IGNACZAK, LUCIANO. Um Novo Modelo de Infra-Estrutura de Chaves
Públicas para uso no Brasil Utilizando Aplicações com Código Fonte Aberto.
Florianopolis: Universidade Federal de Santa Catarina, 2002.
[16] BURNETTE, ED. Eclipse IDE: Guia de bolso. Porto Alegre: Bookman, 2006.
[17] OLIVEIRA, RENAN RODRIGUES: Estudo e Implementação de Protocolos
Criptográficos Oferecendo Serviços de Privacidade, Integração, Autenticação e
Não Repúdio. Goiânia: Universidade Católica de Goiás, 2007.
[18]
Site
da
Infra-Estrutura
de
Chave
Pública
Brasileira.
Disponível
em:
https://www.icpbrasil.gov.br/icp-pra-voce/sinList?synmap=noticias. Acessado em 04
de maio de 2008.
Download

TCC - Audir da Costa Oliveira Filho