Contraseña hash
¿Sabes qué es y en qué consiste el hashing para contraseñas? En el mundo de la programación, en algún punto te encontrarás con algún sistema de gestión de contraseñas y es importante que tengas conocimientos básicos sobre cómo almacenarlas.
En este ámbito se cometen comúnmente muchos errores, lo cual representa una amenaza para la privacidad de los usuarios de una aplicación. En este post, hablaremos sobre los métodos para almacenar y gestionar contraseñas de usuarios de forma segura. A continuación, te explicaremos qué es el hashing para contraseñas.
¿Qué es el hashing para contraseñas?
El hashing para contraseñas es el uso de funciones hash con el fin de mantener la seguridad y la confidencialidad de las credenciales privadas de un usuario de una aplicación.
En un sistema de login, cuando un usuario se registra en una aplicación con un nombre y una contraseña, estos valores se almacenan en una base de datos. Cada vez que la persona inicia sesión con sus credenciales, se comprueba que sus entradas de texto coincidan con sus datos de registro.
Un sistema de login solamente requiere verificar que el usuario y la contraseña de la persona que está iniciando sesión sean correctos. Pero para esto no es necesario conocer la contraseña del usuario, pues basta con tener la función hash de la misma para verificar que los datos sean iguales.
Entonces, las aplicaciones que cuentan con el servicio de registro de usuarios deben almacenar un hash de contraseña y no una versión en texto plano de la misma. De hecho, tampoco se recomienda almacenarlas encriptadas, ya que una clave secreta puede conseguirse de diferentes formas. Una función hash, en cambio, no es reversible por definición. De ese modo, se aumenta la seguridad de la información en el caso de que se filtre una base de datos.
🔴 ¿Quieres entrar de lleno a la Ciberseguridad? 🔴
Descubre el Ciberseguridad Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp en Ciberseguridad por una semanaAsí pues, para almacenar y gestionar contraseñas de usuarios de forma confidencial, es importante que, cuando estos se registre, se guarde la función hash de contraseña y no el texto plano de la misma. Sin embargo, hay que tener en cuenta que no todos los algoritmos hash se consideran seguros para criptografía.
Por lo tanto, es necesario conocer cuáles son los algoritmos para hashear contraseña. Algunos de ellos son:
- SHA-2.
- SHA-3.
- PBKDF2.
Algunos algoritmos inseguros para hashear contraseña son:
- MD5.
- SHA-0.
- SHA-1.
3 tipos de hashing para contraseñas
Existen tres tipos de hashing para contraseñas, que ofrecen diferentes niveles de ciberseguridad. Estos tipos son los siguientes:
Hashing
Las funciones hash son una medida de seguridad que cuenta con algunas debilidades. En primer lugar, están diseñadas para ser rápidas y esto puede representar una ventaja para un hacker malicioso que ejecute un ataque de fuerza bruta. Además, al ser algoritmos deterministas, se pueden precomputar tablas de códigos hash con las contraseñas más utilizadas o filtradas en bases de datos.
Este sistema no protege a las personas que tienen contraseñas demasiado fáciles, como «1234«, «0000«, «contraseña«, «qwerty«, etc., ya que estas se pueden descubrir fácilmente por medio de ataques de diccionario o de fuerza bruta. Tampoco protege a quienes escogen contraseñas extremadamente complejas, ya que estas suelen ser imposibles de romper de cualquier forma. Entonces, es un sistema que protege, sobre todo, a quienes escogen contraseñas de seguridad intermedia y suelen repetirla en todas sus cuentas (lo cual no es recomendable, pero es lo más usual).
Salting
El salting es una medida de seguridad criptográfica que consiste en añadirle un factor aleatorio a cada contraseña para generar un hash más complejo. No se realiza la siguiente operación, donde H es la función hash:
H(contraseña)
En su lugar, se haría de la siguiente forma:
H(sal || contraseña)
Este método sirve para proteger, sobre todo, a usuarios que escojan contraseñas fáciles o de nivel intermedio, ya que siempre se calcula una «sal» nueva para cada contraseña de cada usuario y esta es un valor aleatorio secreto. Esto hace que sea imposible hacer ciberataques con tablas de hash y tablas arcoíris. Sin embargo, no aumenta la efectividad de contraseñas que de por sí son únicas y seguras.
Key Derivation Functions (KDF)
Una key derivation function o función de derivación de clave es un algoritmo matemático diseñado específicamente para la generación de códigos hash de contraseñas. Su funcionamiento es deliberadamente lento, con el fin de ser resistente a ataques de fuerza bruta. Además, al igual que con el método del salting, se producen códigos resistentes a ataques de tablas.
Las funciones de derivación de claves también pueden utilizarse para generar llaves de tamaño fijo a partir de contraseñas. La mayoría funciona internamente con funciones hash y su funcionamiento es el siguiente:
- Primero, se agrega «sal» a la contraseña.
- Luego, se realiza la función hash múltiples veces. Es decir, se genera el hash del código hash y así sucesivamente miles de veces, según como se programe el algoritmo. Normalmente, se puede definir manualmente el número de iteraciones del hash y lo recomendable es que sea más de 5.000.
Uno de los algoritmos hash con funciones de derivación de claves más utilizados es el PBKDF2.
Ahora conoces los conceptos básicos del hashing para contraseñas. Si quieres aprender más y convertirte en un verdadero experto en ciberseguridad, en KeepCoding tenemos la mejor opción para ti. No dude en unirte a nuestro Ciberseguridad Full Stack Bootcamp y especialízate en menos de 7 meses. ¿A qué esperas? ¡Inscríbete ya para darle un giro a tu vida laboral!