Esto del timing attack puede hacer que tu cabeza explote cuando veas dónde puede llegar a haber agujeros de seguridad en tu aplicación web.
El mecanismo de ataque se basa en medir el tiempo que tarda una aplicación en procesar una información.
A continuación un ejemplo que es una explicación muy por encima y simplificada al máximo para que se entienda (si te interesa el tema espera a que escriba un artículo más largo o investiga):
Por ejemplo, cuando un usuario hace login, se comprueba su clave comparando la que ha introducido con la que está almacenada en la base de datos.
Cuando se está comparando la clave, se suele comprobar si coinciden carácter a carácter la cadena introducida con la almacenada. En el momento en que un carácter es diferente se detiene la comprobación. Si tu clave cifrada fuese:
a49fhjroeagh2
Un atacante que ya supiera la longitud de la clave (que también se puede conseguir con un ataque de este tipo) podría probar con:
aaaaaaaaaaaa baaaaaaaaaaa caaaaaaaaaaa daaaaaaaaaaa
Al medir los tiempos vería que la primera cadena tarda más en procesarse que las demás. Esto se debe a que en el primer caso la ‘a’ es correcta así que se seguirán comprobando el resto de letras. Eso quiere decir que la ‘b’ y la ‘c’ no son las letras correctas. ¡Ya tendría la primera letra de la clave! Repitiendo el proceso podrían conseguir la clave completa.
¿Cómo evitarlo?
Para evitar este ataque hay que hacer que las comparaciones de cadenas en partes vitales (por ejemplo logins de usuarios) tengan siempre la misma duración en el tiempo. Para eso existen funciones como hash_equals (con las que hay que tener también cuidado, por cierto).
Con esto ya tienes una cosa más de la que preocuparte cuando desarrolles tu próxima aplicación web ¡Como si no hubiera suficientes!