Esiste un modo per proteggere un gioco lato client da un client compromesso?

1

Ecco un esempio di gioco di un gioco: al giocatore vengono presentate N slot machine. Possono fare clic su ogni slot machine una volta e, quando lo fanno, la slot machine ottiene un risultato casuale (basato su un insieme predeterminato di risultati e probabilità).

Se i risultati delle slot machine vengono lanciati sul server, non c'è ovviamente nessuna possibilità per il cliente di imbrogliare: il server ha informazioni complete per arbitrare quali slot machine sono già state lanciate e quali sono i loro risultati.

Supponi che il client e il server comunichino solo due volte: una volta prima che inizi il gioco e una volta terminata la partita. Esiste un tipo di protocollo che possa garantire che il cliente non possa imbrogliare?

Ovviamente, il cliente non può semplicemente segnalare al server ciò che ottiene il giocatore su tutte le macchine; il client riporta semplicemente N jackpots.

Sarebbe meglio che il client e il server concordassero su un metodo per determinare l'esito dello slot machine, in base all'immagine di una funzione unidirezionale del timestamp quando il cliente fa clic sulla slot machine. Il client segnala al server le coppie (time stamp, outcome) per ogni slot machine e il server può verificare che i risultati siano corretti, data la data e l'ora.

Ma questo protocollo non è ancora sicuro; potrebbe non essere rintracciabile per il cliente di invertire la mappatura dal timestamp al jackpot, ma può provare molti possibili timestamp e riportare al server i risultati N più favorevoli.

Esiste un protocollo che possa garantire (forse dati ulteriori presupposti circa la potenza di calcolo disponibile per il cliente) che un cliente non fidato non può imbrogliare in questo gioco? In caso contrario, c'è un argomento che dimostra l'impossibilità?

    
posta user168715 27.12.2017 - 07:28
fonte

2 risposte

4

No, non puoi proteggere il tuo gioco dai trucchi se i lanci sono fatti dal cliente.

Il punto principale di errore dei tuoi protocolli è qui

The client reports to the server the (time stamp, outcome) pairs for each slot machine, and the server can verify that the outcomes are correct given the time stamp.

E dimostri la sua vulnerabilità sotto

But this protocol is still not secure; it may not be tractable for the client to invert the mapping from time stamp to jackpot, but it can try many possible time stamps and report to the server the N most favorable outcomes.

Nulla impedisce al client di segnalare un falso timestamp. Inoltre, anche se ci fosse un modo per costringere il cliente a segnalare correttamente ogni rotolo, nel suo caso particolare di una slot machine, il fatto che il client possa essere in grado di indovinare i suoi prossimi lanci sarebbe una vulnerabilità critica.

    
risposta data 27.12.2017 - 11:20
fonte
1

Quando si tratta di un puro gioco d'azzardo in cui l'interazione con il giocatore è solo falsata (come molte macchine da gioco), è possibile utilizzare un generatore di numeri pseudocasuali deterministici sia sul client che sul server. Quando il giocatore compra monete, il server genera un seme per ogni moneta e lo ricorda.

Quando il cliente vuole incassare i propri guadagni, si ricollega al server e indica loro le monete giocate. Il server può ora verificare che si tratta di una moneta "vincente" simulando il gioco usando lo stesso seme.

Tuttavia, questo sistema cade a pezzi non appena il giocatore può prendere decisioni rilevanti durante il gioco. In tal caso potrebbe giocare più varianti della moneta e riportare quella in cui hanno ottenuto il punteggio più alto. Non c'è modo per il server di rilevare che il client ha fatto quello.

Un'altra debolezza cruciale è che non puoi permettere al giocatore di rimborsare monete non giocate, perché se le lasci potrebbero richiedere un rimborso per ogni "perdita" di monete e denaro nelle monete "vincenti".

tl; dr: Basta renderlo un gioco sempre online con un server autorevole e un client stupido. Le restrizioni del gameplay non valgono la pena.

    
risposta data 27.12.2017 - 14:26
fonte

Leggi altre domande sui tag