PrivacyTools.io

Hashing y autenticación: ¿cómo se almacenan tus contraseñas en los sitios web?

Hashing y autenticación: ¿cómo se almacenan tus contraseñas en los sitios web?

Es importante que, cuando aprendemos sobre cifrado y lo usamos junto con contraseñas fuertes, también echemos un vistazo a cómo se almacenan estas contraseñas en el servidor del sitio web. El problema es que, una vez que envías algo a un servidor, queda fuera de tu control a menos que operes el servidor tú mismo. Por eso es importante que los propietarios de servidores almacenen la menor cantidad de información posible en el servidor, salvo que esté en un formato ilegible y cifrado.

Las inyecciones SQL y las brechas en bases de datos pueden exponer cualquier cosa en texto plano, y son sucesos sorprendentemente comunes. El hashing es similar al cifrado, pero entra en juego a la hora de almacenar contraseñas de forma segura. Cuando te registras en muchos sitios web, toman tu contraseña y la almacenan en el servidor, de modo que cada vez que inicias sesión simplemente compara las dos contraseñas y, si son iguales, te deja entrar. Sin embargo, esto es increíblemente inseguro incluso con SSL implementado.

Los buenos sitios web y servidores (que deberían ser la mayoría a estas alturas) aplican hashing a tus contraseñas antes de enviarlas al servidor, lo que básicamente significa almacenarlas de forma revuelta. Se hace habitualmente mediante lo que llamamos “algoritmos de hashing”, como SHA256 o SHA512. Como nota al margen, esos son dos algoritmos de hashing comunes que a menudo van acompañados de PBKDF2 (que se usa para el key stretching https://www.schneier.com/cryptography/paperfiles/paper-low-entropy.pdf con el fin de frustrar los intentos de fuerza bruta). Luego, la próxima vez que inicies sesión en el sitio, tu navegador convierte la contraseña en esa misma cadena de caracteres aleatorios y la coteja con la cadena de caracteres aleatorios que tiene almacenada en el servidor. Si ambas coinciden, quedas autenticado y se te permite entrar en tu cuenta.

Profundizando un poco más en el key stretching y PBKDF2, hay un término relacionado conocido como Iteraciones de Contraseña o Recuento de Iteraciones que define la potencia de cómputo que hay que emplear entre los intentos de contraseña. Cuanto mayor sea el número de rondas utilizadas, más seguro será tu cuenta, tu cifrado o tu contraseña. Las empresas también pueden añadir un salt al hash, que agrega una cadena aleatoria de caracteres al final y frustra activamente los ataques de diccionario (https://en.wikipedia.org/wiki/Salt_%28cryptography%29). Como referencia, aquí se enumeran los recuentos de iteraciones predeterminados de 4 servicios y aplicaciones comunes:

  • LastPass: 5.000 (del lado del cliente) + 100.000 más (del lado del servidor)
  • TrueCrypt: 1000
  • VeraCrypt: 500.000
  • FileVault2: 41.000