Considere as situações simplificadas abaixo (|| indica concatenação).
Algoritmo 1: utiliza uma função hash com poucos bits sobre o bloco de dados que será enviado e uma chave secreta que é
compartilhada. O bloco de dados e o hash é enviado ao receptor. O receptor anexa a mesma chave secreta
compartilhada ao bloco de dados e calcula a mesma função hash. Mas ocorre colisão na função hash e duas mensagens diferentes resultam como iguais... alguém explora essa vulnerabilidade e modifica os dados, mesmo sem
saber a chave, e os entrega ao receptor, que os recebe achando serem os legítimos. Funciona assim:
H(chave || dados1) = H(chave || dados2)
Algoritmo 2: funções hash mais avançadas são utilizadas e novos critérios de segurança são adicionados. Isso resulta que
nenhum ataque conhecido permite que um invasor modifique os dados e tenha o mesmo valor sem conhecer os
valores das chave1 e chave2 (pública e secreta). Funciona assim:
HNovo = H(chave1 || H(chave2 || dados))
As situações que envolvem os algoritmos 1 e 2 correspondem, correta e respectivamente, a