Estoy jugando en torno a un proyecto de computación distribuida. La aplicación cliente solicita un problema a resolver. El servidor devuelve una descripción del problema de un "grupo de problemas". Cuando el cliente termina, devuelve la solución.
No puedo confiar en mis usuarios, por lo que no puedo confiar en sus soluciones. Necesito validar de alguna manera sus soluciones son correctas (para alguna definición de "correcto"). Cualquiera puede enviar una solución incorrecta al problema que se les asigna. Quiero validar dos cosas:
- Nadie puede publicar una solución para un problema que no les he dado. Creo que esto es fácil: les doy un HMAC del ID de problema más mi secreto y verifico que envíen los mismos tokens con la solución.
- Quiero comprobar que la solución del usuario es correcta. Quiero hacer esta comprobación sin resolver el problema por mí mismo. Y lo que es más importante, no quiero que la solución sea específica de un problema, por lo que no puedo usar alguna propiedad de los problemas, que podría funcionar para problemas de NP- (Completo / Difícil), por ejemplo.
Supongamos, por el bien de la discusión, que quiero calcular los dígitos de PI. Entonces, ¿cómo puedo estar seguro de que la respuesta de algunos usuarios para el noveno dígito de PI es correcta? ¿Debo dar el mismo problema a varios usuarios y validar? ¿Cómo se maneja este problema en proyectos como SETI @ home y otros?