La crittografia non è l'autenticazione.
La protezione del contenuto di un file dalla lettura e la protezione del contenuto di un file dalla modifica sono due attività separate. Ciò è particolarmente evidente quando si cerca di proteggere il contenuto dei file del gioco - il gioco deve decrittografarli, quindi deve avere il segreto ... il che significa che l'utente, che ha il controllo totale sulla propria macchina, ha anche il segreto ! Anche ignorandolo, i file devono ancora essere caricati in memoria senza crittografia su alcuni punti, quindi i dati possono essere visti.
L'autenticazione, d'altra parte, potrebbe essere fatta firmando i file del gioco con una chiave privata (che non lascia mai le grinfie dello sviluppatore), e poi verificandoli con una chiave pubblica (che è distribuita insieme al gioco).
Ora un avversario che può vedere tutto non è in grado di modificare i file del gioco. Non hanno nemmeno bisogno di essere crittografati; qualsiasi modifica causerà l'annullamento della firma.
... Sfortunatamente, naturalmente, l'utente finale può semplicemente risolvere la routine che verifica i file di gioco in primo luogo.
Questo diventa un gioco di gatto e topo. In definitiva, è una battaglia persa per lo sviluppatore; è come cercare di tenere fuori i ladri chiedendo loro molto gentilmente di stare alla larga.
Che cosa fare?
Il cliente è totalmente inaffidabile. Il cliente può mentire, imbrogliare e rubare finché le mucche non tornano a casa. Se la logica del tuo gioco vive sul lato del client, la logica del gioco può essere sovvertita.
D'altra parte, se il tuo gioco è ospitato su un controllo di tuo , hai un po 'di potere. Puoi decidere "hey, JimBob si è appena spostato di cinquanta miglia in due secondi, forse non è giusto". Il cliente può ancora essere un orrendo bugiardo e abusa ancora di informazioni che non dovrebbero avere (come vedere i nemici attraverso i muri), ma puoi almeno verificare che le loro azioni siano valide.
Lo stesso inquilino si trova in tutti i posti. Gli sviluppatori Web convalidano l'input ogni , anche se l'interfaccia utente non ti consente di dire che hai anni di patata.
Quindi, alla fine della giornata, fidati del client il meno possibile .