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)
- ¿Cuánto conocimiento matemático profundo deberías tener como diseñador de juegos?
- ¿Cuáles son los fundamentos teóricos del aprendizaje profundo?
- ¿Cuál es una explicación simple pero detallada de Textrank?
- ¿Se puede enseñar el pensamiento matemático / lógico?
- Si [math] \ mathbf F [/ math] no es un campo vectorial conservador, ¿eso significa que no hay una función [math] f [/ math] tal que [math] \ nabla f = \ mathbf F [/ math] ?
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)