Criptografía: ¿Cómo explicaría el encadenamiento de hash para evitar la técnica de colisiones de hash?

La respuesta de William Yu es cierta, pero tampoco es suficiente.

Considere dos textos textB y textB . Se produce una colisión hash cuando, utilizando una función hash como md5() , la función hash produce el mismo hash.

md5(textA) == md5(textB)

Denotemos el hash por hhhh .

Ahora, simplemente encadenando la función hash de la manera ilustrada todavía se obtendrá el mismo hash final. Es decir,

md5(md5(textA)) == md5(md5(textB))

Simplemente se convierte

md5(hhhh) == md5(hhhh)

Una forma más resistente de encadenar es tomar el hash del hash concatenado con el texto original. En otras palabras,

md5(md5(textA) • textA)

De esta manera, incluso si md5(textA) == md5(textB) entonces es poco probable (o incluso puede ser imposible; no soy lo suficientemente bueno en matemáticas para mostrar esto) para

md5(hhhh • textA)

Para colisionar con

md5(hhhh • textB)

¿Qué significa esto para el ataque de colisión del prefijo elegido?

Simplemente, incluso si uno pudiera encontrar los apéndices appA y appB manera que,

md5(textA • appA) == md5(textB • appB)

Sería muy poco probable (o nuevamente, probablemente imposible) que lo siguiente también sea cierto:

md5(md5(textA • appA) • textA • appA) == md5(md5(textB • appB) • textB • appB)

Md5 (texto)! = Md5 (Md5 (texto))