¿Cómo son descifradas tus contraseñas? ¿Cómo mejorar la seguridad de las contraseñas?
En este artículo, hemos presentado varios métodos clásicos para descifrar contraseñas, junto con los principios subyacentes detrás de estos enfoques. Abordando estos conceptos, hemos proporcionado prácticas tanto desde la perspectiva de los custodios de contraseñas como de los propietarios de cuentas sobre cómo mejorar la seguridad de las contraseñas.
A menudo vemos noticias de que se filtran las contraseñas de algunos usuarios de aplicaciones conocidas con una gran base de usuarios. Puede que sientas que, ya que no usas esa aplicación específica, tales incidentes no tienen nada que ver contigo, pero ese no es el caso en la realidad.
Recientemente, también hubo noticias en Twitter de que los métodos de inteligencia artificial pueden acelerar enormemente la velocidad de descifrado de contraseñas. Así que quisimos comprender las complejidades detrás de esto y ver cómo podemos mejorar la seguridad de nuestras contraseñas.
¿Cómo son descifradas las contraseñas?
En general, las contraseñas de las cuentas se procesan normalmente utilizando varios algoritmos de hash y luego se almacenan en bases de datos. Puedes consultar nuestro blog anterior para obtener una mejor comprensión del hashing de contraseñas. Lamentablemente, algunos proveedores de servicios, faltos de sentido común, almacenan contraseñas en texto plano dentro de sus bases de datos. Esta práctica puede resultar en daños aún más significativos si los datos se filtran.
Al guardar las contraseñas con hash, incluso los administradores de bases de datos no pueden acceder a tu contraseña original, lo que mejora significativamente la seguridad. Al verificar la corrección de una contraseña ingresada, se utiliza el mismo algoritmo hash para procesar la contraseña ingresada. El hash resultante se compara con el valor almacenado en la base de datos. Si los dos valores hash coinciden, se considera que la contraseña ingresada es correcta.
En términos simples, el descifrado de contraseñas implica generar cadenas que se adhieren a las reglas permitidas de contraseña. Luego, implica verificar continuamente estas cadenas mediante el método mencionado anteriormente para finalmente descubrir la contraseña de texto plano correcta.
Métodos comunes para descifrar contraseñas
En esta sección, introduciremos brevemente tres formas comunes de descifrar contraseñas.
Ataque de fuerza bruta
Los ataques de fuerza bruta generalmente enumeran todas las posibilidades dentro de las reglas de contraseña permitidas y las prueban una por una.
Por ejemplo, los teléfonos móviles pueden establecer una contraseña numérica de 4 dígitos. Los ataques de fuerza bruta probarán todas las posibilidades una por una desde 0000
, 0001
, 0002
, ..., hasta 9999
.
Los ataques de fuerza bruta consumen mucho tiempo, porque hay demasiados intentos. Suponiendo que la longitud de la contraseña sea $L$ y el número de caracteres posibles por dígito de contraseña sea $n$, entonces el número de posibilidades que los ataques de fuerza bruta necesitan probar es $n^L$, que es un número muy grande.
La razón por la que muchas contraseñas requieren una combinación de números, letras mayúsculas y minúsculas, y caracteres especiales es para aumentar $n$, lo que aumenta enormemente el número de posibilidades, aumentando así la dificultad de descifrar la contraseña.
Ataque de diccionario
Los ataques de diccionario utilizan palabras de diccionarios, a menudo combinadas con espacios, números, símbolos especiales y otros elementos, para formar diversas combinaciones de contraseñas. Estas combinaciones se utilizan luego para intentar coincidir contraseñas.
Muchas personas optan por usar frases con significados claros como contraseñas por facilidad de recuerdo. Los ataques de diccionario demuestran ser un método eficiente para descifrar contraseñas con tales características.
Ataque de tabla arco iris
Una tabla arco iris es un mapeo precomputado de contraseñas de texto plano a sus valores hash correspondientes. Al comparar directamente los valores hash almacenados en la base de datos con los de la tabla arco iris, cualquier coincidencia encontrada se puede usar para buscar y recuperar directamente la contraseña de texto plano correspondiente.
Las tablas arco iris ofrecen la ventaja de proporcionar acceso inmediato a las contraseñas de texto plano si el valor hash ha sido precalculado (y registrado en la tabla arco iris). Sin embargo, es importante señalar que si el valor hash no ha sido precomputado (y por lo tanto no está presente en la tabla), no se puede utilizar una tabla arco iris.
Además de los métodos descritos anteriormente, existen numerosas otras técnicas no cubiertas aquí. Generalmente, se emplea una combinación de estos métodos para abarcar todas las contraseñas posibles y acelerar el proceso de descifrado.
¿Cómo acelerar el descifrado de contraseñas?
En la sección anterior, presentamos brevemente algunos métodos clásicos de descifrado de contraseñas. De ellos, podemos resumir algunas ideas para mejorar la velocidad o tasa de éxito del descifrado de contraseñas.
Para descifrar una contraseña, a menudo se involucran dos pasos:
- Determinar el espacio de búsqueda para la contraseña (generar posibles contraseñas)
- Usar el algoritmo hash para generar hashes para las posibles contraseñas obtenidas en el paso anterior, y compararlas con el hash de la contraseña a descifrar
El ataque de diccionario y el ataque de tabla arco iris mencionados anteriormente optimizan estos dos pasos respectivamente:
- El ataque de diccionario reduce el espacio de búsqueda de contraseñas. Basándose en la suposición de que "los usuarios tienden a crear contraseñas usando combinaciones de palabras con significados reales", palabras como
zzzz
no se incluyen en el diccionario, lo que significa que no se intentarán como posibles contraseñas. Esta práctica es similar a descartar preventivamente respuestas incorrectas. Análogo a abordar preguntas de opción múltiple, aunque no puedas estar seguro sobre la opción correcta, puedes identificar qué elecciones son definitivamente incorrectas. Al eliminar estas opciones obviamente incorrectas, tus posibilidades de adivinar correctamente entre las opciones restantes se mejoran. - El ataque de tabla arco iris acelera el tiempo de ejecución del algoritmo hash. Para individuos bien versados en estructuras de datos, la búsqueda es una operación de complejidad $O(1)$, y ninguna operación puede ser más simple que $O(1)$ en términos de complejidad temporal. En contraste, la complejidad temporal de los algoritmos hash comúnmente usados como MD5 y SHA son $O(n)$, que es notablemente más lenta que $O(1)$.
En la práctica, optimizar el proceso de descifrado de contraseñas también comienza desde las dos perspectivas mencionadas anteriormente. Vale la pena mencionar que debido al relativamente pequeño margen para optimizar la $O(n)$ complejidad temporal para algoritmos de hashing de cadenas, se tienen en cuenta más consideraciones para mejorar el hardware o los métodos de computación, que no se explicarán aquí.
Entonces, ¿cómo ayuda la inteligencia artificial a descifrar contraseñas?
En todo el esfuerzo de descifrado de contraseñas, el rol de la inteligencia artificial se extiende a aprender ciertos patrones y métodos de construcción de las contraseñas en texto plano expuestas. Posteriormente, la inteligencia artificial puede simular estos patrones de construcción de contraseñas para generar un montón de posibles contraseñas. Luego de esto, la inteligencia artificial puede emplear algoritmos de hashing o incluso hardware especializado para ejecutar el descifrado de contraseñas.
De hecho, en comparación con otras herramientas de descifrado de contraseñas, la ventaja matadora de PassGAN es que puede "adivinar las contraseñas más probables lo más rápido posible", que es la idea de "reducir el espacio de búsqueda de contraseñas posibles" que mencionamos anteriormente.
¿Cómo hacer que la contraseña sea más segura?
Explicaremos cómo proteger las contraseñas desde dos perspectivas. Aquí simplemente comenzamos desde la propia contraseña, sin discutir otros medios para garantizar la seguridad de la cuenta, como la autenticación multifactor (MFA) y así sucesivamente.
Desde el lado de los proveedores de servicios de identidad
Como proveedores de servicios de identidad, alojan las contraseñas de todos los usuarios, lo que les confiere la responsabilidad de salvaguardar la seguridad de estas contraseñas. Aquí hay varios esquemas que se pueden implementar para mejorar la seguridad de las contraseñas de los usuarios:
-
Evitar el almacenamiento de contraseñas en texto plano: Aunque esto pueda parecer sentido común, algunos proveedores de servicios aún almacenan contraseñas en texto plano dentro de sus bases de datos. Usar valores hash para almacenar contraseñas agrega una capa de seguridad; incluso si la base de datos es comprometida, los hackers necesitarían un esfuerzo considerable para descifrar las contraseñas con hash.
-
Aplicar límites de tasa a la interfaz de API para la verificación de contraseñas: Vamos a revisar el proceso de descifrado de contraseñas mencionado anteriormente. Una parte integral de este proceso involucra "verificar" si una contraseña es correcta. Dado que las contraseñas son confiadas a los proveedores de servicios de identidad, son las únicas entidades equipadas para ofrecer API para la verificación de contraseñas. Al limitar la frecuencia de acceso a esta API, podemos impedir que los hackers intenten rápidamente varias contraseñas, incluso si poseen conjeturas de contraseñas altamente probables.
-
Imponer composiciones de contraseña más complejas: Por ejemplo, como se mencionó anteriormente, una mayor variedad de caracteres dentro de contraseñas de una longitud determinada contribuye a una mayor complejidad. Además, emplear técnicas de inteligencia artificial similares a las discutidas anteriormente permite la evaluación de la seguridad de la contraseña antes de su envío. Si se considera que una contraseña es débil, se puede advertir a los usuarios y animarles a elegir una alternativa más robusta.
Desde la perspectiva de los usuarios
Como propietarios de cuentas y activos digitales asociados, los usuarios necesitan prestar la máxima atención para garantizar la seguridad de las contraseñas de sus cuentas.
-
Evitar usar la misma contraseña en diferentes sitios web: Después de obtener contraseñas de ciertos sitios web, muchos hackers intentan utilizar esas credenciales de cuenta para acceder a otros sitios web. Si múltiples cuentas para diferentes servicios comparten la misma contraseña, podría haber un riesgo de perder cuentas y experimentar filtraciones de información en el escenario mencionado anteriormente.
-
Optar por contraseñas puramente aleatorias siempre que sea posible: Este enfoque ayuda a prevenir el uso repetido de patrones de contraseña comunes que la mayoría de las personas emplean (como se mencionó anteriormente, usar oraciones en inglés), dificultando así los esfuerzos de los hackers para "reducir el espacio de búsqueda de contraseñas" y aumentando el nivel de complejidad de la contraseña.
Como proveedor de infraestructura para servicios de identidad, Logto ha implementado muchas de las mejores prácticas mencionadas anteriormente para salvaguardar la seguridad de la cuenta del usuario. Esto permite a los usuarios interactuar con varias aplicaciones sin la preocupación de perder sus cuentas, al mismo tiempo que permite a los proveedores de servicios en línea garantizar la seguridad de los datos de los usuarios con un esfuerzo mínimo, permitiéndoles así concentrarse en sus actividades comerciales principales.