Reduciendo la longitud de la contraseña con la función hash

6

Supongamos que me gustaría usar una cadena muy larga como contraseña. Como ejemplo, podemos decir que esta cadena tiene una longitud de 100 caracteres.

Sin embargo, supongamos que la aplicación para la que me gustaría usar esta contraseña solo admite longitudes de contraseña de 64 caracteres. Sin entrar en detalles, suponga que simplemente truncar la contraseña deseada en 64 caracteres aumentaría significativamente su capacidad de predicción.

¿Sería seguro si utilizara como contraseña un hash de esta contraseña, con el único propósito de reducir su longitud?

Por ejemplo, si elegí usar un hash SHA-256 codificado en base64 de la contraseña, creo que estoy buscando un espacio de búsqueda de aproximadamente 2.96 * 10 79 ( 64 caracteres posibles * longitud de 44). Elijo usar base64 en lugar de la representación hexadecimal porque la representación hexadecimal consiste en un espacio de búsqueda más pequeño (16 caracteres posibles * longitud de 64 = 1.16 * 10 77 ).

( EDIT: Como señaló Thomas Pornin en su respuesta, el espacio de búsqueda siempre será 2 256 independientemente de la codificación que se use).

Para mis propósitos, este tamaño de espacio de búsqueda es suficiente. Sin embargo, ¿el hecho de que esté utilizando una codificación base64 de un hash SHA-256 introduce alguna previsibilidad o la contraseña? En otras palabras, si un atacante sabe que mi contraseña es un hash SHA-256 codificado en base64 de una cadena de entrada (pero él no sabe nada sobre la cadena de entrada), ¿de alguna manera sería capaz de reducir ese espacio de búsqueda inicial de 2.96 * 10 79 ?

    
pregunta Andrew 20.03.2013 - 23:36
fuente

1 respuesta

8

El "espacio de búsqueda" tiene un tamaño 2 256 . No se amplía ni reduce dependiendo de si usas hexadecimal o Base64. Cuando codifica una cadena de 256 bits (también conocida como 32 bytes) en Base64, de hecho obtiene 44 caracteres, pero no todas las combinaciones de 44 caracteres (tomadas en un alfabeto de 64) son posibles. El carácter 44 será siempre un signo '=', y solo hay 16 caracteres posibles para la posición 43.

Ahora, 2 256 es enorme y mucho ( muy muy lejos) más allá de lo que se puede buscar con tecnología existente o previsible. Eso también está más allá de la buena ciencia ficción. Eso está incluso más allá de la mala ciencia ficción.

Hashing una contraseña con una función hash criptográficamente fuerte (y SHA-256 es ciertamente fuerte) es una forma válida de "acortando" una contraseña; de hecho, la función PBKDF2 (una función de derivación de claves, a menudo utilizada para el hashing de contraseñas) comienza por este paso (*). La "reducción" aparente del espacio no es un problema porque un espacio de tamaño superior a aproximadamente 2 80 no es susceptible de una búsqueda exhaustiva.

Por supuesto, esto plantea la cuestión de cómo calculará el hash ... una contraseña se llama "contraseña" porque está destinada a ser recordada por una mente humana y escrita por dedos humanos. ¿Recordarás una salida de hash?

(*) PBKDF2 se usa normalmente con HMAC, la contraseña es la clave HMAC. En HMAC, si la clave es más grande que el "tamaño de bloque" de la función hash interna, primero se procesa, y el valor de hash resultante se usa como clave.

    
respondido por el Thomas Pornin 21.03.2013 - 02:36
fuente

Lea otras preguntas en las etiquetas