En nuestra aplicación, un usuario selecciona las respuestas a las preguntas. Su puntaje se basa en el tiempo dedicado a responder cada pregunta hasta una décima de segundo. El servidor es responsable de calcular y almacenar el puntaje, pero obviamente no puede registrar el tiempo exacto empleado debido a la latencia.
De alguna manera, la aplicación móvil tendrá que enviar al servidor el tiempo que tardaron en responder la pregunta según su propio reloj. ¿Cómo verifico que el valor en esa llamada a la API no se está falsificando?
Pienso que al menos, podemos tener una cadena que está codificada en ambas aplicaciones que cifrarán / descifrarán las marcas de tiempo (¿AES es bueno para esto?) pero esto no es 100% seguro ya que alguien podría lograrlo esa cadena a través de la descompilación o lo que sea.
Luego de eso, creo que podríamos medir la latencia en una solicitud de prueba cuando nos comunicamos por primera vez con la aplicación móvil. Entonces podemos asegurarnos de que los tiempos de envío estén dentro de una ventana razonable en función de esa latencia. Para mí, esto parece un poco meticuloso e inexacto. Sería difícil decidir cuál sería la ventana ya que los valores son muy pequeños. Por ejemplo, si tomó "5s" para responder una pregunta con ~ 200 ms de latencia, ¿está la ventana 6? 7? 10? Si la ventana es demasiado grande, la falsificación todavía valdría la pena. Demasiado pequeño y podría arruinar a los usuarios legítimos que solo tuvieron un segundo de retraso o lo que sea.
¿Hay alguna solución robusta? ¿El cifrado / descifrado sería "lo suficientemente seguro"?