Ho avuto l'idea di usare la crittografia per impedire agli utenti di capire il contenuto del mio programma al di fuori del programma stesso. Come gli utenti possono trovare trame mai utilizzate nel gioco che fanno parte di un qualche tipo di uovo di Pasqua mentre vanno attraverso i dati di gioco. Questo può ad esempio rovinarlo per tutti se pubblicato online.
Immagina una stanza segreta in cui il giocatore deve premere i numeri corretti su una porta di sicurezza nel gioco, che se corretta dovrebbe generare la chiave di decrittazione corretta e quindi decifrare quella parte del livello e aprire la porta. Pertanto, rendendo l'uovo di Pasqua altrimenti inaccessibile anche quando si guardano i dati di gioco poiché la chiave non è effettivamente memorizzata, viene generata in base all'input dell'utente.
Ecco un altro esempio di ciò che stavo immaginando. Ho un gioco puzzle con diciamo 20 livelli, ognuno criptato usando una chiave diversa. Invece di archiviare la chiave di decrittazione con il programma che consente direttamente a qualcuno di decompilare il programma e trovarlo, invece genera la chiave di crittografia / decrittazione basata sulla soluzione del puzzle precedente. In questo modo il giocatore dovrebbe effettivamente capire il puzzle prima di ottenere qualsiasi informazione sul livello successivo, anche guardando i dati di gioco.
Il giocatore, se ben informato, potrebbe eventualmente forzarlo "facilmente" dato che il numero di soluzioni puzzle è probabilmente inferiore al numero di chiavi di decrittazione. È davvero una questione di complessità del puzzle e non è molto importante qui. Anche se ho pubblicato una risposta a riguardo qui
Esistono programmi / giochi oggi che hanno fatto qualcosa del genere? Archiviare contenuti crittografati nei loro giochi? E se no perché? Ci sono molte regole e regolamenti al riguardo, a livello di negozio o paese? Qualcuno vede alcune insidie ovvie che mi manca? Ignorando cose come l'esperienza dell'utente, l'idea mi sembra valida e mi incuriosisce perché non l'ho mai vista prima.
Modifica : potrebbe non essere chiaro esattamente quello che sto dicendo, quindi ecco un esempio più concreto.
Diciamo che ho una funzione che accetta una stringa di 20 caratteri e genera una chiave simmetrica che posso usare per crittografare / decrittografare alcuni contenuti del gioco. L'unico modo in cui l'utente potrebbe arrivare a quel contenuto è conoscere quei 20 caratteri e generare la stessa chiave. Questa chiave non viene mai memorizzata direttamente e viene generata al volo in base all'input dell'utente. Questi personaggi sarebbero nascosti nel gioco in quelli che potrebbero essere libri, dialoghi con gli NPC, forse anche al di fuori del gioco sul retro della scatola.
Quindi con 2 * 10 ^ 28 possibili combinazioni da provare sarebbe probabilmente più probabile che le persone trovino il contenuto nel modo previsto piuttosto che guardando attraverso i dati di gioco.
Modifica 2 : il contenuto in questione verrebbe crittografato con una chiave arbitraria e segreta prima di essere spedito al consumatore. Questa chiave ovviamente non verrà spedita con il gioco. Dovrebbe in qualche modo rompersi insieme la chiave, data una serie di indizi basati sulla chiave, e che sono nascosti nel gioco o da qualche altra parte. Questo sistema sarebbe tuttavia trasparente per l'utente in quanto non sapresti che il contenuto è stato crittografato se non avessi effettivamente esaminato i dati di gioco.
Come molti hanno già detto, questo ha un aspetto negativo evidente in quanto il suo caso d'uso è limitato. Una volta che una sola persona l'ha capito, può condividerla con tutti gli altri, se non la chiave / soluzione, quindi il contenuto stesso. Tuttavia, se la tua intenzione è quella di mantenere qualcosa di così segreto che una sola persona non dovrebbe essere in grado di risolverlo e le persone devono lavorare insieme per risolverlo, o hai paura che il tuo uovo di Pasqua sia così ben nascosto (in base alla progettazione) che è più probabile che qualcuno lo trovi nel codice piuttosto che durante il gioco. Quindi penso che potrebbe funzionare alla grande.
Personalmente consiglierei di usarlo solo una volta per partita e solo per cose che non influiscono sul gioco principale, ad esempio le uova di Pasqua, un finale segreto. Ogni enigma dovrebbe essere così complicato o ben nascosto per rallentare le persone abbastanza da rendere la crittografia del contenuto degna di nota e se questo enigma ostacolava il progresso delle persone, allora probabilmente nessuno si sta divertendo.