Estos días he leido muchas tonterías (a mí me lo parecen) sobre si el SHA-1 es malo y lo único bueno es el SHA-256 y sobre lo que esto implica en el nuevo DNI electrónico.
Lo cierto es que desde hace unos pocos años, algunas personas afirman de oidas que se ha roto el MD-5 o el SHA-1.
Lo que ha sucedido es que se ha demostrado que la probabilidad de encontrar dos documentos distintos con el mismo hash, siendo muy pequeña, es menos pequeña de lo que se sospechaba cuando se diseñó el algoritmo.
Con esto en mente, podemos afirmar que no es cierto que unos algoritmos de hash sean buenos y otros malos, así sin más.
En todo caso, no hay algoritmos buenos, sino más o menos vulnerables a determinados tipos de ataque.
Y, desde luego, la mejor opción es utilizar 2 algoritmos de hash simultáneamente.
Lo que esto quiere decir es que si, sumando casualidades, somos capaces de generar un documento que tiene una información que nos interesa y con el que queremos sustituir a otro para el que se ha calculado el Hash, habremos conseguido que el hash firmado para el documento sustituido ampare al documento con el que lo sustituimos.
En general, en documentos estructurados esto es imposible incluso con mecanismos de hash "·malos" porque es importante preservar la legibilidad y consistencia del documento. No es lo mismo con ficheros gráficos o con ficheros que tengan áras de "pad" (de manipulación) porque es posible manipular esas áreas o los bits menos significativos del gráfico hasta que el fichero entre por el aro (lo que tampoco es nada fácil).
De todas formas, cuando existen dos algoritmos de hash simultáneos, lo que podamos hacer para "arreglar" el fichero de cara a un Hash, nos lo "descojona" de cara al otro.
En definitiva, el certificado incluido en el DNI electrónico es lo suficientemente seguro ya que el hash generado con SHA-1 implica que no es posible generar otro certificado con el mismo aspecto y cambiando algunos datos según nos interese. Pero ya es la releche al volver a firmar por la CA el SHA-256 del mismo contenido. Aunque no podamos utilizarlo ni con Internet Explorer, ni con Opera, ni con Firefox. Es, desde luego, INFALSIFICABLE.
Otro aspecto distinto es la manera en la que firmemos nosotros nuestros documentos con el DNI electrónico. Ahí sí que podemos hacer lo que queramos. Por ejemplo, desarrollar por nuestra cuenta un programa de software que utilice formatos no estándar al cifrar y al descifrar (firmar y comprobar la firma), y que emplee MD-4, MD-5, SHA-1 y SHA-256 simultánemaente.
A ver si vamos a ser muy paranóicos con las gilipoyeces y luego no comprobamos si el certificado está revocado o no.