Recientemente escribí una pequeña biblioteca de javascript que te permite verificar los hashes de contraseña del servidor de identidad en nodeJS. Mientras realizaba la investigación, aprendí que el tipo de hash, las iteraciones y la longitud de sal se codifican agregando bytes adicionales al hash final que se proporciona en base64 posteriormente.
Específicamente, el orden es siempre el mismo y al leer los 25 bytes iniciales de datos, aprende todo sobre cómo se codificó la subclave. Aquí hay un ejemplo que incluye el ejemplo de inserción.
this.writeNetworkByteOrder(outputBytes, 1, 1);
this.writeNetworkByteOrder(outputBytes, 5, 10000);
this.writeNetworkByteOrder(outputBytes, 9, salt.length);
function() writeNetworkByteOrder(buffer, offset, value){
buffer[offset + 0] = value >> 0;
buffer[offset + 1] = value >> 8;
buffer[offset + 2] = value >> 16;
buffer[offset + 3] = value >> 24;
}
¿Es esta práctica común? ¿Debo intentar evitar el uso de la contraseña predeterminada que se proporciona con el servidor de identidad? ¿Cuánto se da al conocer esta información?
Por qué esto no es un duplicado
Mi pregunta es específicamente sobre la codificación que ocurre en el hash resultante. Este es el hash base64 que es el resultado de la operación del servidor de identidad. Siempre que sepa que el hash es base64 puede leer fácilmente el tipo de cifrado, las iteraciones y la longitud de sal directamente desde él. Quiero saber cómo o si esto es seguro y si se considera una buena práctica de seguridad.