En una demostración reciente de cómo los GPUs pueden acelerar las cosas en cómputo, se mostró una máquina, formada con 25 procesadores gráficos (GPUs) que puede hallar contraseñas en minutos. El encontrar “passwords”, las contraseñas que usamos para poder entrar a nuestro correo en gmail, por ejemplo, le permitiría a quien lo hiciese ver nuestra información privada. Un delito, por supuesto, pero el hecho de que usando el poder de cómputo de las tarjetas gráficas (que tienen además capacidad para hacer paralelismo), nos muestra las posibilidades que esto abre en el futuro.

Considérese el problema de implementar un sistema de contraseñas. Podría guardarse la contraseña de cada usuario en un archivo, junto quizás con otros datos. Cuando un usuario escribe su contraseña, el sistema busca la misma en el archivo mencionado y permite o rechaza la entrada de acuerdo a la coincidencia de la contraseña contra lo que se escribió. Por ejemplo, originalmente Unix guardaba en el archivo de contraseñas lo que cada usuario había introducido al sistema. Aquí la seguridad dependía de la imposibilidad de leer ese archivo si no se tenían los permisos para ello. Hoy, desde luego, las cosas en Unix no son tan simples.

El problema es que si el archivo de contraseñas cae en malas manos, por el método que sea, entonces todas las contraseñas están comprometidas, por lo que hoy en día hemos llegado a una solución más o menos satisfactoria: aplicar una función (llamada función de hash) a través de un esquema criptográfico. De hecho, en los sistemas Unix actuales, en muchos se puede ver la contraseña encriptada de cada usuario, pues el archivo es público. Sin embargo, esas contraseñas son lo que escribió cada usuario, a lo que se le aplicó la función de hash y eso es lo que se guarda. Si un usuario quiere entrar, escribe su contraseña, se le aplica la función de hash y el sistema ve si coincide con lo que encuentra en el archivo de contraseñas. Ha resultado un método bastante seguro, a todo esto. La ventaja de las funciones de hash es que sólo van en un sentido, es decir, es fácil calcular y=H(x), pero dado y, hallar x es muy difícil.

Este método hace que robarse el archivo de contraseñas sea poco peligroso. Solamente con una supercomputadora se podría trabajar en este esquema para hallar x dado y. Y esto es precisamente lo que en la conferencia Passwords^12 se presentó. La supercomputadora usada es un clúster de GPUs. Tiene un total de 25 tarjetas Radeon AMD, que requieren de unos 7Kw de electricidad. El sistema se liga vía Virtual OpenCL (VCL) que permite a OpenCL trabajar con GPUs como si estuviesen instalados en el mismo procesador. Todo esto se conectó usando una red de 10 Gbps Infiniband, lo cual era imprescindible para no tener que depender de una conexión lenta vía Internet. El software para hallar contraseñas fue Hashcat, modificado para soportar muchos GPUs. En teoría, podría manejar hasta 128 GPus si es que hubiese tal disponibilidad.

El resultado de esta supercomputadora “relativamente casera” es impresionante. Puede probar 348 mil millones de valores hash (vía NT Lan Manager – NTLM) por segundo. Por ejemplo, Windows XP usando una contraseña corta y con funciones simples de hash. El sistema halló la contraseña en unos 6 minutos. Para contraseñas de 8 caracteres, NTLM usó unas cinco horas y media.

Por supuesto que no todo está perdido. Hay funciones de hash mucho más complejas como md5crypt y sa512crypt que pueden llevar mucho más tiempo descifrarlas. Lo que se demuestra es que los métodos usados por Microsoft, LM y NTLM son muy fáciles de romper. Cabe decir que todo lo anterior es bajo el supuesto que el atacante tiene el archivo de contraseñas.

Referencias

Conferencia Passwords^12
Diapositivas de la conferencia
Hashcat
Plataforma VCL del clúster