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
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