2
Funções de atualização hash baseadas em operações modulares Igor G. F. de Almeida, Luiz F. dos S. Sousa, Igor Ruiz Gomes Centro Universitário do Pará (CESUPA) Área de Ciências Exatas e Tecnologia (ACET) Laboratório de Computação Natural (LCN) Grupo de Estudos Temáticos de Matemática Computacional (MatComp- CESUPA) - 66.060- 230, Belém Pará Brasil E-mail: {cmte.igor.almeida, fellipe.skool, ruiz.igor}@gmail.com RESUMO Funções hash são essenciais em diversas áreas da computação como verificação de integridade de arquivos e assinaturas digitais [3]. Também são utilizadas em determinadas estruturas de dados como forma de acelerar acessos a informações em geral. Devem ser rápidas e seguras a diversos tipos de ataque como ataques de colisão, que tentam localizar mensagens que produzem o mesmo valor hash. Por causa de problemas estatísticos como o problema do aniversário, as colisões são sempre possíveis na teoria para qualquer função hash, porém localiza-las na prática não deve ser computacionalmente viável. Descrito por Horst Feistel, o efeito avalanche [3] é uma das propriedades que as funções hash possuem. Essa propriedade consiste em que pequenas alterações na entrada correspondem a grandes alterações na saída da função, dessa forma se um bit da mensagem original fosse modificado seu valor hash seria completamente diferente do valor original, sendo fácil perceber que não se trata do mesmo valor, mas também difícil de estabelecer uma relação entre os valores das mensagens. Uma função hash é basicamente composta por duas partes, à função de compressão ou atualização que é responsável por mudar o estado interno da função e a função de finalização que é responsável por operar o mesmo estado de forma que as mudanças que foram feitas tornem-se mais fortes. Existem vários tipos de funções de atualização e os mais usados comumente são os Merkle- Damgard e Davies-Meyer. As funções baseadas no principio de Merkle-Damgard recebem um bloco de mensagem m i e junto com o valor do estado anterior H i-1 combinam os valores em uma função F para obter o valor do estado atual H i [2] Figura 1 Definição da função Merkle-Damgard A função de baseia-se no principio de que se a função F for resistente a colisão a função de compressão também será. O conceito de Davies-Meyer consiste da aplicação de uma função F proveniente de uma cifra de bloco, dessa forma cada bloco da mensagem é cifrado utilizando como chave o estado anterior do hash. Após a cifragem é realizada uma operação de ou-exclusivo (XOR) com o valor obtido e o valor anterior do estado do hash. Figura 2 Função Davies-Meyer Existem outros conceitos baseados na função Davies-Meyer que o estendem de forma a aumentar a entropia, dentre eles podem ser citados as funções Miyaguchi-Preneel e Matyas- Meyer-Oseas [2]. A maioria dos conceitos dependerá de uma função F em alguma parte do processo, essas funções são diferentes em cada algoritmo de hash e a eficiência desses algoritmos na fase de compressão dependerá diretamente da eficiência da sua função F. Diferentes tipos de funções são usados desde funções que utilizam apenas operações de nível de bit como no caso da família MD (MD2, MD4 e MD5) [2], até funções de cifragem de algoritmos conhecidos por sua 919 ISSN 1984-8218

Funções de atualização hash baseadas em operações modulares

Embed Size (px)

Citation preview

Page 1: Funções de atualização hash baseadas em operações modulares

Funções de atualização hash baseadas em operações modulares

Igor G. F. de Almeida, Luiz F. dos S. Sousa, Igor Ruiz Gomes

Centro Universitário do Pará (CESUPA) – Área de Ciências Exatas e Tecnologia (ACET) Laboratório de

Computação Natural (LCN) – Grupo de Estudos Temáticos de Matemática Computacional (MatComp-

CESUPA) - 66.060- 230, Belém – Pará – Brasil

E-mail: {cmte.igor.almeida, fellipe.skool, ruiz.igor}@gmail.com

RESUMO

Funções hash são essenciais em diversas áreas da computação como verificação de

integridade de arquivos e assinaturas digitais [3]. Também são utilizadas em determinadas

estruturas de dados como forma de acelerar acessos a informações em geral. Devem ser rápidas

e seguras a diversos tipos de ataque como ataques de colisão, que tentam localizar mensagens que produzem o mesmo valor hash. Por causa de problemas estatísticos como o problema do

aniversário, as colisões são sempre possíveis na teoria para qualquer função hash, porém

localiza-las na prática não deve ser computacionalmente viável. Descrito por Horst Feistel, o efeito avalanche [3] é uma das propriedades que as funções

hash possuem. Essa propriedade consiste em que pequenas alterações na entrada correspondem

a grandes alterações na saída da função, dessa forma se um bit da mensagem original fosse

modificado seu valor hash seria completamente diferente do valor original, sendo fácil perceber que não se trata do mesmo valor, mas também difícil de estabelecer uma relação entre os

valores das mensagens.

Uma função hash é basicamente composta por duas partes, à função de compressão ou atualização que é responsável por mudar o estado interno da função e a função de finalização

que é responsável por operar o mesmo estado de forma que as mudanças que foram feitas

tornem-se mais fortes. Existem vários tipos de funções de atualização e os mais usados comumente são os Merkle-

Damgard e Davies-Meyer. As funções baseadas no principio de Merkle-Damgard recebem um

bloco de mensagem mi e junto com o valor do estado anterior Hi-1 combinam os valores em uma

função F para obter o valor do estado atual Hi [2]

Figura 1 – Definição da função Merkle-Damgard

A função de baseia-se no principio de que se a função F for resistente a colisão a função de

compressão também será.

O conceito de Davies-Meyer consiste da aplicação de uma função F proveniente de uma cifra de bloco, dessa forma cada bloco da mensagem é cifrado utilizando como chave o estado

anterior do hash. Após a cifragem é realizada uma operação de ou-exclusivo (XOR) com o valor

obtido e o valor anterior do estado do hash.

Figura 2 – Função Davies-Meyer

Existem outros conceitos baseados na função Davies-Meyer que o estendem de forma a aumentar a entropia, dentre eles podem ser citados as funções Miyaguchi-Preneel e Matyas-

Meyer-Oseas [2].

A maioria dos conceitos dependerá de uma função F em alguma parte do processo, essas funções são diferentes em cada algoritmo de hash e a eficiência desses algoritmos na fase de

compressão dependerá diretamente da eficiência da sua função F. Diferentes tipos de funções

são usados desde funções que utilizam apenas operações de nível de bit como no caso da família MD (MD2, MD4 e MD5) [2], até funções de cifragem de algoritmos conhecidos por sua

919

ISSN 1984-8218

Page 2: Funções de atualização hash baseadas em operações modulares

segurança como o Whirlpool que utiliza como função de compressão uma parte do AES, padrão

de criptografia do governo americano.

Funções modulares são funções que possuem ou utilizam alguma propriedade da aritmética modular, também conhecida como aritmética do relógio. Sua principal caraterística é que as

operações são realizadas em um conjunto finito de números delimitados pelo módulo. Ao final

do conjunto os números continuam a partir do início, então em um conjunto delimitado pelo módulo treze se forem somados os valores seis e oito o resultado será um, pois depois de treze o

resultado volta ao início do conjunto. Uma das características das funções modulares é que boa

parte delas são funções de mão única, que tem um grande valor para a criptografia. Um exemplo

de função modular na criptografia é a exponenciação modular, usada nos esquema de Diffie-Hellman e El-Gamal [3].

Funções modulares também são usadas em geradores de números pseudoaleatórios, pois são

capazes de gerar sequencias de alta entropia com relativa facilidade de implementação. Uma forma simples de aplicar esse tipo de função, como funções de atualização hash é trocar

a função F por uma que seja modular, por exemplo: , onde n é o

tamanho de saída da função em bits. Métodos como a redução de Montgomery são capazes de

realizar essa operação de forma eficiente [4].

Uma vez que a função F tenha comprovada a resistência a colisões poderá ser usada em um esquema do tipo Merkle-Damgard ou uma de suas extensões.

Palavras-chave: criptografia, função hash, aritmética modular

Referências

[1] H. Domingues, G. Iezzi, “Álgebra Moderna”, Atual, 2003.

[2] A. Menezes, P. van Oorschot, S. Vanstone, “Handbook of Applied Cryptography”, CRC

Press, 2001.

[3] A. Moldovyan, N. Moldovyan, “Innovative cryptography”, Thomson, 2007.

[4] P. Montgomery, “Modular Multiplication Without Trial Division”, Math. Computation, vol.

44, pp. 519-521, 1985.

920

ISSN 1984-8218