Autenticación HMAC del servicio web / anti-reproducción

3

Estoy creando un servicio web, que maneja varias solicitudes de clientes web. El cliente y el servidor comparten una gran clave secreta S, y cuando una parte desea enviar datos, calcula el token de la siguiente manera:

T = HMAC (cuerpo HTTP || Marca de tiempo de solicitud, S)

Entonces, cuando una parte recibe una solicitud http, vuelve a calcular T desde el cuerpo http y la marca de tiempo del campo de encabezado http Fecha, y la compara con el resumen HMAC que recibió. Si los resúmenes son iguales Y el desplazamiento de tiempo de la marca de tiempo y la hora en que se recibió la solicitud es inferior a un umbral especificado, conceda la solicitud. Si no lo niegas.

¿Esto es seguro? Suponiendo que el atacante no puede falsificar el encabezado de la fecha ya que está protegido de la HMAC, más el desplazamiento del límite de tiempo (para la protección de repetición), creo que está bien.

Suponiendo que el protocolo anterior no tiene fallas, ¿cuánto tiempo debo configurar, el umbral de compensación válido? Digamos, por ejemplo, 5 segundos, ¿está bien?

    
pregunta Dimitris Fousteris 27.03.2013 - 00:37
fuente

1 respuesta

5

Si realiza su protocolo a través de HTTP simple, los atacantes que entrometen la comunicación pueden abandonar, duplicar o reordenar las solicitudes dentro de su marco de tiempo. También pueden enviar al cliente (respectivamente al servidor) algunas de sus propias solicitudes como si fueran respuestas del servidor. Dependiendo de su protocolo, esto puede o no ser un problema, pero puede ser devastador.

Puede reducir el rango de validez de las solicitudes y respuestas rechazando las marcas de tiempo que están desactivadas en una cantidad demasiado grande, pero esto requiere que el cliente y el servidor estén correctamente sincronizados, algo que no se puede garantizar en general (muchas computadoras " "hay algunos minutos, incluso horas, incluso años en algunos casos). Por lo tanto, no puede hacer que el rango de validez de la marca de tiempo sea lo suficientemente bajo para garantizar una seguridad decente. En resumen, su protocolo no puede ser realmente resistente a los ataques y variantes de reproducción, cuando se juega en un medio de transporte no protegido como HTTP simple. Puede hacer algunas mitigaciones, hasta cierto punto, pero a costa de los problemas de usabilidad (debido a una posible falta de sincronización del reloj).

La solución es entonces: usar SSL (también conocido como HTTPS en un contexto web). SSL le brindará toda la protección de reproducción que pueda desear; También trae cifrado. Con SSL, su HMAC hecho en casa se vuelve redundante y usted podría simplemente olvidarlo por completo.

    
respondido por el Tom Leek 27.03.2013 - 15:22
fuente

Lea otras preguntas en las etiquetas