Validar la corrección entre respuestas no confiables

3

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:

  1. 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.
  2. 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?

    
pregunta Alejandro Piad 13.11.2013 - 22:03
fuente

1 respuesta

2

Distributed.net solucionó esto asignando el mismo espacio de búsqueda a múltiples usuarios, y los validó de esa manera. (Probablemente todavía lo están haciendo).

Según el costo de cálculo y los niveles de participación, es posible que desee volver a verificar solo una fracción de los paquetes. Comparando el 5% debería darle una probabilidad estadísticamente válida de atrapar a un tramposo. Asegúrate de distribuir aleatoriamente los bloques de desafío duplicados, para que no solo tengas los paquetes del Usuario B que validan al Usuario A. No identifique los bloques de prueba de ninguna manera, como enviar un tamaño o rango diferente, o un tramposo puede manipularlos. Y, finalmente, saber que un resultado positivo no indica un tramposo malicioso. Podría ser un problema de hardware o software. Debe ver un patrón de abuso antes de desconectar de alguien.

EDITAR:

Aquí hay un enlace al documento istribuido en la autenticación de código operacional . Describe los mecanismos de seguridad mediante los cuales manejan la validación del trabajo distribuido a clientes no confiables. De particular interés son algunos de los otros problemas de seguridad que han identificado, como el "robo de soluciones", donde un malhechor distribuye un cliente modificado a otra persona. El cliente modificado suprime la señal de "resultados ganadores" y, en cambio, envía los resultados al atacante, quien reclama injustamente y recoge la recompensa por el hallazgo.

    
respondido por el John Deters 14.11.2013 - 00:46
fuente

Lea otras preguntas en las etiquetas