Proteger las contraseñas de los usuarios

Proteger las contraseñas de los usuarios que almacenamos es una obligación.

 

Hay diferentes maneras de no guardar nuestras contraseñas en texto plano, pero unas son más preferibles que otras.

Existen las funciones de encriptación, en las que por medio de una clave o una clave pública y una privada se codifican los datos. Con esa misma clave se puede volver a obtener el dato original.

También existen las funciones de codificado mediante hash. Este sistema usa algoritmos que aseguran que con el resultado nunca se podrá volver a obtener el dato original. Por eso son conocidas como funciones unidireccionales.

Usar este método para proteger las contraseñas es muy recomendable debido a que la gente tiene la mala costumbre de usar la misma contraseña para todas sus cuentas, por lo que nuestra obligación es proteger ese dato, para que aunque nuestra base de datos sea atacada, no puedan obtener la información original y usarla en otras plataformas.

Otra ventaja de la encriptación mediante hash es que un pequeño cambio en la cadena que quieres proteger da una cadena totalmente distinta, lo cual es muy efectivo para evitar algunas técnicas de ataque.

Es importante que la función que codifica haga que un ataque sea muy lento, pero de manera que no afecte en la comprobación de un solo usuario. Visita este post, si necesitas más información sobre el valor adecuado de los saltRound.

 

Proteger la contraseña no es una tarea fácil. Estar codificada mediante el hash no hace imposible un ataque. Pero existen algunas técnicas que hacen que los ataque sean menos efectivos.

Muchas de las técnicas de ataques a base de datos funcionan porque dos contraseñas idénticas se guardan con el mismo valor en bbdd, lo que permite usar lookup tables or rainbow tables. Una de las técnicas más utilizadas para atacar la base de datos es generar una lista de todas las contraseñas más usadas codificadas mediante un algoritmo, para luego comparar estos resultados con los de la base de datos atacada y si alguna coincide, pues se conocería la contraseña.

Proteger las contraseñas utilizando un salt

Añadir salt a alas contraseñas

Una forma de prevenir este problema es utilizar un salt, que es una cadena que añadiremos a la contraseña antes de ser hasheada, para que el resultado no sea el esperado por ese tipo de ataques.

hash (contraseña + salt)

Pero no debemos añadir un salt genérico para todos los usuarios, porque si ese salt quedara expuesto podrían usarlo de la manera arriba comentada para obtener las contraseñas. Por ello, el salt debe ser una cadena aleatoria para cada usuario, y distinta cada vez que se modifique la contraseña.

Para comprobar si la contraseña es correcta cuando un usuario se autentica, vamos a necesitar el salt, por eso este dato se debe guardar en la base de datos junto con la contraseña hasheada. Hay lenguajes que tienen métodos o librerías para realizar estas gestiones como bcrypt de python o phpPuede asustar que el salt no sea secreto, pero sólo siendo aleatorio hay una serie de técnicas de hackeo que se hacen ineficientes.

Hay algunas factores a tener en cuenta cuando hablamos de salt. La primera es que el salt tampoco debe ser muy corto para que no merezca la pena intentar adivinarla. La segunda es que los salt deben generarse usando un generador de números pseudo-aleatorios criptográficamente seguro (CSPRNGs). Como ya hemos comentado, existen librerías con métodos  para generar un salt seguro.

 

Proteger las contraseñas usando pepper además

Proteger las contraseñas añadiendo pepper

Además del salt, también se puede añadir pepper a nuestra contraseña. El pepper es una cadena fija para todos los usuarios, la cual, en vez de estar en base de datos está guardado en el código. Esto es útil cuando la base de datos y la aplicación web se ejecutan en diferentes servidores. Un ataque puede haber corrompido la base de datos, pero no donde se encuentra guardado el pepper.

hash (contraseña + pepper + salt)

Cómo ya hemos visto el pepper sólo no es suficiente, pero junto al salt, se hacen ineficientes unos cuantos modos de ataque.
Estas son algunas de las técnicas más comunes para proteger las contraseñas de nuestros usuarios.

 

 

Artículos relacionados

Encriptación de password en NodeJS y MongoDB: bcrypt

Deja un comentario

¿Necesitas una estimación?

Calcula ahora

Centro de preferencias de privacidad

Cookies propias

__unam, gdpr 1P_JAR, DV, NID, _icl_current_language

Cookies de analítica

Estas cookies nos ayudan a comprender cómo los usuarios interactúan con nuestra página web.

_ga, _gat_UA-42883984-1, _gid, _hjIncludedInSample,

Cookies de suscripción

Estas cookies se utilizan para ejecutar funciones de la Web, como no mostrar el banner publicitario y / o recordar la configuración del usuario dentro de la sesión.

tl_3832_3832_2 tl_5886_5886_12 tve_leads_unique

Otra