XUT_ / COURSES / CYBER SECURITY 101

Using Hashing for Secure Password Storage

Usar Hashing para Guardar Contraseñas

Aquí es donde entra el hashing. ¿Qué pasa si en vez de guardar las contraseñas guardásemos el valor hash con una función segura? Esto implica que nunca tienes que guardar la contraseña de un usuario y que si se filtra, el atacante lo tendrá muy complicado para saber cuál es.

Sólo hay un problema con esto. ¿Qué pasa si dos usuarios tienen la misma contraseña? Eso quiere decir que si un atacante rompe uno de los hashes, automáticamente gana acceso a más de una cuenta. También quiere decir que alguien puede crear una Rainbow Table para romper los hashes.

Una tabla arcoiris es una tabla de consulta de conversión de hash a texto plano. Páginas como CrackStation y Hashes.com usan masivas tablas arcoiris para ofrecer una manera rápida de crackear contraseñas en hashes sin salts.


Protección contra Tablas Arcoiris

Para protegernos contra estas tablas, añadimos sal a las contraseñas. Esto es un número generado aleatoriamente y único para cada usuario guardado en la base de datos.

Cada uno de estos valores es añadido al inicio o al final de cada una de las contraseñas.Funciones hasheadoras como Bcrypt y Scrypt manejan esto automáticamente. Las salts no necesitan ser privadas.


Ejemplo de Guardado Seguro de Contraseñas

Considera comprobar si existe algún estándar sobre almacenaje de contraseñas en tu región antes de hacerlo. Considera esto un ejemplo de buenas prácticas de seguridad al almacenar contraseñas:

  1. Seleccionamos una función hasheadora segura, como Argon2, Scrypt, Bcrypt, o PBKDF2.
  2. Añadimos una única salt a la contraseña, como Y4UV*^(=go_!.
  3. Calculamos el hash de la contraseña combinada con la salt. En este ejemplo usaremos AL4RMc10kY4UV*⁽=go_!.
  4. Guardamos el valor hash y la salt única usada (Y4UV*^(=go_!)

Usar Encriptación para guardar Contraseñas

Considerando el problema para guardar contraseñas, ¿por qué no encriptamos las contraseñas y ya? El problema con esto es que necesitaríamos guardar con ellas la clave de desencriptación, y si alguien consiguiese acceso sería todavía más fácil conseguirlas.