Sto creando un servizio web, che gestisce varie richieste da client web. Il client e il server condividono una grande chiave segreta S e quando una parte desidera inviare i dati, calcola il token come segue:
T = HMAC (corpo HTTP || Richiesta timestamp, S)
Quindi, quando una parte riceve la richiesta http, ricalcola T dal corpo http e la data / ora dal campo dell'intestazione della data http e la confronta con il digest HMAC ricevuto. Se i digest sono uguali E lo scostamento temporale del timestamp e il momento in cui la richiesta è stata ricevuta è inferiore a una soglia specificata, concedere la richiesta. Altrimenti negalo.
Questo è sicuro? Supponendo che l'autore dell'attacco non possa falsificare l'intestazione Data poiché è protetto dall'HMAC, più l'offset del limite di tempo (per la protezione della riproduzione), penso che sia ok.
Supponendo che il protocollo sopra non abbia difetti, quanto tempo dovrei impostare, l'offset della soglia valido? Supponi ad esempio che 5 secondi siano ok?