Nella nostra applicazione, un utente seleziona le risposte alle domande. Il loro punteggio si basa sul tempo impiegato per rispondere a ogni domanda fino a un decimo di secondo. Il server è responsabile del calcolo e della memorizzazione del punteggio, ma ovviamente non può registrare il tempo esatto trascorso a causa della latenza.
In qualche modo, l'app mobile dovrà inviare al server il tempo necessario per rispondere alla domanda in base al proprio orologio. Come faccio a verificare che il valore di tale chiamata API non venga falsificato?
Immagino che, per lo meno, possiamo avere una stringa che è codificata in entrambe le applicazioni che crittografa / decrittografa i timestamp (AES è buono per questo?) ma questo non è sicuro al 100% come qualcuno potrebbe riuscire a ottenere quella stringa attraverso la decompilazione o qualsiasi altra cosa.
Dopodiché, potremmo misurare la latenza in una richiesta di test quando comunichiamo per la prima volta con l'app mobile. Quindi possiamo assicurarci che i tempi inviati siano all'interno di una finestra ragionevole basata su tale latenza. Per me questo sembra un po 'schizzinoso e impreciso. Sarebbe difficile decidere quale sarebbe la finestra dato che i valori sono così piccoli. Ad esempio, se sono necessari "5 s" per rispondere a una domanda con latenza di ~ 200 ms, la finestra 6 è la finestra? 7? 10? Se la finestra è troppo grande, la contraffazione varrebbe comunque la pena. Troppo piccolo e potresti incasinare gli utenti legittimi che hanno appena avuto un secondo di ritardo o altro.
C'è una soluzione robusta? La crittografia / decrittografia sarebbe "abbastanza sicura"?