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 ?