Escolar Documentos
Profissional Documentos
Cultura Documentos
Florianópolis
2013/2
UNIVERSIDADE FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA
Florianópolis
2013/2
Gabriel Garcia Becker, Lucas Pandolfo Perin
Banca Examinadora:
Msc.
Marcelo Carlomagno Carlos
Holloway University of London
Prof. Dr.
Ricardo Felipe Custódio
Universidade Federal de Santa Catarina
Anderson Luiz Silverio
Universidade Federal de Santa Catarina
BD Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
SGBD Sistema de Gerenciamento de Banco de Dados . . . . . . . . . . . . . 23
HMAC Hash-based Message Authentication Code . . . . . . . . . . . . . . . . . 27
ICP Infraestrutura de Chaves Públicas . . . . . . . . . . . . . . . . . . . . . . . . . 28
MAC Message Authentication Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
MD5 Message-Digest algorithm 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
SHA-1 Secure Hash Algorithm 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
SGML Standard Generalized Markup Language . . . . . . . . . . . . . . . . . . 32
JVM Máquina Virtual Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
DBA Administrador de Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . 33
XML Extensible Markup Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
HSM Hardware Security Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
TPM Trusted Platform Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
SUMÁRIO
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.1 OBJETIVO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.1.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.1.2 Objetivos Específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.2 JUSTIFICATIVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.4 PUBLICAÇÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.5 ESTRUTURA DO TRABALHO . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2 FUNDAMENTAÇÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1 CRIPTOGRAFIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.1 Criptografia Simétrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.2 Criptografia Assimétrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1.3 Resumo Criptográfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.4 Código de Autenticação de Mensagem . . . . . . . . . . . . . . . . . . . 29
2.1.5 PKCS#12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2 SEGURANÇA EM BANCOS DE DADOS . . . . . . . . . . . . . . . . . 30
2.2.1 Sigilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2.2 Integridade e Autenticidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.3 Rastreabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.3 TECNOLOGIAS UTILIZADAS . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3.1 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3.2 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3.3 LibCryptoDev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3 SOLUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1 ADIÇÃO DO CÁLCULO DO HMAC NOS REGISTROS DA
BASE DE DADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2 EXEMPLO DE IMPLEMENTAÇÃO . . . . . . . . . . . . . . . . . . . . . . 34
3.2.1 ADICIONANDO REGISTROS . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.2 MODIFICANDO REGISTROS . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.3 VERIFICANDO A INTEGRIDADE DE REGISTROS . . . . 35
3.3 MEDIDAS DE PROTEÇÃO CONTRA REMOÇÃO NÃO AU-
TORIZADA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.1 REMOVENDO UM REGISTRO . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.2 VERIFICANDO SE UM REGISTRO FOI REMOVIDO . . . 36
3.3.3 REMOÇÃO DO ULTIMO REGISTRO . . . . . . . . . . . . . . . . . . 36
4 IMPLEMENTAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1 BIBLIOTECA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.1 Provedor de serviços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 PROVIDER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2.1 PKCS12 Security Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2.2 Smart Card Security Service . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2.3 HSM Security Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2.4 TPM Security Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2.5 Remote Callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3 PKCS#12 MANAGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.4 KEYSTORE MANAGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.5 PROTÓTIPO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5 DESEMPENHO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.1 AMBIENTE DE TESTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.2 OTIMIZAÇÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3 TESTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.3.1 Inserção de Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3.2 Atualização de Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3.3 Remoção de Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3.4 Consulta de Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4 CONSIDERAÇÕES E ANÁLISES . . . . . . . . . . . . . . . . . . . . . . . . 53
6 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.1 TRABALHOS FUTUROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Referências Bibliográficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Anexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
21
1 INTRODUÇÃO
1.1 OBJETIVO
1.2 JUSTIFICATIVA
1.3 METODOLOGIA
1.4 PUBLICAÇÕES
penho.
No capítulo 6 são mencionados os trabalhos futuros e as considerações
finais relacionadas a este trabalho.
25
2 FUNDAMENTAÇÃO TEÓRICA
2.1 CRIPTOGRAFIA
2.1.5 PKCS#12
2.2.1 Sigilo
2.2.3 Rastreabilidade
2.3.1 XML
2.3.2 Java
2.3.3 LibCryptoDev
3 SOLUÇÃO
do HMAC de forma correta, como pode ser visto na formula 3.1, onde k é
chave, e m são as informação que se deseja protejer.
Trecho de código 3.1 – Código SQL para inserir um registro com HMAC
INSERT INTO exemplo ( nome , e m a i l , hmac )
VALUES ( ’ J o s e ’ ,
’ j o s e @ f o o . com . b r ’ ,
35
’ ohn4 ’ ) ;
Trecho de código 3.3 – Código SQL para atualizar um registro com HMAC
UPDATE exemplo SET e m a i l = ’ a n a . new@foo . com .
b r ’ , hmac= ’ m3cx ’
WHERE i d = ’ 3 ’ ;
4 IMPLEMENTAÇÃO
4.1 BIBLIOTECA
Figura 3 – getHmac()
; j ++)
xor [ j ] = ( byte ) ( xor [ j ]
^ hmac [ j ] ) ;
}
byte [ ] r e s u l t = c i p h e r . doFinal ( xor ) ;
r e t u r n new E n c r y p t e d H i s t o r y ( r e s u l t ) ;
}
4.2 PROVIDER
liberar o dispositivo.
4.5 PROTÓTIPO
5 DESEMPENHO
Devido a forma com que as soluções propostas neste trabalho são fei-
tas, as operações básicas de BDs sofrerão perdas de desempeho. Na operação
de atualização de registros, por exemplo, serão necessário os seguintes pas-
sos:
• Atualização do registro desejado;
• Cálculo do novo HMAC do registro alterado;
• Busca do HMAC do registro anterior;
• Atualização do Histórico Cifrado do registro alterado com o novo HMAC
calculado e com o HMAC do registro anterior.
Considerando a necessidade de posse do HMAC do registro anterior
para fazer a atualização de um registro qualquer, o custo da operação de atu-
alização de registros no BD será sempre incrementada no mínimo pelo custo
da operação de busca, além do custo das operações criptográficas.
Neste capítulo, serão demonstrados e analisados os resultados de testes
de desempenho. O propósito disto é verificar qual o custo computacional de
cada método proposto e como isto pode afetar aplicações que empregam estes
métodos.
Os testes realizados simulam apenas o custo da solução e não da bibli-
oteca implementada para este trabalho. Cada operação é executada 500 vezes
em um ambiente de teste pré-estabelecido, os resultados apresentados são os
valores médios destas execuções.
5.2 OTIMIZAÇÕES
Trecho de código 5.1 – Código SQL para consultar três registros consecutivos
no BD
SELECT i d , name , e m a i l , p a s s w o r d , HMAC, h i s t o r y
FROM benchmark . u s e r
WHERE i d IN ( n −1 , n , n +1 ) ;
Trecho de código 5.2 – Código SQL para atualizar dois registros simultanea-
mente no BD
5.3 TESTE
fica evidente que o uso de HMAC é extremamente eficiente para a maior parte
dos casos. O pior caso mostrado pelos testes é o da atualização de registro,
onde o uso de HMAC dobra o tempo de execução. Ademais, com exceção da
operação de inserção e atualização utilizando Histórico Cifrado, as operações
criptográficas são extremamente eficiêntes. Isso é demonstrado a partir do
tempo de execução do cliente, correspondendo a menor parcela em todos os
testes realizados.
6 CONSIDERAÇÕES FINAIS
REFERÊNCIAS BIBLIOGRÁFICAS
EXTENSIBLE-MARKUP-LANGUAGE.
http://www.w3.org/TR/2008/REC-xml-20081126/. Acessado em:
2013-10-14.
HOUSLEY, R.; POLK, T. Planning for PKI: Best Practices Guide for
Deploying Public Key Infrastructure. [S.l.]: Wiley Computer Publishing,
2001.
ANEXOS
Figura 11 – KeyStoreManager
65
Figura 12 – Protótipo
66
1. Introdução
O uso de sistemas de bancos de dados tornou-se recorrente para os mais diversos tipos de
aplicações. Com o uso extensivo da internet, as aplicações que utilizam sistemas de ban-
cos de dados online são cada vez mais comuns. Estas aplicações normalmente armazenam
dados sensíveis, como salários e outras informações pessoais [Kamel 2009]. Devido ao
conteúdo potencialmente sigiloso, o acesso ou a modificação não autorizada a tais dados
pode não ser desejado. Dessa forma, o sigilo e integridade de sistemas de banco de dados
tem atraído pesquisadores das áreas de banco de dados e segurança.
Os sistemas de banco de dados, quando utilizados em ambientes compartilhados,
possuem diversas ameaças de segurança provenientes de usuários não-autorizados, mau-
uso e ameaças externas. Baseando-se nestas características, pode-se classificar as ameaças
em quatro tipos principais:
O problema da leitura não autorizada de dados (sigilo dos dados) já foi pesquisado
extensivamente e normalmente é resolvido através da cifração do banco de dados
[Ceselli et al. 2005, Samarati and di Vimercati 2010], em conjunto com métodos de in-
dexação [Ceselli et al. 2005, Damiani et al. 2003], para agilizar as consultas. Entretanto,
os problemas de modificações não autorizadas de dados (integridade dos dados) ainda ne-
cessitam de soluções eficientes [Samarati and di Vimercati 2010]. Os métodos existentes
para tal problema geralmente requerem o desenvolvimento de um novo Sistema geren-
ciador de banco de dados (SGBD) ou alterações significantes nos SGBDs já existentes
[Xie et al. 2007].
A seção 2 apresenta o método para tratar a integridade dos dados estudados neste
trabalho e os testes de desempenho realizados são apresentados na seção 3. A seção 4
apresenta a implementação do método e, por fim, na seção 5 são apresentadas as consid-
erações finais.
Exemplo de implementação
Adicionando registros
Modificando registros
Por fim, para verificação da integridade de um registro, deve ser feita uma consulta ao
banco de dados pelo registro. Calcula-se o HMAC para o registro e compara o HMAC
calculado com o HMAC obtido do banco de dados. A igualdade desses valores indica que
o registro está íntegro.
• permite relacionar dois ou mais registros de forma que possa se detectar a ausência
de um deles, caso este seja removido;
• não permitir que uma terceira parte possa calcular o “histórico cifrado” sem con-
hecer as chaves de cifração;
• utilização de operações de baixo custo computacional: criptografia simétrica e a
operação lógica “ou exclusivo” (XOR);
• requer pouco espaço de armazenamento;
• não permite que sejam detectadas deleções dos n últimos registros.
Para calcular o histórico cifrado de um registro n, obtém-se o HMAC desse reg-
istro e do registro anterior a ele. Em seguida é aplicada a função XOR nestes HMACs e
o resultado é cifrado com uma chave simétrica. Esse cálculo é apresentado na expressão
(3).
HistoricoCif rado(chave, HM ACn , HM ACn−1 ) = Cif rao(k, (HM ACn ⊕ HM ACn−1 )) (3)
Removendo um registro
Esta proposta possui uma vulnerabilidade, o método apresentado não detecta quando os
últimos registros são removidos indevidamente, uma vez que a verificação é feita com
base no registo anterior. Uma possível solução para o problema consiste em adicionar ao
final da tabela uma enupla com valores aleatórios conhecidos. Dessa forma, se o último
registro for removido, poderá ser identificado, uma vez que os valores de controle não
estarão mais presentes.
3. Análise da eficiência
Foi desenvolvido um protótipo utilizando a liguagem de programação PHP para verificar
a eficácia do método proposto. Os testes foram executados no ambiente descrito na Tabela
2
Foram executados testes simulando um ambiente de uso real de um software, com
o uso das operações Select, Insert, Updade e Delete. Executado também a verificação da
integridade do banco de dados, através do HMAC e do histórico cifrado.
Após a execução dos testes, verificou-se que para as operações básicas de um
banco de dados, o uso do HMAC não trouxe grandes alterações no desempenho. En-
tretanto o uso do Histórico Cifrado acarreta em uma grande sobrecarga na execução das
Tabela 2. Descrição do ambiente de simulação
Processador Intel Core 2 Duo 2.53Mhz
Memória RAM 4GB
Sistema Operacional Mac OS X 10.6.4
Linguagem PHP 5.3
. SGDB MySQL 5.1
Algoritmo de Hash SHA-1
Tamanho de Chave HMAC 128 bits
Algoritmo de cifração AES 128 bits
Tamanho de chave simétrica 128 bits
operações. Nas operações de Delete e Select o impacto foi maior, pois é preciso atualizar
e consultar outros registros. Os resultados completos podem ser vistos na Figura 1.
Verificou-se também o custo para realizar o cálculo de HMAC e de Histórico
cifrado em tabelas já existentes. Para este cenário, foram realizados testes com diferentes
volumes de dados, entre mil e dez milhões de registros. Neste cenário é visível a diferença
no desempenho do cáclculo de HMAC e do Histórico cifrado, como mostrado na Figura
2. Entretanto, como em uma base de dados reais este cáclculo seria necessário apenas
uma vez, considera-se satisfatório o tempo de execução de ambas as soluções.
Por fim, foi simulado o custo de verificar a integridade de diversos registros.
Considera-se que este cenário em uma aplicação real seria executado em lote, em mo-
mentos em que o servidor de banco de dados está com uma sobrecarga menor. Assim
como no cenário anterior, o Histórico cifrado mostrou um desempenho muito inferior ao
do HMAC, conforme ilustrado na Figura 3.
Observa-se na Figura 3 que a operação de maior custo é do calculo do histórico
Figura 2. Tempo de execução em segundos.
4. Implementação
Para o cálculo do HMAC há uma classe responsável pela geração das chaves (HMacK-
eyGenerator), uma pelo cálculo do HMAC (HMacCalculator), além das classes que rep-
resentam a chave para ser utilizada no cálculo do HMAC (HMACKey) e o HMAC em si
(HMAC). A partir de uma chave HMAC é possível inicializar o HMACCalculator. Nele,
é possível adicionar dados para o calculo do HMAC e finalizar a operação. O trecho de
código 4 demonstra como é feito o cálculo do HMAC de uma mensagem qualquer.
Código Fonte 4. Exemplo do cálculo do HMAC
HMacKey key = HMacKey : : g e n e r a t e ( "SHA1" ) ;
HMACCalculator hmacCalc = new HMACCalculator ( key ) ;
hmacCalc . u p d a t e ( " mensagem " ) ;
HMAC hmac = hmacCalc . d o F i n a l ( ) ;
5. Considerações finais
Este trabalho apresenta a análise e a implementação de um método para verificar a inte-
gridade de sistemas de banco de dados.
Os trabalhos que tratam da integridade de dados em Bancos de dados relacionais
normalmente requerem o desenvolvimento de um novo SGBD ou alterações significativas
nos SGBDs já existentes. Entretanto, o método apresentado é independente de SGBD,
uma vez que todos os cálculos necessários são feitos pela aplicação.
Para verificar a eficácia do método foi implementado um protótipo em PHP. Foram
considerados diferentes cenários para os testes do método, que apresentaram resultados
satisfatórios. O primeiro cenário consistiu em testar a sobrecarga de operações SQL para
a alteração de registros únicos. Nestes testes constatou-se que a adição do cálculo do
HMAC é imperceptível na execução das operações INSERT, DELETE e UPDATE. No
segundo cenário foi considerado o custo para a verificação da integridade de diferentes
volumes de registros, enquanto que no terceiro cenário verificou-se o custo para a adição
das colunas de HMAC e histórico cifrado em bases de dados já existentes. Ambos os
testes executaram em um tempo satisfatório, considerando que são operações executadas
em lote.
Constada a eficácia do método, implementou-se uma biblioteca em Java. Esta
biblioteca fornece os serviços de cálculo de HMAC e histórico cifrado através de uma in-
terface simples, abstraindo todas as operações necessárias para os cálculos das operações.
Também foi criado uma interface que providers devem implementar para prover o suporte
para chaves em dispositivos criptográficos.
Referências
[Bellare et al. 1996] Bellare, M., Canetti, R., and Krawczyk, H. (1996). Keying hash func-
tions for message authentication. In Proceedings of the 16th Annual International
Cryptology Conference on Advances in Cryptology, CRYPTO ’96, pages 1–15, Lon-
don, UK, UK. Springer-Verlag.
[Ceselli et al. 2005] Ceselli, A., Damiani, E., De Capitani di Vimercati, S., Jajodia, S., Para-
boschi, S., and Samarati, P. (2005). Modeling and assessing inference exposure in en-
crypted databases. ACM Transactions on Information and System Security (TISSEC),
8(1).
[Damiani et al. 2003] Damiani, E., De Capitani di Vimercati, S., Jajodia, S., Paraboschi, S.,
and Samarati, P. (2003). Balancing confidentiality and efficiency in untrusted relational
DBMSs. In Proc. of the 10th ACM Conference on Computer and Communications
Security, Washington, DC, USA.
[Hacigümüs et al. 2004] Hacigümüs, H., Iyer, B. R., and Mehrotra, S. (2004). Efficient
execution of aggregation queries over encrypted relational databases. In DASFAA,
pages 125–136.
[Kamel 2009] Kamel, I. (2009). A schema for protecting the integrity of databases. Com-
puters & Security, 28(7):698–709.
[Samarati and di Vimercati 2010] Samarati, P. and di Vimercati, S. D. C. (2010). Data pro-
tection in outsourcing scenarios: issues and directions. In Proceedings of the 5th ACM
Symposium on Information, Computer and Communications Security, ASIACCS ’10,
pages 1–14, New York, NY, USA. ACM.
[Turner and Chen 2011] Turner, S. and Chen, L. (2011). Updated Security Considerations
for the MD5 Message-Digest and the HMAC-MD5 Algorithms. RFC 6151 (Informa-
tional).
[Xie et al. 2007] Xie, M., Wang, H., and Yin, J. (2007). Integrity auditing of outsourced
data. Very large data bases, pages 782–793.