Contraseñas | Entropía y agrietamiento

Mientras navegamos por Internet, se nos solicitan nuestras credenciales de inicio de sesión en casi todos los sitios web que usamos regularmente. Una de las credenciales de inicio de sesión más importantes es nuestra contraseña o debería decir contraseñas, ya que tenemos diferentes contraseñas para diferentes cuentas (si acaba de darse cuenta de que no tiene contraseñas diferentes, continúe y cámbielas). Este artículo habla sobre contraseñas seguras, no seguras, cómo elegir una buena contraseña y cómo se pueden descifrar. Este artículo está dividido en 3 secciones. Pasemos al primero.

¿Cómo se almacenan las contraseñas?

Cada vez que crea una cuenta en un sitio web e ingresa su contraseña, esa contraseña que ingresó no se guarda en una base de datos. En cambio, se ejecuta a través de funciones pseudoaleatorias (funciones hash) que producen un hash que generalmente parece un galimatías pero que en realidad es bastante útil en términos de seguridad. En lugar de la contraseña de texto sin formato, su hash se almacena en la base de datos, de modo que si ese sitio web es pirateado y las contraseñas se filtran en línea, todo lo que obtiene es un galimatías y no la contraseña real de texto sin formato que el usuario ingresó al momento de crear su /su cuenta. Por ejemplo, nuestra contraseña es ‘geeksforgeeks’ y la ejecutamos a través de una función hash SHA256 y obtenemos el resultado como

plain-text password: geeksforgeeks
Result: f8d59362da74ffe833332dc20508f12de6da6a9298c98b3b42873e7298fced78

Cada vez que un usuario inicia sesión en el sitio web, ingresa la misma contraseña de texto sin formato en el lado del cliente que luego ejecuta las mismas funciones hash y si ese hash coincide con el almacenado en la base de datos, entonces el usuario está autorizado a usar esa cuenta.
Si un usuario diferente elige la misma contraseña, se produce una situación llamada colisión debido a que ambos hashes son iguales. En tal caso, se agrega un bit adicional de texto sin formato a la contraseña original y luego se ejecuta a través de la misma función hash generando un hash único. Al final, tanto el hash como el texto sin formato adicional se almacenan en la base de datos para reconocer al usuario en el futuro.
Este método de almacenamiento de contraseñas se puede hacer más seguro al ejecutarlas a través de iteraciones de diferentes funciones hash.

¿Se pueden romper?

A pesar de tomar todas las precauciones y mantenerse al día con las mejores prácticas de seguridad de la información, las cosas aún podrían salir mal. Si eres fanático del programa Mr. Robot como yo, entonces debes estar familiarizado con la amarga verdad de que cualquier cosa puede ser pirateada. Digamos que un sitio web se vio comprometido y todas las contraseñas de sus usuarios se filtraron en la web disponible para usted en forma de archivo de texto, pero dado que estas contraseñas se almacenaron en forma de hash, todo lo que obtuvimos en el archivo de texto fue un galimatías. Ahora hay dos métodos para descifrar estos hashes.

  1. Ataques de fuerza bruta: la mayoría de ustedes debe estar familiarizado con este tipo de ataque, ya que es el más común. Como es evidente por su nombre, prueba todas las combinaciones de contraseñas en texto plano, las ejecuta a través de la función hash y compara el galimatías obtenido con los diferentes hashes que contiene nuestro archivo de texto.
    Debes pensar que esto llevará toda una vida ejecutar todas las permutaciones a través de una función hash y luego hacerlas coincidir con el archivo de texto, pero ¿y si te dijera que el hacker tiene acceso a un servidor de alto rendimiento a través de su computadora y el servidor usa 4 de las últimas tarjetas gráficas NVIDIA que le dan la capacidad de ejecutar 40 mil millones de hash/segundo. Ahora solo se ha convertido en cuestión de segundos.
    Ahora, usando un software llamado CUDA HashCat, podemos comenzar a descifrar. Entonces, digamos que tenemos un archivo llamado test.hash que contiene todos los hashes y queremos obtener las contraseñas de 7 caracteres con letras minúsculas, ejecutamos el siguiente comando.
    ./hashcat -a 3 test.hash ?l?l?l?l?l?l?l

    a significa ataque, 3 es el modo de ataque, es decir, fuerza bruta y ?l significa letras minúsculas y repetido 7 veces significa 7 letras minúsculas. En cuestión de segundos se mostrarán en pantalla todas las combinaciones cuyo hash coincida con los de test.hash. Si queremos descifrar contraseñas de 6 minúsculas y 2 dígitos al final tenemos que escribir esto

    ./hashcat -a 3 test.hash ?l?l?l?l?l?l?d?d

    Con el aumento en el número de caracteres, se ralentiza a medida que aumenta el número de combinaciones, que se puede calcular como el número de caracteres en el conjunto de caracteres elevado a la longitud de la contraseña.

    First Example: 26^7
    Second Example: 26^6*10^2
    

    A medida que la base de búsqueda crece, se vuelve más difícil descifrar estas contraseñas, incluso para funciones hash simples como MD5 o SHA1, en tales casos, los ataques de fuerza bruta no son factibles y pasamos a los ataques de diccionario.

  2. Ataques de diccionario: tenemos un diccionario de contraseñas de uso común almacenadas en un archivo de texto y las probamos y las comparamos con los hashes obtenidos de la base de datos del sitio. Esto es mucho más eficiente que la fuerza bruta. Hay una lista de contraseñas llamada «rock you» que tiene una colección de millones de contraseñas de este tipo. Vamos a ejecutar tal ataque.
    ./hashcat -a 0 test.hash ./dictionaries/rockyou.dict

    0 significa modo de ataque de diccionario y proporcionamos la ruta a nuestro archivo de diccionario.
    Estos ataques se pueden personalizar aplicando un conjunto de reglas al diccionario y luego ejecutando los hash. Estas reglas no son más que las variaciones habituales que la gente intenta pensando que están haciendo que sus contraseñas sean más seguras. Puede ser reemplazando I por 1 o E por 3 . Digamos que tiene todas sus reglas almacenadas en un archivo llamado myrules.rule ahora si ejecutamos el ataque usando este archivo ejecutará una serie de ataques de diccionario aplicando una regla a la vez a todo el diccionario. Para eso necesitamos ejecutar lo siguiente

    ./hashcat -a 0 -r ./rules/myrules.rule test.hash ./dictionaries/rockyou.dict

Elegir una contraseña segura

El popular cómic en línea xkcd trató de representar el problema que tiene la gente para elegir y recordar contraseñas a través de una tira cómica.

Habla de la entropía de la contraseña. ¿Qué es exactamente?

Entropía de contraseña: es simplemente la cantidad de información contenida en una contraseña. Cuanto mayor sea la entropía de una contraseña, más tiempo tardará en descifrarse. Entonces, si tiene una contraseña de 6 caracteres, entonces la entropía es muy baja y puede forzarse fácilmente. Si tiene una contraseña de 10 caracteres con símbolo, entonces está a salvo de un ataque de fuerza bruta, pero aún es posible descifrarla con un diccionario.

En referencia a la tira cómica anterior, habla de «correcthorsebatterystaple» como una posible opción para una contraseña. Dado que sus 4 palabras se agregan juntas, es ‘un-brute-forcable’ . Incluso sin usar caracteres especiales, es una buena contraseña debido a su alta entropía y también es difícil de descifrar con un diccionario, pero no es imposible. En lugar de usar combinaciones de caracteres, podemos usar un ataque de diccionario con diferentes combinaciones de palabras en inglés.
Para hacerlo realmente seguro, tome 3 o 4 palabras poco comunes en inglés y pegue un carácter especial en el medio de una palabra que lo haga no resistente a la fuerza bruta y casi a prueba de diccionario. Pero si cree que todo esto es una molestia, entonces puede usar un buen administrador de contraseñas con solo una contraseña maestra para recordar.

Este artículo es una contribución de Palash Nigam . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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