La contraseña normalmente se envía en texto sin formato a través de una conexión cifrada al servidor. El servidor luego calcula el hash de la contraseña y lo compara con la entrada en la base de datos.
El hash y la sal se almacenan en la base de datos juntos. La función hash está codificada en la aplicación. Para las aplicaciones que admiten múltiples funciones hash (generalmente para cambiar la función hash en el futuro) puede haber una marca para sugerir qué algoritmo se usó para esa contraseña en particular. El formato de almacenamiento de hash también puede ofrecer pistas sobre qué algoritmo se usó (la longitud de hash puede ser un indicador. Formatos como bcrypt almacenan los detalles de lo que se usa directamente). Alternativamente, alguien con una copia de las tablas de la base de datos de autenticación puede intentar contraseñas comunes con una variedad de algoritmos hasta que encuentre un hash que existe.
cuando un pirata informático trata de encontrar la contraseña con hash, la función salt y la función hash
Esto no es cierto. Un hacker que haya obtenido una copia de las tablas de la base de datos de autenticación puede intentar revertir los hashes. Esto es útil porque muchos usuarios reutilizan las credenciales. Hay muchas formas de obtener una copia de las tablas, incluidas, entre otras, la búsqueda de un canal explotable para obtener un shell (indicador de comando / terminal donde puede ejecutar comandos directamente) en el servidor, inyección de SQL , la base de datos está abierta a Internet con credenciales predeterminadas o un desarrollador cansado que ingresa accidentalmente tokens a un repositorio público de Git.
Para hacerlo, normalmente intentaría grandes listas de contraseñas comunes, palabras comunes del diccionario y para ~ 9 caracteres una fuerza bruta completa. Esto generalmente resulta en la reversión de un gran porcentaje de los hashes disponibles.