ITACRIPTO: UMA PROPOSTA DE APLICATIVO DE CRIPTOGRAFIA PARA O ITA



Documentos relacionados
Assinatura Digital: problema

Segurança da Informação

Prof. Roberto Franciscatto 4º Semestre - TSI - CAFW. Free Powerpoint Templates Page 1

REDES DE COMPUTADORES E TELECOMUNICAÇÕES MÓDULO 13

Sistemas Distribuídos: Conceitos e Projeto Introdução a Criptografia e Criptografia Simétrica

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

SISTEMAS DISTRIBUIDOS. Prof. Marcelo de Sá Barbosa

Auditoria e Segurança da Informação GSI536. Prof. Rodrigo Sanches Miani FACOM/UFU

UNIP UNIVERSIDADE PAULISTA

Questionário de Estudo - P1 Criptografia

Criptografia e Segurança em Redes Capítulo 9. Quarta Edição William Stallings

I Seminário sobre Segurança da Informação e Comunicações CRIPTOGRAFIA

PROJETO INTEGRADOR. 5º PERÍODO Gestão da Tecnologia da Informação Noturno

Auditoria e Segurança de Sistemas Aula 09 Criptografia. Felipe S. L. G. Duarte Felipelageduarte+fatece@gmail.com

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

TREINAMENTO. Novo processo de emissão de certificados via applet.

fonte:

Aplicação Prática de Lua para Web

PROJETO DE REDES

FTP Protocolo de Transferência de Arquivos

Criptografia e Chave Pública. Segurança da Informação

UNIVERSIDADE FEDERAL DE PELOTAS

Manual RbCripto. Sobre o RbCripto. Requisitos. Estatísticas de exemplo. Criptografia assimétrica versus criptografia simétrica. Como usar o programa

C R I P T O G R A F I A

Capítulo 8. Segurança de redes

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

Atualizaça o do Maker

AULA 3 FERRAMENTAS E APLICATIVOS DE NAVEGAÇÃO, DE CORREIO ELETRÔNICO, DE GRUPOS DE DISCUSSÃO, DE BUSCA E PESQUISA (PARTE II)

Segurança na Web. Programação para a Internet. Prof. Vilson Heck Junior

SMS Corporativo Manual do Usuário

02 - Usando o SiteMaster - Informações importantes

LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER

Novo Guia de uso rápido do PROJUDI

Manual AGENDA DE BACKUP

Manual dos Serviços de Interoperabilidade

Como acessar o novo webmail da Educação? Manual do Usuário. 15/9/2009 Gerencia de Suporte, Redes e Novas Tecnologias Claudia M.S.

PROJETO DE REDES

3 Dicas MATADORAS Para Escrever s Que VENDEM Imóveis

Segurança da Informação. Prof. Gleison Batista de Sousa

Servidor de Gerenciamento de Chaves de Encriptação Aérea OTAR

OI CONTA EMPRESA MANUAL DO USUÁRIO

CERTIFICAÇÃO DIGITAL

EXEMPLO DE COMO FAZER UMA MALA DIRETA

Registro e Acompanhamento de Chamados

Processo de Envio de

Está apto a utilizar o sistema, o usuário que tenha conhecimentos básicos de informática e navegação na internet.

Capítulo 5 Métodos de Defesa

Curso: Sistemas de Informação Disciplina: Criptografia e segurança de dados TUTORIAL PARA GERAÇÃO DE CERTIFICADOS DIGITAIS

Configuração do cliente de Thunderbird para usuários DAC

EDITORA FERREIRA MP/RJ_EXERCÍCIOS 01

Sumário INTRODUÇÃO Acesso ao Ambiente do Aluno Ferramentas e Configurações Ver Perfil Modificar Perfil...

UNIVERSIDADE FEDERAL DE GOIÁS CERCOMP (CENTRO DE RECURSOS COMPUTACIONAIS) TUTORIAL DE USO DO WEBMAIL - UFG

Manual de Utilização do Zimbra

15/8/2007 Gerencia de Tecnologia da Informação Claudia M.S. Tomaz

CERTIFICADO DIGITAL ARMAZENADO NO COMPUTADOR (A1) Manual do Usuário

Processo de Controle das Reposições da loja

4. Qual seria o impacto da escolha de uma chave que possua letras repetidas em uma cifra de transposição?

FAQ Sistema Eletrônico de Informações SEI-MP

Arquitetura de Rede de Computadores

Assinatura e Certificação Digital

Outlook Apresentação

Introdução... O que é SSL... Quais são os tipos de SSL... Por que ter... Como contratar... Como é feita a manutenção...

ISO/IEC 12207: Gerência de Configuração

Transcrição:

Anais do 14 O Encontro de Iniciação Científica e Pós-Graduação do ITA XIV ENCITA / 2008 Instituto Tecnológico de Aeronáutica São José dos Campos SP Brasil Outubro 20 a 23 2008. ITACRIPTO: UMA PROPOSTA DE APLICATIVO DE CRIPTOGRAFIA PARA O ITA Acrisio Domiciano Dias Instituto Tecnológico de Aeronáutica 12229-900 São José dos Campos - ITA/CTA Bolsista PIBIC-CNPq acrisiodd@gmail.com Milton Teruaki Suetsugu Sakude Instituto Tecnológico de Aeronáutica 12229-900 São José dos Campos - ITA/CTA Professor Assistente - ITA milton@ita.br Resumo. O artigo busca mostrar o desenvolvimento de um projeto baseado em conceitos de criptografia mais especificamente em infra-estruturas de chave pública. Trata-se de um sistema criptográfico baseado em certificados digitais no qual podemos facilmente enviar mensagens criptografadas bem como ter certeza sobre a origem de mensagens recebidas. O projeto tem como objetivo a construção de um aplicativo que gerencie uma pequena infraestrutura de chave pública para a troca de arquivos entre docentes e discente tendo como primeiro foco as notas dos alunos. Palavras-chaves: Criptografia chave-pública software. 1. Introdução Com o avanço na demanda por meios de comunicação torna-se cada vez mais necessário o uso de criptografia para permitir o trânsito seguro de informações. Deve-se notar entretanto que o custo para a aplicação de ferramentas de criptografia é relativamente alto e que o desenvolvimento de métodos que simplifiquem esse processo é essencial. O maior problema para implementar uma infra-estrutura de criptografia eficiente é o gerenciamento das chaves. Durante muito tempo não houve uma forma eficiente de realizar tal gerenciamento já que não havia internet ou outros meios mais eficientes de comunicação. Com o avanço da tecnologia criou-se o sistema de chaves públicas baseado em soluções nas quais podemos armazenar distribuir e autenticar as chaves a partir de um servidor bem como revogar para evitar o mau uso. Pensando nesse problema foi proposto o trabalho que é exposto neste artigo. Para facilitar a compreensão do trabalho o artigo foi dividido em 4 partes sendo esta a primeira. Na segunda parte faz-se uma introdução a Criptografia trazendo um pouco da história da evolução da criptografia além de definirem-se os conceitos de criptografia simétrica e assimétrica dando atenção maior aos dois algoritmos mais utilizados atualmente: o AES e o RSA. A terceira parte apresenta o problema da distribuição de chaves públicas. Descreve-se o processo comenta-se sobre seus pontos fortes e fracos. Além disso definem-se os conceitos de Assinatura Digital Certificado Digital e Autoridade Certificadora que juntos montam a base para o gerenciamento de chaves. A quarta parte mostra o projeto do software proposto para gerenciar uma pequena infra-estrutura de chave pública como o trânsito de informações entre professores e alunos no ITA. 2. Criptografia 2.1. Introdução Histórica Com o advento da escrita tornou-se necessário criar-se formas para esconder segredos impedindo que determinadas informações pudessem ser reveladas. Além disso no mundo atual onde praticamente tudo está conectado a internet muitas aplicações exigem alguma forma de segurança e a criptografia é uma delas talvez a mais importante. A evolução da criptografia foi inicialmente lenta mas a necessidade de proteger informações tornou-se maior principalmente durante as guerras. E foi nos períodos de guerra infelizmente que a criptografia viu seu maior avanço [1]. Uma das primeiras cifras utilizadas a cifra de transposição funciona basicamente através de um rearranjo das letras das palavras. Entretanto essa cifra não oferecia uma segurança muito boa pois organizar as letras ao acaso pode gerar anagramas muito difíceis de resolver e criar uma forma um pouco mais sutil como a cerca de ferrovia no qual se

escrevia a mensagem de forma que letras alternadas ficassem separadas entre a linha superior e inferior não representavam grande desafio para um criptologista. A solução foram as cifras de substituição que ficaram famosas por terem sido usadas por Júlio César para fins militares. Trata-se de trocar as letras da palavra de forma sistemática como reescrever a mensagem utilizando um alfabeto que inicia no D por exemplo. Tal cifra permaneceu por muito tempo como segura até que os criptólogos desvendaram seus segredos [1]. Com o fim do período de guerras a criptografia passou a evoluir para tentar proteger a privacidade e dar segurança a informações de governos. Com a evolução da Internet criaram-se padrões como o AES e o RSA além de novas ferramentas como os certificados digitais e as assinaturas digitais. Num mercado que movimenta bilhões de dólares anualmente a segurança dos clientes e usuário é fundamental para a credibilidade desse meio de comunicação tão importante. 2.2. Criptografias Simétricas Assimétricas e outros conceitos. As cifras são algoritmos utilizados para converter a mensagem original (texto pleno) numa mensagem codificada (texto criptografado). Inicialmente quando não se utilizavam chaves a forma como o texto era codificado devia ser mantida secreta e apenas aqueles que enviavam ou recebiam a mensagem sabiam o algoritmo. Isso tornava o processo de criptografia complicado já que para cada pessoa que quer enviar a mensagem deve-se criar um novo processo como a tabela que relaciona letras e números numa cifra de substituição. Com o uso de chaves o processo é conhecido enquanto a chave é mantida secreta. Existem dois sistemas de criptografia usando chaves a criptografia de chaves simétricas e a criptografia de chaves assimétricas. 2.2.1. Criptografia de chaves simétricas e o AES Na criptografia de chaves simétricas a mesma chave utilizada para codificar é utilizada para decriptografar a mensagem. Os principais algoritmos são o AES DES Triple-DES RC2 RC4 e o RC5. O padrão atual é o AES. Note que esses algoritmos são importantes por serem úteis e relativamente seguros exceto o DES. A grande dificuldade está na distribuição das chaves que necessitam ser feitas por um canal seguro algo que nem sempre está disponível. O AES (Advanced Encryption Standard) também conhecido como Rijndael é uma cifra de bloco criada por Joan Daemen e Vicent Rijmen. O AES tornou-se o padrão de criptografia adotado pelo governo americano em 2000 após ganhar um concurso em 1997 quando o DES passou a ser considerado inseguro já que o pequeno tamanho das chaves utilizadas era frágil frente à capacidade computacional que se vivia. Cifras de blocos são funções que passam blocos de n bits de um texto pleno para um bloco de n bits criptografados. Essas cifras podem ser vistas como uma forma melhorada das cifras de substituição. O AES suporta blocos de 128 bits usando chaves de 128 192 e 256 bits dependendo do nível de segurança que pretende ser usado. O AES opera sobre um arranjo bidimensional de bytes com 4x4 posições e além disso possui um número variável de rounds que dependem do tamanho da chave escolhida sendo 9 para 128 bits 11 para 192 bits e 13 pra 256 bits. O processo de criptografar um bloco de dados possui quatro passos. I. AddRoundKey Nesse estágio cada byte do estado é combinado com a subchave própria do estado. Esta subchave foi criada a partir do agendamento de chaves do Rijndael que expande a chave original. II. SubBytes Nesse estágio ocorre uma substituição não linear na qual cada byte é substituído por outro de acordo com uma tabela referência a S-Box. A S-Box que foi construída a partir da combinação de uma função inversora e uma transformação afim inversível. III. ShitRows Nessa etapa ocorre o deslocamento de bytes de uma determinada linha do bloco de um determinado número de posições. A primeira linha permanece inalterada enquanto cada byte da segunda linha é à esquerda de uma posição e a terceira e quartas linhas são deslocadas de duas e três posições respectivamente. IV. MixColumns Nesse estágio os quatro bytes de cada coluna do estado são combinados usando uma transformação linear inversível. No último round a etapa de MixColumns é substituída por um AddRoundKey. 2.2.2. Criptografia de chaves assimétricas e o RSA No sistema de criptografia assimétrica cada usuário possui um par de chaves uma chamada pública e outra chamada privada. De forma simplificada a chave publica é usada para criptografar a mensagem enquanto a privada é utilizada para decriptografar. Os principais algoritmos de chave assimétrica são o DAS o RAS e o El-Gammal. Neste artigo a ênfase é o RSA. O RSA é o algoritmo de chave-pública mais usado atualmente apesar de ter estado protegido por patente até 2000. Foi desenvolvido por Ron Rivest Ali Shamir e Leonard Adleman. Uma de suas vantagens é que pode ser usado tanto

para cifragem quanto para a criação de assinaturas digitais além de ser baseado na dificuldade de fazer a fatoração de grandes números num tempo viável. A geração de chaves possui basicamente quatros passos: I. Inicialmente temos que gerar randomicamente dois números primos p e q muito grandes e com tamanhos parecidos. II. Depois encontramos n = pq e φ = ( p 1)( q 1). III. Selecionamos randomicamente um número e1 < e < φ de forma que gcd( e φ ) = 1 IV. Usando aritmética modular encontramos o único inteiro d 1 < d < φ tal que ed 1(mod φ). V. O par (n e) forma a chave pública enquanto d é a chave privada. Para criptografar uma mensagem obtém-se a chave pública do destinatário representa-se a mensagem como um e inteiro m sendo que m pertence ao intervalo [0 n 1]. Depois calcula-se c = m (mod n) e a mensagem cifrada d c é enviada. O destinatário ao receber a mensagem decriptografa usando m = c mod n [2] [3]. A segurança do RSA encontra-se no fato de que é computacionalmente difícil fazer a fatoração de grandes números ou seja encontra d a partir de e é praticamente impossível pelo menos com os meios computacionais atuais. Um problema existente ao criptografar uma mensagem usando RSA é a escolha de e pois para mensagens 1 pequenas com m < n e pode-se encontrar m apenas calculando a e -ésima raiz de c. Note que o problema para grandes mensagens está no tempo gasto para computar as exponenciações que aparecem no algoritmo. Observa-se que os algoritmos de geração de números randômicos devem ser realmente eficientes para evitar que p e q sejam previsíveis ou que e seja facilmente encontrado. A OpenSSL também possui uma implementação boa do algoritmo RSA apesar de recentemente um bug ter sido encontrado no código de geração de números randômicos que fazia com que o algoritmo implementado gerasse um número fixo de chaves tornando possível o ataque brute force. 3. Sistema de Criptografia de chave pública Como mostrado no algoritmo RSA a criptografia de chave pública funciona deixando uma das chaves no caso a chave pública ao alcance de todos pois qualquer um poderia enviar mensagem usando a chave pública do destinatário mas somente este poderia ler. Entretanto surge um problema de segurança nessa forma de comunicação que é o problema do man in the middle que será discutido no próximo tópico. 3.1. Man in the middle Numa troca de mensagens cifradas utilizando criptografia de chave pública pode-se ler a mensagem sem saber a chave privada do destinatário. Suponha por exemplo que Alice pretende mandar uma mensagem para Bob e que Clair seja uma pessoa bastante interessada na mensagem. Alice tem que pedir a chave pública de Bob. Entretanto Clair intercepta a mensagem na qual Bob envia sua chave pública e envia para Alice sua chave pública. Alice envia então a mensagem criptografada utilizando a chave de Clair. Essa intercepta novamente a mensagem decripta e lê seu conteúdo depois encripta usando a chave pública de Bob e envia para este. Note que nem Alice nem Bob possuem métodos de saber que sua mensagem foi interceptada e lida. Para evitar estes tipos de ataques criaram-se protocolos de distribuição de chaves como o PKI (Public Key Infrastructure). Nesse protocolo cada chave pública está ligada ao seu dono por meio de uma Autoridade Certificadora (CA) ou seja é possível ter certeza de que a chave pública que está sendo utilizada é realmente a do destinatário evitando assim o problema do man in the middle. Quando se monta uma infra-estrutura de chave pública é possível que dois computadores que não tiveram nenhum contato anterior possam comunicar-se de forma segura e trocarem mensagens criptografadas com o uso dos certificados digitais. No próximo tópico apresenta-se a definição de Assinatura Digital e uma descrição mais aprofundada dos certificados digitais. 3.2. Assinatura Digital A assinatura digital funciona como uma assinatura convencional ou seja serve para certificar que a pessoa com qual troca-se mensagens é realmente quem diz ser. A criação de uma assinatura digital requer o uso de um algoritmo de criptografia assimétrico o RSA por exemplo sendo que ocorre inversão das chaves. A forma mais básica de assinar uma mensagem é criptografando-a com nossa chave privada. Assim qualquer pessoa que possua a chave pública sabe que a mensagem foi realmente enviada por aquele que se diz remetente.

Entretanto existe a possibilidade de que alguém gere mensagens aleatórias assinadas de determinada pessoa usando sua chave pública. Para evitar isso se criou a função Hash. Funções Hash são funções não computacionalmente inversíveis. Os principais algoritmos são o MD2 o MD4 o MD5 o SHA-1 e o SHA. Os mais usados são o SHA e o SHA-1 [4]. Assim para assinar uma mensagem inicialmente cria-se sua Hash então a mensagem é enviada juntamente com um anexo que é a saída função Hash criptografada com a chave privada de quem envia. O receptor ao receber a mensagem faz a Hash desta e decripta a assinatura usando a chave pública do remetente. Caso o valor seja o mesmo que o obtido na Hash da mensagem recebida temos o remetente autenticado. 3.3. Certificados Digitais Os certificados digitais são o coração da PKI. Pode-se comparar o certificado a um passaporte que liga a foto à pessoa solidificando a identidade da pessoa. Para gerar um certificado é necessário uma Autoridade Certificadora (CA). No certificado temos algumas informações do dono do certificado bem como sua chave pública. O tipo mais difundido de certificado é o X.509 que foi popularizado pelo SSL do Netscape e hoje é implementado usando a OPENSSL por exemplo. Um certificado X.509 contêm informações sobre aversão utilizada os dados dos donos e suas chaves públicas a data de validade do certificado além do nome e da assinatura da CA [5]. 3.4. Autoridade Certificadora A autoridade certificadora trata-se de uma entidade confiável que gera chaves e certificados digitais além de permitir a verificação de um certificado se realmente pertence a quem o está distribuindo. Em grandes redes como a internet são necessários vários níveis de CA gerando uma árvore de dependências. Note que é possível confiar em determinada CA apenas procurando uma autoridade superior que seja confiável [6]. 3.5. Distribuição de chaves usando certificados digitais A distribuição de chaves através de certificados é ilustrada através de um exemplo. Suponha novamente a troca de mensagens entre dois usuários Alice e Bob. Alice pede o certificado de Bob para a CA esta por sua vez envia o certificado para Alice. Com a chave pública da CA Alice é capaz de verificar a assinatura da CA. Depois certifica-se de que o certificado é realmente o requerido. Então Alice assina a mensagem usando sua chave privada e criptografa tanto a mensagem como a assinatura usando o certificado de Bob e a envia. Bob então decodifica a mensagem e a assinatura com sua chave privada e além disso pede o certificado de Alice para a CA para que possa verificar a assinatura de Alice. Note que nesse protocolo não temos o famoso man in the middle [1]. O único ataque possível pode ocorrer quando a terceira pessoa possui acesso à chave privada da CA o que é praticamente impossível de ocorrer pois a proposta de uma CA é que esta seja implementada em um computador que seja desconectado da grande rede e esteja protegido fisicamente do acesso de pessoas não autorizadas. 4. Projeto do Software 4.1. Descrição do Problema A idéia que deu origem ao presente projeto já discutida anteriormente de forma teórica em outros projetos de iniciação científica [3] [6] foi desenvolvida de forma didática através da elaboração de um aplicativo que pudesse realizar o trânsito de informações entre docentes e discentes do ITA de forma mais segura. O objetivo inicial era utilizar uma biblioteca open source como a OPENSSL um dos objetos de estudo do projeto. Entretanto durante o desenvolvimento do projeto a OpenSSL mostrou-se bastante complicada para a implementação. Concluímos então que a opção pelo JAVA usando a biblioteca cryptix-jce-provider.jar por exemplo seria a mais sensata. 4.2. O aplicativo gerador de certificados Por motivos de segurança esse aplicativo deve ser instalado em um servidor que não tem acesso à internet ou qualquer rede interna já que este guarda a CA usada para assinar os certificados gerados. Essa CA pode ser obtida de forma gratuita em sites como o www.cacert.org. Para o nível de confiança existente entre docentes e discentes no ITA aqueles que queiram certificados e conseqüentemente chaves públicas e privadas têm acesso local ao servidor. Esse aplicativo deve ser bastante friendly-user e recebe como entradas o nome do usuário e o número do crachá do usuário. O aplicativo gera a chaves públicas e privadas do usuário além de seu certificado digital. O usuário leva então suas chaves em alguma forma de mídia removível e deixa no servidor apenas seu Certificado Digital. Os certificados ficam armazenados em um banco de dados juntamente com os dados do seu dono. Esse banco de dados é copiado em períodos determinados por uma pessoa responsável provavelmente algum funcionário da Dival. Tal cópia

serve para atualizar o banco de dados do distribuidor de certificados que será mostrado no próximo bloco. A janela do Gerador de Certificado é aproximadamente como a mostrada na figura 1. Note a barra de progresso. Caso ocorra erro o usuário é advertido e deverá tentar novamente. 4.3. O aplicativo Distribuidor de Certificados Figura 1. ITACripto_GeradorDeCertificados. O distribuidor de certificados é um banco de dados que estará disponível via web. O usuário que deseja enviar uma mensagem pode adquirir o certificado do destinatário da mensagem fazendo uma busca no site. Ao encontrar o certificado desejado deve fazer download deste e então usá-lo para verificar assinaturas e enviar arquivos cifrados já que o certificado possui a chave pública de seu dono. 4.4. O aplicativo ITACRIPTO Este o aplicativo deve estar instaladado nos computadores de todos os usuários. Como dito anteriormente a forma mais fácil de codificá-lo seria usando Java pois o usuário somente precisaria de uma JVM instalada em sua máquina algo muito comum atualmente. Nesse aplicativo o usuário pode criptografar e decriptografar arquivos bem como assinar documentos e verificar assinaturas destes além de verificar e visualizar certificados. A janela principal deste aplicativo será como a da figura 2. Figura 2. ITACRIPTO - Janela Principal do Usuário.

4.4.1. Criptografando / Decriptografando arquivos Para fazer a cifragem de um arquivo o usuário deverá primeiramente indicar o caminho deste arquivo e poderá procurar por este arquivo através do botão Browse. Para criptografar um arquivo o usuário usa sua chave pública caso não deseje enviar o arquivo para ninguém. Para enviar o arquivo cifrado para determinada pessoa usa o certificado desta que pode ser adquirido usando o aplicativo distribuidor de certificados. É interessante que o usuário visualize o certificado antes de usá-lo e o verifique. Se o processo for concluído com sucesso ou houver erro uma janela pop-up será exibida alertando o usuário. 4.4.2. Assinando e verificando assinatura de arquivos Figura 3. Exemplo do pop-up de sucesso ou erro. Para assinar um arquivo o usuário entra com o arquivo a ser assinado como feito no item anterior e com sua chave privada. Clica em Assinar e então espera pelo pop-up resposta. Caso o processo tenha sido realizado com sucesso uma janela semelhante a da figura 3 é exibida. Se o usuário desejar verificar a assinatura de determinado arquivo novamente este entra com o arquivo a ser verificado e com o certificado da pessoa que enviou o arquivo. Após clicar em Verificar Assinatura o usuário recebe o pop-up sobre o status do processo como mostrado na figura 4. 4.4.3. Visualizando e verificando certificados Figura 4. Pop-up de assinatura válida ou não válida. Para visualizar os certificados o usuário entra com o mesmo no campo Certificado e clica em Mostrar Certificado. Ele receberá uma janela como mostrada na figura 5. Figura 5 Informações sobre o certificado. Para verificar os certificados o usuário entra com o certificado e clica em verificar certificado. Como resultado receberá um pop-up mostrando o status do certificado como mostrado na figura 6.

Figura 6 - Status do Certificado. 5. Conclusões e Sugestões Os estudos feitos para a realização desta iniciação foram importantes para a formação de uma visão geral sobre as dificuldades inerentes no desenvolvimento de softwares além de proporcionar um aumento de conhecimento em relação à criptografia por parte do autor. Durante a realização do projeto o contato com várias linguagens de programação entre elas o C++ e o JAVA pôde dar uma idéia sobre qual a melhor linguagem a ser aplicada em determinado projeto. Como proposta para trabalhos posteriores temos a codificação e teste do aplicativo aqui proposto. Além disso poderá haver um estudo sobre como melhorar a distribuição das chaves e certificados pensando numa integração do aplicativo distribuidor de certificado com algum gerenciador de e-mail livre como o Thunderbird o que facilitaria a busca pelos certificados por parte do usuário final. O contato com a equipe desenvolvedora é recomendado para qualquer novo projeto relacionado à criptografia de dados pois a experiência deles é sempre bem-vinda. 6. Agradecimentos À minha família que vem acompanhando minha caminhada no ITA sabe das dificuldades e me suporta nos momentos difíceis. Ao professor Milton Sakude por ter orientado este trabalho e ajudado no meu crescimento intelectual. À professora Tânia Nunes Rabello a quem primeiro propus a idéia deste trabalho. Ao ITA por minha formação acadêmica e pelos momentos que tenho vivido nesta Instituição. Ao CNPq que por meio do PIBIC possibilitou a realização deste trabalho. 7. Referências [1] Singh S. O livro dos códigos Editor Record. 2001. [2] Stinson D. R. Cryptography: theory and practice Ed. CRC Press LLC. 1995. [3] Costa R. C. T. N. Rabello Algoritmo de criptografia para a passagem de notas entre professores e pró-reitoria de graduação Anais do 12º Encontro de Iniciação Científica e Pós-Graduação do ITA São José dos Campos Brasil. 2006. [4] Menezes A.J. Oorschot P.C. Van; Vamstone S.A. Handbook of Applied Cryptography Ed. CRC Press. 1996. [5] Chandra P. Messier M.; Viega J. Network Security with OpenSSL Ed. O Reily. 2002. [6] Baggio O. D. Distribuição de chaves públicas para algoritmos de criptografia assimétrica. Trabalho de graduação apresentado ao ITA São José dos Campos Brasil. 2003.