2011-04-28 12 views
6

Creo que puedo descargar el código a PHP o Linux o lo que sea, y mirar directamente el código fuente de la función MD5. ¿No podría entonces aplicar ingeniería inversa al cifrado?¿Por qué no tener el código para la función MD5 ayuda a los piratas informáticos a romperlo?

Aquí está el código - http://dollar.ecom.cmu.edu/sec/cryptosource.htm

Parece como cualquier método de cifrado sería inútil si "el enemigo" tiene el código que fue creado con. ¿Me equivoco?

+0

Respuesta más breve: Por la misma razón, saber cómo agregarlo no te permite saber qué dos números agregué para obtener 42. –

+0

um ... vale ... No pude entender cómo conseguiste 42 mirando en tu código fuente? – shady

+0

Mi código fuente es "result = x + y". ¿Qué números usé? –

Respuesta

8

No es un cifrado, sino un one way hashing mechanism. Es digiere la cadena y produce un hash único (hopefully).

Si fuera una encriptación reversible, los formatos zip y tar.gz serían bastante detallados. :)

La razón por la que no ayuda demasiado a los piratas informáticos (obviamente, saber cómo se hace uno es beneficioso) es que si encuentran una contraseña para un sistema que es hash, p. 2fcab58712467eab4004583eb8fb7f89, necesitan saber la cadena original utilizada para crearla, y también si se utilizó alguna sal. Esto se debe a que, al iniciar sesión, por razones obvias, la cadena de contraseña se procesa con el mismo método que se genera y, a continuación, el hash resultante se compara con lo que se almacena.

Además, muchos desarrolladores están migrando a bcrypt que incorpora un factor de trabajo, si el hash toma 1 segundo a diferencia de 0,01 segundos, se ralentiza en gran medida por la generación de un rainbow table para su aplicación, y los viejos sitios PHP usando solamente md5() convertirse en la fruta baja que cuelga.

Further reading on bcrypt.

+0

+1; Esperaba que MD5 nunca colisionara (ahora tendré malos sueños :) –

8

Uno de los criterios de las buenas operaciones criptográficas es que el conocimiento del algoritmo no debería hacer que sea más fácil romper el cifrado. Por lo tanto, una encriptación no debe ser reversible sin el conocimiento del algoritmo y la clave, y una función hash no debe ser reversible independientemente del conocimiento del algoritmo (el término utilizado es "inviable computacionalmente").

MD5 y otra función hash (como SHA-1 SHA-256, etc.) realizan una operación unidireccional en datos que crean un resumen o "huella digital" que suele ser mucho más pequeño que el texto sin formato. Esta función unidireccional no puede invertirse para recuperar el texto sin formato, incluso cuando usted sabe exactamente lo que hace la función.

Del mismo modo, el conocimiento de un algoritmo de encriptación no hace que sea más fácil (asumiendo un buen algoritmo) recuperar el texto plano del texto cifrado. El proceso inverso es "inviable computacionalmente" sin conocimiento de la clave de cifrado utilizada.

9

Esa es en realidad una buena pregunta.

MD5 es una función hash - es "mezcla" datos de entrada de tal manera que debe ser inviable para hacer un número de cosas, incluyendo la recuperación de la entrada dada la salida (no es cifrado, hay sin llave y no debe invertirse, sino todo lo contrario). Una descripción manual es que cada bit de entrada se inyecta varias veces en un estado interno lo suficientemente grande, que se mezcla de tal forma que cualquier diferencia se propaga rápidamente a todo el estado.

MD5 es public since 1992. No hay ningún secreto, y nunca ha sido ningún secreto, para el diseño de MD5.

MD5 se considera criptográficamente roto desde 2004, año de publicación de la primera colisión (dos mensajes de entrada distintos que producen el mismo resultado); se consideró "débil" desde 1996 (cuando se encontraron algunas propiedades estructurales, que se cree que finalmente ayudan a construir colisiones). Sin embargo, existen otras funciones hash, que son tan públicas como MD5 y para las que todavía no se conoce ninguna debilidad: la familia SHA-2. Las nuevas funciones hash se están evaluando actualmente como parte de la competencia SHA-3.

La parte realmente preocupante es que no existe una prueba matemática conocida de que realmente exista una función hash. Una función hash es un algoritmo eficiente descrito públicamente, que puede integrarse como un circuito lógico de tamaño finito, fijo y pequeño. Para los profesionales de la complejidad computacional, es algo sorprendente que sea posible exhibir un circuito que no se puede invertir. Así que ahora solo tenemos candidatos: funciones para las cuales nadie ha encontrado debilidades aún, en lugar de funciones para las cuales no existe debilidad. Por otro lado, el caso de MD5 muestra que, al parecer, pasar de las deficiencias estructurales conocidas a las colisiones reales a los ataques lleva una cantidad sustancial de tiempo (debilidades en 1996, colisiones en 2004, colisiones aplicadas - a un par de X.509 certificados - en 2008), por lo que la tendencia actual es usar agilidad del algoritmo: cuando usamos una función hash en un protocolo, también pensamos en cómo podríamos hacer la transición a otra si la función hash resulta ser débil.

Cuestiones relacionadas