El tipo de contraseña que debe crear tiene mucho que ver con cómo se almacena la contraseña.

Hace años, las contraseñas aleatorias de ocho caracteres que consistían en letras mayúsculas y minúsculas, símbolos y números eran realmente difíciles de descifrar. En algunos casos, tal contraseña tardó años en descifrarse.

Gracias a la tecnología cambiante de hoy y las máquinas rentables, este tiempo se ha reducido a horas. Pero, ¿cómo se almacenan estas contraseñas en primer lugar?

Cómo se almacenan las contraseñas en línea

Los sistemas no almacenan las contraseñas de los usuarios directamente en archivos o bases de datos, porque los atacantes pueden apoderarse de la base de datos donde los sistemas guardan las contraseñas. En su lugar, los sistemas cifran las contraseñas de los usuarios y los atacantes encuentran una versión cifrada de cada contraseña.

Hay algunos algoritmos que utilizan los sistemas para cifrar contraseñas. Uno de estos algoritmos es el algoritmo simétrico. El algoritmo simétrico es un tipo de encriptación

instagram viewer
donde puede usar la misma clave tanto para el cifrado como para el descifrado. La clave que utilizará para cifrar los datos es la misma tanto para el cifrado como para el descifrado. La seguridad de los algoritmos simétricos conlleva algunos riesgos, ya que solo hay una clave para el descifrado. Por esta razón, los sistemas generalmente no usan algoritmos simétricos para el cifrado de contraseñas.

Generalmente, el método que utilizan los sistemas para el cifrado son los algoritmos hash. Los algoritmos hash son para verificar y representar la integridad de los datos, no para cifrarlos. Los algoritmos hash convierten los datos en un hash de tamaño fijo. Estos hash generalmente representan un hash único de datos.

Gracias al algoritmo hash, si un atacante se ha apoderado de la base de datos de contraseñas, el atacante no puede acceder a la contraseña desde aquí. Hay un matiz muy importante al que debes prestar atención aquí. Teóricamente, un atacante que compromete un sistema que utiliza el mismo algoritmo hash para todas las combinaciones de contraseñas puede comparar los resultados obtenidos. Si el atacante produce el mismo valor como resultado de estas comparaciones, el atacante ha descubierto cuál es la versión abierta de la contraseña. Este método tiene que ver con prueba y error, y esta forma de ataque es generalmente llamado ataque de fuerza bruta.

A principios de la década de 2000, podía llevar cientos de años probar todas las combinaciones de contraseñas de 8 caracteres cifradas con algoritmos hash populares. Por supuesto, esto no incluye combinaciones muy simples como "123456" o "mypassword" en este conjunto. Con el desarrollo de las tecnologías de software y hardware actuales, el método para descifrar contraseñas también ha cambiado mucho.

El impacto de las GPU emergentes

Las capacidades de procesamiento de datos en paralelo de los procesadores gráficos (GPU) han mejorado con el tiempo. Las GPU no son capaces de realizar operaciones versátiles como las CPU de uso general. Así que aunque hay tantos núcleos y poder de procesamiento paralelo, no tiene sentido usarlos para casi todos los problemas como UPC.

Sin embargo, es posible realizar algunos algoritmos hash utilizados para contraseñas de manera bastante eficiente en la GPU. Los hashes computables por segundo que puede lograr con las CPU tradicionales han crecido enormemente con las nuevas plataformas de GPU.

Para tener una idea, examine los números hash por segundo de algoritmos hash como NTLM, MD5 y SHA1 en la siguiente tabla. Es suficiente, por ahora, saber que estos algoritmos son solo un algoritmo hash. Para crear esta tabla, utilicé un sistema de clúster que consta de 25 GPU AMD Radeon.

Algoritmo

Hashing por segundo

NTLM

350.000.000.000

MD5

180.000.000.000

SHA1

63.000.000.000

SHA512Cripta

364.000

Bcript

71.000

cripta

33.000

Como puede ver, con un sistema de este tipo, puede generar hashes NTLM 350 mil millones de veces por segundo. Esto significa que puede probar todas las combinaciones de una contraseña de 8 caracteres en menos de 6 horas. Además, el hardware de este ejemplo pertenece a años atrás. Imagine el poder actual para descifrar contraseñas.

¿Qué deben hacer los desarrolladores de software?

La forma en que los programadores deben actuar es bastante simple: deben preferir algoritmos que tarden más en calcular valores hash al cifrar contraseñas. Los desarrolladores deben aprender no solo sobre el rendimiento del algoritmo que utilizan en la CPU, sino también sobre su resistencia frente al mundo de la GPU.

Si los desarrolladores están trabajando con un marco de software que también aborda procesos de cifrado de contraseñas como Django, Ruby en Rails y Spring Security, deben verificar si se han tomado las decisiones correctas dentro del marco en términos de seguridad.

Por ejemplo, Idear, una de las bibliotecas más utilizadas para operaciones de usuario en Ruby on Rails, utiliza Bcrypt como algoritmo hash predeterminado. También le permite utilizar otro método como algoritmo hash. El algoritmo Bcrypt es confiable, ya que la GPU aún tarda mucho en romperse.

En resumen, cuanto más tarde el cálculo del valor hash, más seguro estará.

¿Cuántos caracteres debe tener su contraseña?

Cada carácter adicional que use aumentará geométricamente la cantidad de pruebas y errores necesarios para descifrar su contraseña y hacerla más segura.

Consideremos esta situación a través de dos escenarios diferentes. Considere los valores de la tabla anterior para el algoritmo hash NTLM e imagine que intentará descifrar la contraseña. Imagine apuntar a contraseñas de ocho caracteres o más.

Número de caracteres

Números y letras mayúsculas/minúsculas

Letras mayúsculas/minúsculas, números y símbolos especiales

8

menos de 1 minuto

2 minutos

9

2 minutos

2 horas

10

2 horas

1 semana

11

6 días

2 años

12

1 año

200 años

13

más de 100 años

más de 1000 años

Cuando examina la tabla, puede ver que el uso de una contraseña mínima de 12 caracteres es seguro cuando usa todas las combinaciones de letras mayúsculas/minúsculas, números y símbolos especiales. Si no está utilizando símbolos especiales, resulta que necesita usar 13 caracteres como longitud de contraseña segura. Si utilizó el método hash Bcrypt en lugar del hash NTLM en este sistema, 8 caracteres serían suficientes. Sin embargo, no tiene la oportunidad de saber con qué método hash un sistema al que ingresa a través de la web guarda su contraseña. Es por eso que debes considerar todas las posibilidades.

El principal problema para los desarrolladores de software es que es casi imposible convencer a los usuarios de que tengan una contraseña mínima de 12 caracteres. Hoy en día, es posible decir que la tasa de uso de contraseñas de esta longitud es baja. Por lo tanto, de acuerdo con el escenario de uso del sistema desarrollado, será necesario encontrar un término medio que sea aceptado por los usuarios. para mejorar la seguridad de sus contraseñas.

una última sugerencia para los desarrolladores es verificar no solo la longitud mínima sino también la longitud máxima de las entradas que llegan a través de los formularios que ha presentado al usuario. Especialmente cuando habilita el uso de un algoritmo hash lento para calcular como Bcrypt por seguridad fines, puede encontrar algunos riesgos si no controla la longitud máxima de la contraseña ingresada por el usuario. Por ejemplo, los atacantes pueden realizar ataques probando docenas de contraseñas de 100 mil caracteres al mismo tiempo con algunas solicitudes especialmente preparadas. En tal caso, es muy probable que su sistema deje de responder a otros usuarios.

Consejos para usuarios finales

Haga que su contraseña tenga una longitud mínima de 12 caracteres y asegúrese de incluir combinaciones de letras mayúsculas y minúsculas, números y símbolos. Nunca olvide que los sistemas que almacenan su contraseña pueden ser pirateados y su información puede ser abusada. No puede saber qué algoritmos utiliza un sistema para cifrar su contraseña, por lo que depende totalmente de usted tomar precauciones y crear contraseñas seguras.