Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz,...

62
UNIVERSIDADE FEDERAL DE GOI ´ AS – UFG CAMPUS CATAL ˜ AO – CAC DEPARTAMENTO DE CI ˆ ENCIA DA COMPUTAC ¸ ˜ AO – DCC Bacharelado em Ciˆ encia da Computa¸c˜ ao Projeto Final de Curso Aplica¸ ao do Algoritmo Diffie-Hellman no Compartilhamento de Volumes Criptografados do TrueCrypt Autor: Rayner de Melo Pires Orientador: Vaston Gon¸calves da Costa Catal˜ ao – 2010

Transcript of Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz,...

Page 1: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

UNIVERSIDADE FEDERAL DE GOIAS – UFG

CAMPUS CATALAO – CAC

DEPARTAMENTO DE CIENCIA DA COMPUTACAO – DCC

Bacharelado em Ciencia da Computacao

Projeto Final de Curso

Aplicacao do Algoritmo Diffie-Hellman no

Compartilhamento de Volumes Criptografados do

TrueCrypt

Autor: Rayner de Melo Pires

Orientador: Vaston Goncalves da Costa

Catalao – 2010

Page 2: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Rayner de Melo Pires

Aplicacao do Algoritmo Diffie-Hellman no Compartilhamento de Volumes

Criptografados do TrueCrypt

Monografia apresentada ao Curso de

Bacharelado em Ciencia da Computacao da

Universidade Federal de Goias – Campus Catalao

como requisito parcial para obtencao do tıtulo de

Bacharel em Ciencia da Computacao.

Area de Concentracao: Seguranca da informacao

Orientador: Vaston Goncalves da Costa

Catalao – 2010

Page 3: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Pires, Rayner M.

Aplicacao do Algoritmo Diffie-Hellman no Compartilhamento de Volumes

Criptografados do TrueCrypt / Rayner de Melo Pires – Catalao – 2010

Numero de paginas: 48

Projeto Final de Curso (Bacharelado) – Universidade Federal de Goias, Campus

Catalao, Curso de Bacharelado em Ciencia da Computacao, 2010.

Palavras-Chave: 1. Criptografia de Dados. 2. Acordo de Chaves. 3. Diffie-Hellman

Page 4: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Rayner de Melo Pires

Aplicacao do Algoritmo Diffie-Hellman no Compartilhamento de Volumes

Criptografados do TrueCrypt

Monografia apresentada e aprovada em de

pela Banca Examinadora constituıda pelos professores:

Vaston Goncalves da Costa – Presidente da Banca

Roberto Mendes Finzi Neto

Marcio Antonio Duarte

Page 5: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Para meus pais Fabio e Jussara,

e meus irmaos Plınio e Fabio.

Um filho nao poderia pedir

por uma famılia melhor.

Para minha namorada Taynara.

Obrigado pelo apoio e

pela compreensao enquanto

trabalhava neste projeto.

Page 6: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

AGRADECIMENTOS

Agradeco primeiramente aos meus pais Fabio e Jussara por terem me dado a base

familiar que tenho hoje. Quero ser como voces quando eu crescer!

Aos meus irmaos Plınio e Fabio por me darem exemplo de como ser hoje melhor do

que fui ontem.

A minha namorada Taynara por tanto me apoiar, por me dar tantas provas de amor

e por me transmitir tanta paz, mesmo nos momentos mais difıceis.

Agradeco a todos que me acompanharam nessa jornada da graduacao, aos meus colegas

de sala de aula e aos bons professores que colaboraram todo esse tempo. Voces todos

fizeram parte de uma fase muito importante na minha vida, e foram fundamentais para

o meu sucesso alcancado hoje.

Agradeco tambem a minha amiga Gabriela que comigo caminhou ate o final, e ao meu

amigo Salviano que me escutou, me apoiou e me divertiu tanto em todos esses cinco anos.

Voces dois foram “compadres”de verdade!

E agradeco tambem ao nosso pai la do ceu por ter me ajudado a enfrentar os meus me-

dos, por ter me carregado ate aqui e ter me dado nesse ultimo semestre motivos para tanta

felicidade.

A todos voces o meu sincero agradecimento. Voces estarao sempre em minhas lem-

brancas!

Page 7: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Por ter acreditado que posso!

Page 8: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

RESUMO

Pires, R. M. Aplicacao do Algoritmo Diffie-Hellman no Compartilhamento

de Volumes Criptografados do TrueCrypt. Curso de Ciencia da Computacao, Cam-

pus Catalao, UFG, Catalao, Brasil, 2010, 48p.

O transporte de informacoes necessita, muitas vezes, de ambientes que garantam a sua

seguranca contra acesso nao autorizado. O TrueCrypt e um programa que implementa

a criptografia simetrica para cifrar informacoes. Contudo torna-se difıcil compartilhar a

informacao cifrada sem divulgar a chave que a cifra. Este problema e conhecido como o

problema de troca de chaves. Neste trabalho e apresentada a tecnica do Acordo de Chaves

de Diffie-Hellman, que pode ser utilizada para estabelecer um acordo entre dois parceiros

e solucionar o problema da troca de chaves. Tambem foi desenvolvido um prototipo que

implementa tal tecnica e que gera uma senha compartilhada, permitindo ao TrueCrypt

que seus volumes cifrados possam ser compartilhados com seguranca.

Palavras-Chaves: Criptografia de Dados, Acordo de Chaves, Diffie-Hellman

i

Page 9: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Sumario

Introducao 2

1 Estado da Arte 3

1.1 Informacao e Seguranca da Informacao . . . . . . . . . . . . . . . . . . . . 3

1.2 Requisitos para a seguranca da informacao . . . . . . . . . . . . . . . . . . 3

1.3 Solucoes para seguranca . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.4 Gestao de Identidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.5 Defesa contra ataques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.6 Criptografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.7 A historia da criptografia atual . . . . . . . . . . . . . . . . . . . . . . . . 6

1.8 Produtos disponıveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Tipos de criptografia 12

2.1 Criptografia Simetrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2 Criptografia Assimetrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3 O Problema da Distribuicao de Chaves 16

3.1 Uso de chaves publicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.2 Envelope digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.3 O Acordo de Chaves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.3.1 O algoritmo Diffie-Hellman . . . . . . . . . . . . . . . . . . . . . . . 18

4 Aplicacao da tecnica 22

4.1 O software TrueCrypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.2 Aplicacao da tecnica de DH no TrueCrypt . . . . . . . . . . . . . . . . . . 23

4.3 A senha compartilhada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

ii

Page 10: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

5 O Prototipo 26

5.1 O prototipo desenvolvido . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5.2 A implementacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6 Conclusao 32

Referencias 34

Apendices 36

A Codigos Fonte 36

A.1 A classe GeradorDH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

A.2 A classe Transferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

B Diagrama UML 47

C Codigos Fontes e Javadoc 48

iii

Page 11: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Lista de Figuras

1.1 Tela principal do TrueCrypt . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.1 Criptografia Simetrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2 Criptografia Assimetrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.1 O funcionamento do algoritmo de Diffie-Hellman. . . . . . . . . . . . . . . 19

3.2 Geracao do valor secreto de DH . . . . . . . . . . . . . . . . . . . . . . . . 21

4.1 TrueCrypt requisitando a senha para cifrar/decifrar um volume. . . . . . . 24

5.1 Painel onde e gerado um par de chaves DH com novos parametros. . . . . . 27

5.2 Painel onde e gerado um par de chaves DH, com os mesmos parametros da

chave publica fornecida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.3 Painel onde e gerada a senha. . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.4 Obtencao da senha a partir do vetor de bytes do segredo. . . . . . . . . . . 29

5.5 Copia da senha gerada para a area de transferencia do sistema operacional. 29

5.6 Insercao de senha para acessar volume do TrueCrypt. . . . . . . . . . . . . 30

B.1 Diagrama de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

iv

Page 12: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Lista de Codigos

A.1 A classe GeradorDH.java . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

A.2 A classe Transferencia.java . . . . . . . . . . . . . . . . . . . . . . . . . 45

v

Page 13: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Lista de Abreviacoes

3DES Triple DES

a.C. Antes de Cristo

ACM Association for Computing Machinery

AES Advanced Encryption Standard

BSAFE Biblioteca de criptografia, fornecida pela RSA

CA Certification Authority ; Autoridade Certificadora

CAST5 O mesmo que CAST-128; Cifra de bloco

DES Data Encryption Standard

FBI Federal Bureau of Investigation; Escritorio Federal de Investigacao

americano

IBM International Business Machines

ID Identificacao do usuario; login

IDEA International Data Encryption Algorithm

NBS National Bureau of Standards

NIST National Insitute of Standards and Technology

NSA National Security Agency

PBKDF2 Password-Based Key Derivation Function, version 2 ; Funcao de

Derivacao de Chave Baseada em Senha

PGP Pretty Good Privacy ; Software criptografico

vi

Page 14: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

PKC Public Key Cryptography ; Criptografia de Chave Publica

PKCS Public Key Cryptography Standard

PKI Public Key Infrastructure; Infraestrutura de Chave Publica

RC2, RC4, RC5 Rivest Cipher ; Algoritmos de cifragem

RSA Cifra de chave publica; Rivest, Shamir, Adleman

TI Tecnologia da Informacao

UML Unified Modeling Language; Conjunto de padroes de modelagem

de sistemas

vii

Page 15: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Introducao

Seguranca da informacao em uma organizacao, nos dias atuais, abrange todas as

areas, desde a selecao de funcionarios, passando pela escolha dos equipamentos onde

as informacoes serao armazenadas, seja em forma digital ou nao, ate as regras de com-

partilhamento dessas informacoes.

O compartilhamento de dados passou por um longo processo de evolucao antes de

chegar aos padroes praticados atualmente. Com a evolucao constante surgem os dispo-

sitivos portateis, os quais possuem, atualmente, grande capacidade de armazenamento.

Com esses dispositivos vieram tambem os riscos oferecidos pela facilidade em carregar

dados de um lado para outro, que podem fazer com que nao seja mantida a seguranca da

informacao contida nestes dispositivos.

Uma das ferramentas mais importantes, quando se fala em seguranca da informacao,

e a criptografia. Desenvolvedores e engenheiros precisam entender a criptografia a fim

de construir eficazmente os seus produtos. O pessoal do marketing e de vendas precisa

entender a criptografia a fim de provar que os seus produtos sao seguros. Os clientes

que compram esses produtos, sejam eles usuarios finais ou agentes de empresas, precisam

entender a criptografia para que possam tomar a melhor decisao e assim utilizar esses

produtos corretamente. Os profissionais de TI (Tecnologia da Informacao) precisam en-

tender a criptografia a fim de distribuı-la adequadamente entre os seus sistemas. Mesmo

os advogados precisam entender a criptografia, visto que os governos locais, estaduais e

federal estao aprovando novas leis que definem as responsabilidades das entidades que

detem as informacoes privadas do publico.

Na pratica, a criptografia pode ser entendida como um conjunto de metodos e tecnicas

para cifrar ou codificar informacoes legıveis por meio de um algoritmo, convertendo um

texto original em um texto ilegıvel, sendo possıvel recuperar as informacoes originais

mediante o processo inverso. Independentemente do algoritmo criptografico utilizado,

1

Page 16: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

sempre ocorrera transformacoes de um texto legıvel em um ilegıvel.

A criptografia pode ser a ferramenta mais importante de seguranca, mas de modo

algum resolvera todos os problemas de seguranca.

O objetivo deste trabalho foi estudar tecnicas de compartilhamento de informacoes

criptografadas e oferecer uma solucao para o problema de troca de chaves existente na

criptografia simetrica. Atraves da tecnica do Acordo de Chaves de Diffie-Hellman – que

nao e uma tecnica criptografica mas que utiliza a criptografia – mostrou-se que o problema

pode ser resolvido, e que tal tecnica tambem pode ser empregada no software criptografico

chamado TrueCrypt, permitindo o compartilhamento dos arquivos criptografados por ele.

Tambem foi desenvolvido um prototipo de aplicacao que implementa tal tecnica e que

fornece uma senha em formato de texto puro, que pode ser utilizado para finalidades

outras alem da aplicacao no TrueCrypt.

O trabalho descrito neste texto foi dividido em 6 capıtulos.

O Capıtulo 1 e o estado da arte. Comeca definindo os termos Informacao e Segu-

ranca da Informacao. Aborda os requisitos para se garantir a seguranca da informacao;

define e fala sobre criptografia e faz um apanhado geral da historia da criptografia ate os

tempos de hoje, ilustrando o cenario de softwares criptograficos disponıveis atualmente.

O Capıtulo 2 esta mais focado no assunto Criptografia, e resume os tipos de cripto-

grafia: as criptografias de chave secreta, de chave publica, e a criptografia mista.

O Capıtulo 3 trata do Problema de Distribuicao de Chaves, que surge ao comparti-

lhar informacoes cifradas com terceiros, e ainda trata de duas tecnologias que atacam o

problema: a tecnica do Envelope Digital e a tecnica do Acordo de Chaves.

Tendo em mente o Problema de Distribuicao de Chaves, e apresentado no Capıtulo

4 uma maneira de aplicar a tecnica de acordo de chaves de Diffie-Hellman no software

TrueCrypt. E explicada tambem a questao da Senha Compartilhada, utilizada para com-

partilhar um volume do TrueCrypt entre partes geograficamente distantes.

No Capıtulo 5 e mostrado e explicado o prototipo implementado neste trabalho, e

ainda sao comentados alguns trechos da implementacao.

Por fim, no Capıtulo 6 ha uma conclusao do trabalho realizado, levantando os obje-

tivos alcancados, pontos positivos, pontos negativos, dificuldades encontradas e trabalhos

futuros. Ainda e possıvel encontrar, no apendice desta monografia, o diagrama de classes

e o codigo fonte comentado das principais classes implementadas.

2

Page 17: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Capıtulo 1

Estado da Arte

1.1 Informacao e Seguranca da Informacao

As pessoas,os governos, todos um dia tiveram ou tem motivos para querer sigilo so-

bre alguma informacao. No passado a questao Seguranca da Informacao era muito mais

simples, pois os arquivos contendo inumeros papeis podiam ser trancados fisicamente.

Contudo, com a chegada das tecnologias da informacao e comunicacao o assunto ficou

bem mais complexo. Hoje a maioria dos computadores conecta-se a Internet e, con-

sequentemente, a Internet conecta-se a eles. Alem disto, sabemos que dados em formato

digital sao portateis. Este fato fez com que estes ativos tornassem novos atrativos para

ladroes.

Informacao compreende qualquer conteudo que possa ser armazenado ou transferido

de algum modo, servindo a determinado proposito e sendo de utilidade ao ser humano

[Filho, 2004].

Seguranca da Informacao, em seu conceito mais abrangente, e uma soma de dife-

rentes metodos e tecnicas para, literalmente, garantir a seguranca de alguma informacao.

1.2 Requisitos para a seguranca da informacao

A seguranca da informacao em um sistema computacional ou em um sistema de ar-

mazenamento, em seu sentido mais abrangente, envolve requisitos voltados a garantia de

origem, uso e transito da informacao, buscando certificar todas as etapas do seu ciclo de

vida. Estes requisitos podem ser resumidos na forma dos itens a seguir [CERT.BR, 2006]:

3

Page 18: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

• A confidencialidade diz que a informacao so esta disponıvel para aqueles devida-

mente autorizados;

• A integridade diz que a informacao nao foi destruıda ou corrompida e o sistema

tem um desempenho correto;

• A disponibilidade diz que os servicos/recursos do sistema estao disponıveis sempre

que forem necessarios.

Alguns exemplos de violacoes a cada um desses requisitos sao:

Confidencialidade: alguem obtem acesso nao autorizado ao seu computador e le todas

as informacoes contidas na sua declaracao de Imposto de Renda;

Integridade: alguem obtem acesso nao autorizado ao seu computador e altera in-

formacoes da sua declaracao de Imposto de Renda, momentos antes de voce envia-la a

Receita Federal;

Disponibilidade: o seu provedor sofre uma grande sobrecarga de dados ou um ataque

de negacao de servico e por este motivo voce fica impossibilitado de enviar sua declaracao

de Imposto de Renda a Receita Federal.

Algumas abordagens agregam ainda os dois ultimos [Marciano, 2006]:

• A autenticidade da a garantia de que a informacao e de fato originaria da proce-

dencia alegada.

• A irretratabilidade ou nao repudio e a garantia de que nao se pode negar a

autoria da informacao, ou o trafego por ela percorrido.

Aplicando a pratica de autenticacao, podemos verificar as identidades. Isso e com-

paravel ao ID (Identificacao do usuario) requerido para retirar dinheiro de uma conta

bancaria (ou conduzir uma transacao com um corretor on-line). O nao repudio e uma im-

posicao legal que orienta e impele as pessoas a honrar as suas palavras [Burnett e Paine, 2002].

1.3 Solucoes para seguranca

A seguranca da informacao requer ferramentas especıficas para a implementacao das

regras contidas em polıticas de seguranca de informacao. Os principais blocos de solucoes

sao [Promon, 2005]:

4

Page 19: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

• Identidade;

• Defesa contra ataques;

• Criptografia.

1.4 Gestao de Identidade

A gestao de identidade e amparada por ferramentas que permitem a correta identi-

ficacao de um usuario para lhe conferir acesso de acordo com seu perfil. A Identificacao ou

a Autenticacao permite identificar unicamente um usuario e verificar a autenticidade da

sua identidade atraves de mecanismos variados, como, por exemplo, senhas pre-definidas,

certificados digitais, biometria ou dispositivos portateis (tokens, smart cards). A Au-

torizacao e o Controle de acesso possibilitam especificar as acoes permitidas e nıveis de

privilegio diferenciados para cada usuario atraves do estabelecimento de polıticas de uso.

Com a PKI (Infraestrutura de Chave Publica), a CA (Autoridade Certificadora) realiza a

geracao e gestao de chaves e certificados digitais que conferem autenticidade aos usuarios

ou a informacao. Outra aplicacao dessa categoria de ferramentas e o fornecimento de

chaves para suportar solucoes de criptografia.

1.5 Defesa contra ataques

A defesa contra ataques consiste em diversas solucoes atuando, de forma preventiva

ou corretiva, na defesa contra ameacas a seguranca de um sistema. Ela divide-se em

[Promon, 2005]:

• Protecao de perımetro;

• Deteccao de anomalias e intrusao;

• Protecao contra infeccao;

• Identificacao de vulnerabilidades;

• Backup e Recovery.

5

Page 20: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

1.6 Criptografia

A criptografia das informacoes consiste de mecanismos que garantem a confiden-

cialidade da informacao em diversas camadas [Promon, 2005], atraves da aplicacao de

algoritmos de criptografia. Esses mecanismos variam desde a criptografia das informacoes

gravadas em dispositivos de armazenamento (ex.: discos rıgidos, pen drives) ate cripto-

grafia das informacoes em transito visando a comunicacao segura.

A criptografia, como forma de implementacao de mecanismos de seguranca em sistemas

de informacao ou dispositivos de armazenamento, e utilizada como prevencao ou solucao

para falhas em seguranca na ampla maioria dos casos [Marciano, 2006].

1.7 A historia da criptografia atual

O habito de utilizar tecnicas de codificar mensagens ou esconder informacoes foi her-

dado de nossos antepassados. Na era a.C. (antes de Cristo) ja se utilizavam destas tecnicas.

Uma prova disso e que a criptografia ja estava presente na escrita hieroglıfica dos egıpcios,

e em codigos secretos entre assırios, hebreus, hititas, persas e outros [Moreira, 2001].

A criptografia, ou a criptologia, que e a arte de ocultar informacoes [Weiszflog, 2008],

faz parte da historia humana porque sempre houve formulas secretas, informacoes confi-

denciais e interesses os mais diversos que nao deveriam cair no domınio publico ou na mao

de inimigos. As guerras e a necessidade de manter ou conquistar novos territorios sempre

foram subsıdios para a Criptologia. E guerra e disputa sempre estiveram presentes na

historia da humanidade.

Essa historia foi marcada por grandes nomes que fizeram da arte e ciencia de escrever

mensagens em codigos a criptografia que se tem hoje. Julio Cesar, Blaise de Vigenere,

Frederici, Samuel Morse, Charles Babbage, Joseph Oswald Mauborgne, Marian Rejewski,

Alan Turing, Gordon Welchman e outros, todos fizeram de seus trabalhos em criptografia

e criptoanalise grandes contribuicoes para algoritmos mais recentes criados por Claude

Elwood Shannon, Whitfield Diffie, Martin Hellman, e Rivest, Shamir e Adleman, que por

suas vezes, contribuem muito para a evolucao da criptografia na computacao quantica,

hoje sendo muito estudada [Information, 2009].

A seguir sao listadas as fases importantes na historia da criptografia atual, baseadas

nas obras de [Moreno et al., 2005], [Information, 2009] e [Tkotz, 2009]:

6

Page 21: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Entre 1933 e 1945, a maquina Enigma, que havia sido criada por Arthur Scherbius, nao

foi um sucesso comercial e foi aperfeicoada ate se transformar na ferramenta criptografica

mais importante da Alemanha nazista.

No ano de 1943 a maquina Colossus, projetada pela equipe liderada por Alan Turing e

Gordon Welchman em Betcheley Park, um centro de estudos criptologicos da Inglaterra,

foi posta em acao para quebrar codigos.

Em 1969 James Ellis desenvolve um sistema de chaves publicas e chaves privadas

separadas.

Em 1976 Whitfield Diffie e Martin Hellman publicam o livro New Directions in Crypto-

graphy, introduzindo a ideia de uma criptografia de chave publica. Tambem reforcaram

a concepcao da autenticacao atraves de uma funcao de via unica (one way function).

Terminaram o texto do livro com a observacao modesta e sabia:

“A habilidade de produzir criptoanalise esteve sempre acentu-

adamente do lado de profissionais, mas a inovacao, particularmente

no desenvolvimento de novos tipos de sistemas criptograficos, veio

basicamente de amadores.”

No mesmo ano a IBM apresentou a cifra Lucifer ao NBS (National Bureau of Stan-

dards). Essa cifra sofreu algumas modificacoes recomendadas pela NSA (National Security

Agency) e a NBS a adotou como padrao de criptografia de dados nos EUA. Hoje a NBS e

conhecida como NIST (National Insitute of Standards and Technology), e a cifra evoluiu

para DES (Data Encryption Standard).

Em 1977, inspirados no texto publicado por Diffie e Hellman e apenas principiantes na

criptografia, Ronald L. Rivest, Adi Shamir e Leonard M. Adleman comecaram a discutir

como poderiam criar um sistema de chave publica que fosse pratico. Ron Rivest concebeu

a grande ideia: o sistema era uma cifra de chave publica, assim como tinham pensado,

que servia tanto para confidencialidade quanto para assinaturas digitais, baseada na difi-

culdade da fatoracao de numeros grandes. Essa cifra foi batizada de RSA, de acordo com

as primeiras letras dos sobrenomes dos autores. Confiantes no sistema, em 4 de Abril de

1970 os tres entregaram o texto para Martin Gardner, para que fosse publicado na revista

Scientific American. O artigo apareceu na edicao de Setembro de 1977 e incluıa a oferta

de enviar o relatorio tecnico completo para qualquer um que mandasse um envelope selado

7

Page 22: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

com o proprio endereco. Foram recebidos milhares de pedidos provenientes dos quatro

cantos do mundo.

A NSA contestou a distribuicao deste relatorio para estrangeiros e, durante algum

tempo, os autores suspenderam a correspondencia. Como a NSA nao se deu ao trabalho

de informar a base legal desta proibicao, solicitada pelos autores, os tres voltaram a

enviar os relatorios solicitados. Dois jornais internacionais, “Cryptologia”e “The Journal

of Cryptology”, foram fundados logo apos esta tentativa da NSA de censurar publicacoes.

Rivest, Shamir e Adleman nao publicaram a cifra antes de patentea-la. Alias, foi uma

grande novidade conseguir patentear um algoritmo.

Em 1978 o algoritmo RSA e publicado na “Communication”da ACM (Association for

Computing Machinery).

A partir da decada de 90 comecam os trabalhos com computacao quantica e cripto-

grafia quantica. Tambem ganham maior forca trabalhos com biometria voltada a auten-

ticacao [Almeida, 2009].

Em 1990 Xuejia Lai e James Massey publicam na Suıca A Proposal for a New Block

Encryption Standard (Uma Proposta para um Novo Padrao de Encriptacao de Bloco),

o que viria a ser o IDEA (International Data Encryption Algorithm), para substituir o

DES [Burnett e Paine, 2002]. O IDEA utiliza uma chave de 128 bits e emprega operacoes

adequadas para computadores de uso geral, tornando as implementacoes em software mais

eficientes.

Em 1990 Charles H. Bennett, Gilles Brassard e colaboradores publicam seus resultados

experimentais sobre Criptografia Quantica, a qual usa fotons unicos para transmitir um

fluxo de bits chave para uma posterior cifragem da mensagem (no caso a cifragem Vernam).

Considerando as leis que a mecanica quantica possui, a Criptografia Quantica nao so

oferece a possibilidade do segredo como tambem uma indicacao positiva caso ocorra uma

interceptacao e uma medida do numero maximo de bits que possam ter sido interceptados.

Uma limitacao e que a Criptologia Quantica necessita de um cabeamento de fibra otica

entre as partes que se comunicam.

Um ano depois o FBI impoe o direito de acessar qualquer texto claro trocado entre

usuarios que conversam por meio de uma rede de comunicacao digital. Como resposta

ao FBI, Phil Zimmermann torna publica, no mesmo ano, sua primeira versao do PGP

(Pretty Good Privacy). O PGP oferece alta seguranca para o cidadao comum e, como tal,

e um forte concorrente de produtos comerciais pois alem de sua notavel confiabilidade,

8

Page 23: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

ele e distribuıdo como freeware, e como resultado, tornou um padrao mundial.

Em 1993 a criptoanalise diferencial e desenvolvida por Eli Biham e Adi Shamir.

“E a criptoanalise dos novos tempos.” por Biham e Shamir.

O metodo utilizado por Biham e Shamir baseia-se em ataque por mensagens escolhi-

das, as quais sao tomadas aos pares e cuja diferenca entre os respectivos criptogramas

e analisada. O metodo pode ser estendido para ataque de mensagens conhecidas. A

criptoanalise e realizada sobre pares de criptogramas cifrados com a mesma chave e cujos

textos em claro correspondentes possuem um certo valor particular de diferenca. O efeito

desta diferenca e analisado atraves das n iteracoes do algoritmo resultando em parametros

que permitem inferir possıveis valores da chave utilizada no processo de criptografia.

Em 1994 o professor Ron Rivest, autor dos algoritmos RC2 e RC4 incluıdos na biblio-

teca de criptografia BSAFE da RSA Data Security Inc., publica a proposta do algoritmo

RC5 na Internet. Este algoritmo usa rotacao dependente de dados como sua operacao

nao linear e e parametrizado de modo que o usuario possa variar o tamanho do bloco, o

numero de estagios e o comprimento da chave. Neste mesmo ano o algoritmo Blowfish,

uma cifra de bloco de 64 bits com uma chave de ate 448 bits de comprimento, e projetado

por Bruce Schneier [Moreno et al., 2005].

Em 1997 O PGP Freeware e atualizado para a versao 5.0 e e amplamente distribuıdo

para uso nao comercial. Ainda em 97 o padrao de encriptacao DES de 56 bits, base da

criptografia dos EUA naquele ano, e quebrado por uma rede de 14.000 computadores.

Em 1998 o padrao de encriptacao DES de 56 bits e quebrado em 56 horas por

pesquisadores da Electronic Frontier Foundation - EFF do Vale do Silıcio. No ano seguinte

a EFF quebrou novamente o DES em apenas 22 horas e 15 minutos, juntamente com a

Distributed.Net, reunindo em torno de 100.000 computadores pessoais a maquina DES

Cracker pela internet.

No ano de 2000 o NIST anunciou um novo padrao de uma chave secreta de cifragem,

escolhido entre 15 candidatos. Esse novo padrao foi criado para substituir o algoritmo

DES, cujo tamanho das chaves tornou-se insuficiente para conter ataques de forca bruta. O

algoritmo Rijndael, cujo nome e uma abreviacao dos nomes dos autores Rijmen e Daemen,

foi escolhido para se tornar o futuro AES (Advanced Encryption Standard)[Tkotz, 2009].

No seculo 21 muitos professores e profissionais da computacao com vınculo em centros

de pesquisa, universidades e empresas comecam a pesquisar novas formas de implementar

9

Page 24: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

algoritmos e solucoes de seguranca. Nos anos 2000 a criptografia comeca a ser encarada

realmente como uma ciencia.

Com esse resumo sobre os principais acontecimentos na historia da criptografia pode-

mos ressaltar que a maior motivacao para todas essas pesquisas, descobertas e atualizacoes

na criptografia e criptoanalise foi a questao sobre a seguranca da informacao, ou da segu-

ranca de dados.

1.8 Produtos disponıveis

As solucoes para seguranca experimentam uma fase de intensa inovacao tecnologica

e de crescente sofisticacao motivadas, principalmente, pelo aumento constante das ativi-

dades maliciosas. O mercado de solucoes de seguranca e relativamente novo e apresenta

um elevado nıvel de fragmentacao em termos de produtos disponıveis. Nele coexistem

diversas empresas, oferecendo diferentes solucoes para diversas areas.

Com relacao a criptografia de dispositivos de armazenamento, seja os removıveis ou

nao, o mercado e amplo, e dentre os softwares mais conceituados hoje estao:

• EncryptOnClick;

• Rohos Mini Drive;

• Kruptos;

• TrueCrypt.

Os itens acima foram destacados por serem freeware.

O EncryptOnClick e produzido pela 2Bright Sparks. O seu funcionamento basea-se em

encriptar arquivos ou diretorios avulsos com uma senha determinada. Os novos arquivos

encriptados ganham a extensao (.eoc). Eles ficam espalhados pela unidade, onde podem

ser novamente abertos com o software EncryptOnClick.

O Rohos Mini Drive e o TrueCrypt utilizam o conceito de unidade virtual. Eles criam

uma unidade criptografada dentro da unidade real, onde os arquivos privados ficam dentro

dessas unidades criptografadas. Ha a opcao de esconder/ocultar essas unidades para uma

maior seguranca. O TrueCrypt ainda oferece o recurso de se criar uma unidade oculta

dentro de uma unidade criptografada, e cada unidade com uma senha secreta diferente

10

Page 25: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

da outra. Isso faz com que a primeira unidade proteja ainda mais os dados da segunda

unidade. Caso a protecao da primeira seja violada, a segunda ainda permanecera intacta.

O Kruptos acrescenta a funcionalidade do EncryptOnClick a facilidade de criar ar-

quivos executaveis (.exe) autodecifraveis, onde recupera-se o arquivo original apenas

fornecendo a senha correta. Acrescenta ainda um poderoso picotador de arquivos, onde

pode-se apagar um arquivo do disco sem deixar rastros para programas de recuperacao

de dados apagados.

Dentre os quatros mencionados, o mais amplamente utilizado e o TrueCrypt. A jus-

tificativa se da pela sua eficiencia, pela facilidade de uso, pela documentacao abrangente

que possui, pelas atualizacoes constantes oferecidas pela fundacao responsavel pelo seu de-

senvolvimento e tambem por ser de codigo aberto (open source), possibilitando alteracoes.

A Figura 1.1 mostra a tela principal deste software.

Figura 1.1: Tela principal do TrueCrypt

O TrueCrypt e desenvolvido e mantido pela TrueCrypt Foundation, nos Estados

Unidos. Uma copia do programa pode ser baixada da internet no endereco

http://www.truecrypt.org/downloads.

11

Page 26: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Capıtulo 2

Tipos de criptografia

Ha dois tipos de criptografia, a de chave secreta e a de chave publica.

Ha tambem uma terceira abordagem, que na verdade nao e um novo tipo de criptogra-

fia, mas sim uma tecnica onde utiliza-se os dois tipos anteriores, chamada de criptografia

mista.

O termo “chave”aqui e um numero secreto ou um conjunto desses numeros, que faz

analogia a chave convencional que utilizamos em cadeados e fechaduras.

Na criptografia, para proteger o conteudo dos seus arquivos, voce instala uma fechadura

(um algoritmo de criptografia) na sua porta (o computador). Para operar a fechadura

(encriptar os dados), voce insere a chave (o numero secreto) e a gira (executa o programa

fazendo-o encriptar). O algoritmo realiza seus passos utilizando a chave para alterar o

texto simples e converte-lo em texto cifrado. Para desbloquear o arquivo encriptado voce

insere a mesma chave e executa o programa. O algoritmo inverte os passos e converte o

texto cifrado de volta no texto simples original [Burnett e Paine, 2002].

Se um algoritmo criptografico e bom entao ele e conhecido e difundido. Por isso

mesmo, por sua difusao ampla e por varias pessoas conhecerem o seu funcionamento e

que utilizam-se as chaves. A chave protege a informacao cifrada. Nao basta conhecer

o algoritmo para acessar a informacao criptografada. E necessario tambem alimenta-lo

com a chave correta, que e unica. Daı a importancia de manter a chave em sigilo. Toda

criptografia moderna e computadorizada opera com chaves.

Ha duas classes de criptografia que operam com chaves: a criptografia de chave secreta

e a criptografia de chave publica.

12

Page 27: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

2.1 Criptografia Simetrica

O algoritmo de criptografia simetrica ou de chave secreta utiliza uma chave para

transformar ou converter uma informacao em um conjunto de bits que parecem estar

dispostos de forma aleatoria. Nessa abordagem a mesma chave utilizada para cifrar os

dados e utilizada para decifra-los. Tanto o remetente quanto o destinatario usam a mesma

chave.

Figura 2.1: Criptografia Simetrica

Os algoritmos de chave simetrica podem ser divididos em cifras de fluxo (ou contınuas)

e em cifras por bloco. As cifras de fluxo cifram os bits da mensagem um a um, enquanto

que as cifras por bloco pegam um numero de bits e cifram como uma unica unidade.

Tipicamente sao utilizados blocos de 128, 192 ou 256 bits e chaves de 128, 192 ou 256 bits.

Alguns exemplos de algoritmos simetricos populares e bem reputados incluem Twofish,

13

Page 28: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Serpent, AES, Blowfish, CAST5, RC4, 3DES, e IDEA.

O “calcanhar de Aquiles”da criptografia simetrica esta na distribuicao da chave simetrica.

2.2 Criptografia Assimetrica

A criptografia assimetrica ou de chave publica contorna o problema da distribuicao

de chaves mediante o uso de chaves publicas. Neste novo sistema, cada pessoa detem um

par de chaves denominado chave publica e chave privada.

A chave publica e divulgada, e serve para cifrar uma mensagem, enquanto a chave

privada e mantida em segredo, e e usada para recuperar o conteudo original da mensagem

cifrada. A seguranca da criptografia de chave publica reside no fato de que as mensagens

codificadas com a chave publica so podem ser decodificadas com a chave privada corres-

pondente. Desta forma, nao e possıvel decifrar a mensagem com a mesma chave que a

cifrou (a chave publica), como acontece na criptografia simetrica. A Figura 2.2 ilustra

esse processo.

Figura 2.2: Criptografia Assimetrica

14

Page 29: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Apesar de existirem duas classes de algoritmos para cifrar informacoes, elas nao sao

utilizadas com a mesma frequencia. A justificativa esta relacionada ao desempenho: algo-

ritmos de chave publica sao lentos, ao passo que a criptografia de chave simetrica pode en-

criptar dados em grande quantidade bem mais rapidamente. Dependendo da plataforma,

alguns algoritmos simetricos podem operar em velocidades de 10MBps, 20MBps, 50MBps

(ou mais). Ao contrario, um algoritmo de chave publica provavelmente opera de 20KBps

a 200KBps por segundo, dependendo do algoritmo, da plataforma e de outros fatores

[Burnett e Paine, 2002].

15

Page 30: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Capıtulo 3

O Problema da Distribuicao de

Chaves

A criptografia de chave simetrica pode manter seguros os nossos dados, mas quando

o compartilhamento desses dados secretos com outras pessoas se faz necessario, entao,

tambem sera necessario compartilhar a chave utilizada para encripta-los. Ja que o pro-

blema de envio de informacoes sigilosas pode ser resolvido com a criptografia, fica agora

o problema de envio das chaves com seguranca. Como podemos enviar chaves secretas de

maneira segura para outras pessoas? Esse problema e conhecido como o problema de dis-

tribuicao de chaves : como duas ou mais pessoas podem, de maneira segura, compartilhar

chaves por vias inseguras?

Para cada classe de criptografia ha uma abordagem diferente para solucionar o pro-

blema da distribuicao de chaves. A criptografia de chave publica, por princıpio de fun-

cionamento, ja resolve esse problema com a publicacao da chave que criptografa. A cripto-

grafia de chave simetrica faz uso da tecnica de Acordo de Chaves para distribuir chaves

de criptografia. Ha ainda um metodo conhecido como Envelope Digital. Essa tecnica

faz uso das criptografias de chave publica e chave secreta ao mesmo tempo, metodo mais

conhecido como criptografia mista.

A Secao 3.2 apresenta o esquema conhecido como Envelope Digital, e a Secao 3.3.1

define a tecnica criada por Diffie e Hellman, adotada neste trabalho como solucao para o

compartilhamento de dados criptografados pelo software TrueCrypt.

16

Page 31: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

3.1 Uso de chaves publicas

A criptografia de chave publica, por seu proprio princıpio de funcionamento, nao

utiliza a mesma chave para os processos de cifragem e decifragem de conteudos. Com

a seguranca matematica oferecida pela PKC 1 torna-se possıvel distribuir as chaves de

criptografia com seguranca, visto que o processo de decifragem so pode ser feita pela

chave privada correspondente a chave publica que cifrou o conteudo.

Dessa maneira, utilizando a chave que e publica para cifrar e a chave que e particular

(privada) para decifrar, pode-se contornar o problema da distribuicao de chaves.

3.2 Envelope digital

Como citado mais acima, os algoritmos de criptografia de chave assimetrica exigem

um esforco computacional muito maior que os algoritmos de chave simetrica, entao o ideal

e que se utilize os algoritmos mais rapidos para cifrar grandes quantidades de dados, e

os mais lentos para cifrar quantidades de dados menores, como 128 bits – o tamanho

provavel de uma chave simetrica.

Essa tecnica requer a utilizacao de dois algoritmos diferentes para concretizar seu

esquema. No envelope digital utilizamos a criptografia simetrica para cifrar a informacao

a ser compartilhada, e a criptografia assimetrica para cifrar a chave de sessao 2.

Sua operacao se da, por exemplo, do seguinte modo: com a chave simetrica – que

chamamos aqui de chave de sessao – ciframos o conteudo de um e-mail e criamos um

envelope criptografado. Essa chave de sessao e entao colocada em outro envelope, que

por sua vez, e cifrado utilizando a chave publica do seu destinatario, tornando-se um

envelope criptografado com chave publica, que protege uma chave de sessao. Este pacote

– o envelope digital – formado por ambos envelopes sao, enfim, enviados por e-mail. O

destinatario, ao receber o pacote, descriptografa um envelope utilizando sua chave privada,

obtendo acesso a chave de sessao. Tambem encontra outro envelope cifrado, e entao o

abre com esta ultima chave. Consegue, por fim, ter acesso a informacao original.

Assim, a informacao e a chave de sessao so estarao acessıveis para quem realmente

pode ter acesso a informacao: o proprietario da chave privada.

1Public Key Cryptography. Criptografia de Chave Publica.2A chave de sessao e a chave simetrica utilizada para cifrar os dados.

17

Page 32: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

3.3 O Acordo de Chaves

Outra maneira de se resolver o problema da distribuicao de chaves e utilizar o Acordo

de Chaves, mais discutido na literatura como Key Agreement, sua forma no idioma Ingles.

Um Acordo de Chaves propoe que duas ou mais partes possam, literalmente, acordar a

respeito de um segredo em comum, nao sendo necessario o armazenamento desse segredo

por nenhuma das partes. Um acordo propoe ainda que ambas as partes possam gerar o

segredo compartilhado apenas utilizando um par de chaves correspondentes 3.

Sua utilizacao e ideal em cenarios onde se compartilha informacao cifrada com cripto-

grafia simetrica.

Uma das tecnicas que implementa a tecnica do Acordo de Chaves e o conhecido “Diffie-

Hellman Key Agreement”, amplamente conhecido pela sua eficiencia.

3.3.1 O algoritmo Diffie-Hellman

Como ja citado na Secao 1.7, em 1976 Whitfield Diffie e Martin Hellman, os cri-

adores do algoritmo, publicaram a tecnica em seu livro New Directions in Cryptography,

nomeando-a com suas iniciais.

Em 2002, Hellman sugeriu que o algoritmo Diffie-Hellman fosse chamado de Algoritmo

de Acordo de Chaves Diffie-Hellman-Merkle, em reconhecimento ao antecessor e funda-

mental trabalho feito por Ralph Merkle na invencao da PKC (Public Key Cryptography -

Criptografia de Chave Publica) [WordIq, 2010], [Stewart, 2000].

O algoritmo DH, como tambem e chamado, nao executa nenhuma tecnica de cifragem

de dados. Ao inves disso, ele utiliza a tecnologia de chave publica para gerar uma chave

de sessao simetrica [Ide et al., ]. Na realidade, ele so pode ser usado para estabelecer um

segredo compartilhado, que geralmente e usado como uma chave simetrica compartilhada

[Stamp, 2006].

Duas partes podem gerar o mesmo segredo desde que possuam suas proprias chaves

privadas e a chave publica de sua contraparte, que esta, obviamente, publicamente disponı-

vel. Esse e o acordo de chaves. Se combinarmos um valor privado com o outro valor

publico, cada indivıduo gerara o mesmo valor secreto [Burnett e Paine, 2002], como ilustra

a Figura 3.1.

3O Acordo de Chaves faz uso da PKI (Public Key Infrastructure).

18

Page 33: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Figura 3.1: O funcionamento do algoritmo de Diffie-Hellman.

No envelope digital, uma chave e gerada para cifrar o conteudo, e depois essa chave e

enviada, dessa vez cifrada, juntamente com o conteudo.

Com o DH nao se faz mais necessario a cifragem de dados utilizando a criptografia

assimetrica. Isto e ideal nos casos onde se tem limitacoes tecnicas ou computacionais e so

esta disponıvel ou so e possıvel utilizar a criptografia simetrica.

Com essa tecnica basta utilizar o valor secreto resultante dos calculos de DH como

sendo a chave de sessao. Para decifrar, o destinatario precisa apenas gerar o mesmo valor

secreto.

Vantagens da utilizacao desta tecnica:

• Nenhuma chave e enviada ou armazenada, entao melhoramos a garantia de segu-

ranca da informacao cifrada;

• Nenhuma chave e enviada e ainda sim pode-se ter um acordo de chaves eficaz e

eficiente;

• Elimina-se alguns bytes da mensagem, entao ganha-se no tamanho;

• A complexidade computacional e reduzida ao utilizar somente criptografia simetrica

para cifrar e decifrar conteudo;

19

Page 34: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

• Solucionamos o problema motivador deste trabalho: o problema da distribuicao de

chaves na criptografia simetrica.

A seguranca do DH reside no problema de determinar logaritmos discretos para

numeros grandes.

Para exemplificar melhor a tecnica, imagine Alice e Bob dois parceiros de negocio, e

que haja entre eles a necessidade de uma troca de correspondencias confidenciais sobre

seus negocios. O DH funciona da seguinte forma:

Sejam q um numero primo e α uma raız primitiva de q . Isto e, a partir de α podemos

gerar todos os elementos de {1, 2, . . . , q − 1} como potencias da forma αi mod q para

i = 1, . . . q − 1.

1 Alice gera um valor privado Xa e Bob gera um valor privado Xb ;

2 Alice envia Ya = αXa mod q para Bob e Bob envia Yb = αXb mod q para Alice;

3 A chave secreta K = (Yb)(Xa) mod q de Alice e a chave secreta K = (Ya)

(Xb) mod q

de Bob sao iguais.

Xa e Xb sao ditas as chaves privadas de Alice e de Bob, respectivamente. Enquanto,

Ya e Yb sao ditas chaves publicas do acordo.

A seguranca do DH e garantia pela complexidade matematica em resolver o problema

a seguir:

Dados αXi mod q e αXj mod q, encontre αXi Xj .

Uma pessoa que esteja monitorando o canal de comunicacao entre Alice e Bob con-

seguiria obter as chaves publicas geradas, contudo nao conseguiria gerar a chave secreta

K, visto que para gera-la e necessario tambem uma das chaves privadas Xa ou Xb. Com

a chave secreta K Alice e Bob podem cifrar seus conteudos e ter confidencialidade nas

suas correspondencias.

20

Page 35: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

A Figura 3.2 ilustra os valores das chaves secretas K. Com base nela, pode-se concluir

a igualdade αXb (Xa) mod q = αXa (Xb) mod q.

Figura 3.2: Geracao do valor secreto de DH

Para que os pares de chaves (Xa, Ya) e (Xb, Yb) sejam compatıveis e possam manter um

acordo entre si, eles tambem precisam compartilhar os mesmos parametros α e q. Para

que isso seja garantido, e necessario que ambos os pares tenham sido gerado pela mesma

entidade, e que esta entidade seja de confianca, visto que um ataque “man in the middle”

poderia ocorrer [Burnett e Paine, 2002].

A responsabilidade da entidade geradora dos pares de chaves e garantir que os parametros

sejam identicos para ambos os pares de chaves, e que estes pares sejam entregues corre-

tamente para seus devidos portadores.

Estabelecido o acordo e intercambiadas as chaves publicas, os parceiros participantes

desse acordo ja estao prontos para gerar o segredo, cifrar os dados e, entao, compartilha-

los.

21

Page 36: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Capıtulo 4

Aplicacao da tecnica

As solucoes para seguranca experimentam uma fase de intensa inovacao tecnologica

e de crescente sofisticacao motivadas, principalmente, pelo aumento constante das ativi-

dades maliciosas. O mercado de solucoes de seguranca e relativamente novo e apresenta

uma grande fragmentacao em termos de produtos disponıveis. Nele coexistem diversas

empresas, oferecendo solucoes para diversas areas.

Este capıtulo mostra uma maneira de aproveitar a tecnica Diffie-Hellman no software

TrueCrypt. Dentre os softwares disponıveis, o TrueCrypt foi o escolhido para este trabalho

por ser multiplataforma, freeware, e tambem pelas outras justificativas ja apresentadas

na Secao 1.8.

4.1 O software TrueCrypt

Com relacao a criptografia de dispositivos de armazenamento o mercado e amplo, e

dentre os softwares livres (freeware) mais conceituados hoje estao o EncryptOnClick, o

Rohos Mini Drive, o Kruptos e o TrueCrypt. Dos quatro softwares mencionados, o mais

eficiente e o mais utilizado e o TrueCrypt.

A sua eficiencia se da pela utilizacao de tecnologias como pipelining, que permite que

dados sejam lidos e escritos em um drive criptografado tao rapidamente quanto seria se o

drive nao o fosse, e parallelization, que permite que os dados sejam processados em paralelo

por todos os processadores ou nucleos presentes no sistema, tornando a manipulacao dos

dados muito mais rapida. O uso dessas tecnologias favorece em muito o recurso on-the-

fly 1 do software. On-the-fly e um recurso do software que faz com que as operacoes de

1Criptografia e descriptografia em tempo de execucao.

22

Page 37: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

cifragem e decifragem do conteudo armazenado nos volumes criptografados acontecam em

tempo de execucao, isto e, ao mesmo tempo em que os dados sao lidos ou escritos pelo

sistema operacional do usuario. Esse recurso e possıvel atraves do uso das tecnologias de

pipelining e parallelization. Esse recurso torna transparente, e muito mais simples para o

usuario, o processo de cifragem e decifragem dos dados em um volume.

O TrueCrypt hoje, na sua versao mais atual 7.0, trabalha somente com algoritmos de

encriptacao de chave simetrica, nao oferecendo os algoritmos de chave assimetrica. Os

algoritmos disponıveis sao: AES, Serpent, Twofish. Para aumentar ainda mais o nıvel

da complexidade da criptografia aplicada aos seus volumes, o TrueCrypt ainda utiliza de

tecnicas de iteracao de algoritmos, ou aplicacao de algoritmos em cascata, como descrito na

propria documentacao do software [TrueCrypt-Foundation, 2009]. Dessa maneira pode-

se utilizar combinacoes de algoritmos para criptografar os dados, acrescentando a lista

de algoritmos inicial os seguintes: AES-Twofish, AES-Twofish-Serpent, Serpent-AES,

Serpent-Twofish-AES, Twofish-Serpent. Essa aplicacao de um algoritmo sobre o outro e

uma tentativa de aumentar a dificuldade de interpretacao dos bits do volume, suprindo a

falta de algoritmos assimetricos, mais sofisticados.

Este trabalho propoe a integracao entre a tecnica do Acordo de Chaves de Diffie-

Hellman e o TrueCrypt, a fim de permitir o compartilhamento do volume criptografado

por esse software entre varias pessoas. Isso e util quando o acesso ao volume criptografado

precisa ser feito por duas ou mais pessoas, que podem ou nao estar separadas geografica-

mente.

4.2 Aplicacao da tecnica de DH no TrueCrypt

O TrueCrypt trabalha com elementos chamados volumes, os quais sao montados pelo

software e, entao, interpretados pelo sistema operacional como se fossem discos fısicos

propriamente ditos. Esses volumes podem ser um dispositivo inteiro, uma particao em

um dispositivo de armazenamento, ou um arquivo dentro de algum disco (conectado local

ou remotamente). Eles sao os conteineres onde os dados criptografados sao armazenados.

Para criar esses volumes criptografados o TrueCrypt oferece um assistente, onde sao

selecionadas varias opcoes, tais como: tipo de volume, local a ser salvo, algoritmo de

criptografia, tamanho do volume, tipo de sistema de arquivos e outras. Uma dessas opcoes

e a keyfile. O termo keyfile remete simplesmente a um arquivo, que pode ser utilizado para

23

Page 38: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

reforcar o mecanismo de criptografia do volume. Segundo [TrueCrypt-Foundation, 2009],

e recomendavel que se use pelo menos uma keyfile, e que esta seja de pelo menos 64bytes.

O proprio TrueCrypt oferece um recurso onde pode ser gerado um arquivo keyfile com

bits aleatorios. Todavia, este recurso nao e util no cenario que propomos – um cenario

onde existe a necessidade de compartilhamento desse volume criado –, visto que o segundo

usuario desse volume criptografado tambem necessitaria do mesmo arquivo original uti-

lizado como keyfile. Isto se faz necessario pois o software necessita sempre do mesmo

arquivo original. Uma copia do arquivo original nao funciona como keyfile valida.

Uma outra opcao disponıvel e a senha. No TrueCrypt a utilizacao de senha e obri-

gatoria, como mostra a Figura 4.1. Tal obrigatoriedade existe pois o software uti-

liza o metodo PBKDF2 (Password-Based Key Derivation Function) de criptografia. O

PBKDF2 esta especificado na PKCS #5 v2.0 (Public Key Cryptography Standard)

[Laboratories, 2005], e e utilizado no TrueCrypt para gerar as Header Keys, que pro-

tegem as Master Keys, que, por suas vezes, sao a chave que cifram os volumes. A PKCS

#5 v2.0 e um Padrao de Criptografia de Chave Publica Baseado em Senha e, conforme

esta disposto em [Laboratories, 2005], o metodo PBKDF2 e uma funcao de derivacao de

chaves utilizada para derivar uma chave de criptografia a partir de uma senha, de um

valor pseudo-aleatorio – comumente conhecido como salt – e de um contador de iteracoes.

Header Keys e Master Key sao termos utilizados pelo TrueCrypt para referenciar as chaves

utilizadas por esse software para cifrar os volumes.

E neste ponto que se insere este trabalho. Para que dois parceiros possam compartilhar

e utilizar o mesmo volume e necessario que haja um consenso entre as partes com relacao

a senha de protecao do volume. E necessario que a senha seja acordada entre as partes,

e nao que ela seja repassada de um lado para outro, colocando em risco a seguranca das

informacoes no volume. Entao, trata-se do acordo de chaves! Neste caso, melhor dizendo,

um acordo de senha.

Figura 4.1: TrueCrypt requisitando a senha para cifrar/decifrar um volume.

24

Page 39: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

4.3 A senha compartilhada

Pensando nisso e que desenvolvemos uma aplicacao para gerar essa senha. Se pre-

cisamos de uma senha eficiente para acessar o volume criptografado e nao podemos envia-

la junto com esse volume, entao todos os participantes do acordo podem utilizar o algo-

ritmo Diffie-Hellman para gera-la. Basta que sejam obedecidos os requisitos do algoritmo:

estar de posse da sua chave privada, da chave publica de sua contraparte e ambas as chaves

terem sido geradas com os mesmos parametros – o numero primo q e α a raiz primitiva

de q, como citado na secao 3.3.1.

E importante enfatizar que no TrueCrypt a senha nao funciona como a chave de

criptografia, mas e uma parte do conjunto de todos os itens que compoem o segredo que

cifra os volumes. Caso essa parte esteja ausente (ou seja incorreta), bem como outras

partes (a keyfile, a semente, o hash, as header keys e a master key), os volumes nao

podem ser abertos, mantendo, assim, o sigilo dos dados.

O assistente de criacao de volumes do TrueCrypt informa que uma senha ideal contem

pelo menos 20 caracteres, e, em [TrueCrypt-Foundation, 2009], consta que a melhor segu-

ranca pode ser atingida utilizando-se o tamanho maximo do campo senha: 64 caracteres

alfanumericos.

25

Page 40: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Capıtulo 5

O Prototipo

Foi desenvolvido um prototipo que implementa o algoritmo DH e gera um acordo

entre duas partes, levando em conta os detalhes do TrueCrypt. A senha de 64 caracteres

alfanumericos e obtida a partir deste acordo. Ele tambem gera pares de chaves DH,

funcionando como uma entidade geradora de chaves.

5.1 O prototipo desenvolvido

O primeiro passo para se definir um acordo de chaves de DH e gerar os dois pares de

chaves de DH, um para cada parceiro no acordo. Para que gerem o mesmo segredo, esses

pares de chaves precisam ser compatıveis, isto e, devem possuir alguns parametros em

comum (o numero primo q e a raiz primitiva α de q), como descrito na Secao 4.3. E para

conseguirem os mesmos parametros, os geradores de pares de chaves de ambos os parceiros

devem utilizar o mesmo provedor de parametros. A aplicacao desenvolvida neste trabalho

tambem e um gerador de par de chaves, e utiliza o provedor SunJCE, que e fornecido pela

propria linguagem Java, a partir da versao 6.0. Na linguagem Java, um provedor deve

implementar a interface java.security.Provider. Os provedores de chaves disponıveis

na Internet e mais utilizados em Java sao o SunJCE e o Bouncy Castle.

Como nao ha estabelecida uma entidade externa provedora de chaves de confianca para

fornecer os pares de chaves de DH, faz-se necessario gerar esses pares com o prototipo

desenvolvido.

Sendo assim, utilizando este aplicativo, um dos parceiros deve gerar o primeiro par de

chaves, onde novos parametros serao definidos pelo Provider estabelecido. Em seguida,

a segunda parte gera o seu proprio par de chaves, a partir da chave publica do primeiro

26

Page 41: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

parceiro.

Vejamos um exemplo desse processo:

(1) Bob gera seu par de chaves DH, e envia a chave publica para Alice;

(2) Alice, com a chave publica de Bob, gera seu proprio par de chaves DH. Logo

apos, envia sua chave publica para Bob;

(3) A partir de agora, ambas as partes possuem pares de chaves DH compatıveis,

e estao de posse da chave publica de seus parceiros. Para gerarem a senha, basta

informar sua chave privada e a chave publica do outro (processo ilustrado pelas

figuras 3.1 e 3.2).

Como podemos perceber em (2), uma DH Public Key contem informacoes suficientes

para que um novo par de chaves DH seja criado a partir dela.

O passo (1) e executado no painel ilustrado pela Figura 5.1 abaixo.

Figura 5.1: Painel onde e gerado um par de chaves DH com novos parametros.

27

Page 42: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

O passo (2) e executado no painel do aplicativo, como ilustrado abaixo pela Figura 5.2.

Figura 5.2: Painel onde e gerado um par de chaves DH, com os mesmos parametros da

chave publica fornecida.

O passo (3) e executado no seguinte painel da aplicacao (Figura 5.3):

Figura 5.3: Painel onde e gerada a senha.

As chaves geradas com a aplicacao tem 1024 bits de comprimento, e sao fornecidas a

partir do provedor SunJCE. As chaves de DH manipuladas e geradas neste prototipo nao

necessariamente precisam de uma extensao, visto que este conceito e variavel para cada

28

Page 43: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

sistema operacional. Entretanto, optamos por definir que as chaves publicas carregam a

extensao .pbk, e as chaves privadas levam a extensao .pvk, para facilitar a identificacao

e a localizacao desses arquivos pelo usuario.

Com o acordo feito a partir dessas chaves, o segredo gerado e um vetor de bytes, que

tambem tera 1024 bits, ou 128 bytes de comprimento.

Apos ser gerado, o segredo e convertido em um vetor de 256 caracteres hexadecimais.

Desse novo vetor de tamanho 256, foram adotados como senha os 64 caracteres do centro.

Melhorando a compreensao, a senha sera um subvetor do vetor de 256 posicoes, que

contera somente 64 caracteres dos 256 gerados. Esses 64 caracteres estao na regiao central

do vetor maior, ou seja, foi adotado que sao os caracteres da posicao 96 ate a posicao 160.

Figura 5.4: Obtencao da senha a partir do vetor de bytes do segredo.

Depois de gerada a senha, para utiliza-la basta copia-la para o clipboard e cola-la no

TrueCrypt. A copia e confirmada com um aviso na tela, como ilustra a Figura 5.5.

Figura 5.5: Copia da senha gerada para a area de transferencia do sistema operacional.

Ao montar um volume no TrueCrypt, a senha sera solicitada. Depois de te-la copiado

para o clipboard, basta cola-la no campo de senha da janela que o TrueCrypt fornece,

como na Figura 5.6.

29

Page 44: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Figura 5.6: Insercao de senha para acessar volume do TrueCrypt.

5.2 A implementacao

A implementacao do programa foi feita em linguagem Java versao 6, utilizando um

computador com Processador AMDr Turion 64X2, com clock de 1.6GHz por nucleo

e 3GB de memoria RAM. Foi utilizado o IDE Netbeans, versao 6.8, para auxiliar a

codificacao do prototipo.

Como foi sugerido utilizar os resultados dos calculos – a senha – no TrueCrypt, que tem

versoes para as plataformas Windows, Linux e Mac, entao o prototipo foi implementado

em linguagem Java, tornando-o tambem compatıvel com estas plataformas.

Foi criada uma classe que implementa os metodos que manipulam o acordo, chamada

GeradorDH.java. Seu codigo fonte esta anexado no Apendice A.1.

Essa classe pode ser instanciada com um ou sem nenhum argumento. Um argumento

valido deve ser do tipo DHParameterSpec. Se ela for inicializada com nenhum argumento,

entao isto indica que um novo conjunto de parametros de par de chaves DH deve ser

preparado pelo Provider. Caso um DHParameterSpec seja fornecido como argumento,

30

Page 45: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

entao isto indica que os parametros para gerar um novo par ja foram definidos anteri-

ormente, e o novo par a ser gerado deve utilizar estes mesmos parametros. Este caso e

aplicado no momento onde um novo par de chaves deve ser criado a partir de uma chave

publica fornecida.

Uma outra funcao tambem implementada e a que copia a senha gerada para a area

de transferencia do sistema operacional. O intuito aqui foi agilizar o processo de copia

da senha da aplicacao para o TrueCrypt, visto que o prototipo nao armazena esta senha

em nenhum arquivo. O botao que implementa esta acao esta no painel onde e gerada a

senha (ilustrado pela Figura 5.3).

A classe que copia a senha para a area de transferencia do sistema operacional (clip-

board) e a Transferencia.java. Seu codigo fonte esta anexado no Apendice A.2.

Tambem foram implementadas as classes AplicacaoApp.java e AplicacaoView.java

que oferecem a interface grafica com o usuario. Para implementar este aplicativo como

uma Java Desktop Application, foi utilizada a biblioteca org.jdesktop.application do

Java 6.

O Javadoc 1 da aplicacao e todos os codigos fonte Java implementados estao contidos

no CD que acompanha este trabalho.

O diagrama de classes UML que auxilia o entendimento da arquitetura desta aplicacao

pode ser visto no Apendice B.1.

1Documentacao de um codigo fonte Java.

31

Page 46: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Capıtulo 6

Conclusao

O compartilhamento de dados e uma pratica corriqueira e, muitas vezes, os dados

compartilhados sao confidenciais e devem ser protegidos. Para se garantir tal confiden-

cialidade, pode-se utilizar algum sistema criptografico conhecido (AES, DES). O True-

Crypt e um dos muitos softwares que podem ser utilizados para criptografar dados. Ele

utiliza o conceito de volumes para definir o conteiner onde os dados criptografados sao

armazenados.

Neste trabalho foi abordada a questao do compartilhamento de chave de seguranca

entre duas partes geograficamente distantes.

Foi criado um prototipo de aplicacao que implementa a tecnica de Diffie-Hellman para

estabelecer um acordo de chaves, atraves da definicao de uma senha compartilhada, que e

utilizada para cifrar e decifrar os volumes do TrueCrypt. A aplicacao foi desenvolvida na

linguagem de programacao JAVA versao 6, e e compatıvel com as plataformas Windows,

Linux e Mac. Pode ser aplicada em varios cenarios onde haja compartilhamento de

informacoes seguras. Em tempo, tal aplicacao soluciona o problema de distribuicao de

chaves em criptografia simetrica.

O resultado obtido foi satisfatorio, visto que com a aplicacao desenvolvida as partes

do acordo podem gerar a mesma senha a qualquer momento, com pouco recurso com-

putacional e com simplicidade. Assim, as partes podem compartilhar, com seguranca, o

volume criptografado sem se preocupar com a divulgacao da senha que o protege.

Como trabalhos futuros, pode-se implementar uma versao que utilize chaves PGP, ou

certificados de seguranca PKCS #3, como descrito em [Laboratories, 1993], ao inves de

utilizar padrao proprio de chaves, como foi feito neste trabalho. Isto permitira a obtencao

32

Page 47: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

dos pares de chaves por entidades externas, eliminando (opcionalmente) a necessidade

de implementar o modulo que gera os pares de chaves. Sugere-se tambem tornar este

aplicativo um modulo do TrueCrypt, para integrar ainda mais esta solucao ao software.

33

Page 48: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Referencias

Almeida, G. B. d. C. (2009). Autenticacao Segura Baseada em Biometria Voltada para a

Dinamica da Digitacao. Monografia, Universidade Federal de Goias.

Burnett, S. e Paine, S. (2002). Criptografia e Seguranca - O Guia Oficial RSA. ISBN-10:

8535210091. Elsevier, 1st edition.

CERT.BR (2006). Cartilha de seguranca. Diponıvel em: http://cartilha.cert.br/.

Filho, A. M. d. S. (2004). Seguranca da informacao: Sobre a necessi-

dade de protecao de sistemas de informacoes. Online. Disponıvel em:

http://www.espacoacademico.com.br/042/42amsf.htm.

Ide, M. T., Reis, J. M., e Kanasoro, R. K. Seguranca

de redes & criptografia. Webpage. Online. Disponıvel em

http://www.shammas.eng.br/acad/sitesalunos0106/012006seg/criptografia.html.

Acessado em setembro de 2010.

Information, W. (2009). Timeline cryptography. Online. Disponıvel em: http://world-

information.org/wio/infostructure/100437611776.

Laboratories, R. (1993). Pkcs #3 v1.4: Diffie-hellman key-agreement

standard. Technical note, RSA Laboratories. Online. Disponıvel em:

ftp://ftp.rsasecurity.com/pub/pkcs/doc/pkcs-3.doc .

Laboratories, R. (2005). Pkcs #5 v2.0: Password-based cryptography

standard. Technical note, RSA Laboratories. Online. Disponıvel em

ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-5v2/pkcs5v2-0.pdf .

Marciano, J. L. P. (2006). Seguranca da Informacao - uma abordagem social. Tese de

doutorado, Universidade de Brasılia.

Moreira, N. S. (2001). Seguranca Mınima - Uma Visao Corporativa da Seguranca de

Informacoes. Axcel Books.

Moreno, E. D., Pereira, F. D., e Chiaramonte, R. B. (2005). Criptografia em Software e

Hardware. Novatec.

34

Page 49: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Promon (2005). Seguranca da informacao, um diferencial determinante na com-

petitividade das corporacoes. Revista, Promon. Online. Disponıvel em:

http://www.promon.com.br/portugues/noticias/download/Seguranca 4Web.pdf.

Stamp, M. (2006). Information Security - Principles and Practice. ISBN-13: 978-0-471-

73848-0. Wiley.

Stewart, B. (2000). Living Internet. Online. Disponıvel em

http://www.livinginternet.com/i/is crypt pkc.htm. Acessado em setembro de 2010.

Tkotz, V. (2009). Historia da criptologia. Pagina na internet, Aldeia Numa Boa, disponıvel

em: http://www.numaboa.com/criptografia/. Acessada em Junho de 2009.

TrueCrypt-Foundation (2009). Documentation. Online. Acessado em Agosto

de 2009, disponıvel em TrueCrypt Free Open-source on-the-fly encryption:

http://www.truecrypt.org/docs.

Weiszflog, W. (2008). Michaelis Moderno Dicionario da Lıngua Portuguesa. Melhora-

mentos, Disponıvel em: http://michaelis.uol.com.br/.

WordIq (2010). Diffie-hellman definition. Online. Disponıvel em

http://www.wordiq.com/definition/Diffie-Hellman. Acessado em setembro de 2010.

35

Page 50: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Apendice A

Codigos Fonte

A.1 A classe GeradorDH

Codigo A.1: A classe GeradorDH.java

1 package aplicacao;

2

3 import java.io . File ;

4 import java.io .FileInputStream;

5 import java.io .FileNotFoundException;

6 import java.io .FileOutputStream;

7 import java.io .IOException;

8 import java.io .ObjectInputStream;

9 import java.io .ObjectOutputStream;

10 import java. security .AlgorithmParameterGenerator;

11 import java. security .AlgorithmParameterGeneratorSpi;

12 import java. security .AlgorithmParameters;

13 import java. security .InvalidAlgorithmParameterException;

14 import java. security .InvalidKeyException;

15 import java. security .KeyPair;

16 import java. security .KeyPairGenerator;

17 import java. security .NoSuchAlgorithmException;

18 import java. security .Provider;

19 import java. security .SecureRandom;

20 import java. security .spec.InvalidParameterSpecException;

21 import javax.crypto.KeyAgreement;

22 import javax.crypto. interfaces .DHPrivateKey;

23 import javax.crypto. interfaces .DHPublicKey;

36

Page 51: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

24 import javax.crypto.spec.DHParameterSpec;

25

26 /∗∗

27 ∗

28 ∗ @author Rayner Pires

29 ∗/

30 public class GeradorDH {

31

32 private DHParameterSpec paramSpecs;

33 private Provider provedor = new com.sun.crypto.provider.SunJCE();

34

35 /∗∗

36 ∗ Chama ele proprio, passando como argumento <code>null</code>.

37 ∗/

38 public GeradorDH() {

39 this (null ) ;

40 }

41

42 /∗∗

43 ∗ Cria um novo objeto para gerar dados sobre um acordo de chaves de DH.

44 ∗ E inicializado com os parametros que, provavelmente, vieram de uma outra

45 ∗ chave. Se {@code parametros} nao for nulo, entao a variavel global

46 ∗ {@code paramSpecs} e inicializada.

47 ∗

48 ∗ @param parametros Os parametros de inicializacao do acordo. Se

49 ∗ {@code parametros} for <i>null</i>, entao novos parametros sao

50 ∗ criados atraves do metodo <code>getParametrosDH</code>.

51 ∗ @see GeradorDH#getParametrosDH

52 ∗/

53 public GeradorDH(DHParameterSpec parametros) {

54 if (parametros == null) {

55 this .paramSpecs = getParametrosDH(1024, this.provedor);

56 } else {

57 this .paramSpecs = parametros;

58 }

59 }

60

61 /∗∗

62 ∗ Exporta um par de chaves para um diretorio no disco.

37

Page 52: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

63 ∗

64 ∗ @param parChaves

65 ∗ @param diretorio

66 ∗ @return {@code true} apenas se o par for salvo com sucesso;

67 ∗ {@code false} caso contrario .

68 ∗/

69 public static boolean exportaPar(KeyPair parChaves, File diretorio) {

70 ObjectOutputStream saida;

71 try {

72 // exporta publica

73 diretorio = new File(diretorio .getPath() + File.separator

74 + "chave publica.pbk");

75 diretorio .createNewFile();

76 saida = new ObjectOutputStream(new FileOutputStream(diretorio));

77 saida.writeObject(parChaves.getPublic());

78 saida. flush () ;

79 saida. close () ;

80

81 //exporta privada

82 diretorio = new File(diretorio .getParent() + File.separator

83 + "chave privada.pvk");

84 diretorio .createNewFile();

85 saida = new ObjectOutputStream(new FileOutputStream(diretorio));

86 saida.writeObject(parChaves.getPrivate());

87 saida. flush () ;

88 saida. close () ;

89 return true;

90 } catch (FileNotFoundException ex) {

91 System.err.println("Erro: O arquivo " + diretorio.getAbsolutePath()

92 + " n~ao pode ser encontrado.");

93 } catch (IOException ex) {

94 System.err.println("Erro ao salvar o par de chaves. I/O error.");

95 }

96 return false ;

97 }

98

99 /∗∗

100 ∗ Importa um par de chaves DH de um arquivo e o retorna.

101 ∗ Opcionalmente pode−se informar strings onde podem ser salvos os caminhos

38

Page 53: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

102 ∗ completos de cada chave encontrada.

103 ∗ @param diretorio Onde deve ser feita a busca.

104 ∗ @param caminhoChavePrivada (Opcional) Serve para armazenar o local onde

105 ∗ foi encontrada a chave privada.

106 ∗ @param caminhoChavePublica (Opcional) Serve para armazenar o local onde

107 ∗ foi encontrada a chave publica.

108 ∗ @return O par de chaves encontrado.

109 ∗/

110 public static KeyPair importaPar(File diretorio,

111 String caminhoChavePrivada, String caminhoChavePublica) {

112 File pvk = null, pbk = null;

113 File [] fileList = diretorio . listFiles () ;

114 for ( int i = 0; i < fileList .length; i++) {

115 File tmp = fileList [ i ];

116 if (tmp.isFile () && tmp.canRead()) {

117 if (tmp.getName().endsWith(".pvk")) {

118 pvk = tmp;

119 if (caminhoChavePrivada != null) {

120 caminhoChavePrivada = tmp.getPath();

121 }

122 } else if (tmp.getName().endsWith(".pbk")) {

123 pbk = tmp;

124 if (caminhoChavePublica != null) {

125 caminhoChavePublica = tmp.getPath();

126 }

127 }

128 }

129 if (pvk != null && pbk != null) {

130 break;

131 }

132 }

133 ObjectInputStream ois;

134 KeyPair parChavesDH = null;

135 try {

136 ois = new ObjectInputStream(new FileInputStream(pvk));

137 DHPrivateKey privada = (DHPrivateKey) ois.readObject();

138 ois . close () ;

139

140 ois = new ObjectInputStream(new FileInputStream(pbk));

39

Page 54: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

141 DHPublicKey publica = (DHPublicKey) ois.readObject();

142 ois . close () ;

143 parChavesDH = new KeyPair(publica, privada);

144 } catch (ClassNotFoundException ex) {

145 System.err.println("ERRO: O arquivo lido esta corrompido ou "

146 + "n~ao e uma chave privada de DH.");

147 } catch (FileNotFoundException ex) {

148 System.err.println("ERRO: N~ao ha chave neste diretorio.");

149 } catch (IOException ex) {

150 System.err.println("Erro de I/O!\n"

151 + "\t" + ex.getMessage());

152 }

153 return parChavesDH;

154 }

155

156 /∗∗

157 ∗ Gera um par de chaves com base nos parametros contidos na variavel global

158 ∗ {@code paramSpecs}.

159 ∗ @return O par de chaves DH gerado.

160 ∗/

161 public KeyPair getNovoParChavesDH() {

162 KeyPair parChaves = null;

163 try {

164 System.out.println("Gerando um par de chaves DH ...");

165 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DH");

166 keyPairGen. initialize ( this .paramSpecs);

167 parChaves = keyPairGen.generateKeyPair();

168 } catch (NoSuchAlgorithmException ex) {

169 System.err.println("ERRO: Algoritmo n~ao encontrado.");

170 } finally {

171 return parChaves;

172 }

173 }

174

175 /∗∗

176 ∗ Retorna uma string de tamanho 64 a partir do segredo compartilhado gerado

177 ∗ pelo metodo {@code getEncodedSecret}.

178 ∗ Primeiramente o vetor de bytes retornado pelo metodo

179 ∗ {@code getEncodedSecret} e convertido em um vetor de caracteres

40

Page 55: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

180 ∗ hexadecimais. Por ultimo mantem nesse vetor somente os 64 caracteres

181 ∗ do centro. Desse ultimo vetor de 64 caracteres que e formada a

182 ∗ string que e retornada.

183 ∗

184 ∗ @param dhPrivateKey A chave privada do acordo

185 ∗ @param dhPublicKey A chave publica do acordo

186 ∗ @return uma string de caracteres hexadecimais de tamanho 64.

187 ∗ @throws InvalidParameterSpecException Em caso de as chaves informadas nao

188 ∗ serem compatıveis, ou nao fizerem parte do mesmo acordo.

189 ∗/

190 public String getSenha(DHPrivateKey dhPrivateKey,

191 DHPublicKey dhPublicKey) throws InvalidParameterSpecException {

192 byte [] segredo = getEncodedSecret(dhPrivateKey, dhPublicKey);

193 String hexa = toHex(segredo);

194 int comeco = (hexa.length() − 64) / 2;

195 int fim = comeco + 64;

196 hexa = hexa.substring(comeco, fim);

197 return hexa;

198 }

199

200 /∗∗

201 ∗ Gera o segredo compartilhado pelo acordo de DH.

202 ∗ Primeiramente consulta o metodo {@code comparaParametrosDH}

203 ∗ para verificar se as chaves passadas como argumento sao compatıveis entre

204 ∗ si , ou seja , se foram geradas com os mesmo parametros.

205 ∗ Em caso positivo, inicializa o acordo com essas chaves e gera o segredo

206 ∗ compartilhado. Em caso negativo, lanca uma

207 ∗ {@code InvalidParameterSpecException}.

208 ∗ @param dhPrivateKey A chave privada de um parceiro do acordo.

209 ∗ @param dhPublicKey A chave publica do outro parceiro do acordo.

210 ∗ @return O segredo compartilhado na forma de um vetor de bytes, cujo

211 ∗ tamanho e 128 (multiplo de 64).

212 ∗ @throws InvalidParameterSpecException

213 ∗ @see GeradorDH#comparaParametrosDH

214 ∗/

215 private byte [] getEncodedSecret(DHPrivateKey dHPrivateKey,

216 DHPublicKey dHPublicKey) throws InvalidParameterSpecException {

217 byte [] segredo = null;

218 if (comparaParametrosDH(dHPrivateKey, dHPublicKey)) {

41

Page 56: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

219 try {

220 KeyAgreement acordo = KeyAgreement.getInstance("DiffieHellman");

221 acordo. init (dHPrivateKey, dHPrivateKey.getParams());

222 acordo.doPhase(dHPublicKey, true);

223 segredo = acordo.generateSecret();

224 } catch (InvalidAlgorithmParameterException ex) {

225 System.err.println("ERRO: Parametro para algoritmo invalido.");

226 } catch (InvalidKeyException ex) {

227 System.err.println("ERRO: Chave invalida.");

228 } catch (NoSuchAlgorithmException ex) {

229 System.err.println("ERRO: Algoritmo n~ao encontrado.");

230 }

231 } else {

232 throw new InvalidParameterSpecException("Os parametros das chaves "

233 + "n~ao correspondem. "

234 + "N~ao e possıvel gerar um acordo Diffie-Hellman.");

235 }

236 return segredo;

237 }

238

239 /∗∗

240 ∗ Compara os parametros DH de duas chaves a fim de verificar se as duas

241 ∗ sao aptas a realizarem um acordo de chaves de DH corretamente.

242 ∗ @param dhPrivateKey

243 ∗ @param dhPublicKey

244 ∗ @return {@code true} somente se os parametros tiverem os mesmos valores;

245 ∗ {@code false} caso contrario .

246 ∗/

247 private boolean comparaParametrosDH(DHPrivateKey dhPrivateKey,

248 DHPublicKey dhPublicKey) {

249 DHParameterSpec param1 = dhPrivateKey.getParams();

250 DHParameterSpec param2 = dhPublicKey.getParams();

251 if (param1.equals(param2)) {

252 return true;

253 } else {

254 if (param1.getL() == param2.getL()) {

255 if (param1.getG().equals(param2.getG())) {

256 if (param1.getP().equals(param2.getP())) {

257 return true;

42

Page 57: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

258 } else if (param1.getP().intValue()

259 == param2.getP().intValue()) {

260 return true;

261 }

262 } else if (param1.getG().intValue()

263 == param2.getG().intValue()) {

264 if (param1.getP().equals(param2.getP())) {

265 return true;

266 } else if (param1.getP().intValue()

267 == param2.getP().intValue()) {

268 return true;

269 }

270 }

271 }

272 }

273 return false ;

274 }

275

276 /∗∗

277 ∗ Gera um conjunto de parametros de algoritmo para o par de chaves.

278 ∗ Trata−se do numero primo <i>p</i> e de sua raiz primitiva <i>&alpha;</i>

279 ∗ e de outros valores , que devem ser o mesmo nos dois pares do acordo,

280 ∗ para que o segredo gerado seja o mesmo para ambos os parceiros.

281 ∗

282 ∗ @param tamanho numero de bits

283 ∗ @param provedor o provedor que implementa

284 ∗ <code>{@link AlgorithmParameterGeneratorSpi}</code> e que gerara os

285 ∗ parametros.

286 ∗ @return Um objeto <code>{@link DHParameterSpec}</code> contendo as

287 ∗ especificacoes dos parametros comuns as chaves de um acordo de

288 ∗ Diffie−Hellman.

289 ∗/

290 private DHParameterSpec getParametrosDH(int tamanho, Provider provedor) {

291 DHParameterSpec especificacoesDH = null;

292 try {

293 if (tamanho < 0) {

294 throw new IllegalArgumentException("O tamanho da chave deve ser"

295 + " maior que zero e multiplo de 64. E recomendavel que"

296 + " seja, pelo menos, 256.");

43

Page 58: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

297 }

298 System.out.println(GeradorDH.class.getName()

299 + ": Criando os parametros Diffie-Hellman "

300 + "(pode demorar bastante) ...");

301 AlgorithmParameterGenerator paramGen =

302 AlgorithmParameterGenerator.getInstance("DH", provedor);

303 paramGen.init(tamanho, new SecureRandom());

304 AlgorithmParameters params = paramGen.generateParameters();

305 especificacoesDH =

306 (DHParameterSpec) params.getParameterSpec(DHParameterSpec.class);

307 } catch (InvalidParameterSpecException ex) {

308 System.err.println("Os parametros das chaves "

309 + "n~ao correspondem. "

310 + "N~ao e possıvel gerar um acordo Diffie-Hellman.");

311 } catch (NoSuchAlgorithmException ex) {

312 System.err.println("ERRO: Algoritmo n~ao encontrado.");

313 }

314 return especificacoesDH;

315 }

316

317 /∗∗

318 ∗ Converte o vetor de bytes fornecido em um vetor de caracteres

319 ∗ hexadecimais, representado por uma string.

320 ∗

321 ∗ @param data o vetor de bytes a ser convertido.

322 ∗ @return uma representacao hexadecimal do vetor de bytes {@code data}

323 ∗/

324 private String toHex(byte[] data) {

325 String digits = "0123456789abcdef";

326 StringBuilder buf = new StringBuilder();

327 for ( int i = 0; i != data.length; i++) {

328 int v = data[i] & 0xff;

329 Object o = digits.charAt(v >> 4);

330 buf.append(o);

331 buf.append(digits.charAt(v & 0xf));

332 }

333 return buf.toString() ;

334 }

335 }

44

Page 59: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

A.2 A classe Transferencia

Codigo A.2: A classe Transferencia.java

1 package aplicacao;

2

3 import java.awt.Toolkit;

4 import java.awt.datatransfer.Clipboard;

5 import java.awt.datatransfer.ClipboardOwner;

6 import java.awt.datatransfer.DataFlavor;

7 import java.awt.datatransfer. StringSelection ;

8 import java.awt.datatransfer.Transferable;

9 import java.awt.datatransfer.UnsupportedFlavorException;

10 import java.io .IOException;

11 import java. util . logging.Level;

12 import java. util . logging.Logger;

13

14 /∗∗

15 ∗ Classe que implementa a manipulacao de dados com a area de transferencia

16 ∗ do sistema.

17 ∗

18 ∗ @author Rayner de Melo Pires

19 ∗/

20 final class Transferencia implements ClipboardOwner {

21

22 @Override

23 public void lostOwnership(Clipboard clipboard, Transferable contents) {

24 System.out.println("O conteudo da area de transferencia ja n~ao pertence mais a \n"

25 + "aplicac~ao de DH.");

26 }

27

28 boolean copiaPara(String senha) {

29 Transferable conteudo = new StringSelection(senha);

30

31 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

32 clipboard.setContents(conteudo, this) ;

33 if (getClipboard().equals(senha)) {

34 System.out.println("Senha copiada para a area de transferencia!");

35 return true;

36 }

45

Page 60: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

37 System.out.println("Erro: Senha n~ao copiada para a area de transferencia.");

38 return false ;

39 }

40

41 private String getClipboard() {

42 String result = "";

43 Clipboard at = Toolkit.getDefaultToolkit().getSystemClipboard();

44 Transferable conteudo = at.getContents(this);

45 boolean hasTransferableText = (conteudo != null) && conteudo.isDataFlavorSupported(

DataFlavor.stringFlavor);

46 if (hasTransferableText) {

47 try {

48 result = (String) conteudo.getTransferData(DataFlavor.stringFlavor);

49 } catch (UnsupportedFlavorException ex) {

50 Logger.getLogger(Transferencia.class .getName()).log(Level.SEVERE, null, ex);

51 } catch (IOException ex) {

52 Logger.getLogger(Transferencia.class .getName()).log(Level.SEVERE, null, ex);

53 }

54 }

55 return result ;

56 }

57 }

46

Page 61: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Apendice B

Diagrama UML

Figura B.1: Diagrama de classes

47

Page 62: Aplica˘c~ao do Algoritmo Di e-Hellman no Compartilhamento ... · e por me transmitir tanta paz, mesmo nos momentos mais dif ceis. Agrade˘co a todos que me acompanharam nessa jornada

Apendice C

Codigos Fontes e Javadoc

O Javadoc e todos os codigos fontes da aplicacao criados estao gravados no CD que

acompanha este material.

48