Aurélio trabalha para uma empresa de segurança e está efetuando testes em funções de hashes criptográficos. Ele fez uso de uma função simples que efetuava o ou-exclusivo entre os valores ASCII (7 bits) dos caracteres de uma mensagem digitada por ele. Baseado nos conceitos de funções de hash, Aurélio identificou que o algoritmo de hash era fraco, pois:
- A)produzia um valor de hash variável em sua saída;
Errada, porque o problema não é o hash ser variável, e sim ser fraco na proteção contra colisões.
- B)possuía resistência a pré-imagem;
Errada, pois a função descrita não oferece resistência adequada a pré-imagem como uma hash criptográfica robusta deveria oferecer.
- C)possuía alta resistência a colisões;
Errada, já que o uso de XOR simples não garante alta resistência a colisões; acontece justamente o contrário.
- D)produzia alto efeito avalanche;
Errada, porque o efeito avalanche é pequeno ou inexistente nesse tipo de construção, já que mudanças simples na entrada não se propagam bem.
- E)possuía baixa resistência a colisões.
Certa, porque uma hash baseada apenas em XOR de ASCII facilita a geração de mensagens diferentes com o mesmo valor final, isto é, tem baixa resistência a colisões.
Gabarito: E
Uma função de hash ideal transforma uma mensagem em um resumo curto, de forma rápida e com comportamento bem imprevisível. Na prática, ela deve dificultar ao máximo que duas mensagens diferentes gerem o mesmo resultado, porque isso é justamente o que chamamos de colisão. Se a função for fraca nesse ponto, ela perde valor para integridade e autenticação. No caso da questão, o algoritmo fazia apenas o ou-exclusivo (XOR) dos valores ASCII dos caracteres. Isso é simples demais e, pior, muito repetitivo: a operação XOR tem propriedades que facilitam a ocorrência de saídas iguais para mensagens diferentes, especialmente porque a ordem e certos pares de caracteres podem se cancelar. Resultado: fica relativamente fácil achar mensagens distintas com o mesmo hash. Por isso o gabarito é a letra E. A fraqueza principal não está em “variar” a saída, nem em ter efeito avalanche ou resistência a pré-imagem, mas sim em apresentar baixa resistência a colisões. Em termos doutrinários, uma boa função hash precisa ser unidirecional, determinística e resistente a colisões; essa função de XOR não entrega essa segurança mínima.