¿El md5 (o cualquier hash para esa materia) de una cadena incluye el terminador nulo?

7

¿El md5 (o cualquier hash para esa materia) de una cadena incluye el terminador nulo en sus cálculos? Es decir, el hash de una cadena es igual al hash de la secuencia de bytes que representa la cadena menos el terminador nulo.

    
pregunta james123 26.05.2013 - 03:06
fuente

2 respuestas

5

Creo que esto depende más de la implementación del algoritmo de hash que de su capacidad para codificar una cadena terminada en nulo, incluido el propio terminador nulo.

Algunas de estas apariciones de implementaciones de funciones hash se observaron en TrouSerS (la versión 0.2 se basa en los pantalones Software Stack 1.1, o anterior) utilizado en Gentoo Linux como una de las bibliotecas criptográficas en su pila de software y en TrustedJava (antes de jTSS 0.4a), y en IBM Client Security Software, ambas implementaciones incluían terminadores nulos en las entradas del diálogo emergente de contraseñas (cadenas terminadas en nulo, incluidas las terminaciones nulas mismas).

Del mismo modo, puede UTF-16 codificar texto sin formato antes de pasarlo a la función de hashing, lo que provoca que todos los demás caracteres en la entrada que se procesará como 0x00 o carácter nulo para los caracteres no extendidos por la función que procesa la entrada como simple ASCII . Dependiendo del algoritmo de hash en sí, su propósito previsto y la longitud de entrada, esto podría ser beneficioso (por ejemplo, para la seguridad de hash de contraseña, por ejemplo, hashcat tiene algunos problemas con estos ), o causa una disminución de la entropía de la contraseña, si eso hace que el algoritmo de hashing ignore partes de la entrada (por ejemplo, bcrypt , una implementación de algoritmo hash clave que se extiende basada en Blowfish cifrado de bloque simétrico, limita el texto simple a 72, 55 o 51 caracteres (dependiendo de a quién pregunte) e ignora el resto).

En cuanto a un consejo general sobre si incluir terminadores nulos en las entradas de sus algoritmos de hash, no tengo ninguno y usted debería ser un poco más específico sobre el uso previsto para el que está utilizando los datos de hash (estamos hablando de hashing criptográfico para el almacenamiento de contraseñas o HMAC aquí?), y variará mucho dependiendo de sus necesidades específicas y del algoritmo de hashing elegido.

    
respondido por el TildalWave 26.05.2013 - 04:09
fuente
3

Me arriesgaré a una suposición salvaje: no debería. Un valor de cadena, y su terminador nulo, son dos cosas diferentes.

La terminación nula podría ser otra cosa en otra máquina / sistema operativo / compilador, pero el valor debería permanecer igual.

Asumiré que el MD5 no tiene en cuenta la forma en que se almacena la cadena en esa máquina en particular y, por lo tanto, solo MD5 es la cadena "valor" (o contenido), y no su representación completa de la máquina.

(en una nota ligeramente relacionada: consulte las C-faq para obtener información sobre por qué no puede asumir nada sobre la representación interna . En C, pero puede extenderse a casi todo. Allí Son buenos ejemplos, en el C-faq, para el puntero nulo, que puede tratarse como un '0' en muchos casos en los programas de C, pero que podría ser cualquier cosa internamente (vea algunos ejemplos: < a href="http://c-faq.com/null/machexamp.html"> enlace ). Y aquí, hablamos de un md5 (u otro) de una cadena, por lo que debería ser un programa / El sistema operativo / lo que sea dependiente, y como la representación interna puede cambiar, debe estar en el valor de la cadena y no incluir su terminador de almacenamiento).

    
respondido por el Olivier Dulac 27.05.2013 - 12:02
fuente

Lea otras preguntas en las etiquetas