O projeto visa criar um sistema de criptografia de páginas web no lado cliente, isto é, criptografar as páginas antes que elas sejam enviadas aos servidores. Com isto, seria possível proteger os dados enviados pela internet de forma independente dos sitemas de criptografia dos sites e também, dos sites acessados.
A ideia é fazer um plugin ou extensão para algum navegador (provavelmente o Mozilla Firefox ou o Google Chrome). Cada usuário instalaria a extensão e a configuraria, informando o seu id e a lista de pessoas que poderiam descriptografar suas mensagens (sendo que mais pessoas poderiam ser adicionados depois).
Sistemas de criptografia existentes, por vezes, exigem conhecimento técnico dos usuários (como conhecimentos sobre criação e gerenciamento de chaves). Muitas vezes, os sistemas são feitos para problemas muito específicos (como, encripitar e-mails ou encriptar SMS).
O sistema aqui proposto servirá para encriptar qualquer mensagem enviada pela web (qualquer campo de texto poderá ser criptografado antes de ser enviado ao servidor), além disto, não exigirá conhecimento técnico por parte dos usuários
Toda vez que um usuário quisesse enviar um texto criptografado, ele apenas escreveria o texto com algum código de indicação a ser definido, por exemplo, digamos que um usuário X está usando o facebook e ele posta o seguinte texto:
"]]crypto[[ Olá, amigos. O encontro de amanhã será realizado às 16h."
Essa mensagem seria então criptografada antes de ser enviada ao servidor do Facebook. Depois, todas as pessoas que tiverem acesso a esta mensagem (servidores e usuários do Facebook) veriam a mensagem criptografada, a menos que tivessem a extensão instalada no navegador e estivessem incluídos na lista de pessoas com permissão para descriptografar a mensagem.
Dessa forma, a etapa de descriptografia seria "invisível" para o usuário, no sentido de que ela não mudaria em nada a experiência deste com o navegador.
Ou seja, o sistema funcionaria basicamente da seguinte forma:
1. Um usuário X, proprietário de uma chave K (atribuída automaticamente pelo gerenciador de chaves) acessa uma página Y.
2. X preenche um campo formulário qualquer (pode ser um e-mail, o chat do Facebook, um post em um fórum), e o envia.
3. Antes dos dados serem enviados, o sistema criptografa os dados dos campos de texto usando a chave K.
(Neste passo 3, o sistema pode identificar quais campos serão criptografados e quais não serão com o auxílio do usuário, seja inserindo um código pré-definido no campo de texto ou selecionando o campo de texto previamente, por meio de alguma opção do sistema).
1. Um usuário Z acessa uma página utilizando algum navegador de internet.
2. O sistema intercepta a página antes do navegador mostrá-la e identifica campos que foram criptografados por algum usuário (digamos, um usuário X).
3. O sistema verifica se Z tem permissão para ver o conteúdo criptografado por X (ou seja, se Z está na rede de contatos de X)
3.1 Caso Z tenha permissão, o sistema descriptografa o conteúdo
3.2 Caso contrário, o sistema entrega a página como ela está ao navegador.
4. O navegador mostra a página normalmente (sem se dar conta de tudo o que aconteceu, mostrando o conteúdo criptografado ou não dependendo do que aconteça no passo 3).
O sistema deverá contar com um distribuidor e gerenciador de chaves, para que os usários não precisem se preocupar com estas partes mais técnicas.
* Tentar implementar o sistema com uma restrição no número de usuários.
* Tentar implementar o sistema para algum servidor de e-mail específico (por exemplo, o Gmail).
Estudo do programa Pretty Goog Privacy (PGP). O intuito era verificar se este não era muito parecido com a ideia proposta neste projeto. Por fim, concluiu-se que não, pois este é um sistema de criptografia voltado apenas para e-mails. Este sistema emprega quatro tipos de criptografia:
1 - IDEA e Triple-DES para criptografar o corpo das mensagens.
2 - RSA e DSA para geração de assinaturas digitais.
3 - RSA e ElGamal para troca de chaves.
4 - A função de hashing SHA-1.
Com isto, ele garante autenticação e comunicação segura, mas, como dito anteriormente, apenas para mensagens via e-mail.
Estudo de sistemas de criptogafia e algoritmos baseados em identidade (ID-Based Cryptography). O objetivo é procurar uma forma de aplicar este tipo moderno de criptografia no sistema proposto no TCC.
A principal vantagen sobre sistemas tradicionais é a utilização da identidade de um usuário como a sua própria chave pública. Isto torna desnecessário manter um servidor de chaves públicas; torna mais eficiente o processo de criptografia; além disto, uma identidade (como um e-mail) é bem menor do que uma chave pública tradicional.
Por outro lado, este tipo de criptografia traz alguns problemas técnicos do ponto de vista do implementador do sistema, pois é relativamente moderno, o que implica uma certa dificuldade em achar textos de referência e tem uma fundamentação teórica mais complicada (com o uso de Pairings e álgebra multilinear ).
Estudo da documentação e tutoriais da Add-on Developer Hub , portal dedicado ao ensino do desenvolvimento de plugins, extensões e afins, para o navegador Mozilla Firefox.
1 - Introdução
2 - Objetivos
3 - Metodologia
4 - O sistema implementado
4.1 - Detalhes teóricos
4.1.1 - Algoritmos de criptografia utilizados
4.1.2 - Distribuidor e gerenciador de chaves
4.2 - Detalhes técnicos
4.2.1 - Testes de eficiência
4.2.2 - Testes de segurança
5 - Considerações finais
6 - Bibliografia
1 - Sobre o TCC
1.1 - Desafios, dificuldades e experiências
1.2 - Futuro do projeto
2 -Sobre a minha graduação
2.1 - Comentário sobre as disciplinas do curso
2.2 - Disciplinas consideradas importantes para o TCC
2.3 - Comentário sobre o IME-USP
4 - Perspectivas para o futuro
Adam J. Elbirt, Understanding and Applying Cryptography and Data Security. CRC Press, 2009
Colin Boyd e Anish Mathuria, Protocols for Authentication and Key Establishment. Springer, 2003
Luther Martin, Introduction to Identity-Based Encryption. Artech House, 2008