martes, 8 de junio de 2010

Aclaraciones al report Cracking md5 (BarsWF vs. Caín & Abel) [por David Rouco Vázquez]

David Rouco, autor del report "Cracking md5 (BarsWF vs. Caín & Abel)", me remite la siguiente aclaración, de gran interés, que adjunto literalmente.

"Un compañero me ha preguntado, después de leer el report de cracking MD5, el motivo por el que esas utilidades van a varios millones por segundo, y el John the Ripper "sólo" crackea unos pocos miles de shadow-passwords por seg cuando teóricamente es sólo el hash salteado. Como me ha parecido interesante se lo he resuelto, y también te lo envío a ti por si te parece que deberías hacer una especie de aclaración en el blog, por si alguien más se lo pregunta. El motivo es que en la función crypt() típica de nuestras distribuciones, que es la que se usa para que dada una cadena devuelva su correspondiente shadow, existe un bucle que realiza 1000 iteraciones calculando md5 sobre el md5 previamente calculado, como verás por ejemplo en
http://dev.freenode.net/hyperion/trunk/src/md5crypt.c (aquí es sólo para md5, pero crypt() vale para todas las funciones definidas). Este bucle, es sólo para este propósito (en principio, porque ahí las colisiones son "imposibles"), evitar ataques por fuerza bruta, con lo que si en un futuro las máquinas fueran 1000000 de veces más rápidas, "sólo" tendrían que incrementar el nº de iteraciones hasta 10⁹ para que siguiéramos como hasta ahora."