Cómo se almacena su contraseña en el servidor

Supongamos que configura una cuenta en VerySecureWebsite.com. Escribe su dirección de correo electrónico y contraseña y configura su cuenta. Poco tiempo después, recibe un correo electrónico informándole que, irónicamente, el sitio web ha sido pirateado y los nombres de usuario y las contraseñas de cada usuario, que se almacenaron en texto plano, ahora están a la venta en la web oscura. Mientras comienzas a cambiar la contraseña en todas tus cuentas (solo usas una, monstruo), te preguntas: “¿No es mala idea? ¿No debería mi contraseña estar en algún tipo de código secreto para que los hackers no puedan simplemente leerla?

Estás en lo correcto. Cualquier aplicación web o servicio que utilice un sistema de inicio de sesión de nombre de usuario / contraseña debe almacenar las contraseñas de sus usuarios utilizando un hash salado, posiblemente incluso un hash lento salado, tal vez con un pimiento. Si esto comienza a sonar más como un desayuno que como una criptografía, no se preocupe: a diferencia de su contraseña (con suerte), el almacenamiento seguro de contraseñas no es un tema demasiado difícil de descifrar.

Texto sin formato y cifrado básico

contraseña-almacenamiento-texto sin formato

Nombre de usuarioContraseña ingresadaForma almacenada
Usuario involuntarioContraseña debilContraseña debil

Almacenar contraseñas de texto sin formato en una base de datos conectada a Internet es una idea bastante mala: si la base de datos es pirateada, cualquiera que haya reutilizado una de esas contraseñas ahora está en riesgo. Y todavía un número inquietante de sitios web todavía lo hace, probablemente porque las actualizaciones de seguridad son más para el cliente que para la empresa. Si desea probar si un sitio está haciendo esto, intente seleccionar la opción “contraseña olvidada”. Si solo le envían su contraseña en lugar de un enlace de restablecimiento, se almacenará en texto sin formato.

Nombre de usuarioContraseña ingresadaCifrado con clave AES-128: WeakKey
Usuario involuntarioContraseña debil38MkoXVXoKe01uAOROBLpQ ==

El cifrado puede parecer una forma sólida de almacenar contraseñas, pero en realidad es solo un paso por encima del texto sin formato. Una contraseña cifrada generalmente se puede decodificar con una clave, y si los piratas informáticos pueden encontrarla o adivinarla, la encriptación es inútil.

Hashing> cifrado

hash de almacenamiento de contraseña

Nombre de usuarioContraseña ingresadaCadena para ser hashHashed con SHA-256
Usuario inconscienteContraseña debilContraseña debil252E2406732308F9A7
B378ED94E78467D14
077D19C8282443FCD
3D6190FCABFA

Una función hash es básicamente un cifrado unidireccional: convierte la contraseña de texto sin formato en un código secreto, pero no hay una clave para volver a convertirlo, lo que significa que nunca puede derivar la contraseña real de la versión hash.

Así es como la mayoría de los sitios web seguros administran sus contraseñas:

  1. El usuario crea una cuenta
  2. La contraseña del usuario se ejecuta a través de la función hash y se almacena en la base de datos.
  3. Cada vez que el usuario inicia sesión, la base de datos aplica un hash a la contraseña que ingresaron y verifica si el hash ingresado coincide con el hash que tienen en el archivo.
  4. Si es así, el usuario puede iniciar sesión

Con un hash, la aplicación / sitio nunca almacena su contraseña real en ningún lugar, y un pirata informático que ingresa solo obtendrá una lista de letras y números que no se pueden decodificar. Dependiendo de qué tan fuerte sea el algoritmo, estos hashes pueden ser bastante difíciles de descifrar.

Sin embargo, los hashes no son a prueba de piratería. Todo lo que un atacante tiene que hacer es ejecutar un diccionario de contraseñas potenciales a través de la función hash, luego comparar esos hash con los hash de la base de datos. Cuando dos hash coinciden, el pirata informático puede ver qué contraseña generó ese hash.

Para ahorrar tiempo y poder de cómputo, muchos atacantes simplemente usan una tabla de búsqueda (o una “tabla arcoíris”, una versión que ahorra espacio de las tablas de búsqueda), una tabla pregenerada llena de contraseñas potenciales y sus valores hash. Realmente puedes intentar hash de una palabra de texto sin formato y entonces usar una tabla de búsqueda en el hash usted mismo; no es demasiado difícil. Esencialmente, si su contraseña es común, el hash de esa contraseña probablemente ya esté en una tabla de búsqueda. Esta es una gran razón para no usar contraseñas comunes.

Hashes salados> hashes

sal de almacenamiento de contraseña

Nombre de usuarioContraseña ingresadaCadena para ser hashHashed con SHA-256,
salt = XcyKn42, antepuesto
Usuario involuntarioContraseña debilXcyKn42 Débil Contraseña13EB660FF7FBD29A728FC5
92297D78DF19AFF8797363
15FBF1F1C4B7123BD10C

A diferencia de las babosas, la sal hace que los hashes sean más fuertes. Dado que todo el hash cambia incluso si solo se cambia una letra de la palabra de texto sin formato, todo lo que un sitio debe hacer para frustrar las tablas de búsqueda es agregar texto sin formato adicional a la contraseña antes de tiene hash. El atacante podrá leer la sal de texto sin formato, ya que está almacenada en la base de datos, pero lo obliga a volver a calcular todas las combinaciones posibles de posibles contraseñas y sales.

Por supuesto, los hashes salados todavía se pueden romper. Los piratas informáticos pueden simplemente agregar la sal a la contraseña que están adivinando, codificar la combinación y esperar a que aparezcan coincidencias, un ataque de diccionario estándar. Dado que las GPU modernas pueden hacer miles de millones de conjeturas por segundo, esto no es en absoluto inviable, pero hace que el proceso sea mucho más molesto. De lo contrario, los ataques de fuerza bruta son lentos pero muy efectivos.

Haciendo hash aún más fuertes: otras tácticas

pimienta-almacenamiento-contraseña

Nombre de usuarioContraseña ingresadaCadena para ser hashHashed con Bcrypt,
salt = XcyKn42, antepuesto,
12 rondas
Usuario inconscienteContraseña debilXcyKn42 Débil Contraseña$ 2y $ 12 $ 6OleutQBO2iPoNvg
pyDndOU26Lqt9Y34f6PLEOx
mCELP5GoswrJT.

Los algoritmos de hash lento, como PBKDF2 o bcrypt, utilizan una técnica conocida como “estiramiento de claves” para ralentizar los ataques de diccionario y de fuerza bruta. Básicamente, esto implica configurar la función hash para que se repita un cierto número de veces (aunque es un poco más complejo que simplemente ejecutar lo mismo una y otra vez), de modo que para alcanzar el hash correcto debe usar mucha informática poder. Si un sitio está haciendo todo esto, su seguridad es bastante buena.

Nombre de usuarioContraseña ingresadaCadena para ser hashHashed con Bcrypt,
salt = XcyKn42, antepuesto,
12 rondas,
pepper = | 4 | / | @ p3pp3r, añadido
Usuario inconscienteContraseña debilXcyKn42WeakPassword | 4 | / | @ p3pp3r$ 2y $ 12 $ njmWr5UMydCzdCE44ElW /
OIfYp2PH9sgonCATyVY.OVKSpmoSaZlu

Para mayor seguridad, también puede “condimentar” sus hashes, que con suerte ya estarán salados. Un pimiento, como una sal, es un conjunto de valores adjuntos a la contraseña antes de que sea hash. Sin embargo, a diferencia de la sal, solo hay un valor de pimienta y se mantiene en secreto, separado de las sales y los hashes. Agrega otra capa de seguridad al hash salado, pero si el atacante logra encontrarlo, ya no es muy útil ya que el atacante solo puede usarlo para calcular nuevas tablas de búsqueda.

No hagas un hash de tu hash

La seguridad de las contraseñas ha logrado grandes avances, al igual que el arte de romper esa seguridad. Desafortunadamente, los humanos todavía son malos en la administración de contraseñas y las bases de datos no actualizan la seguridad con la frecuencia que deberían. En general, suponga que cada vez que crea una cuenta, la contraseña se almacena con una seguridad relativamente débil. Si su contraseña es común o es una palabra de diccionario, entonces tiene un riesgo bastante alto de ser descifrada. Haga que sus contraseñas sean largas, mezcle letras, números y símbolos, y ayudará a que las funciones hash hagan su mejor trabajo.

Créditos de imagen: Función hash

¿Es útil este artículo?

¡Ayúdanos a correr la voz!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *