Aula 4
Compressão de Dados
Rodrigo da Cruz Fujioka
Introdução
• Até agora, buscamos dados comparando suas chaves
• Trabalhamos algumas otimizações
– Ordenação dos dados, por exemplo – Ordenação dos dados, por exemplo
• Vejamos uma abordagem melhor
Introdução
• Funções hash são funções que recebem dados de comprimento arbitrário, comprimem estes dados e devolvem um número fixo de bits, o resultado hash.
número fixo de bits, o resultado hash.
• Em estrutura de dados as funções hash
são utilizadas para fazer o mapeamento
entre chaves e posições (índices) do
arranjo.
Conceitos Básicos
• Arranjos utilizam índices para armazenar as informações.
• Através do índice as operações sobre arranjos são realizadas no tempo O(1).
• Arranjos não fornecem mecanismos para calcular o índice a partir de uma informação armazenada. A pesquisa não é O(1).
1 2 3 4 5 6
José Maria Leila Artur Jolinda Gisela Alciene
Família
Família[1] = “José Maria”
Definição
Definição
• Trata-se de uma estrutura do tipo dicionário
– Inserção – Remoção – Remoção – Busca
• Utiliza-se parte da informação a ser
armazenada para se obter o índice de
armazenamento
Definição
• A função que calcula tal índice é chamada de função de hashing (ou espalhamento)
• A função ideal é bijetora
– Cada valor armazenado tem uma chave – Cada valor armazenado tem uma chave
diferente
Hashing
• Cálculo de Endereço
Cálculo de Endereço “Hashing”
• Não é apenas um método de pesquisa, mas também um método de organização física de tabelas;
• o armazenamento de cada entrada da
tabela é associado a um endereço
calculado pela aplicação de uma função à
chave de entrada;
Cálculo de Endereço “Hashing”
• a eficiência da pesquisa neste tipo de organização depende fundamentalmente da função de cálculo de endereço;
• Permite agilizar o processo de consulta de informações.
• Não exige ordenação do conjunto de
dados como a Pesquisa Binária.
Cálculo de Endereço “Hashing”
• A operação de inserção é tão rápida quanto a operação de consulta
• A função Hashing ideal gera uma entrada
• A função Hashing ideal gera uma entrada
diferente na tabela para cada chave
Cálculo de Endereço “Hashing”
Exemplo de Hashing
• Represente a chave numericamente
• Faça o somatório do código ASCII de cada caractere
cada caractere
– end += ascii[i]
Exemplo de Hashing
Exemplo de Hashing
• Melhorando o exemplo anterior
• Represente a chave numericamente
• Faça o somatório do código ASCII de cada caractere multiplicado pela sua cada caractere multiplicado pela sua posição + 1
– end += ( ascii[i]*(i+1) )
• divida o somatório por 2
Exercício
1. Pesquise como obter o código ASCII em C e o utilize para gerar o hashing da próxima questão.
2. Implemente a função hashing descrita no exemplo e crie um programa para verificar os códigos gerados
3. Quais as limitações do algoritmo?
3. Quais as limitações do algoritmo?
4. Quais as possíveis soluções?
Colisões
Colisão
• Quando a função Hash gera o mesmo código para chaves diferentes
• Isso é comum
– O número de chaves é muito maior que o número de entradas na tabela.
número de entradas na tabela.
• Por que?
– Difícil obter funções hash perfeitas
Colisão
• Sendo assim, precisamos de uma boa abordagem para solução das colisões
• Veremos duas abordagens – Encadeamento
– Rehashing
– Rehashing
Encadeamento
• Cada posição da tabela contém (ou pode conter) uma lista encadeada.
0 1 0 /
1 2 3 4 5 6
A2 B2 C2 /
A3 /
A5 B5 /
/
/ /
Encadeamento
• Exemplo
– Armazenando os caracteres da palavra DADOS em uma tabela hash de tamanho 7
• função f(k) = ascii(k) % 7
• função f(k) = ascii(k) % 7
0 1 2 3
A O /
/ /
Tabela ASCII A = 65 D = 68 O = 79 S = 83
/
Rehashing
• Consistem em reaplicar o hash, armazenando a informação na própria tabela
• Veremos duas abordagens
– Rehash linear simples
rhS(pos,tentativas) = (pos + tentativas) % T rhS(pos,tentativas) = (pos + tentativas) % T – Rehash duplo
rhD(pos,tentativas) = (rhD2(pos) + tentativas) % T rhD2(pos) = 1 + pos % (T − 1)
• Onde:
– pos representa o índice da colisão
– T representa o tamanho da tabela hash
Exercício
• Qual o procedimento para buscarmos um dado valor?
• A capacidade da tabela se esgota?
Como?
Como?
• Implemente a função rehashing duplo
Aplicações
• Certificação digital
– Criptografia
– Algoritmos Relacionados
• Função Hash
• Função Hash
• Algoritmos Simétricos
• Algoritmos Assimétricos
– Assinatura Digital
Certificação Digital
• Atualmente, a troca de informações (documentos) vem crescendo.
• Muitas vezes estes documentos precisam ser transmitidos com segurança:
ser transmitidos com segurança:
– Autenticidade;
– Sigilo; e
– Integridade.
• A certificação digital é a tecnologia que
Funções hash
• As funções hash, também estão relacionadas à criptografia de dados.
• Se uma função deste tipo satisfizer
requisitos adicionais, ela pode ser usada
requisitos adicionais, ela pode ser usada
em aplicações criptográficas como, por
exemplo, proteger a autenticidade de
mensagens enviadas através de canais
inseguros.
Conceito de Criptografia
Características
• Através da criptografia e alguns mecanismos podemos garantir atributos como:
– Integridade;
– Sigilo;
– Autenticidade;
• Exemplo simples:
– Informação: “IESP”;
– Chave: 3;
– Algoritmo: Letra := Letra + Chave;
– Resultado: “MHVS”
Algoritmos Relacionados
Algoritmos Relacionados
Algoritmos relacionados
• Função Hash
– Utilizada para gerar um “resumo” de uma informação.
– Tem tamanho fixo, independente do tamanho da informação.
– É irreversível.
– É irreversível.
– Não é possível recuperar a informação original a partir do hash gerado.
– O hash é único para cada documento.
– Uma mínima mudança na informação implica em um hash diferente.
– Exemplo: MD5 (hash de 128 bits)
Algoritmos relacionados
• Algorítimos Simétricos
– Utilizam uma única chave para encriptar e decriptar.
– Utilizam chaves menores que as assimétricas (56bits, 128 bits).
– São mais rápidos que os algorítimos assimétricos, porém mais “frágeis”.
porém mais “frágeis”.
– Por serem mais rápidos são utilizados em grandes quantidades de informação.
– Problema: é necessário enviar a chave para o receptor para que este consiga decriptar a informação.
Algoritmos relacionados
• Algorítimos Assimétricos
– Utilizam duas chaves no processo: uma pública e outra privada.
– Quando uma chave (pública ou privada) é utilizada para encriptar, o seu par (pública ou privada) é utilizado para decriptar.
decriptar.
– Processo mais lento, mais “forte” e com chaves maiores (1024 bits, 2048 bits) que o simétrico.
– Pode garantir sigilo, criptografando com a chave pública do receptor.
– Pode garantir autenticidade, criptografando com a chave privada do autor.
– Exemplo: RSA, Diffie-Hellman, ElGamal.
Assinatura Digital
Assinatura Digital
Assinatura Digital
• Características
– É um processo que garante a autoria e a integridade de uma informação, mas não garante sigilo.
– Utiliza a chave privada do autor para garantir a autoria, pois apenas ele a possui.
autoria, pois apenas ele a possui.
– Utiliza uma função hash para garantir a integridade da informação.
– Não garante a confidencialidade.
– Possui um “TimeStamp” para marcar o momento exato em que foi feita a assinatura.
Assinatura Digital
• Assinando Digitalmente
– 1º Passo: Gerar um hash da informação que será enviada. Lembrando que o hash é único e tem tamanho fixo (Integridade).
– 2º Passo: Criptografar o hash gerado com a chave – 2º Passo: Criptografar o hash gerado com a chave
privada do autor (Autenticidade).
– 3º Passo: Anexar o hash criptografado ao documento.
– O hash criptografado de uma informação é a assinatura digital propriamente dita.
Assinatura Digital
• Conferindo a Assinatura Digital
– 1º Passo: Extrair a assinatura digital da informação recebida.
– 2º Passo: Decriptar a assinatura com a chave pública do emissor, obtendo assim o hash original gerado do emissor, obtendo assim o hash original gerado pelo emissor.
– 3º Passo: O receptor gera um hash da informação recebida.
– 4º Passo: O receptor compara o hash gerado por ele
Assinatura Digital
• Características
– É um processo que garante a autoria e a integridade de uma informação, mas não garante sigilo.
garante sigilo.
– Problemas:
• Como ter certeza que a chave pública utilizada não é falsa?
• Como ter certeza que a informação assinada foi enviada por quem realmente disse ser?
• Certificado Digital