Sto giocando a un progetto di calcolo distribuito. L'applicazione client richiede un problema da risolvere. Il server restituisce una descrizione del problema da un "pool di problemi". Al termine del client, restituisce la soluzione.
Non posso fidarmi dei miei utenti e quindi non posso fidarmi delle loro soluzioni. Ho bisogno in qualche modo di convalidare le loro soluzioni corrette (per alcune definizioni di "corretto"). Chiunque potrebbe inviare una soluzione sbagliata al problema che gli è stato assegnato. Voglio convalidare due cose:
- Nessuno può pubblicare una soluzione per un problema che non ho dato loro. Penso che questo sia facile: do loro un HMAC dell'ID problema più il mio segreto e controlla che inviino gli stessi token con la soluzione.
- Voglio verificare che la soluzione dell'utente sia corretta. Voglio fare questo controllo senza risolvere il problema da solo. E ancora più importante, non voglio che la soluzione sia specifica del problema, quindi non posso usare alcune proprietà dei problemi, che potrebbero funzionare per problemi NP- (Complete / Hard), per esempio.
Supponiamo, per il gusto della discussione, di calcolare le cifre di PI. Quindi, come posso essere sicuro che la risposta di alcuni utenti per l'ennesima cifra di PI sia corretta? Devo dare lo stesso problema a più utenti e cross validate? In che modo questo problema viene gestito in progetti come SETI @ home e altri?