En una respuesta a otra pregunta mía , se observó que una clase que usa funciones de comparación de cadenas estándar cuando revisar el HMAC en cifrado autenticado haría a la clase vulnerable a ataques de tiempo contra el HMAC.
No puedo ver cómo este es un problema con un ataque de tiempo contra el HMAC del cifrado autenticado.
En primer lugar, las implementaciones deben ser consideradas conocidas por el atacante (en este caso particular, la fuente simplemente se publica), por lo que la única clave secreta sería la clave. Siguiendo esta línea de razonamiento, ¿cómo protegería contra cualquier cosa una función de comparación de tiempo constante en la implementación? (Espero que el atacante simplemente lo elimine, si incluso usara el mismo código).
Y segundo, si quisiera pensar en la implementación como una caja negra, la comparación es contra un HMAC de los datos con una clave derivada de PBKDF2. ¿El intento de un ataque de tiempo contra el HMAC no sería tan lento como tratar de forzar con fuerza una contraseña protegida por PBKDF2 b) en realidad no revelaría información útil en ningún intento de descifrar los datos? (el HMAC incluso se adjunta al texto cifrado, disponible para todos los que tengan acceso a los datos cifrados).
Entonces, ¿qué es lo que me falta aquí, ¿por qué los ataques de tiempo en este escenario se consideran un riesgo que debe protegerse?
Actualización rápida:
Entiendo cómo funcionan los ataques de tiempo, pero no comprendo qué se obtendría al emplear un ataque de tiempo en un escenario en el que la función de descifrado se vea así:
/**
* @param binary $data Where $data = salt, IV, encrypted data, HMAC(salt, IV, encrypted data)
* @param string $password The decrypt-password
* @return string|null plain text if data was successfully decrypted, null otherwise
*/
function decrypt($data, $password) {
...
}