El papel de las funciones hash en la seguridad de las contraseñas
Publicado el: 24 Feb 2024
Última modificación: 23 Sep 2025
Las funciones hash desempeñan un papel crucial en la seguridad de las contraseñas de los servicios web seguros. Estos servicios nunca almacenan su contraseña real, sino una versión hash de la misma. Las funciones hash son algoritmos que convierten los datos de entrada (como una contraseña) en una cadena de caracteres de tamaño fijo. Este proceso es irreversible, lo que significa que es casi imposible obtener la entrada original a partir del hash. Cuando usted se conecta, el servicio somete a hash la contraseña que le proporciona y la compara con el hash almacenado. De este modo, aunque se produzca una violación de datos, los piratas informáticos no pueden acceder a las contraseñas en texto plano, lo que mejora la seguridad general.
Un procedimiento de inicio de sesión poco sofisticado
Veamos primero cómo sería un procedimiento de inicio de sesión poco sofisticado. Nos conectamos a un servicio web de la forma habitual con un nombre de cuenta y una contraseña:

Nuestro poco sofisticado servicio web tiene una tabla en su base de datos con todos los nombres de cuenta y sus contraseñas asociadas:

El servicio web busca primero el nombre de la cuenta del formulario de inicio de sesión cumplimentado en su base de datos. Si el nombre existe en la base de datos, entonces el servicio también compara la contraseña del formulario de inicio de sesión con la contraseña asociada en la base de datos. Si las contraseñas coinciden, se lleva a cabo el registro. En caso contrario, se deniega el registro. A primera vista, se trata de un procedimiento de inicio de sesión seguro. Sólo aquellos que estén en posesión de un nombre de cuenta válido y conozcan la contraseña asociada pueden acceder a la cuenta correspondiente. A todos los demás se les deniega. Hasta aquí, todo correcto. Pero, ¿qué es exactamente lo poco sofisticado de este procedimiento?
El problema es que las contraseñas se almacenan en una base de datos. Esto significa que son potencialmente conocidas por cualquiera que tenga acceso a la base de datos, incluidos los operadores del servicio web y sus empleados. Además, en la actualidad es una práctica habitual que muchas empresas subcontraten el funcionamiento real de los servicios web que ofrecen a proveedores estadounidenses de computación en nube, como Amazon Web Services o Google Cloud. Por lo tanto, podemos suponer que, en principio, los operadores y empleados de estos proveedores de computación en nube también tienen acceso a la base de datos y, por lo tanto, a nuestra contraseña. Además, por supuesto, los delincuentes también podrían acceder sin autorización a los datos de la base de datos.
Además, no es ningún secreto que la mayoría de los usuarios de servicios web reutilizan la misma contraseña para varios servicios. Por lo tanto, quien haya podido obtener la contraseña de la cuenta de Facebook/Twitter o de la agencia de viajes en línea de un objetivo tendrá también, con un poco de suerte, la contraseña de su correo electrónico, de su banca en línea, de su agenda personal, de una plataforma de citas y de la intranet de la empresa en la que trabaja el objetivo. El incentivo económico para robar contraseñas de la base de datos de cualquier servicio web es correspondientemente alto, ¡incluso si este servicio web en sí no es un objetivo lucrativo! La pregunta es: ¿cómo resolver este problema?
Un procedimiento de inicio de sesión más sofisticado
Recordemos: El servicio web descrito anteriormente tiene una tabla en su base de datos con todos los nombres de cuenta y las contraseñas asociadas:

Adaptamos esta tabla de la siguiente manera. En lugar de almacenar las contraseñas, aplicamos a las contraseñas una función hash criptográfica de nuestra elección:

A continuación, en lugar de las contraseñas, almacenamos los valores hash resultantes en la base de datos:

Esto cambia sólo ligeramente el procedimiento de inicio de sesión. Seguimos iniciando sesión de la forma habitual con un nombre de cuenta y una contraseña:

En primer lugar, el servicio web vuelve a buscar en su base de datos el nombre de cuenta del formulario de inicio de sesión cumplimentado. Pero en el siguiente paso, el nuevo procedimiento difiere. Si el nombre existe en la base de datos, entonces se aplica la función hash a la contraseña de la pantalla de inicio de sesión. Sólo entonces se compara el valor hash resultante con el valor hash correspondiente en la base de datos. Una vez más, las contraseñas ya no se comparan entre sí, sino sólo sus valores hash. Si los valores hash coinciden, se lleva a cabo el inicio de sesión. En caso contrario, se deniega el inicio de sesión.
Aparte del uso de la función hash, nada ha cambiado en el procedimiento de inicio de sesión. De las propiedades de las funciones hash criptográficas se deduce que comparar los valores hash es tan bueno como comparar directamente las contraseñas. Pero ahora, las propias contraseñas ya no se almacenan en la base de datos del servicio web. Cualquiera que acceda a la base de datos -autorizado o no- ya no tiene acceso a las contraseñas, sino sólo a sus valores hash. El incentivo económico descrito anteriormente para robar las contraseñas de la base de datos de un servicio web queda así eliminado porque ahora las contraseñas ya no están contenidas en la base de datos.
Cómo funcionan las funciones hash en la práctica
Esperamos haber podido explicar mejor cómo es posible y por qué es una práctica habitual que los servicios web seguros ni siquiera conozcan las contraseñas que utilizamos al iniciar sesión. En la práctica, la seguridad de este procedimiento se incrementa aún más generando los valores hash con una función hash criptográfica especializada(bcrypt) y vinculándolos además con una cadena de caracteres secretos (sal) para toda la base de datos antes de aplicar esta función hash.
Si ha olvidado su contraseña para un servicio web, puede solicitar un restablecimiento de contraseña en la mayoría de los servicios web. Recibirá entonces un correo electrónico con un enlace que le llevará a un formulario donde podrá establecer una nueva contraseña. Ahora sabemos por qué esto se maneja de forma tan torpe: el servicio web no conoce su antigua contraseña. Por desgracia, aún no todas las empresas siguen esta práctica de seguridad establecida. Si indica por correo electrónico o en una llamada telefónica con un equipo de asistencia que ha olvidado su contraseña y luego le dicen realmente cuál es, puede concluir que esta empresa no se atiene a las normas modernas de seguridad de la información. A más tardar, entonces, debería asegurarse de no utilizar esta contraseña en ningún otro contexto. Para utilizar sistemáticamente una contraseña distinta para cada servicio web, debería utilizar un gestor de contraseñas. Así, ya no tendrá que recordar montones de contraseñas individuales y tendrá la ventaja añadida de poder crear contraseñas aleatorias de alta calidad en su lugar. Existen complementos del navegador web para los gestores de contraseñas más conocidos que incluso rellenan por usted las pantallas de inicio de sesión de sus servicios web. Pocas veces la comodidad y la seguridad se encuentran tan bien.
Integrar la seguridad de las contraseñas y las funciones hash en su formación personal en ciberseguridad
En conclusión, las funciones hash desempeñan un papel crucial a la hora de mantener las contraseñas a salvo de los ciberataques. Sin embargo, su eficacia depende mucho de lo bien que la gente entienda y gestione sus contraseñas. Aquí es donde entra en juego la formación en ciberseguridad. Enseñando a la gente a crear contraseñas seguras y a mantenerse alerta ante las amenazas en línea, todos podemos contribuir a mantener segura nuestra información personal. Recuerde, mantenerse seguro en línea es un esfuerzo de equipo, y un poco de conocimientos prácticos ayuda mucho a protegernos en el mundo digital.