2009-03-08 44 views
5

Si alguien intencionalmente intenta modificar dos archivos para tener el mismo hash, ¿cuáles son las formas de detenerlos? ¿Pueden md5 y sha1 evitar el caso de la mayoría?¿Crees dos archivos para tener el mismo hash?

Estaba pensando en escribir mi propia y Calculo incluso si no hago un buen trabajo si el usuario no conoce mi hash de que puede no ser capaz de engañar a la mía.

¿Cuál es la mejor manera de prevenir esto?

+0

¿Qué estás tratando de lograr? –

+0

Me has perdido un poco en el segundo párrafo, ¿puedes revisarlo? –

Respuesta

18

MD5 es generalmente considerado inseguro si las colisiones de condensación son una preocupación importante. SHA1 tampoco es considerado aceptable por el gobierno de los Estados Unidos. No es fue un competition en marcha para encontrar un algoritmo de reemplazo de hash, pero la recomendación en este momento es el uso de la familia SHA2 - SHA-256, SHA-384 o SHA-512. [Actualización: 2012-10-02 NIST ha elegido SHA-3 como el algoritmo Keccak.]

Puede intentar crear su propio hash, probablemente no sea tan bueno como MD5, y tampoco es recomendable tener "seguridad en la oscuridad".

Si quiere seguridad, hash con múltiples algoritmos hash. Ser capaz de crear simultáneamente archivos que tienen colisiones hash utilizando una serie de algoritmos es excesivamente improbable. [Y, a la luz de los comentarios, permítanme aclarar: me refiero a publicar los valores SHA-256 y Whirlpool para el archivo, sin combinar los algoritmos hash para crear un único valor, sino usar algoritmos separados para crear valores separados. En general, un archivo dañado no podrá coincidir con ninguno de los algoritmos; si, por casualidad, alguien ha logrado crear un valor de colisión usando un algoritmo, la posibilidad de producir también una segunda colisión en uno de los otros algoritmos es insignificante.]

El Public TimeStamp utiliza una matriz de algoritmos. Vea, por ejemplo, sqlcmd-86.00.tgz para una ilustración.

+0

MD5 está completamente roto. Es basura y nunca debe usarse en sistemas nuevos. La combinación de varias funciones hash es una buena idea SÓLO si necesita un hash muy largo (> 512 bit). De lo contrario, un solo hash largo será más fuerte: SHA2-384 tiene una probabilidad de colisión menor que, por ejemplo, SHA1 y RIPEMD-160 concatenadas. – kquinn

+2

La segunda parte acerca de la seguridad no es cierta: no es aconsejable combinar múltiples algoritmos hash sin tener una comprensión matemática profunda de cómo interactúan. Los agujeros en uno pueden ser amplificados por el otro. –

+1

Lo que quiero decir, y lo que se ilustra con el sitio web Public TimeStamp, es publicar simultáneamente los hashes de SHA-256, RIPEMD-160, SHA1 y quizás Whirlpool; 4 hashes independientes del mismo archivo. Incluso si un hash es derrotado, las posibilidades de que el mismo archivo derrote a los demás es insignificante. –

2

¿Por qué está intentando crear su propio algoritmo hash? ¿Qué pasa con SHA1HMAC?

Sí, hay repeticiones para hashes.
Cualquier hash que sea más corto que el texto sin formato es necesariamente menos información. Eso significa que habrá algunas repeticiones. La clave para los hash es que las repeticiones son difíciles de aplicar ingeniería inversa.

Considere CRC32 - comúnmente usado como un hash. Es una cantidad de 32 bits. Debido a que hay más de 2^32 mensajes en el universo, habrá repeticiones con CRC32. La misma idea se aplica a otros hashes.

+0

En realidad, crear colisiones con CRC32 es mucho más fácil que 2^31 evaluaciones del hash. Este hash no tiene ni siquiera la seguridad de 32 bits que tendría un hash "seguro" de 32 bits (como 32 bits de SHA-512). –

1

Esto se conoce como una "colisión de hash", y la mejor manera de evitarlo es usar una función hash fuerte. MD5 es relativamente fácil de construir artificialmente archivos colisionantes, como se ve here. Del mismo modo, se sabe que existe un relatively efficient method para computar archivos SH1 que colisionan, aunque en este caso "relativamente eficiente" aún requiere cientos de horas de tiempo de cálculo.

En general, MD5 y SHA1 siguen siendo caros de roer, pero no imposible. Si realmente te preocupa, utiliza una función hash más fuerte, como SHA256.

Escribir la suya propia no es una buena idea a menos que sea un criptógrafo bastante experto. la mayoría de las ideas simples han sido probadas y existen ataques bien conocidos contra ellas.

Si realmente desea obtener más información al respecto, consulte Schneier's Applied Cryptography.

+0

Tenga en cuenta que Schneier ha expresado sus reservas sobre el valor de ese libro para los legos. La cita era acerca de un montón de código de criptografía mal escrito por personas que habían leído Applied Cryptography. Pero es una buena lectura. – dmckee

+1

Es una gran lectura si le interesan los detalles sangrientos. Las reservas de Schneier se centraron principalmente en el hecho de que la matemática detrás de la criptografía es, con mucho, la parte más segura de la criptografía moderna, y ese libro no aborda las preocupaciones humanas, que son los verdaderos problemas. –

+0

@Bill: Sí. Buen resumen. – dmckee

0

No creo que idear su propio algoritmo hash sea una buena opción.

Otra buena opción es Salado MD5. Por ejemplo, la entrada a su función hash MD5 se anexa con la cadena "acidzom! @ #" Antes de pasar a la función MD5.

También hay una buena lectura en Slashdot.

+3

Sé que esta respuesta es antigua, pero fue votado por lo que quiero agregar una advertencia rápida. Primero, el MD5 está roto y la salazón no soluciona el corte. Salar tiene sus usos, particularmente en frustrar mesas de arcoíris, pero no ayuda aquí porque ambos lados necesitarán la sal. El otro detalle es que la sal debe ser preenvendida, no añadida, sino que no hace nada para distinguir entre un par de planos diseñados para colisionar. Recomiendo usar algo en la familia SHA2, como otros han sugerido. –

4

Si el usuario no conoce su algoritmo de hash, tampoco puede verificar su firma en un documento que haya firmado.

La mejor opción es utilizar algoritmos de hashing de una vía de clave pública que generan el hash más largo. SHA-256 crea un hash de 256 bits, por lo que un falsificador tendría que probar 2 diferentes documentos (en promedio) antes de crear uno que coincida con un documento determinado, lo que es bastante seguro 2 255 Si eso aún no es lo suficientemente seguro para ti, está SHA-512.

Además, creo que vale la pena mencionar que una buena forma de protegerse de los documentos falsificados con tecnología digital es simplemente mantener una copia de todo lo que firme. De esa forma, si se trata de una disputa, puede mostrar que el documento original que usted firmó fue alterado.

+0

Paradoja de cumpleaños? 2^128, creo ... Aún así, muchísimo ... –

+1

No divide el exponente por 2, lo reduce en uno, razón por la cual es 255 en lugar de 256. –

+2

Tenga cuidado con la diferencia entre unir un objetivo dado e intentar generar un par colisionador. Bill está hablando sobre lo primero, Jonathan sobre lo último. – dmckee

2

Aquí hay una jerarquía de dificultad (para un atacante). Es más fácil encontrar dos archivos con el mismo hash que generar uno para que coincida con un hash determinado, y más fácil hacer el último si no tiene que respetar las restricciones de forma/contenido/longitudes.

Por lo tanto, si es posible utilizar una estructura y longitudes de documento bien definidas, puede hacer que la vida de un atacante sea un poco más difícil sin importar qué hash subyacente use.

Cuestiones relacionadas