A principios de este año, se publicaron cerca de 6,5 millones de hashes de contraseñas de cuentas de LinkedIn en un foro de hackers. Los hashes eran simples resúmenes SHA1 calculados a partir de las contraseñas del usuario, tal y como se almacenaban en la infraestructura de backend de LinkedIn.
No pasó mucho tiempo para que los hackers comenzaran a descifrarlos, con más de la mitad de ellos agrietados en casi nada de tiempo.
Hay dos razones principales por las que tal craqueo rápido fue posible:
* el uso de la función SHA1 en sí
* GPU rápidas
Echemos un vistazo a ambas.
La función SHA1 fue diseñada principalmente para reemplazar la función más débil MD5. Fue creado para ser rápido, y de hecho lo es. En una tarjeta gráfica AMD / ATI 7970, «hashcat» (ver https://hashcat.net/oclhashcat-plus/) calcula un poco más de dos mil millones de hashes SHA1 por segundo. Esto significa que se pueden probar muchas combinaciones en muy poco tiempo.
Para superar este «problema», existen algoritmos modernos y más seguros, como la función sha512crypt utilizada en Ubuntu y versiones recientes de Fedora Core Linux. En lugar de 2 mil millones de hashes por segundo, la misma tarjeta GPU solo agrieta un poco más de 12,000 combinaciones sha512crypt por segundo. Por ejemplo, verificar mil millones de combinaciones de sha512crypt toma aproximadamente 24 horas; pero menos de 1 segundo para SHA1.
Debido a las GPU rápidas de hoy, un buen consejo cuando se trata de seguridad es elegir una contraseña compleja, que:
* incluye mayúsculas y minúsculas, caracteres
* incluye al menos un carácter de espacio
* incluye números
* incluye varios símbolos como !@#
* no se basa en una palabra conocida
* tiene al menos 12 caracteres de tamaño, pero cuanto más largo, mejor
Muchas de las personas que conozco usan frases de contraseña que tienen entre 20 y 50 caracteres de tamaño. Este es un buen consejo que hace poco probable que incluso en el caso de que se filtre el hash de su contraseña, nadie lo descifrará.
Imagine mi sorpresa hoy cuando intenté iniciar sesión en una cuenta de Hotmail anterior y obtuve lo siguiente:
Las contraseñas de cuentas de Microsoft pueden contener hasta 16 caracteres.
Si ha estado utilizando una contraseña que tiene más de 16 caracteres, ingrese los primeros 16.
Mi contraseña anterior tenía alrededor de 30 caracteres y ahora ya no funciona. Sin embargo, podría iniciar sesión escribiendo solo los primeros 16 caracteres.
Esta limitación es bien conocida (ver el excelente post de Graham Cluley sobre los límites de contraseñas de varios servicios) sin embargo, lo que me llamó la atención fue que al cortar la contraseña a 16 caracteres, funcionaría.
Para realizar este truco con contraseñas antiguas, Microsoft tenía dos opciones:
* almacenar contraseñas de texto plano completo en su base de datos; comparar solo los primeros 16 caracteres
* calcular el hash solo en los primeros 16 caracteres; ignorar el resto
Almacenar contraseñas de texto sin formato para servicios en línea es definitivamente un no-no en seguridad. La otra opción podría significar que desde su creación, Hotmail estaba usando silenciosamente solo los primeros 16 caracteres de la contraseña.
Para ser honesto, no estoy seguro de cuál es peor.
PD: Mi maestro dijo que siempre pensara positivamente y que tratara de terminar con una nota optimista. Así que aquí va: «Gracias a Google por GMail».