implementação da aplicabilidade de criptossistemas baseados em

Transcrição

implementação da aplicabilidade de criptossistemas baseados em
SOCIEDADE EDUCACIONAL DE SANTA CATARINA - SOCIESC
INSTITUTO SUPERIOR TUPY - IST
ROBSON THANAEL POFFO
IMPLEMENTAÇÃO DA APLICABILIDADE DE CRIPTOSSISTEMAS BASEADOS EM
IDENTIDADE
Joinville
2006
ROBSON THANAEL POFFO
IMPLEMENTAÇÃO DA APLICABILIDADE DE CRIPTOSSISTEMAS BASEADOS EM
IDENTIDADE
Esse trabalho será apresentado ao Instituto Superior Tupy como requisito parcial para a obtenção
de grau de bacharel em Sistemas de Informação,
sob orientação do Professor MSc. Mehran Misaghi.
Joinville
2006
POFFO, ROBSON THANAEL. IMPLEMENTAÇÃO DA APLICABILIDADE DE CRIPTOSSISTEMAS BASEADOS EM IDENTIDADE. Joinville: SOCIESC, 2006.
ROBSON THANAEL POFFO
IMPLEMENTAÇÃO DA APLICABILIDADE DE CRIPTOSSISTEMAS BASEADOS EM
IDENTIDADE
Esse trabalho foi julgado e aprovado em
sua forma final pela banca examinadora
abaixo assinada.
Joinville, 05 de dezembro de 2006
Prof. MSc. Mehran Misaghi
Prof. MSc. Fernando Cézar de Oliveira Lopes
MSc. Glauco Vinicius Scheffel (Datasul)
Aos meus pais Hélio José Poffo e Evaldina
Maria Poffo, meu irmão Hélio José Poffo Jr.
e minha namorada Suzana Regina Vailatti.
AGRADECIMENTOS
A Deus que possibilitou que este trabalho
fosse finalizado;
A minha família que abriram mão de seu
tempo comigo para a elaboração deste trabalho;
A minha namorada Suzana que soube
compreender minha ausência no período
de elaboração deste trabalho e que me ajudou na revisão deste trabalho;
Ao professor Mehran pela sua dedicação e
apoio na elaboração deste trabalho;
Ao professor Sandro pelas diversas revisões deste trabalho;
A todos que não foram mencionados, mas
que, direta ou indiretamente, ajudaram
para a finalização deste trabalho.
Eu fiz essa carta maior que o normal, somente porque não tive
tempo de fazê-la mais curta.
Blaise Pascal
Computadores não resolvem problemas,
eles executam
soluções.
Laurent Gasser
RESUMO
Com o avanço da tecnologia e a popularização da Internet, a privacidade está cada vez mais exposta ao mundo virtual. Juntamente com essa exposição, muitos sofrem diariamente agressões
no que se diz respeito à sua privacidade, onde se tem constantemente conversas interceptadas
e muitas vezes auditadas por instituições. Este trabalho tem como objetivo fazer um estudo de
sistemas criptográficos baseados em identidade (IBE), mostrando suas principais cacraterísticas e aplicabilidades, apresentando ao final, o desenvolvimento de duas aplicações IBE com
finalidade acadêmica, mas que podem ser utilizadas como exemplo de aplicabilidades de ferramentas IBE. A primeira aplicação desenvolvida utiliza conceitos de IBE para demonstrar uma
conversa on-line onde alguns usuários comunicam-se utilizando os conceito de disponibilidade
temporal, isso quer dizer, as mensagens somente poderão ser visualizadas de forma correta
dependendo da disponibilidade aplicada pelo emissor da mensagem. A segunda aplicação desenvolvida utiliza conceitos de IBE para elaboração de uma aplicação que efetua buscas em um
banco de dados cifrados, resolvendo o problema de fragilidade existente nos banco de dados
cifrados atualmente.
Palavras-chave: Busca Cifrada. Disponibilidade Temporal. Criptossistemas Baseados em
Identidade.
ABSTRACT
With the advance of technology and the popularization of Internet the privacy is more displayed
to the virtual world. Together with this display many suffer daily aggressions referring about privacy, where we have constantly speaking intercepted and many times checked for institutions.
This work has as objective to make a study of cryptographic systems based in identity (IBE),
showing to its main characteristics and applicabilities, presenting to the end the development of
two applications IBE with academic purpose but that they can be used as example of applicabilities of tools IBE. The first developed application uses IBE concepts to demonstrate to an on-line
conversation where some users communicate using the concept of secular availability, this wants
to say, the messages could only be visualized with correct form depending on the availability applied for the sender of the message. The second developed application uses concepts of IBE for
elaboration of an application that effects searches in a ciphered data base, solving the problem
of existing fragility in the ciphered data base currently.
Keywords: Searchable Encrypted. Temporary Availability. Identity Based Encryption.
LISTA DE ILUSTRAÇÕES
Figura 1 - Estrutura da Criptografia
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Figura 2 - Exemplo de criptografia simétrica
Figura 3 - Exemplo de criptografia assimétrica
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Figura 4 - Taxa de criptografia do servidor sem autenticação RSA1024 e ECC163
. . . . 34
Figura 5 - Latência criptográfica do Handshake sem autenticação RSA1024 e ECC163
35
Figura 6 - Latência criptográfica do Handshake com autenticação RSA1024 e ECC163
36
Figura 7 - Taxa de criptografia do servidor com autenticação RSA1024 e ECC163
. . . . 36
Figura 8 - Latência criptográfica do Handshake sem autenticação RSA2048 e ECC193
Figura 9 - Taxa de criptografia do servidor sem autenticação RSA2048 e ECC193
36
. . . . 37
Figura 10 - Latência criptográfica do Handshake com autenticação RSA2048 e ECC193
Figura 11 - Taxa de criptografia do servidor com autenticação RSA2048 e ECC193
37
. . . . 38
Figura 12 - Criptografia baseada em identidade
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Figura 13 - Assinatura baseada em identidade
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Figura 14 - Funcionamento do Secure-mail do Voltage, primeira utilização
. . . . . . . . . . . . . 52
Figura 15 - Funcionamento do Secure-mail do Voltage, segunda utilização
. . . . . . . . . . . . 53
Figura 16 - Implementação Boneh Franklin - Variáveis disponíveis
. . . . . . . . . . . . . . . . . . . . . 54
Figura 17 - Implementação Boneh Franklin - Servidor PKG
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Figura 18 - Implementação Boneh Franklin - Tela Principal
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Figura 19 - Implementação Boneh Franklin - Configuração servidor PKG e configuração
da Identidade
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Figura 20 - Implementação Boneh Franklin - Mensagem recebida
. . . . . . . . . . . . . . . . . . . . . 56
Figura 21 - Implementação Boneh Franklin - Mensagem recebida cifrada e decifrada
Figura 22 - Implementação Boneh Franklin - Tela de Log
. . 57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Figura 23- Implementação Boneh Franklin - Mensagem com disponibilidade temporal
vencida
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Figura 24 - Esquema de busca de palavra em banco de dados cifrados
. . . . . . . . . . . . . . . . 65
Figura 25 - Eclipse 3.2.0 M20060629-1905
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Figura 26 - Diagrama do esquema Boneh Franklin com disponibilidade
. . . . . . . . . . . . . . . . 72
Figura 27 - Implementação de busca de palavra em banco de dados cifrados - Modelo de
entidades e relacionamento
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Figura 28 - Implementação de busca de palavra em banco de dados cifrados - Tela principal
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Figura 29 - Implementação de busca de palavra em banco de dados cifrados - Tela de
inserção de dados
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Figura 30 - Implementação de busca de palavra em banco de dados cifrados - Diagrama
de seqüência - Operação inserir
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Figura 31 - Implementação de busca de palavra em banco de dados cifrados - Diagrama
de seqüência - Operação buscar
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Figura 32- Implementação de busca de palavra em banco de dados cifrados - Busca
diretamente na base de dados - Tabela de Keyword
. . . . . . . . . . . . . . . . . . . . . . . . . . 78
Figura 33- Implementação de busca de palavra em banco de dados cifrados - Busca
diretamente na base de dados - Tabela de Record
. . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Figura 34 - Implementação de busca de palavra em banco de dados cifrados - Lista de
tarefas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Figura 35 - Implementação de busca de palavra em banco de dados cifrados - Resultado
busca
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
LISTA DE TABELAS
Tabela 1 - Comparação de esquemas criptográficos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Tabela 2 - Tamanho das chaves computacionalmente equivalentes
Tabela 3 - Teste de Desempenho RSA x ECC
. . . . . . . . . . . . . . . . . . . . 32
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Tabela 4 - Teste de Desempenho entre RSA x ECDSA x ECDH
. . . . . . . . . . . . . . . . . . . . . . . 34
Tabela 5 - Comparação entre esquemas IBE utilizando tecnologias aplicadas
Tabela 6 - Operações IBE por ordem de custo computacional
. . . . . . . . . 49
. . . . . . . . . . . . . . . . . . . . . . . . . 49
Tabela 7 - Operações utilizadas no processo de cifragem dos esquemas IBE
Tabela 8 - Operações utilizadas no processo de decifragem dos esquemas IBE
. . . . . . . . . . 49
. . . . . . . 50
Sumário
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2 FUNDAMENTOS DE CRIPTOGRAFIA
. . . . . . . . . . . . . . . . . . . . . . . . .
19
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.2 CRIPTOGRAFIA SIMÉTRICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
2.2.1 Algoritmos simétricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.2.1.1 Data Encryption Standard (DES) . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.2.1.2 Triple DES
22
2.1 DEFINIÇÕES PRELIMINARES
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1.3 International Data Encryption Algorithm (IDEA)
. . . . . . . . . . . . . . . .
22
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.2.1.5 Rivest Cipher (RC6) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
2.2.1.6 AES - Advanced Encryption Standard . . . . . . . . . . . . . . . . . . . . . .
23
2.2.2 Utilização de algoritmos simétricos na atualidade
. . . . . . . . . . . . . . . . . .
23
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
2.2.1.4 Blowfish
2.3 CRIPTOGRAFIA ASSIMÉTRIA
2.3.1 Algoritmos assimétricos
2.3.1.1 Rivest, Shamir and Adleman (RSA)
2.3.1.2 ElGamal
. . . . . . . . . . . . . . . . . . . . . . .
25
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
2.3.1.3 Diffie-Hellman
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
2.3.2 Utilização de algoritmos assimétricos na atualidade . . . . . . . . . . . . . . . . .
26
3 FUNDAMENTOS DE CURVAS ELÍPTICAS . . . . . . . . . . . . . . . . . . . . . . .
27
3.1 DEFINIÇÕES PRELIMINARES
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.1.2 Anel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.1.3 Mapeamento
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.1.5 Grupo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.1.1 Inteiros
3.1.4 Corpos Finitos
3.2 UTILIZAÇÃO DE CURVAS ELÍPTICAS NA ATUALIDADE . . . . . . . . . . . . . . .
29
4 DIFERENÇAS ENTRE RSA E ECC . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
5 CRIPTOSSISTEMAS BASEADO EM IDENTIDADES - IBE . . . . . . . . . . . . . . .
39
5.1 CRIPTOGRAFIA BASEADA EM IDENTIDADE - IBC
. . . . . . . . . . . . . . . . .
39
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
5.2 ASSINATURA BASEADA EM IDENTIDADE - IBS . . . . . . . . . . . . . . . . . . .
40
5.2.1 Um modelo genérico
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
6 ESQUEMAS IBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
6.1 MODELOS CRIPTOGRÁFICOS IBE
. . . . . . . . . . . . . . . . . . . . . . . . .
43
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
6.1.2 Modelo de Cocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
6.1.3 Modelo de Waters
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
6.1.4 Modelo de Naccache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
6.2 TABELA COMPARATIVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
6.3 CARACTERÍSTICAS POSITIVAS E NEGATIVAS . . . . . . . . . . . . . . . . . . .
50
6.4 PLATAFORMA VOLTAGE
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
6.5 IMPLEMENTAÇÃO BONEH FRANKLIN COM DISPONIBILIDADE TEMPORAL . . .
53
7 BUSCA EM BANCO DE DADOS CIFRADOS . . . . . . . . . . . . . . . . . . . . . .
60
7.1 CARACTERÍSTICAS DO LOG DE AUDITORIA SEGURO
. . . . . . . . . . . . . .
63
7.2 RESISTENTE A ENGANOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
7.3 VERIFICABILIDADE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
7.4 CONTROLE DE ACESSO AOS DADOS E BUSCA . . . . . . . . . . . . . . . . . .
64
7.5 NOTAÇÕES E COMPONENTES DO LOG AUDITOR . . . . . . . . . . . . . . . . .
64
7.5.1 Extração de palavras-chave
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
7.6 ESQUEMA POR CHAVE ASSIMÉTRICA . . . . . . . . . . . . . . . . . . . . . . .
65
8 IMPLEMENTAÇÃO BUSCA EM BANCO CIFRADO
67
5.1.1 Um modelo genérico
6.1.1 Modelo de Boneh e Franklin
. . . . . . . . . . . . . . . . . .
8.1 LINGUAGEM, AMBIENTE E FERRAMENTAS DISPONÍVEIS PARA CURVAS ELÍPTICAS E IBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
8.1.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
8.1.2 Arquitetura de Criptografia Java (Java Cryptography Architecture - JCA)
. . . . . .
69
8.1.3 API de persistência em Java (Java Persistence API - JPA) . . . . . . . . . . . . . .
69
8.1.4 Invocação de métodos remotos (Remote Method Invocation - RMI) . . . . . . . . .
69
8.1.5 Prevayler
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
8.2 PRÉ-REQUISITOS PARA O DESENVOLVIMENTO . . . . . . . . . . . . . . . . . .
71
8.1.6 Eclipse
8.3 IMPLEMENTAÇÃO DE DISPONIBILIDADE TEMPORAL NO ESQUEMA DE BONEH
FRAKLIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
8.3.1 Dificuldades Encontradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
8.4 IMPLEMENTAÇÃO DA BUSCA DE PALAVRA EM BANCO DE DADOS CIFRADOS .
73
8.4.1 Dificuldades Encontradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
9 CONCLUSÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
ANEXOS
87
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
1
INTRODUÇÃO
Mais do que nunca, hoje em dia, tem-se a necessidade de privacidade, em que se espera
estar conversando com colegas em um bate-papo e que somente eles estejam participando da
conversa.
Quanto mais próximo do mundo digital mais frágil fica a privacidade, onde vive-se em
um mundo sem fronteiras e quem mais sabe pode invadir a privacidade alheia.
Tendo em vista essas situações, os estudos da criptografia avançam. Cada vez mais
sente-se a necessidade de esconder informações, seja para a segurança das informações, ou
seja para se ter privacidade em bate-papos intimos com colegas ou parceiros.
Em 1984, Shamir introduziu o conceito de criptossistemas baseados em identidade. A
idéia deste novo conceito era a utilização de uma informação conhecida por todos como sendo
a chave pública da criptografia.
Até este momento, a chave pública era sempre armazenada num servidor e para a
utilização destas chaves era necessário uma prévia geração das mesmas.
Com o novo conceito adotado por Shamir, pode-se estar em um bate-papo com diversas
pessoas, desde que tenha uma identidade utilizada pelo destinatário, em que esta identidade
normalmente é o endereço de IP, e-mail ou alguma outra informação única que o identifique.
Com este novo conceito de Shamir novos estudos foram feitos, em que puderam evoluir
as implementações de banco de dados criptografados, e aplicar propostas de correções de
problemas já conhecidos, como a fragilidade no processo de busca em banco de dados cifrados
até então conhecidos.
Este trabalho tem como delimitação implementar aplicabilidade de disponibilidade temporal, utilizando o esquema criptográfico baseado em identidade proposto por Boneh Franklin e
implementar aplicabilidade de busca de palavra em banco de dados cifrados, conforme proposto
por Waters. Apresentando o seguinte problema que após Boneh Franklin ter proposto o modelo
de criptografia por identidade e Waters ter proposto a busca de palavra em banco de dados cifrados não teve nenhuma implementação de aplicabilidade, sendo assim difícil o entendimento do
funcionamento de ambas propostas. A hipotese é que se não tiver uma implementação dos
modelos propostos, fica difícil medir a eficiência e visualizar de fato as aplicabilidades. Estudar
os sistemas criptográficos baseado em identidade através teoria é uma forma de alcançar o objetivo de implementação do esquema de Boneh Franklin, utilizando disponibilidade temporal e a
17
implementação da busca de palavra em banco de dados cifrados, proposto por Waters. Como
objetivos específicos, têm-se:
I. Compreender os conceitos referente criptografia simétrica e assimétrica;
II. Compreender os modelos propostos por Boneh Franklin referente o esquema criptográfico
baseado em identidade;
III. Compreender o modelo proposto por Waters referente a busca de palavra em banco de
dados cifrados;
IV. Compreender propostas existentes referente à pesquisa de palavra-chave em banco de
dados cifrados;
V. Implementar a disponibilidade temporal;
VI. Implementar busca de palavra em banco de dados cifrados.
Após o artigo do Boneh Franklin referente à disponibilidade temporal e do artigo do
Waters referente à busca de palavra em banco de dados cifrados não teve-se nenhuma mostra
de aplicabilidade, sendo assim difícil o entendimento do funcionamento de ambas propostas.
Este trabalho está dividido em capítulos. O capítulo 2 detalha os conceitos de criptografia, sua história e seus principais componentes. Também detalha a infra-estrutura de
chaves públicas e privadas.
O capítulo 3 detalha os principais conceitos relacionados com curvas elípticas e aponta
a utilização de curvas elípticas na atualidade.
O capítulo 4 apresenta as principais diferenças entre RSA e ECC. Detalhando por testes
pesquisados por referências quais os principais pontos de cada esquema criptográfico.
O capítulo 5 apresenta o conceito completo de sistemas criptográficos baseados em
identidade, suas vantagens, e as definições padrões dos modelos conceituais.
O capítulo 6 apresenta todos os esquemas criptográficos baseados em identidade, uma
comparação performática entre eles e algumas aplicações, é demonstrado a utilização de uma
das aplicações desenvolvidas neste trabalho.
O capítulo 7 apresenta os conceitos relacionados a busca em banco de dados cifrados,
mostrando a teoria de todo o mecanismo para a implementação de um programa baseado em
busca de palavras em banco de dados cifrados.
18
O capítulo 8 apresenta, por completo, a implementação proposta neste trabalho, levantando detalhadamente o processo de execução das ferramentas e aponta as principais dificuldades na implementação dos programas.
19
2
FUNDAMENTOS DE CRIPTOGRAFIA
Neste capítulo, serão vistos todos os conceitos básicos relacionados à criptografia, suas
divisões e seus principais esquemas.
2.1
DEFINIÇÕES PRELIMINARES
Criptografia vem do grego, kryptos, que significa oculto, envolto, escondido, secreto
e graphos, significa escrever, grifar. Portanto, criptografia significa escrita secreta ou escrita
oculta, em que o processo para se chegar nesse resultado são diversos e até hoje em dia
desenvolve-se estudos e pesquisas para aprimorar e garantir esse resultado (TKOTZ, 2003).
Numa vila egípcia perto do rio Nilo chamada de Menet Khufu, tinha um arquiteto do
faraó chamado Khnumhotep II. Ele construiu alguns monumentos para o faraó, os quais foram
documentados. Essa documentação foi feita em tabletes de argila. Para evitar o entendimento,
caso caíssem em domínio público, Khnumhotep II teve a idéia de substituir algumas palavras
em trechos de texto destes tabletes (TKOTZ, 2004). Caso alguém roubasse, não chegaria até o
tesouro e acabaria morrendo, Kahn considera isso como o primeiro exemplo documentado da
escrita criptográfica (KAHN, 1967).
Desde a época dos egípcios já existiam traços da presença da criptografia, isto é perceptível visualizando a escrita hieroglífica dos egípcios e os códigos secretos que os romanos utilizavam para comunicar os planos de guerra. Desde aquela época até o final da Segunda Guerra
Mundial não houve muita evolução na criptografia, onde a mesma teve uma grande evolução
com a chegada dos computadores, o que possibilitou a utilização de problemas matemáticos
mais complexos a fim de dificultar a descoberta de códigos cifrados.
Os esforços dos ingleses, durante a Segunda Guerra Mundial, para decifração de códigos criptográficos formou a base para a computação moderna (ABSOLUTA, 1999).
A criptografia tem quatro objetivos principais, são eles (HANKERSON; MENEZES; VANSTONE,
2003):
I. Confidencialidade: somente o destinatário autorizado da mensagem pode ser capaz de
decifrar a mensagem cifrada;
II. Integridade: o destinatário será capaz de determinar se a mensagem foi alterada durante
a transmissão da mesma;
20
III. Autenticidade do remetente: O destinatário deverá ser capaz de identificar o remetente e
verificar que foi realmente ele quem enviou a mensagem;
IV. Autenticidade de entidades: Verificar a autenticidade da identidade de uma entidade;
V. Não repúdio do remetente: não poderá ser possível ao remetente negar o envio da mensagem.
A Figura 1 mostra como a criptologia está dividida até chegarmos a área de criptografia.
Figura 1: Estrutura da criptografia.
Fonte: O Autor. (adaptado de Kahn (KAHN, 1967))
A criptografia se divide em duas, podendo ser criptografia de chave simétrica (chave
secreta) e criptografia de chave assimétrica (chave pública), segue um breve conceito de criptografia simétrica e criptografia assimétrica.
2.2
CRIPTOGRAFIA SIMÉTRICA
Este método é conhecido como criptografia de chave secreta, pois possui somente uma
chave compartilhada entre os dois lados, que é utilizada tanto para cifrar quanto para decifrar
um texto.
21
Antigamente a segurança do processo de cifração estava baseada somente no sigilo do
algoritmo criptográfico. Caso uma terceira pessoa tivesse acesso ao código criptográfico sem
possuir a chave, o mesmo poderia decifrar a mensagem da mesma forma se estivesse em poder
da chave utilizada. Para contornar esse problema utiliza-se uma chave para a criptografia, sendo
esta chave uma cadeia aleatória de bits utilizada em conjunto com um algoritmo criptográfico.
Cada chave distinta faz com que o algoritmo criptográfico trabalhe de forma diferente, gerando
um resultado diferente da mensagem criptografada (STALLINGS, 2005, p.22).
A principal característica da criptografia simétrica é a necessidade de um canal seguro
para a transmissão da chave que será utilizada durante a comunicação. Esse tipo de criptografia
é utilizado quando é necessário velocidade (BENITS, 2003, p. 13). Inicialmente, é utilizado
a criptografia assimétrica para estabelecer a comunicação e garantir assim a autenticidade,
após, é usado a criptografia simétrica para a troca de dados. As chaves são armazenadas
em um local que se entende por local seguro para ambos os lados da comunicação. Uma
característica negativa da utilização da criptografia simétrica é que o número de chaves cresce
proporcionalmente ao quadrado do número de usuários, tendo em vista que para cada par de
usuários será necessária uma chave para ambos se comunicarem (BENITS, 2003, p. 14).
Figura 2: Exemplo de criptografia simétrica.
Fonte: O Autor. (adaptado de Stallings (STALLINGS, 2005, p.22))
Conforme demonstra na Figura 2, para Alice conversar normalmente com Bob, ela deverá solicitar a chave privada de Bob. Isso deverá acontecer através de um canal seguro . Após
Alice obter a chave privada de Bob, ela deverá utilizá-la para enviar todas as próximas mensagens, podendo, agora, a comunicação acontecer em um ambiente hostil, pois a mensagem
somente poderá ser entendida por quem possuir a chave privada de Bob. Da mesma forma,
22
Bob deverá receber a chave pública de Alice para poder manter comunicação e entender as
mensagens recebidas de Alice.
2.2.1
Algoritmos simétricos
A seguir, lista-se os principais algoritmos criptográficos simétricos.
2.2.1.1
Data Encryption Standard (DES)
Data Encryption Standard (DES) foi criado pela IBM em 1977. O tamanho de sua chave
de 56 bits é considerado fraco e já foi quebrado por força bruta em 1997 (MAIA; PAGLIUSI, 1999).
2.2.1.2
Triple DES
O 3DES é uma simples variação do DES, onde utiliza-se três ciframentos consecutivos,
podendo empregar uma versão com duas ou três chaves diferentes. É seguro, porém muito
lento. O tamanho da chave criptográfica pode variar de 112 bits ou de 168 bits (MAIA; PAGLIUSI,
1999).
2.2.1.3
International Data Encryption Algorithm (IDEA)
O International Data Encryption Algorithm (IDEA) foi criado em 1991 por James Massey
e Xuejia Lai. O algoritmo é patenteado na Suíça. É baseado nas mesmas linhas gerais do DES,
porém, sua implementação pode ser mais rápida. O IDEA é utilizado principalmente no Pretty
Good Privacy (PGP), ou Muito Boa Privacidade, o programa para criptografia de e-mail pessoal
mais difundido no mundo. O tamanho da chave criptográfica é de 128 bits (MAIA; PAGLIUSI, 1999).
2.2.1.4
Blowfish
Algoritmo desenvolvido por Bruce Schneier, que oferece escolha entre maior segurança
ou maior desempenho, estes podendo variar de acordo com o tamanho da chave utilizada que
pode ser de 23 bits ou 448 bits. O autor melhorou o Twofish gerando o Blowfish (MAIA; PAGLIUSI,
1999).
23
2.2.1.5
Rivest Cipher (RC6)
Rivest Cipher 6 (RC6) é um cifrador derivado do RC5. Ele foi desenvolvido por Ron
Rivest, Matt Robshaw, Ray Sidney e Yiqun Lisa Yin para se adequar aos requerimentos da
competição Advanced Encryption Satndard (AES). O algoritmo é proprietário da RSA Security.
Pode trabalhar com chaves de 128, 192 e 256 bits, como o RC5, pode ser parametrizável o
tamanho da chave. (RIVEST et al., 2004)
2.2.1.6
AES - Advanced Encryption Standard
Advanced Encryption Standard ou Padrão de Criptografia avançado, é o mais novo pro-
tocolo de criptografia e será em breve o protocolo padrão de criptografia dos Estados Unidos.
O tamanho das chaves criptográficas pode variar entre 128, 192 e 256 (FORD, 2000).
Assumindo que um computador possa realizar o teste de 255 chaves por segundo, atualmente levaria 149 trilhões de anos para conseguir quebrar sua chave de 128 bits. Levando
para outra perspectiva, o universo tem pouco menos de 20 bilhões de anos (FORD, 2000).
2.2.2
Utilização de algoritmos simétricos na atualidade
I. Soekris Engineering: Hardware acelerador de criptografia, utiliza criptografia simétrica
(como por exemplo: DES, 3DES e RC4) e criptografia assimétrica (como por exemplo:
RSA e Diffie-Hellman) (SOEKRIS, 2006).
II. OpenBSD: Sistema operacional livre, multi-plataforma do tipo UNIX. Utiliza criptografia
simétrica como por exemplo: DES, 3DES, Blowfish e Cast (OPENBSD, 2006).
2.3
CRIPTOGRAFIA ASSIMÉTRIA
A criptografia assimétrica foi inicialmente proposta no artigo de Diffie e Hellman (DIFFIE;
HELLMAN,
1976). Neste artigo os autores propuseram uma prática de criptografia assimétrica
onde cada participante deverá possuir um par de chaves, sendo uma delas conhecida como
chave pública e a outra como chave privada (BENITS, 2003).
A criptografia assimétrica é conhecida por criptografia de chave pública, pois cada participante possui duas chaves, uma delas sendo a chave pública e a outra a chave privada. A
chave pública é distribuída livremente para todos os participantes e é utilizada para cifrar os dados. A chave privada é utilizada pelo receptor para decifrar a mensagem anteriormente cifrada.
24
As chaves públicas são armazenadas num repositório de chaves públicas, que tem de
ser um local seguro para todos os envolvidos na comunicação. As mensagens cifradas com a
chave pública podem ser decifradas somente pela chave privada.
Figura 3: Exemplo de criptografia assimétrica.
Fonte: O Autor. (adaptado de Stallings (STALLINGS, 2005, p.23))
Na Figura 3, para Alice enviar uma mensagem para Bob, Alice primeiramente deverá
solicitar a chave pública de Bob e salvar a chave pública dela em seu anel de chaves públicas
para posterior utilização. Após estar em posse da chave pública de Bob, Alice deverá cifrar a
mensagem com esta chave pública e após isto, enviar a mensagem criptografada para Bob.
Para Bob entender a mensagem que está recebendo, ele deverá pegar a mensagem e decifrála utilizando sua chave privada. Para Bob responder a mensagem de Alice, primeiramente ele
deverá solicitar a chave pública de Alice e salvar no seu anel de chaves públicas, após isso
deverá utilizar a chave pública de Alice para cifrar as mensagens que serão enviadas.
2.3.1
Algoritmos assimétricos
A seguir, lista-se os principais algoritmos criptográficos assimétricos.
25
2.3.1.1
Rivest, Shamir and Adleman (RSA)
RSA possui esse nome por causa dos seus inventores Rivest, Shamir and Adleman, que
o criaram em 1978, em Massachussets Institute of Technology (M.I.T), logo após a descoberta
da criptografia assimétrica (chave pública) em 1977 (HANKERSON; MENEZES; VANSTONE, 2003).
Segundo Coutinho (COUTINHO, 2000), "para poder implementar o RSA precisamos de
dois parâmetros básicos: dois números primos que vamos chamar de p e q. Para codificar
uma mensagem usando o RSA é suficiente conhecer o produto dos dois números primos, que
vamos chamar de n. Para decodificar uma mensagem precisamos conhecer os números primos
p e q. A chave de codificação do RSA é portando, constituída essencialmente pelo número n
= p.q. Cada usuário do método tem sua própria chave de codificação. Esta chave é tornada
pública: todos ficam sabendo que, para mandar uma mensagem para o banco Acme, deve
ser usada a chave n. Por isso n também é conhecido como a chave pública. Já a chave de
decodificação é constituída pelos números primos p e q. Cada usuário tem que manter sua
chave de decodificação secreta ou a segurança do método estará comprometida".
Conforme Coutinho mencionou, a criptografia RSA utiliza números primos e fatoração
para funcionar, por isso caso sejam escolhidos números primos muito pequenos ou a diferença
entre eles seja pequena, ficará fácil fatorar n e a segurança do método estará comprometida. A
seguir, encontra-se um resumo dos itens necessários para a criptografia RSA (COUTINHO, 2000,
p. 181):
I. para implementar o RSA deverá ser escolhido dois números primos muitos grandes p e q;
II. para codificar uma mensagem usa-se n = p.q;
III. para decodificar precisa-se conhecer p e q;
IV. a segurança do método vem do fato de que é difícil fatorar n para descobrir p e q, já que
são números muito grandes.
2.3.1.2
ElGamal
O algoritmo de ElGamal pode ser usado tanto na assinatura digital como na criptografia
de mensagens. Sua segurança está associada a dificuldade em calcular o logaritmo discreto.
Para a geração da chave, escolhe-se um número primo qualquer e dois números randômicos,
menos que o número primo (LOPES, 2003).
26
2.3.1.3
Diffie-Hellman
Também utiliza o problema do logaritmo discreto. É o criptossistema mais antigo ainda
em uso (MAIA; PAGLIUSI, 1999).
2.3.2
Utilização de algoritmos assimétricos na atualidade
I. Soekris Engineering: Hardware acelerador de criptografia, utiliza criptografia simétrica
(como por exemplo: DES, 3DES e RC4) e criptografia assimétrica (como por exemplo:
RSA e Diffie-Hellman) (SOEKRIS, 2006).
II. SSL: Conhecido como Secure Sockets Layer (SSL) foi desenvolvido pela Netscape Communications, utiliza a autenticação RSA e a autenticação e criptografia DES, além de
fazer uma verificação de integridade utilizando o Message Digest algorithm 5 (MD5) (INFORMÁTICA,
2006).
III. Secure Shell (SSH): Utiliza chaves assimétricas RSA, quando um computador cliente
solicita ao servidor uma conexão, ambos os computadores (cliente e servidor) trocam
suas chaves públicas para poderem se comunicar (MORIMOTO, 2006).
IV. A Perkons CryptoLib é um software baseado na biblioteca de algoritmos criptográficos
como Advanced Encryption Standard (AES) ou Padrão de criptografia avançada, Secure
Hash Algorithm (SHA-1) ou Algoritmo de Hash Seguro) e RSA, para todos os produtos
da Perkons S/A. Perkons S/A é uma empresa que produz aparelhos que medem e classificam a velocidade de veículos em sinaleiros com câmeras, aparelhos para monitoração
pública e equipamentos para reconhecimento de caracteres ópticos, o qual fornece essas
imagens e dados num ambiente seguro para ser usado pela agência do governo para
aplicação no trânsito, conforme Nist (NIST, 2006).
27
3
FUNDAMENTOS DE CURVAS ELÍPTICAS
O método de criptografia por curvas elípticas foi proposto em 1985 por Neal Koblitz e
Victor Miller, que defendem que a criptografia por curvas elípticas pode ser mais rápida que a
criptografia RSA e utilizar chaves menores, além de ser mais seguro (HANKERSON; MENEZES;
VANSTONE,
2003, 2, 15).
Existem várias formas de utilizar curvas elípticas em criptografia, todos os esquemas
baseiam-se na complexibilidade na resolução de equações matemáticas, utilizando o logaritmo
discreto numa curva elíptica sobre alguns grupos finitos.
Curvas elípticas estão sendo estudadas e pesquisadas por matemáticos a mais de cem
anos (KOBLITZ; MENEZES, 2005). Em 1985, Neal Koblitz e Victor Miller independentemente propuseran a utilização de curvas elípticas para a obtenção da chave pública em sistemas criptográficos. Desde então, vários artigos a respeito das curvas elípticas foram publicados, sendo
que mais tarde, em 1990, as curvas elípticas receberam o aceite comercial, onde organizações
de padrões estabeleceram protocolos de curvas elípticas e empresas privadas colocaram estes
protocolos em seus produtos de segurança.
Curvas elípticas não são elipses, elas têm esse nome por que as equações utilizadas
são semelhantes as de circunferência de uma elipse (STALLINGS, 2005).
A seguir, são apresentados os principais conceitos utilizados na criptografia por curvas
elípticas:
3.1
DEFINIÇÕES PRELIMINARES
Para fazer um sistema criptográfico usando curvas elípticas, é preciso um problema
matematicamente difícil correspondente para fatorar o produto de dois números primos ou utilizar logaritmo discreto. Considerando a equação Q = kp , onde Q, p ∈ E p (a, b) e k < p , é
relativamente fácil de calcular Q , dado k e p , mas é relativamente difícil calcular k dado Q e
P (STALLINGS, 2005, p.197).
Criptografia de curvas elípticas, como todos os outros esquemas criptográficos, baseiase no fato da dificuldade de resolver um problema matemático. Porém, a criptografia de curvas
elípticas parte de problemas envolvendo os logaritmos discretos.
28
Dada uma curva elíptica E definida por um conjunto finito de natureza Fq (q , é o número
de elementos do conjunto), −E(Fq ) - e os pontos P, Q ∈ E(Fq ) , determinar o inteiro l(0 <=
l <= q − 1) tal que Q = lP . Ao passo que é relativamente fácil determinar o ponto Q = lP ,
determinar l , dado Q, P ∈ E(Fq ) é mais difícil (BARBOSA, 2003).
3.1.1
Inteiros
Um grupo de todos os inteiros é denominado por Z . N é denominado um grupo de todos
os inteiros positivos. Para um grupo finito A , o número de elementos de A é denominado por
#A (SAEKI, 1997).
3.1.2
Anel
Se puder definir uma ou mais operações num grupo abeliano, tem-se um anel. Fornecendo
os elementos de um grupo que satisfaça algumas propriedades considerando também a nova
operação(KAK, 2006).
Este grupo, justamente parte da operação definida para o grupo abeliano, referencia
uma nova operação, como por exemplo, multiplicação (KAK, 2006).
Um anel é tipicamente denotado por R, +, X , onde R denota o grupo de objetos, + denota o operador relacionado com R o qual é um grupo abeliano, o X é o operador adicional
preciso para R formar um anel (KAK, 2006).
3.1.3
Mapeamento
Dado as operações binárias X e Y nos grupos A e B respectivamente, o mapeamento
f : A −→ B preserva a operação de A se todos a, b ∈ A nós temos (SAEKI, 1997):
f (aXb) = f (a)Y f (b)
3.1.4
Corpos Finitos
Corpos são uma abstração de números computacionais (como os números racionais
Q , os números reais R e os números complexos C ), eles possuem propriedades essenciais
(HANKERSON; MENEZES; VANSTONE, 2003).
29
Eles são um grupo F juntamente com duas operações, adição (denominada por + ) e
multiplicação (denominada por . ), que satisfazem as propriedades aritméticas comuns:
I. (F, +) é um grupo abeliano com (adição) identificada por 0;
II. (F\{0}, .) é um grupo abeliano com (multiplicação) identificada por 1;
III. A regra da distribuição: (a + b).c = a.c + b.c para todos a, b, c ∈ F
3.1.5
Grupo
Grupo abeliano consiste em atribuir a G o valor da operação binária *: G ∗ G− > G sa-
tisfazendo as seguintes propriedades (STALLINGS, 2005, p. 11):
I. Associatividade: a ∗ (b ∗ c) = (a ∗ b) ∗ c para a, b, c ∈ G
II. Existência de uma identidade: existe um elemento e ∈ G que a ∗ e = e ∗ a = a para a ∈ G
III. Existência de inverso: para a ∈ G , existe um elemento b ∈ G , chamado de inverso de
a , onde a ∗ b = b ∗ a = e
IV. Comutatividade: a ∗ b = b ∗ a para a, b ∈ G
Para implementar curvas elípticas tem de se determinar alguns termos, segundo Stallings
(STALLINGS, 2005).
I. Um campo finito (delimitado): a representação da área dos elementos e do algoritmo para
executar os elementos delimitados
II. Uma curva elíptica: a representação dos pontos da curva e o algoritmo para executar as
curvas elípticas
III. Um protocolo e um algoritmo para executar o protocolo
3.2
UTILIZAÇÃO DE CURVAS ELÍPTICAS NA ATUALIDADE
Atualmente, a criptografia de curvas elípticas é utilizada nas seguintes aplicações:
30
I. Wireless Fidelity (WiFi): Curvas elípticas esta em um emergente e atrativo sistema de
criptográfica
1
de chave pública para dispositivos móveis e para redes sem fio. A causa
básica disso é que tanto RSA quanto ECC tem o mesmo nível de segurança, porém ECC
tem o tamanho da chave bem menor, o que resulta numa comunicação mais rápida, com
menor consumo de bateria como também menos memória utilizada e menor ocupação
da banda. Isto é importante para dispositivos móveis em que estes são limitados quanto
o CPU, bateria e conectividade pela rede (GUPTA et al., 2002).
II. Transport Layer Security (TLS) (OpenSSL): Sucessor de Secure Sockets Layer (SSL), o
TSL que significa ’Segurança na camada de transporte’, é um protocolo (RFC, 2006) para
estabelecer conexão segura, vários protocolos usam o TLS, tais como HTTP, IMAP, POP3
e o SMTP. O OpenSSL utiliza o TLS. A RFC 4492 (RFC, 2006) agrega ao TLS à criptografia
ECC, onde utiliza o esquema do Diffie-Hellman para curvas elípticas, conhecido como
ECDH.
III. Implementação Emparelhamento de Tate para celular usando Java (KAWAHARA; TAKAGI;
OKAMOTO,
2006).
Kawahara, Takagi e Okamoto apresentaram uma implementação para celular mais eficiente para o algoritmo de emparelhamento de Tate desenvolvido em Java.
Kawahara, Takagi e Okamoto tiveram esta iniciativa sendo que todos os emparelhamentos existentes são relativamente lentos, conforme é visualizado na Tabela 1.
Tabela 1: Comparação do tempo com outros sistemas criptográficos (ms)
Operação
FOMA SH901iS Pentium
Emparelhamento nt com F397
509,22
10,15
Exponenciação modular RSA 1024 bits
4238,40
75,07
Multiplicação escalar ECC sobre F3163
13777,50
116,83
Fonte: Kawahara, Takagi e Okamoto (KAWAHARA; TAKAGI; OKAMOTO, 2006)
O emparelhamento de Tate tem como algoritmo padrão o algoritmo de Miller.
Duursma e Lee desenvolveram uma implementação mais eficiente para o algoritmo de
Miller, mais especificamente para curvas elípticas super singulares sobre corpos finitos F3m .
Barreto propós o algoritmo de emparelhamento nt que é aproximadamente duas vezes
mais rápido que o algoritmo Duursma-Lee.
A implementação de Kawahara, Takagi e Okamoto alcançou aproximadamente 0,5 segundos para a execução do emparelhamento de Tate num celular FOMA SH901iS, NTT Do1
ECC - Elliptic curve cryptography ou Criptografia por curvas elípticas
31
CoMo. Este resultado é comparável com outras aplicações de criptografia em Java como, por
exemplo, RSA e ECC.
Na Tabela 1 tem-se o resultado de testes realizados com um Pentium M 1.73GHz com
1 GB Ram usando J2SE2 e um aparelho celular FOMA SH901iS utilizando J2ME3 (KAWAHARA;
TAKAGI; OKAMOTO,
2
3
2006).
J2SE - Java 2 Standard Edition
J2ME - Java 2 Micro Edition
32
4
DIFERENÇAS ENTRE RSA E ECC
Neste capítulo, serão apresentadas as principais diferenças entre os algoritmos criptográficos RSA e ECC, mostrando suas principais vantagens e desvantagens.
A diferença básica entre RSA e ECC está no tamanho da chave, ambos esquemas
criptográficos podem ter o mesmo nível de segurança, porém com tempo de processamento
diferenciados e tamanho da chave diferenciado (GUPTA et al., 2002).
Dependendo da aplicação que se necessita a utilização de criptografia RSA ou ECC,
deve-se considerar estes fatores, pois estes poderão ser determinantes para o sucesso do
projeto.
Na tabela 2, tem-se um diferencial do tamanho das chaves na criptografia RSA e na
criptografia ECC, mostrando a equivalência entre as chaves para diferentes tamanhos de chaves
criptográficas, onde ambas possuam o mesmo nível de segurança:
Tabela 2: Tamanhos das chaves computacionalmente equivalentes.
ECC RSA/DH/DSA
163
1024
283
3072
409
7680
571
15360
Fonte: O Autor (adaptado de Gupta et al. (GUPTA et al., 2002)
Na Tabela 2, nota-se que para o esquema criptográfico ECC e RSA (utiliza-se os esquemas de Diffie-Hellman (DH) e Digital Signature Algorithm (DSA) terem o mesmo nível de
segurança é preciso terem tamanhos de chaves diferenciados, isso dá a forma do cálculo das
chaves serem diferenciados.
Com essa vantagem, a criptografia ECC é a mais recomendada para dispositivos móveis
e para as redes sem fio, pois com um tamanho de chave reduzido, consegue prover o mesmo
nível de segurança que a criptografia RSA, como por exemplo economizando espaço na comunicação, que normalmente nesses ambientes é um recurso limitado.
Na Tabela 3, têm-se um comparativo entre os esquemas criptográficos RSA e ECC,
ambos foram medidos num computador de 1.5 GHz (EBERLE et al., 2004).
Na Tabela 3, mediu-se o número de instruções executadas pelo RSA e pelo ECC com
diferentes tamanhos de chaves. Para os testes foram comparados o RSA com um tamanho
33
Tabela 3: Desempenho RSA e ECC medida em computador 1.5GHz.
Algoritmo
Número Instruções Operações por Segundo Diferença Velocidade
RSA-1024
284.900
5.265
1.0x
ECC-160p
117.032
12.817
2.4x
ECC-163b
58.236
24.756
4.9x
ECC-163b-opt
38.009
39.464
7.5x
RSA-2048
1.906.884
787
1.0x
ECC-224p
245.330
6.114
7.8x
ECC-233b
127.365
11.772
15.0x
Fonte: O Autor (adaptado de Eberle et al. (EBERLE et al., 2004)
de 1024 bits com o esquema ECC de tamanho 160 bits, utilizando corpos primos inteiros e de
tamanho 163 bits utilizando corpos binários polimoniais e o RSA com um tamanho de 2047 bits
com o esquema ECC de tamanho 224 bits utilizando corpos primos inteiros e 233 bits utilizando
corpos binários polimoniais, onde p é GP(p) e b é GP(2m ) .
Observando o número de instruções executadas, percebe-se que o RSA tem uma deficiência, onde efetua menos cálculos por segundo e consecutivamente demora mais tempo para
finalizar a operação, como nota-se na coluna referente às operações por segundo.
Comparando o número de operações por segundo, nota-se que o RSA é mais demorado
que o ECC, pois ele efetua menos operações por segundo, essa diferença de tempo é bem
considerável.
Na coluna ’Diferença Velocidade’ é feito um comparativo de velocidade, onde percebese o quanto mais rápido a criptografia ECC é comparando-a com a criptografia RSA, como por
exemplo, a criptografia ECC de 233b bits é 15 vezes mais rápido que a criptografia RSA de 2048
bits.
Na Tabela 4, demonstra-se o cálculo de desempenho das operações primitivas do RSA,
ECDH1 e ECDSA2 , usando o OpenSSL0.9.6b. (melhorado para incluir ECC). Os cálculos foram
feitos em duas plataformas:
I. Yopy: um PDA com sistema operacional Linux equipado com um processador de 200MHz
StrongARM;
II. Ultra 80: Um servidor Sun equipado com um processador de 450MHz UltraSPARC II.
1
2
ECDH - Elliptic Curve Diffie-Hellman.
ECDSA - Elliptic Curve Digital Signature Algorithm.
34
Tabela 4: Cálculo de desempenho de algoritmos de chave pública (milisegundos).
Ultra 80
Yopy
RSAci f ra,veri f ica RSAdeci f ra,assina ECDSAveri f ica
1,7
13,0
6,8
6,1
18,1
9,2
10,8
46,5
24,5
39,1
76,6
39,0
Fonte: Gupta et al. (GUPTA et al., 2002)
ECDHoperao
6,1
8,7
22,9
37,7
A Tabela 4 possui duas linhas para cada plataforma, onde a linha superior é para RSA
utilizando 1024 bits na chave e ECC utilizando 163 bits na chave, a linha inferior é para RSA
utilizando 2048 bits na chave e ECC utilizando 193 bits na chave.
Para simular a variedade do mundo real, considerando todos os cenários, Gupta fez um
teste comparando RSA e ECDH-ECDSA em cada um dos casos a seguir:
I. Caso 1: Um Yopy com outro Yopy (no cenário ponto a ponto na rede sem fio (wireless)
dos dispositivos.
II. Caso 2: Um cliente Yopy conversando com um servidor Ultra 80 (para simular um cenário
da web em rede sem fio, onde um dispositivo móvel (Yopy) solicita uma página para um
servidor (Ultra 80).
III. Caso 3: Um Ultra 80 conversando com outro Ultra 80 (para o modo normal de iteração
entre um desktop e um servidor web)
Figura 4: Taxa de criptografia do servidor sem autenticação RSA1024 e ECC163.
Fonte: O Autor. (adaptado de Gupta (GUPTA et al., 2002))
35
A comparação na Figura 4 utiliza chaves de 1024 bits para RSA e 163 bits para ECC e
não utiliza autenticação do cliente, em termos de rendimento máximo, ECC é mais que cinco
vezes melhor do que RSA nas duas plataformas consideradas.
Em termos de latência do servidor, a comparação é mais interessante, quando o cliente
SSL e o servidor são da mesma plataforma (Caso 1 e Caso 3), ECC é aproximadamente duas
vezes mais rápido que RSA. De qualquer forma, no caso em que o cliente é um Yopy e o servidor
um Ultra 80 (Caso 2), o RSA é melhor que o ECC conforme demonstra a Figura 5
Figura 5: Latência criptografia do Handshake sem autenticação RSA1024 e ECC163.
Fonte: O Autor. (adaptado de Gupta (GUPTA et al., 2002))
A diferença de desempenho visualizado no ’Caso 1’ e no ’Caso 2’ justifica-se analisando
a tabela 4, onde percebe-se nas operações que na plataforma Yopy as operações de curva
elípticas tem um desempenho melhor.
A Figura 6 e a Figura 7 utilizam o mesmo cenário que a Figura 5, e a Figura 4 porém
utilizando a autenticação do cliente.
Na Figura 6, a utilização do certificado ECDH no cliente teve um desempenho melhor
que a ECDSA. Mais importante que isso é que ECC teve melhores desempenhos que RSA.
No entanto, quando analisado a média de conexões por segundo na Figura 7, a criptografia RSA teve melhor desempenho que ECC, principalmente quando o certificado ECDH é
utilizado.
36
Figura 6: Latência criptografia do Handshake com autenticação RSA1024 e ECC163.
Fonte: O Autor. (adaptado de Gupta (GUPTA et al., 2002))
Figura 7: Taxa de criptografia do servidor com autenticação RSA1024 e ECC163.
Fonte: O Autor. (adaptado de Gupta (GUPTA et al., 2002))
Figura 8: Latência criptografia do Handshake sem autenticação RSA2048 e ECC193.
Fonte: O Autor. (adaptado de Gupta (GUPTA et al., 2002))
37
Figura 9: Taxa de criptografia do servidor sem autenticação RSA2048 e ECC193.
Fonte: O Autor (adaptado de Gupta (GUPTA et al., 2002))
Os mesmos testes relacionados acima foram realizados utilizando chave de 2048 bits em
RSA e chave de 193 bits em ECC. Nos testes verificamos resultados melhores para ECC que
RSA, sem nenhuma exceção, menos para o ’Caso 2’ sem autenticação do cliente. A Figura 8
mostra o impacto em utilizar tamanhos de chaves maiores no Yopy comunicando-se com um
Ultra 80 (Caso 2) e sem autenticação do cliente. Fica claro na Figura 10 a vantagem de desempenho entre ECC e RSA quando trabalhando com chaves criptográficas grandes.
Figura 10: Latência criptografia do Handshake com autenticação RSA2048 e ECC193.
Fonte: O Autor (adaptado de Gupta (GUPTA et al., 2002))
38
Figura 11: Taxa de criptografia do servidor com autenticação RSA2048 e ECC193.
Fonte: O Autor (adaptado de Gupta (GUPTA et al., 2002))
39
5
CRIPTOSSISTEMAS BASEADO EM IDENTIDADES - IBE
Em 1984, Shamir propôs o conceito de criptossistemas baseados em identidade. Neste
novo paradigma da criptografia, os usuários são identificados a partir de informações como
o endereçoIP ou o endereço de e-mail no lugar de certificados digitais, usados como chave
pública para a criptografia ou a verificação da assinatura (BAEK et al., 2004).
Um dos resultados da utilização da criptografia baseada em identidade é a redução
da complexibilidade do sistema, a redução do custo para a estabilização e armazenamento
das chave públicas, isto se deve ao fato da chave pública ser uma informação que identifica o
usuário, e a chave privada uma informação gerada baseada na chave pública.
5.1
CRIPTOGRAFIA BASEADA EM IDENTIDADE - IBC
Criptografia baseada em identidade (Identity Based Encryption ou simplesmente IBE) é
um sistema de chave pública em que esta pode ser qualquer texto, como por exemplo o endereço de e-mail. A central de autorização usa esta chave para identificar e distribuir a chave
privada a quem solicita (BONEH; BOYEN; GOH, 2005). Desde que Shamir propôs esquemas criptográficos baseados em identidade, muitos esquemas foram lançados baseando-se na fatoração
de números inteiros. Boneh e Franklin propuseram uma nova forma de desenvolver a criptografia baseada em identidade, baseada nos mapas bilineares da curva elíptica (CHA; CHEON,
2003).
5.1.1
Um modelo genérico
Na Figura 12, Alice irá enviar uma mensagem para Bob, para isso ela pega o identificador
de Bob, que é sua identidade, como por exemplo e-mail, endereço deIP ou outra informação que
o identifique. Após isso, Alice irá criptografar a mensagem e enviar para o Bob. O recebedor
da mensagem, Bob, irá receber sua chave privada de uma entidade terceira, esta entidade é
considerada segura para ambas as partes, ela é conhecida como Private Key Generator (PKG).
Após receber sua chave privada ele poderá decifrar a mensagem recebida de Alice.
Seguem os passos que descreve a criptografia baseada em identidade segundo Baek
et al. (BAEK et al., 2004).
40
Figura 12: Criptografia baseada em identidade.
Fonte: O Autor (adaptado de Baek (BAEK et al., 2004))
I. Inicializa: O PKG cria a chave privada e a chave pública, que chamaremos de skPKG e
pkPKG respectivamente.
II. Extrai: O recebedor Bob se autêntica no servidor PKG e recebe sua chave privada
skidBob associada com sua identidade IDBob
III. Cifra: Usando a identidade de Bob IDBob e a chave pública do PKG ( pkPKG ), o enviador
Alice cifrará a mensagem e obterá a mensagem cifrada.
IV. Decifra: Quando receber a mensagem de Alice, Bob decifrará a mensagem usando a sua
chave privada skidBob para recuperar a mensagem.
5.2
ASSINATURA BASEADA EM IDENTIDADE - IBS
Assinatura baseada em identidade (Signature Based Identity ou simplesmente IBS), é
um modelo de assinatura baseada em IBE, onde consegue-se garantir a autenticidade da mensagem. Se associado a criptografia IBE com a assinatura IBS consegue-se garantir além da
autenticidade também o sigilo dos dados.
41
Figura 13: Assinatura baseada em identidade.
Fonte: O Autor (adaptado de Baek (BAEK et al., 2004))
5.2.1
Um modelo genérico
Na Figura 13, Alice primeiramente obtém a chave privada relacionada com sua identidade do PKG. Então, ela assina a mensagem, usando a chave privada. O verificador Bob agora
usa a identidade de Alice para verificar sua assinatura. Não é preciso para o Bob pegar um
certificado de Alice.
Seguem os passos que descreve a assinatura baseada em identidades segundo Baek
et al. (BAEK et al., 2004).
I. Inicializa: O gerador de chave privadas (PKG) um órgão terceiro considerado seguro para
as ambas partes cria a chave privada e a chave pública que chamaremos de skPKG e
pkPKG respectivamente.
II. Extrai: Alice, quem irá assinar a mensagem se autêntica no servidor PKG e obtém a
chave privada skIDAlice associada com a sua identidade
III. Assina: Usando sua chave privada skidAlice , Alice cria a assinatura na sua mensagem.
IV. Valida: Recebendo a assinatura e a mensagem de Alice, Bob verifica se a assinatura é
verdadeira para a mensagem usando a identidade de Alice (IDAlice ) e a chave pública do
42
PKG ( pkPKG ). Se a assinatura é de Alice, é retornado ’Aceita’, caso contrário é retornado
’Rejeitada’.
43
6
ESQUEMAS IBE
Neste capítulo serão apresentados os principais modelos criptográficos baseados em
identidade. Será visto detalhadamente o funcionamento dos esquemas baseado nos quatro
principais processos da criptografia, a inicialização, a extração, a cifragem e a decifragem dos
dados criptografados.
No final do capítulo será abordado exemplos onde a criptografia baseada em identidade
é utilizada, bem como uma tabela comparativa entre os modelos, a fim de mostrar as principais
características de cada modelo e também será categorizado os ambientes onde cada esquema
criptográfico deverá ser aplicado, levando em consideração o ambiente de processamento.
6.1
MODELOS CRIPTOGRÁFICOS IBE
Desde que Shamir propôs o novo modelo criptográfico baseado em identidades conhecido como IBE vários autores propuseram variações do modelo originalmente lançado. Esses
modelos têm algumas melhorias nos problemas encontrados nos primeiros modelos. A seguir
é listado os modelos de criptografia baseado em identidade mais conhecidos, é detalhado seu
funcionamento, seus prós e contras na utilização de cada modelo, além de exemplificar a utilização deles em exemplos reais.
6.1.1
Modelo de Boneh e Franklin
O desempenho do esquema IBE proposto por Boneh e Franklin é comparável com o
esquema criptográfico ElGamal em F∗ p e a segurança do esquema IBE proposto por eles é
baseado no problema de Diffie-Hellman em curvas elípticas (BONEH; FRANKLIN, 2001).
Boneh e Franklin desenvolveram vários esquemas criptográficos baseado neste primerio modelo IBE que é conhecido por BasicIdent, este primeiro esquema IBE recebe este nome
pois não é muito seguro e pode sofrer alguns tipos de ataques por código cifrado. Os modelos criptográficos desenvolvidos por Waters e por Naccache derivam deste esquema pela sua
simplicidade, por este motivo é conhecido como BasicIdent.
Este primeiro esquema IBE proposto por Boneh e Franklin é baseado nos oráculos
randômicos. Oráculos randômicos são funções matemáticas que retornam números aleatoriamente. O problema na utilização deste artifício é que a forma que os números são escolhidos
44
aleatoriamente é considerado pseudo-randômico, pois eles têm uma certa lógica a ponto de um
adversário poder calcular o próximo número a ser randomizado, podendo ser, de certa forma,
considerado pouco seguro.
Os principais componentes do modelo Boneh e Franklin , segundo Misaghi:
I.
INICIALIZA :
O PKG seleciona a chave privada mestre s ∈ Zq∗ e calcula a chave pública
Ppub = sP. Além disso específica duas funções hash da seguinte forma: H1 : {0, 1}∗ −→
G∗1 e outra função hash da seguinte forma: H2 : G2 −→ {0, 1}n , com os seguintes
parâmetros: hG1 , G2 , e, P, Ppub , H1 , H2 i e a chave mestre hsi.
II.
EXTRAI :
Dada uma string ID ∈ {0, 1}∗ , o PKG verifica a identidade e faz:
(a) Computa QID = H1 (ID) ∈ G∗1
(b) Atauliza a chave privada SID = sQID
O componente QID atua como uma chave pública correspondente a identidade ID.
III.
CIFRA :
Para cifrar uma mensagem m ∈ {0, 1}n a ser enviada à um usuário com identidade
ID deve ser feito:
(a) Processar QID = H1 (ID) ∈ G∗1
(b) Escolhe um randômico r ∈ Zq∗
(c) Atualize o texto cifrado para que seja:
C = hrP, M ⊕ H2 (grID )i onde gID = e(QID , Ppub )
Texto cifrado: C = hU = rP, V = M ⊕ H2 (grID )i ∈ G∗1 × {0, 1}n
IV.
DECIFRA :
Para decifrar o texto cifrado C = hU, V i através de ID processada
V ⊕ H2 (e(dID , U)) = M
6.1.2
Modelo de Cocks
O esquema IBE de Cocks é atualmente o único esquema criptográfico que não uti-
liza emparelhamento bilenear e na prática não é utilizado pela grande expansão do texto criptografado.
45
Basicamente, quando a autoridade certificadora (PKG, TA) recebe uma identidade (chave
pública) é executado uma função hash no texto gerando um valor a módulo M , onde a reprea
sentação é igual a representação de Jacobi ( M
) = +1 . Normalmente a função hash é aplicada diversas vezes de forma estruturada para produzir uma série de possíveis valores para a,
a
parando quando e somente quando ( M
) = +1 . A fórmula de Jacobi pode ser aplicada sem
conhecimento na fatoração de M (COCKS, 2001).
Os principais componentes do modelo Cocks , segundo Misaghi:
I.
INICIALIZA :
O PKG gera um módulo M disponível universalmente, que é o produto de
dois números primos P e Q. Os números primos P e Q são congruentes a 3 mod 4 e eles,
são particularmente prendidos por PKG. O PKG também seleciona funções hash seguras
disponíveis universalmente.
Os parâmetros utilizados são: hM , funções hash i e chave mestre é a fatoração de M .
II.
EXTRAI :
Quando alguém envia a string da sua identidade para PKG, o PKG verifica a
identidade e faz o seguinte:
(a) Aplica uma função hash e produz um valor a mod M tal que o símbolo de Jacobi
( Ma ) é +1. Isto envolve aplicações múltiplas de uma função hash de uma forma estruturada para produzir um conjunto de valores candidatos para a, parando quando
( Ma ) for +1. Desde que ( Ma ) seja +1, ( Pa ) = ( Qa ) e também a seja o módulo
quadrático de P e Q e ainda o módulo quadrático de M .
(b) O PKG apresenta uma raiz para pessoa como a sua chave privada correspondente
a sua identidade, na qual so a PKG poderá calcular.
III.
CIFRA :
A cifragem de uma mensagem consiste em gerar uma chave de transporte e cifrar
a mensagem com um algoritmo de cifragem simétrica. Cada bit da chave de transporte
será enviado da seguinte forma:
(a) Sendo x um bit singular de uma chave de transporte codificado como +1 ou -1.
(b) Escolher um valor t randômico de tal forma que ( Mt ) seja igual a x.
(c) Enviar s = (t + a/t) Mod M .
Se Beto não souber qual das raízes (a ou -a) Alice está guardando consigo, ele terá de
replicar o processo acima, utilizando diferentes t escolhidos randomicamente para enviar
os mesmos x bits como antes, e transmitindo s = (t − a/t) mod M cada vez.
IV.
DECIFRA :
Alice recupera o bit x da seguinte maneira:
46
(a) Alice calcula o símbolo de Jacobi, utilizando a sua chave privada r, como ( s+2r
M ).
t
(b) Alice recupera o bit x, calculando ( s+2r
M ) = ( M ) = x como s + 2r = t(1 + r/t) ∗ (1 + r/t) mod
M.
(c) Alice decifra a mensagem, uma vez que ela recupera todos os bits da chave de
transporte.
6.1.3
Modelo de Waters
Waters propôs a implementação do esquema IBE proposto por Boneh e Franklin baseado
no problema de Diffe-Hellman e sem a utilização de oráculos randômicos.
Os dois principais objetivos de Waters era fazer um esquema criptográfico que trabalhasse com hierarquia e sem a utilização de oráculos randômicos. Para o desenvolvimento
deste esquema foi utilizado como base o esquema BasicIdent (esquema proposto por Boneh e
Franklin em 2001) (WATERS, 2005).
Com essas alterações, o esquema proposto por Waters teria um aumento de segurança
pela utilização de níveis hierárquicos e da retirada dos oráculos randômicos (WATERS, 2005).
Os principais componentes do modelo Waters , segundo Misaghi:
I.
INICIALIZA :
Nesta fase são criados os parâmetros do sistema. Um segredo α ∈ Z p e
um gerador, g ∈ G são escolhidos de forma randômica. Logo, os seguintes valores são
atribuídos:
(a) g1 = gα .
(b) Escolher g2 ∈ G de forma randômica.
(c) Escolher u0 ∈ G de forma randômica.
(d) Escolher um vetor de comprimento n , sendo U = (ui ) de forma randômica com
elementos randômicos em G.
Desta forma, os parâmetros a serem publicados são g, g1 , g2 , u0 e U . O segredo mestre
é gα
2.
II.
GERA CHAVE :
Seja v uma string de n bits que representa uma identidade, vi ilustrando o
i-ésimo bit de v , e V ⊆ {1, . . . , n} seja o conjunto de todos os i que vi = 1. Uma chave
privada para identidade v é gerada como segue:
(a) Escolher r ∈ Z p de forma randômica;
47
(b) A chave privada é construída como:
!r
gα2
dv =
u0 ∏ ui
!
, gr .
i∈V
III.
CIFRA :
Uma mensagem M ∈ G1 é cifrada para uma identidade v como segue, um valor
t ∈ Z p é escolhido de forma randômica. Logo então o texto cifrado será:
!t !
C=
e(g1 , g2 )t M, gt , u0 ∏ ui
.
i∈V
IV.
DECIFRA :
Sendo C = (C1 , C2 , C3 ) uma cifragem válida de M sob identidade v, C poderá
ser decifrado por dv = (d1 , d2 ) como:
C1
6.1.4
e(d2 ,C3 )
e(d1 , C2 )
Modelo de Naccache
O primeiro esquema criptográfico baseado em identidade proposto foi de Boneh e Franklin.
Além dele utilizar oráculos randômicos era considerado seguro. Em 2004 Boneh e Boyen propuseram um esquema IBE totalmente seguro dentro dos padrões, isso quer dizer, sem a utilização de oráculos randômicos, na prática, ele não é utilizado pois é considerado ineficiente.
O primeiro esquema criptográfico baseado em identidade sem a utilização de oráculos
randômicos foi proposto por Waters, em 2005, no evento EUROCRYPTO, tanto a criptografia
quanto a descriptografia são totalmente eficientes pela utilização de algumas exponenciações
e alguns mapas bilineares que são necessários (BONEH; BOYEN, 2004).
Entretanto o problema do esquema IBE proposto por Waters é o tamanho dos parâmetros públicos, que são muito grande. No EUROCRYPT de 2005, Waters tornou como problema
público um esquema IBE sem a utilização de oráculos randômicos e com parâmetros públicos
pequenos (BONEH; BOYEN, 2004).
O esquema IBE, proposto por Naccache, trabalha em torno desde problema levantado
por Waters.
Naccache propôs um esquema em que os parâmetros públicos são menores, entretanto
utilizando mapas bilineares.
48
Seja G um grupo de números primos de ordem p , seja g gerado a partir de G e
seja e um mapa bilinear aceitável em G1 . A identidade é representada por n e l que são
parâmetros sem ligação com p , e n0 = n.l é o tamanho de saída da função hash resistente a
0
colisão: H : {0, 1}∗ − > {0, 1}n (BONEH; BOYEN, 2004).
Comparando o desempenho com o esquema IBE de Waters e Naccache, para a geração
dos parâmetros públicos o esquema do Naccache é mais eficiente, enquanto para a criptografia
e descriptografia o esquema proposto por Waters é mais eficiente (BONEH; BOYEN, 2004).
Os principais componentes do modelo Naccache , segundo Misaghi:
I.
INICIALIZA :
Nesta fase são criados os parâmetros do sistema. Um segredo α ∈ Z p e
um gerador, g ∈ G são escolhidos de forma randômica. Logo, os seguintes valores são
atribuídos:
(a) g1 = gα .
(b) Escolher g2 ∈ G de forma randômica.
(c) Escolher u0 ∈ G de forma randômica.
(d) Escolher um vetor de comprimento n , sendo U = (ui ) de forma randômica com
elementos randômicos em G.
Desta forma, os parâmetros públicos são g, g1 , g2 , u0 e U . O segredo mestre é gα
2.
II.
EXTRAI :
Seja v = (v1 , . . . , vn ) ∈ ({0, 1}a )n uma identidade, escolher r randômico em Z p .
A chave privada dv para a identidade v é construída como:
n
dv =
!r
u0 ∏ uvi i
gα2
!
, gr .
i=1
III.
CIFRA :
Uma mensagem m é cifrada para uma identidade v como segue, um valor t ∈ Z p é
escolhido de forma randômica. Logo, o texto cifrado será:
C=
t
t
0
n
e(g1 , g2 ) M, g , u ∏
!t !
uvi i
.
i=1
IV.
DECIFRA :
Sendo C = (C1 , C2 , C3 ) uma cifragem válida de m sob identidade v, C poderá
ser decifrado por dv = (d1 , d2 ) como:
C1
e(d2 ,C3 )
e(d1 , C2 )
49
6.2
TABELA COMPARATIVA
A Tabela 5, mostra um comparativo entre empregabilidade de tecnologias nos diversos
esquemas IBE.
Tabela 5: Comparativo entre tecnologias nos esquemas IBE
Curvas elípticas
Oráculos randômicos
Rapidez
Resíduos Quadráticos
Boneh-Franklin Cocks
Sim
Não
Sim
Não
Não
Não
Não
Sim
Fonte: O Autor.
Waters
Sim
Não
Não
Não
Naccache
Sim
Não
Sim
Não
A Tabela 5 foi elaborada com base nas informações de cada modelo, sendo que não
necessariamente o item rapidez está diretamente ligado a alguma tecnologia utilizada.
Segundo Misaghi mostra-se na Tabela 6 as operações utilizadas pelos esquemas IBE,
por ordem de custo computacional, lembrando que quanto maior o custo computacional, mais
complexa é a operação.
Tabela 6: Operações IBE por ordem de custo computacional.
Operação
emp
exp
Ms
h
Descrição
Custo Operacional
Emparelhamento bilinear Custo mais alto
Exponenciação
Custo alto
Multiplicação Escalar
Custo moderado
Função hash
Custo mais baixo
Fonte: Misaghi (MISAGHI, 2006)
Segundo Misaghi mostra-se na Tabela 7 as operações relacionadas durante o processo
de cifragem, baseando-se na Tabela 6 que apresenta as operações ordenadas por custo computacional justifica por que o esquema de Boneh Franklin é demorado, sendo que uma operação
de emparelhamento demora cerca de 2/3 do tempo de cifragem.
Tabela 7: Operações utilizadas no processo de cifragem.
Esquema
M s exp h p a emp h m2p XOR
Boneh-Franklin
1
1
1
1
1
Waters*
3
1
Naccache*
4
1
Fonte: O Autor (adaptado de Misaghi (MISAGHI, 2006))
Legenda:
50
M s = multiplicação escalar
p a = adição de ponto
h m2p = MapToPoint. No caso de * operação é em grupo
exp = exponenciação
emp = operação de emparelhamento
XOR = operação de XOR
h = função hash
Segundo Misaghi mostra-se na Tabela 8 as operações relacionadas durante o processo
de decifragem, baseando-se na Tabela 6 que apresenta as operações ordenadas por custo computacional percebe-se que o esquema do Waters e Naccache serão mais lentos, pois efetuam
mais operações de exponenciação que o esquema do Boneh Franklin:
Tabela 8: Operações utilizadas no processo de decifragem.
Esquema
M s exp h p a emp h m2p XOR
Boneh-Franklin
1
1
1
Waters
2
1
Naccache
2
1
Fonte: O Autor (adaptado de Misaghi (MISAGHI, 2006))
6.3
CARACTERÍSTICAS POSITIVAS E NEGATIVAS
Tem-se as seguintes vantagens na utilização de esquemas criptográficos baseado em
identidade (BENITS, 2003, 60):
I. Não é necessário um diretório contendo as chaves públicas: como nos sistemas criptográficos baseados em identidade a chave pública é uma características que identifica o
usuário, como por exemplo o e-mail, essa informação é pública, e por esse motivo não se
tem a necessidade de publicar tais informações, tendo em vista que essas informações
normalmente são de conhecimento público;
II. Qualquer entidade que possua um par de chaves padrão pode fazer o papel de gerador
de chaves privadas;
III. PKG tem custódia das chaves: Pode ser visto como uma vantagem e como uma desvantagem, pois o PKG tendo a custódia das chaves possibilita com que ele possa ler todas as
51
mensagens que ele recebe, esse ponto levanta uma característica negativa que também
é levantado como uma desvantagem, outro ponto de vista é que caso algum envolvido
na conversa sofra algum acidente as mensagens e arquivos pertencentes a essa pessoa
que sejam de interesse da empresa poderiam ser recuperados a partir da chave que fica
no PKG;
IV. Possibilidade de envio de mensagem sem que o receptor possua sua chave privada:
em sistemas tradicionais de chave pública, como por exemplo o RSA, é necessário um
processamento prévio para a geração das chaves públicas e das chaves privadas, pela
depêndencia entre as chaves públicas e privadas durante a sua geração, ambos precisam
ser gerados, não sendo possível o envio de mensagens sem esse pré-processamento;
V. Envio de mensagens sem a necessidade do certificado do receptor: diferentemente dos
sistemas de chave públicas convencionais como o RSA, a chave pública em esquemas
IBE é uma característica que identifica o usuário de forma única, fazendo com que ele
não possa negar que tal característica pertence a ele, dessa forma não se faz necessário
a utilização de certificados e nem de uma infra-estrutura de chaves públicas;
VI. Tamanho das chaves em relação a criptografia assimétrica tradicional (RSA) e criptografia
simétrica: conforme visto no capítulo 4, a criptografia assimétrica convencional (RSA), a
criptografia assimétrica por curvas elípticas e a criptografia simétrica tem uma grande
diferença no tamanho da chave para garantirem o mesmo nível de segurança, esse item
é uma vantagem de sistemas IBE pois faz com que sua chave seja menor.
Tem-se as seguintes desvantagens na utilização de esquemas criptográficos baseado
em identidade (BENITS, 2003, p.63):
I. Grande dependência da chave mestra do PKG: como foi visto, todas as chaves privadas
geradas pelo PKG são geradas baseadas na chave mestra do PKG, caso essa chave
seja comprometida, todas as chaves privadas geradas, todas as mensagens enviadas
e todas as mensagens que serão enviadas futuramente estariam comprometidas. Para
resolver este problema poderia ser utilizado múltiplos PKGs, onde deveria ser mantido
em segurança todos os servidores PKG;
II. O PKG tem conhecimento de todas as chaves privadas de seus usuários: como já levantado, este item repete-se pelo fato de poder ser considerado uma desvantagem, para
corrigir este problema poderia ser utilizado a mesma solução utilizada no item anterior,
múltiplos PKG;
52
III. Dificuldade da implementação do emparelhamento de TATE: o cálculo do emparelhamento
de Tate é muito custoso a níveis computacionais, dependendo da forma que foi implementado pode levar um esquema IBE a ser inviável de se utilizado em termos práticos, pois
ficaria muito lento. Alguns pesquisadores como Galbraith, Harrison, Soldera, Barreto,
Lynn e Scott já conseguiram uma implementação mais eficiente do emparelhamento de
Tate, porém este possui ordem de grandeza superior ao cálculo de exponenciação em um
corpo finito.
6.4
PLATAFORMA VOLTAGE
A plataforma de Voltage possui mecanismos para o envio seguro de e-mails, mensagens
instantâneas, voz sobre IP entre outros. Além disso, o kit de ferramentas de Voltage permite
que desenvolvedores utilizem as bibliotecas de criptografia, inclusive o IBE. A Figura 14 e a
Figura 15 ilustram o funcionamento do Voltage Secure-mail.
Figura 14: Funcionamento do Secure-mail do Voltage, primeira utilização.
Fonte: O Autor (adaptado de Security (SECURITY, 2006))
Na Figura 14, para Bob enviar uma mensagem para Alice não precisará de nenhuma
operação adicional, quando Bob clicar no botão ’enviar’, o sistema irá criptografar a mensagem
dele usando o e-mail de Alice. Para a operação acima se concretizar não é preciso nenhum
processamento prévio para geração da chave pública, pois a chave pública no caso é o e-mail
de Alice. Para Alice visualizar a mensagem em seu computador, caso ela não possua o Voltage Secure-mail instalado irá aparecer no e-mail criptografado e um link para baixar o Voltage
53
Secure-mail, o Voltage Secure-mail deverá ser autenticado em algum servidor e, após isso, ele
baixará a chave privada do usuário, o que permitirá que a mensagem seja descriptografada.
Figura 15: Funcionamento do Secure-mail do Voltage, segunda utilização.
Fonte: O Autor (adaptado de Security (SECURITY, 2006))
A Figura 15 mostra o mesmo processo descrito na Figura 14, porém aqui Alice já possui
sua chave privada, onde não é mais necessário para Alice comunicar-se com o PKG e requisitar
sua chave privada novamente.
6.5
IMPLEMENTAÇÃO BONEH FRANKLIN COM DISPONIBILIDADE TEMPORAL
Será apresentado o desenvolvimento efetuado para demonstrar a aplicabilidade do esquema do Boneh Franklin. Como diferencial das demais implementações deste modelo este
desenvolvimento aplica a disponibilidade temporal.
De forma simplificada, disponibilidade temporal é utilizada para enviar uma mensagem
e o tempo que a mensagem estará disponível para o receptor conseguir decifrá-la é limitado no
envio da mensagem.
Desta forma pode-se enviar uma mensagem para Bob e garantir que ele poderá ver está
mensagem somente hoje, caso não faça isso, não poderá mais visualizá-la corretamente.
Como o desenvolvimento teve ênfase educacional, o programa desenvolvido mostra todas as variáveis do sistema, onde é exibido o tamanho máximo dos números primos gerados
aleatoriamente, o valor do master key utilizado pelo servidor PKG, o valor da variável ’q’, a
função de hash utilizada e qual curva está sendo utilizada, conforme demonstra a Figura 16.
A aplicação é dividida em 2 componentes:
54
Figura 16: Implementação Boneh Franklin - Variáveis disponíveis.
Fonte: O Autor.
I. Servidor PKG: servidor que possui todo o processamento da criptografia IBE, é responsável por cifrar, decifrar, gerar todas as variáveis do servidor e gerar a chave privada dos
usuários.
II. Cliente: aplicação que se conecta no servidor PKG e solicita a cifragem de mensagens, a
decifragem de mensagens e a geração de sua chave privada. O cliente foi desenvolvido
para permitir várias instâncias no mesmo computador.
Figura 17: Implementação Boneh Franklin - Servidor PKG.
Fonte: O Autor.
Para iniciar a aplicação cliente primeiramente deve-se ter um servidor PKG disponível,
para isso devemos iniciar o servidor conforme demonstra a Figura 17.
A Figura 18 mostra a aplicação cliente iniciada, assim que o usuário abrir a aplicação
cliente deverá efetuar a configuração do servidor PKG clicando no botão ’Configuração Servidor’ e em seguida informar o ’Nome’ do ’Servidor RMI’ e efetuar a parametrização da identidade
utilizada informando em ’Servidor Local’ o número da porta, sendo que o ’Nome’ em ’Servidor Local’ é assumido por padrão como o endereço de IP do computador, conforme mostra
Figura 19.
55
Figura 18: Implementação Boneh Franklin - Tela Principal.
Fonte: O Autor.
Figura 19: Implementação Boneh Franklin - Configuração servidor PKG e configuração
da Identidade.
Fonte: O Autor.
Na Figura 19 é parametrizado o servidor PKG, a comunicação com o servidor PKG
é feita pelo protocolo RMI1 , assim deverá ser informado a localização do servidor RMI para
parametrização do servidor PKG. Após informado o servidor PKG, deverá ser informado a porta
que será recebida as mensagens, a porta fará parte da identidade do usuário juntamente com
o endereço de IP do computador.
A identidade utilizada pelo cliente é nada mais do que uma informação que distingue
o usuário na rede, possibilitando assim que outros computadores utilizando o cliente possam
conversar com ele.
1
RMI será explicado no capítulo 8.
56
Desta forma, a identidade utilizada é o IP do computador (na Figura 19 não se pode
informar o nome do computador pois sempre é assumido o computador local) somado da porta
configurada para receber as mensagens.
Após efetuar as parametrizações acima, o usuário precisa ativar o cliente, nesta operação o cliente se conecta no servidor PKG, utilizando o protocolo RMI e também irá ficar ouvindo
a porta configurada para receber novas mensagens, assim que uma mensagem for recebida,
a tabela da direita intitulada de ’Mensagens Recebidas’ será alimentada, conforme mostra a
Figura 20.
Figura 20: Implementação Boneh Franklin - Mensagem recebida.
Fonte: O Autor
Assim que a mensagem for recebida o usuário poderá clicar sobre ela na tabela da
direita e assim poderá exibir a mensagem descriptografada, conforme mostra a Figura 21.
A configuração da disponibilidade temporal é feita sempre antes de enviar a mensagem,
assim pode-se limitar a data máxima de leitura da mensagem. Inicialmente o cliente permite
fornecer disponibilidade ’Não Utilizado’, ’Diária’, ’Mensal’ ou ’Anual’, sendo que é possível utilizar
qualquer unidade de tempo para a disponibilidade temporal.
A chave pública no cliente atualmente é composta das seguintes informações:
Endereço de IP : Porta recebedora de mensagens
Levando para exemplo acima ela seria:
127.0.0.1:2121
57
Figura 21: Implementação Boneh Franklin - Mensagem recebida cifrada e decifrada.
Fonte: O Autor.
Sendo que este cliente está configurado para receber mensagens na porta 2121. Para a
implementação de disponibilidade foi somado no final da identidade do cliente a disponibilidade
temporal aplicada. Agora a chave pública do cliente tem o seguinte formato:
Endereço de IP : Porta recebedora de mensagens : Disponibilidade
Utilizando o exemplo acima e imaginando que a disponibilidade temporal seja mensal,
partindo da data referência como 01/11/2006, a identidade do usuário seria a seguinte (a aplicação utiliza meses partindo de Janeiro com valor 0 (zero) até dezembro com valor 11 (onze)):
127.0.0.1:2121:10/2006
Desta forma, quando receber a mensagem o receptor terá de verificar a disponibilidade
temporal aplicada (’Não Utilizado’, ’Diária’, ’Mensal’ ou ’Anual’).
A utilização de disponibilidade temporal fica visível no programa, demonstrando a seção
de log, em que o programa grava todos os passos do sistema, conforme mostra a Figura 22.
Caso um usuário tentasse visualizar uma mensagem com a disponibilidade temporal
vencida, não iria conseguir visualizar a mensagem tendo um retorno semelhante a Figura23.
58
Figura 22: Implementação Boneh Franklin - Tela de Log.
Fonte: O Autor.
59
Figura 23: Implementação Boneh Franklin - Mensagem com disponibilidade temporal vencida.
Fonte: O Autor.
60
7
BUSCA EM BANCO DE DADOS CIFRADOS
Busca em banco de dados cifrados utilizando IBE é estudada a alguns meses, já é
possível levantar vários autores com artigos a respeito. Este capítulo baseia-se principalmente
no artigo escrito por Waters (WATERS et al., 2004). Segue algumas notas de alguns outros autores
referente a busca de palavras em banco de dados cifrados.
Abdalla propôs em seu artigo algumas extensões da busca cifrada (ABDALLA et al., 2005):
I. IBE anônimo: um esquema IBE é anônimo que não revela a identidade da pessoa, Abdalla
et al. propuseram algumas alterações para fazer com que a identidade do receptor não
fosse revelada pela chave pública do mesmo.
II. PETKS - Public key Temporary Keyword Searchable: disponibiliza palavras-chave para
buscas somente num determinado período de tempo.
III. Criptografia baseada em identidade com busca de palavras-chave: Combinaram os conceitos de criptografia baseada em identidade e PEKS
1
para obter criptografia baseada
em identidade com busca de palavras-chave (IBEKS - Identity based encryption with keyword search). Semelhante aos esquemas IBE, este permite utilizar qualquer texto como
chave pública do receptor para o esquema PEKS.
Philippe Golle e David Wagner propuseram em seu artigo os seguintes itens (GOLLE;
WAGNER,
2006):
I. Busca em banco cifrado por múltiplas palavras-chave: Prover ao sistema a capacidade
de buscar por mais de uma palavra separadamente ou juntamente na mesma busca.
Utilizando PEKS o únicos caminho para fazer isso é procurar cada palavra separadamente
e efetuar operações para buscar pelas outras palavras no resultado da primeira busca.
Esta técnica não é prática quando têm-se um número elevado de palavras-chave num
conjunto de requisições, pois todos os dados são buscados para todas as buscas por
palavras-chave simples.
II. Canais seguros (Secure Channels): O esquena PEKS precisa de um canal seguro para
os clientes comunicarem com o servidor, isso se faz necessário pelo motivo de um intruso
puder recuperar a chave pública. O algoritmo PEKS foi alterado para cifrar palavras-chave
1
PEKS - Public key Encryption with Keyword Searchable (Criptografia por chave pública com busca por palavrachave cifrada
61
utilizando a chave pública do cliente e a chave pública do servidor, enquanto o algoritmo
de teste precisa da chave privada do servidor para poder decifrar o dado e somente o
servidor poderia efetuar esta operação.
Ohtaki propôs a utilização da inversão dos índices para determinar quais registros satisfazem a busca num banco de dados cifrados. O processo se resume em (OHTAKI, 2005):
I. Cada palavra é assinada com a chave secreta S0 , concatenado com o identificador do
registro, então criptografa utilizando a chave pública P1 :
uij = E p 1(I i |Es0 (wij )) onde j = 1, 2, ..., m
II. Identificador do registro é criptografado usando a chave secreta do admin s0 e o registro
é criptografado usando a criptografia simétrica F .
K i = Es0 (I i ) , V i = FK i (Ri )
Um grupo de registros criptografados com identificadores denominado C :
C = (I 1 ,C1 ,V 1 ), (I 2 ,C2 ,V 2 ), ..., (I n ,Cn ,V n )
III. Quando o investigador for buscar os dados ele deverá passar uma palavra para o admin,
o admin irá retornar a palavra cifrada W 0 cifrada com a chave privada S0 .
IV. O investigador concatena a palavra com o identificador I i :
W i = E p1 (I i |W 0 ), i = 1, 2, ..., n
V. O investigador compara W i com uij . Se o registro tem uma entrada parecida com W i , o
investigador poderá saber o registro atrelado a palavra-chave.
Abaixo segue os principais pontos levantados do artigo do Waters (WATERS et al., 2004)
e que serão utilizados para o desenvolvimento da aplicação no Capítulo 8.
O principal objetivo do log é saber a situação atual de um sistema, quais as rotinas estão
sendo executadas, e quais rotinas o sistema já executou.
Atualmente vários sistemas incluem a opção de log, afim de verificar possíveis problemas durante a execução de processos , identificar possíveis tentativas de ataques ou até
mesmo identificar ataques sofridos que não foram descobertos até então.
62
Juntamente com as informações dos usuários que tiveram acesso a um sistema qualquer, ou até mesmo, todas as atividades que um usuário efetuou no sistema podem ser logadas
para futuras consultas, algumas informações podem ser de grande importância para a organização e talvez seja perigoso mante-lá em um arquivo de acesso geral, ou em um banco de dados
que pessoas mal intencionadas possam ter acesso afim de roubar informações.
Para isso, muitas empresas acabam criando verdadeiras muralhas para guardar seus
logs, evitando assim que qualquer usuário tenha acesso aos logs. Outras empresas também
usam a prática de criptografar o banco de dados, assim usuários que não podem ter acesso a
tal informação não poderão compreende-lá, e não poderão usá-la de forma incorreta.
O problema de criptografar banco de dados ou logs é na hora de efetuar buscas afim de
analisar as atividades efetuadas ou analisar um período qualquer, pois para poder compreender
o log é necessário descriptografar todas as informações contidas nele, tornando o processo
além de lento também inseguro, pois caso algum usuário mau intencionado tivesse acesso aos
dados descriptografados poderia colocar em risco as informações da empresa.
Waters, em seu artigo, mostra como fazer um sistema de logs em que se permite ter
os logs criptografados, efetuar buscas por palavras-chave no banco de dados criptografado e
descriptografar todos os dados referente a um registro qualquer.
A entidade que armazena as chaves pode designar para qualquer usuário, que será
chamado de investigador, a possibilidade de consultar por palavras-chave que não pertençam a
ele, isso é conhecido como delegação de capacidade de busca, onde a entidade que armazena
as chaves pode ceder acesso a qualquer usuário.
O artigo do Waters, onde ele descreve a criação e a consulta de dados em um banco
de dados criptografado foi baseado na criptografia por identidade (IBE), sendo o esquema do
Boneh e Franklin, conhecido por BasicIdent, o esquema aplicado para sua implementação.
O servidor que possui o banco de dados onde é armazenado os logs utiliza uma palavrachave para a criptografia dos dados. No esquema proposto por Waters é gerado palavras-chave
para efetuar a busca dos dados. Estas palavras-chave são criptografadas utilizando a própria
palavra como chave pública.
Assim quando o usuário receber o texto criptografado ele não saberá qual palavra-chave
foi utilizado para criptografar aquele dado.
Na criptografia simétrica fazer uma busca em um banco de dados criptografado é fácil,
pois o banco de dados inteiro possui apenas uma chave, que é compartilhada por todos os
63
registros. Com isso, não se consegue garantir o legítimo dono de uma informação (registro),
fazendo com que qualquer pessoa tivesse acesso àquela informação.
Utilizando o esquema de criptografia assimétrica, como por exemplo IBE, somente o
legítimo dono da informação poderá acessar aquele dado. No caso de se fazer necessário um
usuário buscar informações que não sejam a respeito daquele usuário, o PKG poderá ’ceder’
permissão ao usuário, como foi visto anteriormente, é o que se chama de delegação de capacidade de busca.
7.1
CARACTERÍSTICAS DO LOG DE AUDITORIA SEGURO
As características principais do log de auditoria seguro são:
I. Desenhado para prevenir e garantir autenticidade
II. Desenhado para controlar os dados, garantindo que eles não serão alterados e controlar
o acesso aos dados
7.2
RESISTENTE A ENGANOS
O log de auditoria seguro foi feito para prevenir e cuidar da elegibilidade nos dados,
garantindo assim que nenhum outro usuário, além do criador do registro do log, poderá visualizar os dados.
7.3
VERIFICABILIDADE
É possível verificar todas as entradas do log presentes e que não foram alteradas. Para
verificar um log auditor tem-se duas maneiras:
I. Cada entrada no log auditor conterá informações para garantir sua autenticidade. Se algumas entradas foram alteradas ou deletadas, será detectado, pois os dados são gravados
criptografados. Caso alguma informação foi perdida ou modificada, é possível verificar as
demais entradas para recuperar alguma informação útil no log danificado.
II. Os registros devem ser linkados a ponto de ser possível determinar se algum registro está
faltando. Como por exemplo, poderia se adotar a utilização de um número de série para
identificar se todos os registros estão presentes.
64
7.4
CONTROLE DE ACESSO AOS DADOS E BUSCA
O controle de acesso e o controle de buscas no log de auditoria seguro é possível,
sendo que este é criptografado, onde as atividades de controlar o acesso é feito por custódia
da chave privada do usuário que gravou o dado. No controle de buscas é introduzido o conceito
de delegação de capacidades, onde o PKG pode fornecer a um investigador a possibilidade de
efetuar buscas por palavras no banco de dados criptografado. Para a delegação ser considerada
segura, enquanto não for delegado a possibilidade a um usuário, o mesmo não poderá visualizar
informações que não pertençam a ele.
7.5
NOTAÇÕES E COMPONENTES DO LOG AUDITOR
Utilizando um exemplo prático, onde se faz necessário logar todas as informações dos
usuários que estão acessando um ou mais banco de dados SQL.
A log de auditoria consiste em uma série de registros de log individuais, cada registro de
log possui:
I. Criptografia dos dados com uma chave Ki , com um metadata que é a identidade do
usuário, opcionalmente também pode conter o resultado da consulta executada. O valor
de Ki é gerado aleatoriamente para cada registro;
II. H(Ri − 1) o hash do registro anterior, afim de manter uma corrente de hash;
III. palavras-chave (wa , wb , wc ) que poderão ser utilizadas na busca (cwa , cwb , cwc );
IV. hash da data atual
7.5.1
Extração de palavras-chave
A Figura 24 demonstra como acontece a extração das palavras-chave, além das in-
formações extraídas da operação executada, são extraídas meta-informações do usuário que
executou a consulta, a data e a hora. Lembrando que as palavras-chave são categorizadas, e
as buscas não precisam ser feitas apenas pelas palavras-chave, mas também pelas meta informações do usuário (identidade do usuário que efetuou a busca, por exemplo) ou pela data ou
hora.
65
Figura 24: Esquema de busca de palavra em banco de dados cifrados.
Fonte: O Autor (adaptado de Stallings (STALLINGS, 2005, p.22))
7.6
ESQUEMA POR CHAVE ASSIMÉTRICA
Esse esquema pode ser desenvolvido utilizando chaves simétricas também, nesta seção
será apresentado os principais conceitos deste esquema aplicado na criptografia assimétrica,
pois no capítulo 8 esta proposta será implementada utilizando o esquema do Boneh Franklin.
O log de auditoria seguro detalhado aqui se baseia na implementação do esquema
IBE do Boneh Franklin conhecido como BasicIdent, para maiores informações a respeito do
esquema BasicIdent consulte o capítulo 6.
Os principais componentes do auditor de log seguro (WATERS et al., 2004):
I.
INICIALIZA :
Inicialmente é setado a instância do IBE utilizado. No sistema, o agente audi-
tor escravo é determinado o IBE master secret s , e todos os servidores que contribuem
para o auditor de log são determinados pelo parâmetro do sistema P .
II.
CIFRA :
Suponha que o servidor esta encriptando a entrada do log m, juntamente com as
palavras-chave w1 , w2 , ...wn . O servidor executa os seguintes passos:
(a) O servidor escolhe aleatoriamente uma chave simétrica K , para ser usada somente
para está entrada do log;
(b) O servidor cifra o dado utilizando K , para possuir Ek (m);
66
(c) Para cada palavra-chave w1 , o servidor processa o IBE c1 do texto (flag|K) usando
w1 como chave pública e P como parâmetros públicos;
(d) O servidor escreve EK(m) , c1 , c2 , ..., cn como entrada no log de auditoria.
A única forma de voltar algum registro do log é decifrar a palavra-chave c1 e obter a chave
simétrica K .
III.
BUSCA E DECIFRA :
Para efetuar a busca de uma palavra-chave, um investigador irá soli-
citar a delegação para poder pesquisar a palavra w . Se o agente auditor aprovar, ele irá
retornar dw que representa a chave privada IBE da palavra-chave w. Para cada registro
do log, o investigador executa os passos abaixo:
(a) Para cada c1 , o investigador tenta decifrar usando a chave privada IBE, se o prefixo
do resultado é semelhante a flag, então o investigador extrai K , caso contrário
partirá para o próximo registro;
(b) Se um dos resultados ser semelhante a flag, então, é computado K para decifrar
EK (m) para obter m .
67
8
IMPLEMENTAÇÃO BUSCA EM BANCO CIFRADO
Neste capítulo, serão apresentados os principais passos para o desenvolvimento do esquema de Boneh e Franklin utilizando disponibilidade temporal e uma aplicação de busca de
palavra em banco de dados cifrados utilizando IBE. Todos os passos utilizados no desenvolvimento, desde materiais pesquisados, preparação do ambiente, diagramação do desenvolvimento, problemas encontrados no desenvolvimento e a correção dos problemas estão apresentados neste capítulo.
8.1
LINGUAGEM, AMBIENTE E FERRAMENTAS DISPONÍVEIS PARA CURVAS ELÍPTICAS
E IBE
Para o desenvolvimento proposto foi utilizado a linguagem de programação orientada
a objetos Java. A escolha por se optar por esta linguagem de programação, já que existem
tantas outras linguagens com maior disponibilidade de material referente a criptografia como por
exemplo ’C’, foi pela escassez de materiais e escassez de desenvolvimentos nesta linguagem,
em que por outro lado, existem vários exemplos e casos de sucesso de desenvolvimento de
ferramentas de criptografia utilizando linguagens de programação ’C’. Um exemplo disto é o o
projeto conhecido como Multiprecision Integer and Rational Arithmetic C/C++ Library (MIRACL).
O projeto MIRACL disponibiliza uma biblioteca onde se tem disponível uma série de
rotinas necessárias para implementação de esquemas criptográficos, como cálculo de curvas
elípticas entre outras funções.
Outro ponto positivo para a escolha do Java como linguagem de programação foi o
conhecimento técnico e a experiência profissional já adquiridas em outros projetos.
No desenvolvimento proposto foi estudado os artigos relacionados aos esquemas criptográficos que utilizam IBE, tais como o esquema criptográfico IBE proposto por Boneh Franklin,
o esquema criptográfico IBE proposto por Waters e o esquema criptográficos IBE proposto por
Naccache. Além do próprio artigo proposto por Waters onde é apresentado a proposta de
desenvolvimento de pesquisa de palavra em um banco de dados criptografado, conforme apresentado no Capítulo 7.
O artigo do Boneh Franklin foi bastante utilizado sendo que a busca por palavra em
banco de dados cifrados proposto por Waters em seu artigo se baseia na implementação do
esquema criptográfico IBE proposto por Boneh e Franklin conhecida como BasicIdent.
68
8.1.1
Java
Em Dezembro de 1990 a Sun Microsystem iniciou o desenvolvimento do projeto Green
Project que é conhecido como o ’berço’ do Java, os principais membros deste projeto eram
Patrick Naughton, Mike Sheridan e James Gosling (JAVA, 2007).
O objetivo do projeto não era o desenvolvimento de uma nova linguagem de programação mas sim planejar e antecipar o futuro, onde eles acreditavam numa convergência entre
dispositivos domésticos e computadores (JAVA, 2007).
Uma das principais características do projeto era Write Once, Run AnyWhere, que significa, ’escreva uma vez, rode em qualquer lugar’, característica diretamente ligada a idéia da
convergência entre dispositivos domésticos e computadores.
Em 1992, a equipe finalizou o primeiro protótipo do projeto, onde o mesmo se chamava
StarSeven (*7), o mesmo era um controle remoto numa tela touchscreen 1 , o projeto *7 tinha
um mascote que hoje em dia é conhecido no mundo Java como Duke (SUN, 2007).
James Gosling especificou uma nova linguagem de programação para o protótipo *7, e
o batizou de Oak, que significa ’carvalho’. O objetivo da equipe era achar mercado para o *7.
Como ainda era cedo demais para esse tipo de tecnologia o projeto acabou se inviabilizando
(SUN, 2007).
Em Julho de 1994, Bill Joy iniciou o projeto Liveoak com objetivo inicial de construir um
pequeno grande sistema operacional. Em Julho de 1994, o projeto conseguiu um espaço, onde
Naughton pegou a idéia de colocar o Liveoak para trabalhar na internet enquanto escrevia um
navegador de internet no seu longo final de semana. Este foi o marco inicial do Java (FEIZABADI,
2007).
Desde 1995, a Netscape Corporations incorporou o suporte do Java no seu navegador.
Esse foi o triunfo do Java, sendo que ele tinha sido suportado pelo navegador de internet mais
popular do mundo. Mais tarde a Microsoft também suportou o Java no seu navegador (FEIZABADI,
2007).
Hoje em dia, o Java esta presente em navegadores de Internet, mainframes, em sis-
temas operacionais, celulares, palmtops, cartões inteligentes e entre outros dispositivos.
1
interatividade utilizando a toques diretamente na tela e não a partir de periférico de entrada como mouse ou
teclado
69
8.1.2
Arquitetura de Criptografia Java (Java Cryptography Architecture - JCA)
Esta é a API designada para permitir que desenvolvedores incorporem segurança de
baixo e alto nível em seus programas.
O primeiro lançamento da API de segurança no JDK 1.1 foi chamada de Java Cryptography Architeture (JCA). Esta também atualizada para suportar gerenciamento de certificados,
como o X.509 v3, e introduziu a nova arquitetura de segurança Java para granulamento fino,
configurável, flexível e expansível.
O Java Cryptography Extension (JCE) extende a API JCA para incluir APIs para criptografia, geração de chaves, acordo de chaves e mensagens de código de autenticação (MAC).
O suporte a criptografia inclui criptografia assimétrica, simétrica, criptografia por bloco e
cifradores constantes. Anteriormente nas versões do Java SDK 1.2 e .1.3 a API JCE era uma
extensão, agora no Java SDK 1.4 ela foi integrada no SDK.
8.1.3
API de persistência em Java (Java Persistence API - JPA)
Java Persistence API, ou API de persistência em Java está disponível a partir do Java
1.5 (SUN, 2006).
JPA é a primeira API de persistência em Java, sendo que ela é uma junção do projeto
Hibernate (framework de persistência disponível em Java) com EJB 2.1 (framework de persistência e de computação distribuída em Java) (SUN, 2006).
A unificação dos dois projetos gerou o que conhecemos hoje em dia como JPA, o mesmo
foi utilizado no projeto como API de persistência, e foi usado para salvar, deletar e efetuar busca
de palavra no banco de dados cifrados (SUN, 2006).
8.1.4
Invocação de métodos remotos (Remote Method Invocation - RMI)
Remote Method Invocation ou Invocação de métodos remotos é uma das abordagens
da tecnologia Java para prover as funcionalidades de uma plataforma de objetos distribuídos.
Esse sistema de objetos distribuídos faz parte do núcleo básico do Java desde a versão JDK
1.1 (RICARTE, 2002).
Por meio da utilização da arquitetura RMI, é possível que um objeto ativo em uma
máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java, independentemente da localização dessas máquinas virtuais (RICARTE, 2002).
70
RMI foi utilizado no desenvolvimento do esquema de Boneh e Franklin na utilização do
servidor PKG e dos clientes. Todos os clientes se conectam ao servidor PKG e utilizam o objeto
de criptografia remotamente através do protocolo RMI.
8.1.5
Prevayler
O Prevayler é um projeto livre que efetua a persistência de objetos em Java. Com ele
não é necessário a utilização de banco de dados, sendo que o Prevayler é quem serializa os
objetos e armazena eles em arquivos (PREVAYLER, 2006).
O conceito do Prevayler baseia-se no conceito de banco de dados orientado a objetos,
sendo assim não é um banco de dados relacional, então aplicações que utilizam-se do Prevayler
não terão comandos SQL na sua implementação (PREVAYLER, 2006).
Todas as consultas são feitas por meio dos métodos de acessos da classe, sendo que
caso o seu sistema seja mal diagramado, poderá ter problemas em acessar os dados (PREVAYLER,
2006).
Pelo Prevayler ter essa característica de não utilizar comandos SQL, muitas empresas
têm medo de utilizá-lo em projetos grandes. O sucesso de um projeto utilizando Prevayler
depende da diagramação das classes e da forma de acesso dos dados.
O Prevayler foi utilizado no projeto no desenvolvimento do banco de dados cifrados.
Como o servidor PKG sempre sorteia novos valores para sua chave privada, o objeto de criptografia é serializado e assim toda vez que a aplicação é iniciada o objeto é des-serializado,
restaurando sua configuração e mantendo a mesma chave privada do servidor PKG.
8.1.6
Eclipse
Elipse é um ambiente de desenvolvimento que pode ser utilizado para diversas lingua-
gens de programação, tais como C, C++, Java, Progress, PHP entre outras. O Eclipse é distribuído de forma livre, o que o faz ser o um dos ambientes de desenvolvimento em Java mais
difundido e mais utilizado no mundo.
Por ele ser tão difundindo, o transforma num dos melhores IDE2 para se utilizar com
Java, isso também o faz ter vários plug-ins 3 para agilizar o desenvolvimento.
2
3
IDE - Integrated Development Environment (ambiente integrado para desenvolvimento de software)
Mini aplicativos adicionais, afim de facilitar e agilizar o processo de desenvolvimento
71
O Eclipse foi utilizado no desenvolvimento dos dois programas e foi utilizado como ambiente de desenvolvimento padrão deste projeto.
Figura 25: Eclipse utilizado no desenvolvimento.
Fonte: O Autor.
8.2
PRÉ-REQUISITOS PARA O DESENVOLVIMENTO
Os pré-requisitos necessários são os seguintes:
I. Conhecimento em Java: é imprescindível possuir conhecimento básico em todas as tecnologias levantadas nos itens anteriores;
II. Ambiente Java: é importante possuir o ambiente de desenvolvimento acima utilizado, no
caso o Eclipse, mas não se faz obrigatório. Para o desenvolvimento basta utilizar apenas
um editor de textos simples, como por exemplo o bloco de notas do windows;
III. Conhecimento em IBE: conhecer os esquemas criptográficos IBE envolvidos no desenvolvimento, no caso o esquema IBE do Boneh e Franklin e conhecimentos relatados no
artigo proposto por Waters (WATERS et al., 2004).
Sem os conhecimentos acima o projeto proposto não poderá ser desenvolvido.
8.3
IMPLEMENTAÇÃO DE DISPONIBILIDADE TEMPORAL NO ESQUEMA DE BONEH FRAKLIN
No Capítulo 6 foi demonstrado a utilização do desenvolvimento e explicado como internamente a aplicação faz para a utilização da disponibilidade temporal no esquema IBE.
72
Figura 26: Diagrama do esquema Boneh Franklin com disponibilidade.
Fonte: O Autor.
A Figura 26 simplifica o funcionamento do sistema, quando Alice deseja enviar uma
mensagem para Bob com disponibilidade temporal para o mês atual.
Inicialmente, Alice envia para o PKG a mensagem, para a mesma ser criptografada,
juntamente com a mensagem Alice envia a chave pública e o tipo de disponibilidade que deverá
ser aplicado para que a mensagem possa ser cifrada.
Em posse dessas informações o servidor PKG cifra a mensagem e retorna a mesma
para Alice.
Após Alice receber a mensagem cifrada do PKG envia a mesma para Bob, informando
juntamente com a mensagem que a disponibilidade temporal dela é mensal.
Com a mensagem cifrada, Bob envia a mensagem juntamente com a disponibilidade
para o PKG informando a sua identidade. Nesse momento o servidor PKG valida a identidade
de Bob para ter certeza que o Bob é realmente o Bob, após isso decifra a mensagem e retorna
a mensagem decifrada para o Bob.
A comunicação entre os clientes e o PKG acontecem por intermédio do protocolo RMI.
Com o funcionamento acima foi implementado a utilização da disponibilidade temporal
no esquema IBE do Boneh Franklin.
Para o desenvolvimento acima foi utilizado a biblioteca IBE fornecida pela Universidade
Maynooth da Irlanda. A biblioteca utilizada é integrada com a API JCA do Java.
73
8.3.1
Dificuldades Encontradas
Durante o processo de desenvolvimento do esquema IBE do Boneh Franklin com dispo-
nibilidade tiveram os seguintes problemas:
I. Pela biblioteca fornecida ser integrada com a API de criptografia do Java, houve alguns
contra tempo para a utilização, sendo que para isso foi necessário baixar o JCE Unlimited
Strength Jurisdiction Policy Files para deixar de gerar o erro Illegal key size na execução
da aplicação. Os arquivos baixados nesta foram atualizados no JRE 4 do SDK 5 do Java.
II. Dificuldade em localizar ponto onde indicava o tamanho máximo do número primo gerado.
Com a diminuição do tamanho máximo do número primo gerado diminuiu-se também a
segurança do sistema, mas a nível de testes da aplicação levava-se muito tempo em
testes.
8.4
IMPLEMENTAÇÃO DA BUSCA DE PALAVRA EM BANCO DE DADOS CIFRADOS
O desenvolvimento da aplicação que efetua busca de palavra em banco de dados cifrados foi baseado no artigo de Waters (WATERS et al., 2004). O artigo foi discutido em detalhes no
Capítulo 7.
O sistema desenvolvido é bem simples, em que o principal objetivo dele é exemplificar a
utilização do esquema e mostrar os benefícios na utilização dele.
No projeto foi utilizado somente duas tabelas, que elas são definidas conforme o modelo
de entidade e relacionamento da Figura 27.
Figura 27: Implementação de busca de palavra em banco de dados cifrados - Modelo de
entidades e relacionamento.
Fonte: O Autor.
No modelo apresentado na Figura 27, nota-se que as informações persistidas para o
record são:
4
Java Runtime Engine, máquina virtual do Java
Software Development Kit, kit de desenvolvimento do Java, necessário para o desenvolvimento de programas
Java
5
74
I. id: Código primário para o registro;
II. data: Informação guardada cifrada usando criptografia simétrica, no caso AES, o dado
inserido informado pelo usuário;
III. date: Data da inserção do registro;
IV. user: Usuário que efetuou a inserção, utilizado como filtro na busca.
Para a tabela keyword as informações persistidas são as seguintes:
I. id: Código primário para a palavra-chave;
II. record id: Código primário do registro a qual esta palavra-chave representa;
III. word: Palavra-chave cifrada utilizando criptografia assimétrica IBE, a identidade utilizada
é a mesma palavra;
IV. keyCripto: Chave secreta utilizada para cifrar o registro (record), a chave secreta é guardada
criptografada utilizando criptografia simétrica IBE, a identidade utilizada é a palavra-chave
(word).
Pelos motivos levantados no capítulo 2, se decidiu utilizar a criptografia simétrica AES.
O objetivo da aplicação desenvolvida é a garantia da privacidade dos dados, sendo
assim somente quem realmente souber da existência da palavra poderá buscá-la.
A tela principal da aplicação desenvolvida é conforme a Figura 28. Nesta tela pode ser
observado na tabela da direita todas as atividades pendentes, que podem ser inserções ou
buscas .
Na parte da esquerda do programa temos um filtro para a realização de buscas, assim
que ordenado efetuar uma busca clicando no botão O o sistema irá adicionar esta ordem de
busca na lista de tarefas e a mesma irá aparecer na tabela da direita. Após a busca ter sido
efetuada, será alimentado a tabela do lado esquerdo da tela.
As atividades de inserção e de busca na aplicação são enfileiradas, este enfileiramento
é feito por causa do tempo de processamento para finalizar as atividades pode ser alto, essas
atividades podem ser demoradas pois elas dependem de alguns fatores conforme abaixo:
75
Figura 28: Implementação de busca de palavra em banco de dados cifrados - Tela principal.
Fonte: O Autor.
I. Inserção: pode variar o tempo dependendo do tamanho da informação a ser inserida.
Como toda palavra com mais de quatro caracteres é considerado uma palavra-chave,
caso a informação inserida contenha muitas palavras chaves o sistema irá demorar muito
tempo na geração da criptografia IBE de cada palavra.
II. Busca: caso a base de dados contenha muitos dados o sistema irá demorar muito para
efetuar a busca na base inteira. Na medida que a busca é efetuada, os dados na tabela
chamada de ’Resultados Busca’ serão alimentados, mas para a busca finalizar por completo pode-se levar alguns minutos dependendo do tamanho da base de dados.
O processo de inserção de dados é feito clicando no botão ’Inserir’ na tela principal, após
clicado, uma tela, conforme a Figura 29, será aberta.
Figura 29: Implementação de busca de palavra em banco de dados cifrados - Tela de
inserção de dados.
Fonte: O Autor.
76
Na tela apresentada na Figura 29 deverá ser digitado a informação que será inserida e
o usuário que está inserindo. Após clicado no botão ’OK’, o sistema irá efetuar o processo de
inserção. O processo de inserção efetua os passos conforme demonstra a Figura 30.
Figura 30: Implementação de busca de palavra em banco de dados cifrados - Diagrama
de seqüência - Operação inserir.
Fonte: O Autor.
A Figura 30 exemplifica o processo de inserção. O primeiro processo a ser executado
é a geração da chave secreta, representado pelo processo 1.1 e é utilizada pela criptografia
simétrica. Após o processo 1.2 é executado, neste processo os dados inseridos na Figura 29
no campo ’Informação’ serão cifrados utilizando a chave secreta gerada no processo 1.1. Após
estes dois processos o registro record já está pronto para ser inserido. O próximo passo a ser
executado é cifrar cada palavra-chave utilizando a própria palavra-chave como chave pública
(identidade), este processo é representado pelo passo 1.3. O último processo executado é o
processo 1.4, onde juntamente com cada palavra-chave é guardado a chave secreta da criptografia simétrica, esta chave é guardada criptografada pelo esquema IBE, a chave pública
utilizada é a mesma utilizada para cifrar a palavra.
O próximo passo no sistema é efetuar buscas. Para efetuar buscas deverá ser preenchido,
no mínimo, o campo ’Palavra Chave’ na tela da Figura 28. O processo de busca de palavras
esta exemplificado na Figura 31
77
Figura 31: Implementação de busca de palavra em banco de dados cifrados - Diagrama
de seqüência - Operação buscar.
Fonte: O Autor.
A Figura 31 exemplifica o processo de busca em um banco de dados cifrados. O primeiro
processo a ser executado é o 1.1, onde é efetuado a busca de todas as palavras chaves, no
processo 1.2 tenta-se decifrar cada palavra-chave buscada do banco de dados utilizando a
palavra que está sendo buscada como chave pública (identidade). Caso a palavra resultante da
decifragem da palavra chave resgatada do banco de dados seja igual a palavra-chave fornecida
na busca, então parte-se para o item 1.3, caso contrário o próximo registro é tentado. No
processo 1.3 decifra a chave secreta da criptografia simétrica utilizando a palavra buscada como
chave pública. Com a chave secreta em mãos, os dados do registro é decifrado. Após estes
processos é retornado o registro para a interface do usuário.
Na Figura 32 e Figura 33 percebe-se através de uma busca diretamente no banco de dados que as informações inseridas são possíveis de ser compreendidas somente pela utilização
da interface de busca.
78
Figura 32: Implementação de busca de palavra em banco de dados cifrados - Busca
diretamente na base de dados - Tabela de Keyword.
Fonte: O Autor.
Figura 33: Implementação de busca de palavra em banco de dados cifrados - Busca
diretamente na base de dados - Tabela de Record.
Fonte: O Autor.
79
Figura 34: Implementação de busca de palavra em banco de dados cifrados - Lista de
tarefas.
Fonte: O Autor.
Figura 35: Implementação de busca de palavra em banco de dados cifrados - Resultado
busca.
Fonte: O Autor.
80
8.4.1
Dificuldades Encontradas
Durante o processo de desenvolvimento, teve-se as seguintes dificuldades:
I. Pela biblioteca fornecida ser integrada com a API de criptografia do Java, houve algum
contra tempo para a utilização, sendo que para isso foi necessário baixar o JCE Unlimited
Strength Jurisdiction Policy Files para deixar de gerar o erro Illegal key size na execução
da aplicação. Os arquivos baixados nesta foram atualizados no JRE do SDK do Java.
II. Dificuldade em localizar ponto onde indicava o tamanho máximo do número primo gerado.
Com a diminuição do tamanho máximo do número primo gerado diminuiu-se também a
segurança do sistema, mas a nível de testes da aplicação levava-se muito tempo em
testes.
III. Dificuldade em estabilizar a aplicação no quesito de restaurar a chave da criptografia
simétrica, onde após a utilização de algumas vezes da busca a aplicação gera erros de
recuperação da chave simétrica.
IV. Dificuldade em trabalhar com o Prevayler sob os objetos desenvolvidos pela Universidade da Irlanda, pois os mesmos objetos não implementavam a interface necessário para
a utilização de serialização de objetos, para a correção deste problema os objetos da
Universidade da Irlanda foram descompilados e foi alterado as classes necessárias para
serem serializados. Esta alteração fez perder a assinatura da biblioteca chamada por
’blitz-dev.jar’. A aplicação não chegou a ter uma versão final estável com a utilização do
Prevayler.
81
9
CONCLUSÕES
A criptografia é um método muito antigo para esconder mensagens e, atualmente, é
utilizada para manter seguro o conteúdo de informações sigilosas.
Com a expansão da Internet, está ficando cada vez mais comum utilizá-la para compras
on-line, consulta de dados nos bancos, entre outros serviços.
Juntamente com a expansão da Internet, precisa-se garantir que as informações trafegadas por ela sejam seguras, e garantir que somente as devidas pessoas fiquem de posse de
tais informações sigilosas.
A assinatura digital é uma das formas para garantir a autenticidade dos dados, utilizando
um esquema criptográfico a troca de informações pode ser segura, sem que o remetente nege
a autoria dos dados. O problema na utilização de assinaturas digitais é o custo elevado. Por
esse motivo, foi desenvolvido outra forma de garantir a autenticidade dos dados na troca de
mensagens, à criptografia baseada em identidade, onde a identidade é a chave pública na
criptografia e pode ser o RG, CPF ou alguma outra informação que identifique a pessoa.
A implementação de aplicabilidade do esquema de Boneh Franklin foi apresentada no
’8th International Symposium on Systems and Information Security’ que foi realizado no Instituto
Tecnológico de Aeronáutica (ITA) no dia 10 de Novembro de 2006, onde teve boa aceitação
dentre todos os presentes. Antes mesmo de totalmente concluído o trabalho, ele já estava
contribuindo para a criptográfica. A integra do minicurso apresentado encontra-se em (MISAGHI,
2006).
A implementação da aplicabilidade de busca de palavra em banco de dados cifrados
não foi apresentado no mesmo congresso pois ainda estava em período de desenvolvimento.
Com o desenvolvimento do trabalho, alcançou-se a compreenção dos conceitos referentes a criptografia simétrica, assimétrica, a compreenção dos modelos criptográficos baseados
em identidade proposto por Boneh Franklin (BasicIdent). Após estudos e vários testes foi possivel também compreender os conceitos levantados por Waters referente a busca de palavra
cifrada em banco de dados, após a compreenção destes conceitos foi levantado outros autores
que também elaboraram trabalhos referente a busca de palavras cifrada. Após esses passos foi
iniciado o desenvolvimento do esquema proposto por Boneh Franklin com a utilização da disponibilidade temporal, depois de algumas dificuldades levantadas no capítulo do desenvolvimento
a implementação foi concluida. No desenvolvimento de busca de palavra em banco de dados
cifrados teve-se alguns problemas maiores, onde o mesmo apresenta algumas instabilidades.
82
Os pontos que contribuiram para que os resultados iniciais não fossem alcançados são
a dificuldade em compreender os sistemas criptográficos baseados em identidade, sendo que
este envolve muitas operações matemáticas. A escassez de explicações sobre as implementações, esses dois pontos contribuiram, sendo que foi gasto bastante tempo nesses itens. Outro
ponto que contribuiu foi o processo de recuperar a chave utilizada na criptografia simétrica, onde
a mesma, às vezes, apresenta erro e a chave não consegue efetuar o processo de descriptografia dos dados.
Como sugestão para trabalhos futuros lista-se os itens a seguir:
I. Implementar os esquemas de Waters e Naccache;
II. Alteração do desenvolvimento de disponibilidade temporal para poder escolher o esquema que deseja-se escolher, podendo ser entre o esquema de Boneh Franklin, o esquema de Waters e o esquema de Naccache;
III. Implementação dos itens levantados por outros autores referente a busca cifrada, onde
pode-se levantar os seguintes: busca com múltiplas palavras chaves, busca com palavras
chaves temporárias (PETKS).
IV. Submissão do trabalho intitulado Identity Based Searchable Encrypted Data Fundamentals1 ainda em fase de desenvolvimento que será submetido para o evento ’SecSE 2007
1st International Workshop on Secure Software Engineering que acontecerá em Vienna
na Austria no período de 10 à 13 de Abril de 2007. O artigo será submetido até 17 de
Dezembro de 2006.
V. Submissão do trabalho intitulado Identity Based Searchable Encrypted Data Environment2
ainda em fase de desenvolvimento que será submetido para o evento ıACNS 2007 5th
International Conference on Applied Cryptography and Network Security que acontecerá
em Zhuhai na China no período de 5 à 8 de Junho de 2007. O artigo será submetido até
o dia 14 de Dezembro de 2006.
1
2
Site do evento: http://www.ares-conference.eu/conf/
Site do evento: http://www.i2r.a-star.edu.sg/icsd/acns2007/
83
REFERÊNCIAS
ABDALLA, M. et al. Searchable Encryption Revisited: Consistency Properties, Relation to
Anonymous IBE, and Extensions. Arquivo: Cryptology ePrint Archive. 2005.
ABSOLUTA, V. Histórias e Aplicações da Criptografia. 1999. Disponível em:
<http://www.absoluta.org/cripty/cripty_h.htm>.
Acesso em: 30 jun. 2006.
BAEK, J. et al. A Survey of Identity-Based Cryptography. 2004. AUUG 2004. Disponível em:
<http://jan.netcomp.monash.edu.au/publications/>.
Acesso em: 05 abr. 2006.
BARBOSA, J. C. Criptografia de chave pública baseada em curvas elípticas. Criptografia de
chave pública baseada em curvas elípticas. Rio de Janeiro: UFRJ, 2003.
BENITS, W. D. Sistemas criptográficos baseados em identidades pessoais. Sistemas
criptográficos baseados em identidades pessoais. São Paulo: [s.n.], 2003.
BONEH, D.; BOYEN, X. Efficient selective-ID secure identity based encryption without random
oracles. Advances in Cryptology - EUROCRYPT. Berlin: Springer-Verlag, 2004. p. 223–238.
BONEH, D.; BOYEN, X.; GOH, E.-J. Hierarchical Identity Based Encryption with Constant Size
Ciphertext. Arquivo: Cryptology ePrint Archive. 2005.
BONEH, D.; FRANKLIN, M. K. Identity-based encryption from the weil pairing. Advances in
Cryptology - CRYPTO. London: Springer-Verlag, 2001. p. 213–229. ISBN 3-540-42456-3.
CHA, J. C.; CHEON, J. H. An identity-based signature from gap diffie-hellman groups.
Proceedings of the 6th International Workshop on Theory and Practice in Public Key
Cryptography. London: Springer-Verlag, 2003. p. 18–30. ISBN 3-540-00324-X.
COCKS, C. An identity based encryption scheme based on quadratic residues. Proceedings of
the 8th IMA International Conference on Cryptography and Coding. London: Springer-Verlag,
2001. p. 360–363. ISBN 3-540-43026-1.
COUTINHO, S. C. Números Inteiros e Criptografia RSA. 2. ed. Rio de Janeiro: Sociedade
Brasileira de Matemática, 2000.
DIFFIE, W.; HELLMAN, M. E. New directions in cryptography. IEEE Transactions on Information
Theory, IT-22, n. 6, p. 644–654, 1976.
EBERLE, H. et al. A public-key cryptographic processor for rsa and ecc. Shreyas Sundaram,
University of Waterloo, 2004.
FEIZABADI, S. History of Java. 2007. Java. Disponível em:
<http://ei.cs.vt.edu/~wwwbtb/book/chap1/java_hist.html>.
Acesso em: 01 jan. 2007.
FORD, S. AES: Question and Answers. 2000. Disponível em:
<http://www.nist.gov/public_affairs/releases/aesq&a.htm>.
Acesso em: 26 nov. 2006.
84
GOLLE, P.; WAGNER, D. Cryptanalysis of a Cognitive Authentication Scheme. Arquivo:
Cryptology ePrint Archive. 2006.
GUPTA, V. et al. Performance analysis of elliptic curve cryptography for ssl. Proceedings of
the 3rd ACM workshop on Wireless security. New York: ACM Press, 2002. p. 87–94. ISBN
1-58113-585-8.
HANKERSON, D.; MENEZES, A.; VANSTONE, S. Guide to Elliptic Curve Cryptography.
Secaucus: Springer, 2003. ISBN 0-387-95273-X.
INFORMÁTICA, P. de. Portal de Informática. 2006. Disponível em:
<http://www.portaldeinformatica.com.br/artigos_ssl.htm>.
Acesso em: 03 out. 2006.
JAVA, T. A Brief History of the Green Project. 2007. Java. Disponível em:
<http://today.java.net/jag/old/green/>.
Acesso em: 01 jan. 2007.
KAHN, D. The code-breakers: The story of secret writing. The Code-Breakers: The story of
secret writing. New York: Macmillan Publishing Company, 1967.
KAK, A. Finite Fields, Theoretical Underpinnings of AES and ECC. 2006. Disponível em:
<http://cobweb.ecn.purdue.edu/~kak/courses-i-teach/compsec/Lecture/
Lecture_4_2.pdf>.
Acesso em: 15 out. 2006.
KAWAHARA, Y.; TAKAGI, T.; OKAMOTO, E. Efficient Implementation of Tate Pairing on a Mobile
Phone using Java. Arquivo: Cryptology ePrint Archive. 2006.
KOBLITZ, N.; MENEZES, A. Pairing-Based Cryptography at High Security Levels. Arquivo:
Cryptology ePrint Archive. 2005.
LOPES, F. C. de O. Denúncia anônima segura. Florianópolis: [s.n.], 2003.
MAIA, L. P.; PAGLIUSI, P. S. Criptografia e Certificação. 1999. Disponível em:
<http://www.training.com.br/lpmaia/pub_seg_cripto.htm>.
Acesso em: 01 out. 2006.
MISAGHI, M. Criptografia baseado em identiadade. Proceedings of the 8th International
Symposium on Systems and Information Security. São José dos Campos: ITA, 2006. ISBN
3-540-43026-1.
MORIMOTO, C. E. Guia do Hardware. 2006. Disponível em:
<http://www.guiadohardware.net/guias/10/printall.php>.
Acesso em: 03 out. 2006.
NACCACHE, D. Secure and Practical Identity-Based Encryption. Arquivo: Cryptology ePrint
Archive. 2005.
NIST. SHS Validated Implementations. 2006. Disponível em:
<http://csrc.nist.gov/cryptval/shs/shaval.htm>.
Acesso em: 13 ago. 2006.
85
OHTAKI, Y. Constructing a searchable encrypted log using encrypted inverted indexes.
International Conference on Cyberworlds. Washington: IEEE Computer Society, 2005. p.
130–138. ISBN 0-7695-2378-1.
OPENBSD. Criptografia no OpenBSD. 2006. Disponível em:
<http://www.openbsd.org/pt/crypto.html>.
Acesso em: 03 out. 2006.
PREVAYLER. Prevayler. 2006. Disponível em:
<http://www.prevayler.org/index.pr>.
Acesso em: 15 out. 2006.
RFC. rfc 4492. 2006. Disponível em:
<http://tools.ietf.org/html/rfc4492>.
Acesso em: 08 out. 2006.
RICARTE, I. L. M. Programação Orientada a objetos: Java RMI. 2002. Disponível em:
<http://www.dca.fee.unicamp.br/cursos/PooJava/objdist/javarmi.html>.
Acesso em: 10 nov. 2006.
RIVEST, R. et al. The rc6 block cipher. San Mateo, USA, 2004. http://theory.lcs.mit.
edu/~rivest/rc6.pdf.
SAEKI, M. Elliptic curve cryptosystems. Elliptic Curve Cryptosystems. McGill University,
Montreal: [s.n.], 1997.
SECURITY, V. Secure Encrypted Email. 2006. Disponível em:
<http://www.voltage.com/products/securemail.htm>.
Acesso em: 10 out. 2006.
SOEKRIS. Soekris Engineering. 2006. Disponível em:
<http://www.soekris.com/>.
Acesso em: 03 out. 2006.
STALLINGS, W. Cryptography and Network Security. 2. ed. New Jersey: Prentice Hall, 2005.
SUN. Java Persistence API FAQ. 2006. Disponível em:
<http://java.sun.com/javaee/overview/faq/persistence.jsp>.
Acesso em: 10 nov. 2006.
SUN. Java Technology: The early years. 2007. Java. Disponível em:
<http://java.sun.com/features/1998/05/birthday.html>.
Acesso em: 01 jan. 2007.
TKOTZ, V. Criptografia. 2003. Disponível em:
<http://www.numaboa.com.br/criptologia/criptografia.php>.
Acesso em: 30 jul. 2006.
TKOTZ, V. A Linha do Tempo da Criptografia na Antiguidade. 2004. Disponível em:
<http://www.numaboa.com.br/criptologia/historia/antiga.php>.
Acesso em: 04 ago. 2006.
WATERS, B. Efficient identity-based encryption without random oracles. Advances in Cryptology
- EUROCRYPT. [S.l.]: Springer-Verlag, 2005. p. 114–127. ISBN 3-540-25910-4.
86
WATERS, B. R. et al. Building an Encrypted and Searchable Audit Log. 2004. Internet Society.
87
ANEXOS
ANEXO A
Abaixo o código fonte da classe responsável em efetuar a criptografia baseada em identidade. A classe abaixo é utilizada nos dois projetos desenvolvidos.
Listagem 9.1: Classe de Criptografia IBE
1
package b r . com . s o c i e s c . b s i . t c c . i b e . s e r v i c e ;
2
3
import j a v a . i o . IOException ;
4
import j a v a . i o . S e r i a l i z a b l e ;
5
import j a v a . i o . UnsupportedEncodingException ;
6
import j a v a . math . B i g I n t e g e r ;
7
import j a v a . s e c u r i t y . I n v a l i d A l g o r i t h m P a r a m e t e r E x c e p t i o n ;
8
import j a v a . s e c u r i t y . I n v a l i d K e y E x c e p t i o n ;
9
import j a v a . s e c u r i t y . KeyPair ;
10
import j a v a . s e c u r i t y . KeyPairGenerator ;
11
import j a v a . s e c u r i t y . MessageDigest ;
12
import j a v a . s e c u r i t y . NoSuchAlgorithmException ;
13
import j a v a . s e c u r i t y . P r i v a t e K e y ;
14
import j a v a . s e c u r i t y . P r o v i d e r ;
15
import j a v a . s e c u r i t y . PublicKey ;
16
import j a v a . s e c u r i t y . SecureRandom ;
17
import j a v a . s e c u r i t y . spec . AlgorithmParameterSpec ;
18
import j a v a . u t i l . HashMap ;
19
20
import j a v a x . c r y p t o . BadPaddingException ;
21
import j a v a x . c r y p t o . Cipher ;
22
import j a v a x . c r y p t o . I l l e g a l B l o c k S i z e E x c e p t i o n ;
23
import j a v a x . c r y p t o . NoSuchPaddingException ;
24
25
import nuim . cs . c r y p t o . b i l i n e a r . B i l i n e a r M a p ;
26
import nuim . cs . c r y p t o . b i l i n e a r . M o d i f i e d T a t e P a i r i n g ;
27
import nuim . cs . c r y p t o . i b e . IbeKeyParameters ;
28
import nuim . cs . c r y p t o . i b e . I b e P r o v i d e r ;
29
import nuim . cs . c r y p t o . i b e . I b e P u b l i c K e y ;
30
import nuim . cs . c r y p t o . i b e . IbeSystemParameters ;
31
import sun . misc . BASE64Decoder ;
32
import sun . misc . BASE64Encoder ;
33
34
35
36
37
public class IbeCryptographyBean implements I b e C r y p t o g r a p h y S e r v i c e , S e r i a l i z a b l e {
public s t a t i c f i n a l i n t TAMANHO_NUMERO_PRIMO
p r i v a t e B i g I n t e g e r masterKey
p r i v a t e B i l i n e a r M a p map
null ;
= 70;
= null ;
=
89
38
private Provider provider
=
new I b e P r o v i d e r ( ) ;
39
p r i v a t e Cipher c i p h e r
=
null ;
40
p r i v a t e MessageDigest hash
=
null ;
41
p r i v a t e AlgorithmParameterSpec parametersSystem = n u l l ;
42
43
/∗∗
44
∗ C o n s t r u t o r e f e t u a o método SETUP
45
∗/
46
public IbeCryptographyBean ( ) {
setup ( ) ;
47
48
}
49
50
/∗∗
51
∗ Retorna v a r i á v e i s do sistema
52
∗/
53
public HashMap< S t r i n g , S t r i n g > g e t I n f o r m a t i o n ( ) {
HashMap< S t r i n g , S t r i n g > i n f o r m a t i o n s = new HashMap< S t r i n g , S t r i n g > ( )
54
;
55
56
i n f o r m a t i o n s . p u t ( "qValue" , t h i s . map . getQ ( ) . t o S t r i n g ( ) ) ;
57
i n f o r m a t i o n s . p u t ( "curve" , t h i s . map . getCurve ( ) . t o S t r i n g ( ) ) ;
58
i n f o r m a t i o n s . p u t ( "masterKey" , t h i s . masterKey . t o S t r i n g ( ) ) ;
59
i n f o r m a t i o n s . p u t ( "bitLengthPrime" , I n t e g e r . t o S t r i n g ( t h i s .
TAMANHO_NUMERO_PRIMO) ) ;
i n f o r m a t i o n s . p u t ( "hash" , t h i s . hash . t o S t r i n g ( ) ) ;
60
61
return i n f o r m a t i o n s ;
62
63
}
64
65
/∗∗
66
∗ D e s c r i p t o g r a f a um dado c r i p t o g r a f a d o usando o método e n c r y p t i o n
67
∗
68
∗ @param t e x t
69
∗ @param p r i v a t e K e y
70
∗/
71
72
73
public S t r i n g d e c r y p t i o n ( S t r i n g t e x t , P r i v a t e K e y p r i v a t e K e y ) {
try {
t h i s . c i p h e r . i n i t ( Cipher .DECRYPT_MODE, p r i v a t e K e y , t h i s .
parametersSystem , new SecureRandom ( ) ) ;
74
} catch ( I n v a l i d K e y E x c e p t i o n e ) {
90
e . printStackTrace ( ) ;
75
} catch ( I n v a l i d A l g o r i t h m P a r a m e t e r E x c e p t i o n e ) {
76
e . printStackTrace ( ) ;
77
}
78
79
try {
80
r e t u r n new S t r i n g ( t h i s . c i p h e r . d o F i n a l (new BASE64Decoder ( ) .
81
decodeBuffer ( t e x t ) ) ) ;
} catch ( I l l e g a l B l o c k S i z e E x c e p t i o n e ) {
82
e . printStackTrace ( ) ;
83
} catch ( BadPaddingException e ) {
84
e . printStackTrace ( ) ;
85
} catch ( UnsupportedEncodingException e ) {
86
e . printStackTrace ( ) ;
87
} catch ( IOException e ) {
88
e . printStackTrace ( ) ;
89
90
}
91
return null ;
92
}
93
94
/∗∗
95
∗ Overload do método d e c r y p t i o n ( S t r i n g t e x t , P r i v a t e K e y p r i v a t e K e y )
96
∗
97
∗ @param message
98
∗ @param i d e n t i t y
99
∗/
100
public S t r i n g d e c r y p t i o n ( S t r i n g t e x t , S t r i n g i d e n t i t y ) {
return this . decryption ( tex t , this . p r i v a t e K e y E x t r a c t i o n ( i d e n t i t y ) ) ;
101
102
}
103
104
/∗∗
105
∗ C r i p t o g r a f a uma mensagem
106
∗
107
∗ @param t e x t
108
∗ @param p u b l i c K e y
109
∗/
110
111
112
public S t r i n g e n c r y p t i o n ( S t r i n g t e x t , PublicKey p u b l i c K e y ) {
try {
t h i s . c i p h e r . i n i t ( Cipher .ENCRYPT_MODE, publicKey , t h i s .
parametersSystem , new SecureRandom ( ) ) ;
113
114
115
} catch ( I n v a l i d K e y E x c e p t i o n e ) {
e . printStackTrace ( ) ;
} catch ( I n v a l i d A l g o r i t h m P a r a m e t e r E x c e p t i o n e ) {
91
e . printStackTrace ( ) ;
116
}
117
118
try {
119
r e t u r n new BASE64Encoder ( ) . encode ( ( t h i s . c i p h e r . d o F i n a l ( t e x t .
120
g e t B y t e s ( "UTF8" ) ) ) ) ;
} catch ( I l l e g a l B l o c k S i z e E x c e p t i o n e ) {
121
e . printStackTrace ( ) ;
122
} catch ( BadPaddingException e ) {
123
e . printStackTrace ( ) ;
124
} catch ( IOException e ) {
125
e . printStackTrace ( ) ;
126
127
}
128
return null ;
129
}
130
131
/∗∗
132
∗ Overload do método e n c r y p t i o n ( S t r i n g t e x t , PublicKey p u b l i c K e y )
133
∗
134
∗ @param t e x t
135
∗ @param i d e n t i t y
136
∗/
137
public S t r i n g e n c r y p t i o n ( S t r i n g t e x t , S t r i n g i d e n t i t y ) {
return this . encryption ( tex t , this . publicKeyExtraction ( i d e n t i t y ) ) ;
138
139
}
140
141
/∗∗
142
∗ Retorna a chave p r i v a d a
143
∗
144
∗ @param i d e n t i t y
145
∗ @return P r i v a t e K e y
146
∗/
147
public P r i v a t e K e y p r i v a t e K e y E x t r a c t i o n ( S t r i n g i d e n t i t y ) {
148
KeyPairGenerator kpg
149
AlgorithmParameterSpec parametersKey
150
PrivateKey privateKey
= null ;
= null ;
= null ;
151
152
parametersKey = new IbeKeyParameters ( t h i s . hash , i d e n t i t y , t h i s .
masterKey , t h i s . map) ;
153
154
155
try {
i f ( kpg == n u l l ) {
92
kpg = KeyPairGenerator . g e t I n s t a n c e ( I b e P r o v i d e r . IBE ,
156
this . provider ) ;
157
}
158
kpg . i n i t i a l i z e ( parametersKey ) ;
} catch ( I n v a l i d A l g o r i t h m P a r a m e t e r E x c e p t i o n e1 ) {
159
e1 . p r i n t S t a c k T r a c e ( ) ;
160
} catch ( NoSuchAlgorithmException e ) {
161
e . printStackTrace ( ) ;
162
}
163
164
165
KeyPair k e y P a i r = kpg . generateKeyPair ( ) ;
166
privateKey = keyPair . getPrivate ( ) ;
167
return privateKey ;
168
169
}
170
171
/∗∗
172
∗ Retorna a chave p u b l i c a
173
∗
174
∗ @param i d e n t i t y
175
∗ @return PublicKey
176
∗/
177
public PublicKey p u b l i c K e y E x t r a c t i o n ( S t r i n g i d e n t i t y ) {
PublicKey p u b l i c K e y = new I b e P u b l i c K e y ( t h i s . hash . d i g e s t ( i d e n t i t y .
178
getBytes ( ) ) ) ;
179
return publicKey ;
180
181
}
182
183
184
/∗∗
∗ I n i c i a l i z a o s e r v i d o r de c r i p t o g r a f i a , chamado após i n i c i a l i z a r a
a p l i c a ç ã o de busca .
185
∗ U t i l i z a d o após o p r e v a y l e r .
186
∗/
187
188
public Boolean i n i t i a l i z e ( ) {
t h i s . p r o v i d e r = new I b e P r o v i d e r ( ) ;
189
190
191
try {
t h i s . c i p h e r = Cipher . g e t I n s t a n c e ( I b e P r o v i d e r . IBE , t h i s .
provider ) ;
192
193
194
t h i s . hash = MessageDigest . g e t I n s t a n c e ( "MD5" ) ;
} catch ( NoSuchAlgorithmException e ) {
e . printStackTrace ( ) ;
93
195
} catch ( NoSuchPaddingException e ) {
196
e . printStackTrace ( ) ;
}
197
198
t h i s . parametersSystem
199
= new IbeSystemParameters ( t h i s . map , t h i s .
hash , t h i s . masterKey ) ;
200
return true ;
201
202
}
203
204
/∗∗
205
∗ Método de setup
206
∗/
207
208
public Boolean setup ( ) {
try {
t h i s . c i p h e r = Cipher . g e t I n s t a n c e ( I b e P r o v i d e r . IBE , t h i s .
209
provider ) ;
t h i s . hash = MessageDigest . g e t I n s t a n c e ( "MD5" ) ;
210
211
} catch ( NoSuchAlgorithmException e ) {
212
e . printStackTrace ( ) ;
213
} catch ( NoSuchPaddingException e ) {
214
e . printStackTrace ( ) ;
215
}
216
217
t h i s . map = new M o d i f i e d T a t e P a i r i n g ( IbeCryptographyBean .
TAMANHO_NUMERO_PRIMO) ;
218
219
boolean f i e l d T o o S m a l l = f a l s e ;
220
do {
221
fieldTooSmall = false ;
222
B i g I n t e g e r maxPts = t h i s . map . getCurve ( ) . g e t F i e l d ( ) . getChar ( )
. d i v i d e ( t h i s . map . getCurve ( ) . getKappa ( ) ) ;
223
i n t b y t e s = maxPts . b i t L e n g t h ( ) / 8 ;
224
i f ( b y t e s < t h i s . hash . g e t D i g e s t L e n g t h ( ) ) {
t h i s . map = new M o d i f i e d T a t e P a i r i n g (
225
IbeCryptographyBean .TAMANHO_NUMERO_PRIMO) ;
fieldTooSmall = true ;
226
227
228
}
} while ( f i e l d T o o S m a l l ) ;
229
230
t h i s . masterKey
= new B i g I n t e g e r ( t h i s . map . getQ ( ) .
b i t L e n g t h ( ) − 1 , new SecureRandom ( ) ) ;
94
t h i s . parametersSystem
231
= new IbeSystemParameters ( t h i s . map , t h i s .
hash , t h i s . masterKey ) ;
232
return true ;
233
}
234
235
236
}
ANEXO B
Abaixo o código fonte da classe responsável em efetuar a criptografia simétrica. A classe
abaixo é utilizada somente no projeto de busca de palavra em banco de dados cifrados.
Listagem 9.2: Classe de Criptografia IBE
1
package b r . com . s o c i e s c . b s i . t c c . i b e . s e r v i c e ;
2
3
import j a v a . i o . IOException ;
4
import j a v a . i o . UnsupportedEncodingException ;
5
import j a v a . s e c u r i t y . I n v a l i d K e y E x c e p t i o n ;
6
import j a v a . s e c u r i t y . NoSuchAlgorithmException ;
7
8
import j a v a x . c r y p t o . BadPaddingException ;
9
import j a v a x . c r y p t o . Cipher ;
10
import j a v a x . c r y p t o . I l l e g a l B l o c k S i z e E x c e p t i o n ;
11
import j a v a x . c r y p t o . KeyGenerator ;
12
import j a v a x . c r y p t o . NoSuchPaddingException ;
13
import j a v a x . c r y p t o . SecretKey ;
14
import j a v a x . c r y p t o . spec . SecretKeySpec ;
15
16
import sun . misc . BASE64Decoder ;
17
import sun . misc . BASE64Encoder ;
18
19
20
public class Sy me t r i c Cr yp t o gr af y B e an implements S y m e t r i c C r y p t o g r a f y S e r v i c e {
p r i v a t e Cipher c i p h e r ;
21
22
p r i v a t e SecretKeySpec secretKeySpec ;
23
24
/∗∗
25
∗ C o n s t r u t o r i n i c i a r á o c i f r a d o r com a c r i p t o g r a f i a s i m é t r i c a AES
26
∗/
27
public S y m et ri c C r y pt og r a fy Be an ( ) {
try {
28
c i p h e r = Cipher . g e t I n s t a n c e ( "AES" ) ;
29
} catch ( NoSuchAlgorithmException e ) {
30
31
e . printStackTrace ( ) ;
32
} catch ( NoSuchPaddingException e ) {
33
e . printStackTrace ( ) ;
}
34
35
}
36
37
38
/∗∗
∗ E f e t u a a c r i p t o g r a f i a do t e x t o passado como parâmetro
96
39
∗
40
∗ @param t e x t
41
∗ @return S t r i n g
42
∗/
43
public S t r i n g e n c r y p t i o n S y m e t r i c ( S t r i n g t e x t ) {
try {
44
c i p h e r . i n i t ( Cipher .ENCRYPT_MODE, makeSymetricKey ( ) ) ;
45
} catch ( I n v a l i d K e y E x c e p t i o n e ) {
46
e . printStackTrace ( ) ;
47
}
48
49
try {
50
r e t u r n new BASE64Encoder ( ) . encode ( c i p h e r . d o F i n a l ( t e x t
51
. g e t B y t e s ( "UTF8" ) ) ) ;
52
} catch ( I l l e g a l B l o c k S i z e E x c e p t i o n e ) {
53
e . printStackTrace ( ) ;
54
} catch ( BadPaddingException e ) {
55
e . printStackTrace ( ) ;
56
} catch ( UnsupportedEncodingException e ) {
57
e . printStackTrace ( ) ;
58
59
}
60
return null ;
61
}
62
63
/∗∗
64
∗ Método para d e s c r i p t o g r a f a r um t e x t o c r i p t o g r a f a d o p e l o método e n c r y p t i o n
65
∗
66
∗ @param t e x t
67
∗ @return S t r i n g
68
∗/
69
70
public S t r i n g d e c r y p t i o n S y m e t r i c ( S t r i n g t e x t ) {
try {
c i p h e r . i n i t ( Cipher .DECRYPT_MODE, t h i s . secretKeySpec ) ;
71
72
} catch ( I n v a l i d K e y E x c e p t i o n e1 ) {
e1 . p r i n t S t a c k T r a c e ( ) ;
73
74
}
75
76
77
78
79
80
81
try {
r e t u r n new S t r i n g ( c i p h e r . d o F i n a l (new BASE64Decoder ( )
. decodeBuffer ( t e x t ) ) ) ;
} catch ( I l l e g a l B l o c k S i z e E x c e p t i o n e ) {
e . printStackTrace ( ) ;
} catch ( BadPaddingException e ) {
97
e . printStackTrace ( ) ;
82
} catch ( IOException e ) {
83
e . printStackTrace ( ) ;
84
85
}
86
return null ;
87
}
88
89
/∗∗
90
∗ Gera a chave s i m é t r i c a
91
∗
92
∗ @return secretKeySpec
93
∗/
94
p r i v a t e SecretKeySpec makeSymetricKey ( ) {
95
/ / Get t h e KeyGenerator
96
KeyGenerator kgen = n u l l ;
97
try {
kgen = KeyGenerator . g e t I n s t a n c e ( "AES" ) ;
98
} catch ( NoSuchAlgorithmException e1 ) {
99
e1 . p r i n t S t a c k T r a c e ( ) ;
100
101
}
102
kgen . i n i t ( 1 2 8 ) ; / / 192 and 256 b i t s may n o t be a v a i l a b l e
103
104
/ / Generate t h e s e c r e t key specs .
105
SecretKey skey = kgen . generateKey ( ) ;
106
byte [ ] raw = skey . getEncoded ( ) ;
107
t h i s . secretKeySpec = new SecretKeySpec ( raw , "AES" ) ;
108
109
r e t u r n t h i s . secretKeySpec ;
110
111
}
112
113
/∗∗
114
∗ Retorna a chave s i m é t r i c a
115
∗
116
∗ @return S t r i n g
117
∗/
118
public S t r i n g getSymetricKey ( ) {
r e t u r n new BASE64Encoder ( ) . encode ( t h i s . secretKeySpec . getEncoded ( ) ) ;
119
120
}
121
122
/∗∗
123
∗ A t r i b u i uma chave s i m é t r i c a
124
∗
98
125
∗ @param key
126
∗/
public void setSymetricKey ( S t r i n g key ) {
127
try {
128
t h i s . secretKeySpec = new SecretKeySpec (new BASE64Decoder ( )
129
. decodeBuffer ( key ) , "AES" ) ;
130
} catch ( IOException e ) {
131
e . printStackTrace ( ) ;
132
}
133
}
134
135
}