Contenuti crittografati nei giochi


45

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.


56
Le risposte si concentrano sui dettagli tecnici, ma se il tuo obiettivo è quello di nascondere spoiler, ritengono che queste informazioni saranno disponibili dal semplicemente giocando al gioco , a quel punto (se il gioco è popolare) che sarà andare direttamente su un articolo di Wikia per tutti leggi, giocatore o no.
Leushenko,

4
Duplica sullo sviluppo del gioco stackexchange: "Come posso proteggere i miei dati di gioco dall'hacking casuale?"
Philipp,

5
Non è un po 'eccessivo per un prodotto di intrattenimento? Voglio dire, le persone potrebbero ottenere la "chiave" guardando un walkthrough o lascia giocare o semplicemente chiedere alle persone che hanno già giocato. Inoltre, il gioco potrebbe diventare più soggetto a errori a causa di questo modo "più o meno oscuro" di gestire le cose. Altrimenti mi piace l'idea e sarà una bella trovata, ma non fermerà ancora le persone dall'hacking / cheat, ma piuttosto renderà più difficile
BlueWizard,

3
Penso che sarebbe particolarmente bello se i tuoi utenti fossero noti per aver hackerato il tuo gioco e il puzzle è davvero difficile. Puoi immaginare sui forum "cos'è questo strano file crittografato".
PyRulez,

5
@PyRulez Ah sì! Questa è stata la mia motivazione principale dietro questo. Lo odio quando quei fastidiosi governi esaminano i file di gioco per trovare tutte le uova di Pasqua. Tutto solo per poterlo pubblicare sui forum dei nemici e rovinare la morale del Paese.
Christer,

Risposte:


90

Questa domanda è chiedersi se è possibile (non solo commercialmente fattibile o qualche altra interpretazione) forzare almeno 1 utente a risolvere un enigma invece di hackerare per sbloccare determinati contenuti di gioco.

Per quanto ne sappia, questo è sicuramente possibile. In effetti, è strano per me che altre risposte stiano dicendo che non è assolutamente possibile, anche quando è stato affermato esplicitamente che la chiave non è né generata né memorizzata, semplicemente letta dallo stato del gioco (che potrebbe avere possibili valori). L'argomento secondo cui "il gioco sa come decrittografarlo" in modo che non funzioni implica che qualsiasi software di crittografia / decrittografia open source (ad esempio TrueCrypt) è intrinsecamente insicuro perché sai "come" decifrare i contenitori (basta inserire una stringa basata sull'input da tastiera, è semplice vero?).

Nel caso assolutamente più semplice, immagina che il gioco stesso sia un simulatore di tastiera e pone la domanda "qual è la password per i miei file crittografati?", Chiaramente siamo tutti d'accordo sul fatto che avere il codice sorgente del gioco non sarebbe d'aiuto. Ora immagina che il gioco ponga le domande "Qual è il nome dell'animale più grande sulla Terra concatenato con il nome dell'animale più piccolo?". Non è chiaro che anche avere il codice sorgente del gioco non sarebbe d'aiuto, e devi ancora risolvere il puzzle?

Per quanto possibile, la risposta è SÌ assoluta, ciò è possibile.


9
Sento che la tua risposta è l'unica finora che sembra aver compreso appieno la mia domanda. Troppi sembrano pensare automaticamente che la mia domanda sia proprio come certe altre domande di crittografia relative al gioco. Capisco da dove vengono, anche se vorrei che leggessero un po 'meglio la mia domanda.
Christer,

7
Quello che stai proponendo è che la soluzione ai problemi venga archiviata solo in modo crittografato. È sicuramente possibile confermare una soluzione valida ma fondamentalmente impossibile ricambiare. (how-to-store-password-101). La seconda parte della domanda su come nascondere i contenuti che non richiedono l'input dell'utente per la visualizzazione, è, tuttavia, impossibile da risolvere (nota che quando dico nessun input dell'utente, intendo che in modo molto rigoroso)
WorldSEnder

3
Penso che il punto principale sia davvero che sia possibile forzare un singolo utente a risolvere il puzzle, perché il primo può informare tutti gli altri. Ciò rende muto l'intero punto dell'esercizio di crittografia.
cmaster

4
Con il codice sorgente (o un stringssull'eseguibile), un indovinello come "Qual è il nome dell'animale più grande ...?" potrebbe ancora aver bisogno di essere risolto dal giocatore / hacker, ma almeno può evitare il pericoloso viaggio verso il luogo del gioco in cui si verifica la domanda. Pertanto, gli stessi indovinelli dovrebbero anche essere in qualche modo nascosti (il testo in quanto la grafica può spesso essere sufficiente; più elaboratamente, penso di ricordare un gioco in cui oggetti 3d normali, se visti da un punto specifico, si combinano in modo prospettico alla soluzione di un indovinello o altro importante informazioni ...)
Hagen von Eitzen,

4
Alcune citazioni del tipo "Questo può ad esempio rovinarlo per tutti se pubblicato online". dalla domanda originale ... scusa, ma a questa risposta manca il punto. Sarebbe altrettanto vulnerabile a rovinarlo per tutti se la risposta, i file decifrati o qualunque cosa siano pubblicati, ed è altrettanto vulnerabile alla loro pubblicazione.
Nathan Tuggy,

57

È stato provato. Molte, molte volte C'è un intero sottosettore dedicato al tentativo di utilizzare la crittografia per impedire agli utenti di accedere a un programma come ritengono opportuno. E non funziona mai. I migliori schemi di protezione tendono a durare circa un mese prima che vengano crackati, e la cosa su Internet è, una volta che viene crackato una volta, viene crackato ovunque per sempre non appena qualcuno lo pubblica. L'ovvia trappola che ti manca è che affinché il tuo programma utilizzi i dati, deve contenere tutte le informazioni necessarie per decrittografarlo e, se il computer può farlo, una persona con accesso al computer può farlo quello.

È stato chiamato "il problema fondamentale della crittografia": Alice vuole inviare un messaggio a Bob, senza che Charlie sia in grado di leggerlo, anche se se ne accorge. Il problema con l'approccio che stai proponendo è che Bob e Charlie sono la stessa persona in questo caso.

Posso capire il desiderio di non rovinare i tuoi utenti, ma se le persone vogliono spoiler li troveranno e, in caso contrario, tenderanno ad evitare attivamente spoiler. Ma se vuoi davvero fare un grande gioco, segui la strada opposta: apertura radicale. Guarda cose come Neverwinter Nights , Starcraft o la serie Elder Scrolls , giochi che restano popolari per anni e anni dopo l'uscita. Lo fanno perché forniscono potenti strumenti di progettazione con il gioco che consentono agli utenti di scavare in tutto, capire come funziona e costruire e condividere i propri contenuti. Un gioco è solo un gioco, fino a quando non diventa una comunità e le comunità resistono.


3
In questo caso, anche se decifrare la crittografia sarebbe equivalente a scrivere un bot che risolva i puzzle. Probabilmente più difficile del semplice completamento del gioco e della scrittura delle risposte
Ewan,

15
Voglio solo dire che questa risposta non risponde davvero alla mia domanda! Voglio davvero che le persone "decifrino il codice" o piuttosto risolvano il mio puzzle. Questo è il punto, e sì, quando qualcuno lo capirà, non posso impedirgli di condividere la soluzione, non ci sto provando. Tuttavia, ti sbagli dicendo che "deve contenere tutte le informazioni necessarie per decrittografarlo" poiché l'intero punto era che queste informazioni sono state fornite dall'utente. Leggi la domanda aggiornata per i dettagli.
Christer,

6
@Christer Lo fa ed ecco perché: Mason sta dicendo a chi importa se possono entrare nei file di gioco per scoprire la risposta del puzzle perché solo una minoranza lo farà davvero ..
Insane,

9
@JonasDralle Questo è un punto di vista disgustosamente cinico, e non è nemmeno vero. La forte e duratura comunità che si è formata intorno a Morrowind e Oblivion non ha impedito a Skyrim di vendere; semmai, ha reso più successo!
Mason Wheeler,

3
@Cronax Se usi la crittografia in stile "one time pad", in questo caso la chiave è la soluzione puzzle che il tuo attaccante non ha un'opzione migliore del brute-foricng sulla dimensione dello spazio della chiave. Con il giusto tipo di puzzle, potrebbe essere impraticabilmente grande da risolvere nella durata della vita dell'universo. Inoltre, se l'uovo di Pasqua è, diciamo, un messaggio dallo sviluppatore, un attaccante non avrebbe modo di distinguere il messaggio reale da uno casuale corretto-Egnlish.
Ben Aaronson,

10

Sono in giro da abbastanza tempo per sapere che se il contenuto è lì, qualcuno lo troverà. Renderlo più difficile attirerà solo persone più determinate. Più popolare è il tuo prodotto, più interessante diventa. In parte perché è una sfida, in parte perché ci sono così tanti posti in cui puoi guadagnare "credibilità" pubblicando questo tipo di informazioni.

Se la chiave viene generata localmente dal gioco, puoi trovare un modo per imbrogliare il gioco fino al punto in cui viene generata la chiave, o semplicemente estrarre il giusto pezzo di codice. Se la chiave ti viene inviata da un server al completamento di alcuni passaggi del gioco, qualcuno indurrà il tuo server a credere di essere andato abbastanza lontano.

Alla fine, il tuo gioco trarrà molto più beneficio dal tempo impiegato a renderlo divertente e coinvolgente, oltre a rendere difficile scoprire quale sia il colore di livello successivo.


Sebbene i dati crittografati con una chiave memorizzata localmente possano sempre essere compromessi. In pratica, tutte le app e i giochi moderni lo utilizzano in una certa misura.
Ewan,

Scopri soomla e come funziona le monete
Ewan,

Credo che la domanda fosse su come nascondere i contenuti futuri ai giocatori curiosi, non su come proteggere le valute e le statistiche dei giocatori dalle manomissioni
axl

1
Poiché si tratta di un uovo di Pasqua, attirare l'attenzione è esattamente quello che vuoi.
PyRulez,

6
Renderlo più difficile attirerà solo persone più determinate Penso che questa sia una grande strategia di marketing per un gioco :)
sampathsris

9

Il motivo principale per cui questo dovrebbe essere su gamedev.SE è che fare questa crittografia ha conseguenze sul gameplay.

Volete che la soluzione di un puzzle sia la chiave di crittografia per il successivo. Cioè, i dati effettivi di quella soluzione devono decrittografare il puzzle successivo. Ciò significa che la chiave di decodifica non fa parte dei dati del tuo gioco da nessuna parte; è generato dal giocatore.

Ed ecco la conseguenza. La decrittografia è generalmente binaria. O hai l'esatta chiave di decrittazione necessaria per annullare la crittografia dei dati, oppure no.

La conseguenza qui è che qualunque gioco tu abbia progettato deve essere focalizzato in modo così ristretto che esiste una sola soluzione possibile per ogni livello. Quindi le meccaniche del tuo puzzle devono essere progettate con molta attenzione in modo tale che il giocatore non possa risolvere il puzzle in modo diverso dalle tue intenzioni.

Prendi ad esempio Portal, Test Chamber 10. Dovresti andare a sinistra, fare alcune cose, quindi andare a destra e fare alcune cose, tutto per abbassare una piattaforma.

Oppure puoi semplicemente darti un po 'di velocità e lanciarti sulla piattaforma quando entri.

GLaDOS: Quindi hai creato un puzzle game. Un gioco puzzle che punisce le persone che più amano i giochi puzzle. Buon lavoro. Ma almeno quegli hacker non otterranno i tuoi dati preziosi. Perché le persone a cui piace risolvere i giochi puzzle sono esattamente i tipi di persone che cercano soluzioni ai giochi puzzle online.

Quindi ne vale assolutamente la pena.

Quindi, giochi puzzle come Adventures of Lolo, SpaceCHEM e Portal (tra milioni di altri) sono appena usciti. Invece, devi progettare il tuo gioco in modo che sia impossibile creare un puzzle che abbia più di una soluzione. Ciò richiede molta cura e di solito richiede un sostanziale restringimento del gameplay.

GLaDOS: Quindi hai creato un puzzle game. Un gioco pensato per essere giocato da persone a cui piace trovare soluzioni creative ai puzzle. E hai creato un gioco che non ha soluzioni creative ai puzzle. * Slow-clap *

Non sto dicendo che non puoi creare un gioco del genere. O che un gioco del genere non può essere buono. Solo che un tale gioco dovrebbe essere progettato in un certo modo.

Oh, e devi progettare questo gameplay in modo che sia impossibile (o altamente difficile) trovare meccanicamente una soluzione.

GLaDOS: Quindi hai creato un puzzle game. Un puzzle game più interessante da hackerare che da giocare. Buon lavoro.


Certamente, c'è un avvertimento in questo: il significato di "soluzione". O più al punto, quali elementi di una soluzione prendi in considerazione?

Per qualsiasi gioco che coinvolga un personaggio in movimento, probabilmente non userai i movimenti esatti del personaggio per costruire la chiave di decrittazione. Ad esempio, se hai un gioco puzzle in cui il giocatore deve raccogliere determinati oggetti per "risolvere" il puzzle, puoi fare in modo che la chiave dipenda dall'ordine in cui tali oggetti vengono toccati.

Naturalmente, questo si imbatte in quel problema sopra, in cui un giocatore trova un modo per fare le cose fuori servizio. Il che significa che devi progettare il puzzle in modo tale che ci sia un solo ordine in cui potresti raccogliere le cose.

Inoltre, qualsiasi elemento tu usi per costruire la chiave di decrittazione deve fornire entropia sufficiente a rendere difficile la decrittazione della forza bruta. Utilizzando la meccanica dell'ordine di raccolta sopra, ogni nuovo articolo è effettivamente un bit in più. Se un livello ha solo 8 elementi, stai eseguendo la crittografia a 8 bit. Che è una schifezza; la maggior parte degli smartphone può gestirlo in pochi secondi.

Al giorno d'oggi, hai bisogno di almeno 128 per renderlo anche leggermente impegnativo. Il che ora significa che ogni livello deve contenere un sacco di roba, influendo ancora una volta sul design del tuo gioco.


2
@Christer: il tuo esempio tradisce solo l'irrilevanza della tua domanda generale. Il contenuto di "un altare segreto al di fuori di qualsiasi missione" è, per definizione, irrilevante per qualsiasi gioco che si basa fondamentalmente sul completamento delle missioni . E se il tuo gioco non riguarda il completamento di missioni, perché hai delle missioni? Ad ogni modo, il fatto generale rimane: stai spendendo molto tempo su qualcosa di non pertinente al tuo gioco o ai tuoi giocatori. Dovresti concentrare il tuo tempo ed energia molto limitati sulle cose che contano .
Nicol Bolas,

2
@Christer: " Inoltre, dato che il fatto che la crittografia viene utilizzata è trasparente per il 99,9% degli utenti, questo non è un argomento valido per essere un'idea orribile. " Se fa un uovo di Pasqua impiega più tempo nello sviluppo che potrebbe vai a funzionalità davvero utili, quindi sì, è un'idea orribile. Hai speso più tempo a formulare domande e risposte alle risposte di quanto meriti questa funzionalità . In quel momento, avresti potuto scrivere il tuo vero gioco. Se è trasparente per il 99,9% degli utenti ... allora perché dovrebbe essere importante per loro se è crittografato? Perché trascorrere del tempo per lo 0,1% delle persone?
Nicol Bolas,

2
Mi dispiace, ma mi piace divertirmi un po 'a creare i miei giochi! Non tutti possono essere un robot che produce giochi. Lasciami anche essere il giudice di quanto tempo ci vuole e quanto sarei disposto a spendere. La stessa parte di ecryption sarebbe almeno semplice da implementare.
Christer

1
The consequence here is that whatever game you design must be so narrowly focused that there is only one possible solution to every level.Non necessariamente: potrebbe crittografare il contenuto per ogni possibile soluzione e inviare duplicati di contenuti crittografati per tutte le possibili soluzioni. Lo spazio può essere salvato utilizzando una crittografia a due livelli : la chiave utente nella risposta collegata corrisponde a una soluzione specifica, il documento corrisponde al contenuto.
mucaho,

4
@mucaho: questo richiede di conoscere preventivamente "ogni possibile soluzione".
Nicol Bolas,

8

Le risposte qui sono buone; Vorrei guardarlo da un'altra prospettiva però. Quello che stai descrivendo è una funzione . Le funzionalità hanno costi e benefici. I costi includono sia i costi in dollari per la creazione della funzionalità, sia i "costi opportunità". Questi sono: in un mondo in cui hai dollari finiti, ore finite e programmatori finiti, ogni funzione che fai significa un numero infinito di possibili funzioni che non sono state fatte al suo posto.

Quindi la domanda è: puoi indicare i costi di questa funzione in termini reali? Non ci sono funzionalità gratuite, quindi sii realistico sui costi. Vuoi pagare mille dollari per questa funzione? Centomila? Un milione? Quali funzioni sei disposto a tagliare per avere questa funzione?

Penso che una volta che inizi a dare la priorità alle cose in termini di costi, benefici e opportunità perse, ti renderai conto che hai già passato troppo tempo a pensare a questa funzione quando avresti potuto pensare a modi per rendere il gioco più divertente.


5

Il problema di Alice Bob ed Eva lo dimostra bene. Come Mason ha sottolineato nella sua risposta, non puoi mantenere un segreto da Eva se Eva è anche Bob.

Pertanto, qualsiasi soluzione consisterebbe nel fatto che Bob non avesse tutte le informazioni necessarie. Dovresti trattare ogni livello come un singolo messaggio, crittografato separatamente l'uno dall'altro, e avere una fonte esterna di messaggi per il livello successivo in grado di conservare correttamente i messaggi.

Ma alla fine, diventa discutibile. Se qualcuno può giocare da solo, può anche scrivere un programma per ingerire anche il gioco. Quindi tutto ciò che stai facendo è costringerli ad andare avanti e indietro dalla tua fonte esterna (probabilmente un server di qualche tipo). Una volta che decifrano come creare i messaggi sul tuo server, è la stessa vecchia storia.

Ma stai dimenticando un elemento chiave qui. È un gioco. Se qualcuno imbroglia in un gioco, grande whoop. Non hai scritto il gioco per imbroglioni. È la stessa cosa con le procedure dettagliate o le guide di livellamento delle missioni: le persone che vogliono affrontare la sfida da sole ignoreranno le soluzioni pubblicate. Anche se tu fossi in grado di rendere impossibile decifrare il gioco senza giocarci (sappiamo che è logicamente impossibile, ma ANCHE SE tu potessi) ci vorrebbe solo un ragazzo che ci attraversa prima di pubblicare tutto il necessario per batterlo. Quindi stai solo ritardando l'inevitabile.

Trascorri il tuo tempo facendo un gioco fantastico. Ci sono dieci cose di cui ogni gioco ha bisogno e l'ultima volta che ho guardato, la crittografia non era una di queste.


2

Credo che la tua idea sia inutile.

Quando qualcuno gioca, sceglie di giocare, non lo fa per vincere un premio, lo fa per divertimento.

Gli utenti sanno che il più divertente viene dal modo in cui intendevi e non imbrogliano , poiché i tuoi clienti si fidano già di te come narratore.

Inoltre, non appena qualcuno ha trovato la soluzione a un puzzle, ovvero la tua chiave, può semplicemente pubblicarlo da qualche parte su Internet.
I giocatori che vogliono imbrogliare sarebbero comunque in grado di farlo.


Tuttavia, se il tuo gioco presenta più soluzioni, come i livelli segreti di Super Mario Land, la crittografia delle risorse impedirà un facile accesso a tali soluzioni.

Mentre questo sembra un punto a favore della tua idea, alla fine non lo è.

Anche con la crittografia sarebbe ancora possibile sapere che esistono soluzioni segrete.
Una volta noto che esiste una soluzione segreta, impedire ai giocatori di guardare le risorse segrete sarebbe irrilevante in quanto vorrebbero comunque accedere alle parti nascoste del gioco attraverso il gioco stesso (sì, anche se hanno già visto ogni nascosto tessitura / clip / / testo audio).

Puoi prevenire la fuoriuscita dell'esistenza di soluzioni segrete usando qualche ignara tecnica 1 , ma sarebbe comunque sospetto (perché farlo se non ci sono soluzioni segrete?), I giocatori perderebbero interesse a trovarle e avresti meno giocatori , non di più.
Dopotutto possiamo giocare ancora un paio d'ore dopo aver completato una partita per far scattare alcune uova di Pasqua, ma non giocheremo un minuto in più se attivarle richiederebbe uno sforzo titanico!


Quello che vuoi fare è come un libro di scrittura in cui il prossimo capitolo è crittografato con una parola del capitolo corrente, per impedire ai lettori di rovinarsi il finale.
Pensaci, non è inutile?

1 Praticamente come fa VeraCrypt con volumi nascosti.


1
In realtà mi piace l'idea del libro. Capisco che potrebbe frustrare molte persone, ma potrei anche immaginare che le persone desiderino davvero un libro del genere. Conosco persone che non possono fare a meno di rovinarsi il finale saltando avanti, anche quando cercano di non farlo. Quindi immagino che un libro del genere possa aiutare. Potrebbero comunque cercare le chiavi online a meno che le chiavi non vengano personalizzate. Anche allora potevano solo cercare direttamente il finale. Tuttavia, se fossero così disperati, non avrebbe senso cercare di fermarli ulteriormente come hai detto.
Christer,

1

Non commenterò la fattibilità commerciale, tuttavia da una prospettiva puramente tecnica è una sfida divertente.


Vorrei prima notare che tutto ciò che non è crittografato non può essere protetto. Non puoi bloccare l'ingresso in un segreto, i cracker troveranno un modo per aggirare il cancello, invece devi rendere l'intero segreto lo stesso cancello. In termini di risorse, ciò non deve necessariamente significare l'intera trama, ecc ... semplicemente crittografando il piano e quali sono utilizzati e come è sufficiente, e per motivi di prestazioni desidererai crittografare il minor numero possibile di dati.


In secondo luogo, hai ragione nel dire che se la chiave è contenuta nel software, verrà presa in giro dal software. Molti giochi, quando proteggono i contenuti, cercano di usare la sicurezza per oscurità o meccanismi che assicurano che il software di gioco non sia stato alterato. Quelli stanno solo ritardando le tattiche.

La tua idea di utilizzare la soluzione di un enigma come chiave è piuttosto interessante, tuttavia, l'utilizzo della chiave fornita direttamente è probabilmente facilmente forzato. Invece, considera l'input dell'utente come una password e usa uno schema di hashing della password all'avanguardia: l'hash prodotto è la chiave.

Tuttavia, anche in questo caso, c'è un errore nell'ipotesi che la chiave non sia presente nel gioco. In caso contrario, non potresti indirizzare i tuoi giocatori verso di esso; quindi, piuttosto che cercare di forzare bruscamente la cassaforte, si potrebbe invece decodificare le risorse del gioco alla ricerca di indizi. Un potenziale enigma a cui riesco a pensare è usare le trame per codificare i glifi, e quindi la password consisterebbe in alcuni dei disponibili sulla tastiera, come rivelato dalle posizioni che il giocatore avrebbe dovuto visitare (in ordine):

  • il nocciolo del problema è che il riconoscimento delle immagini è ancora piuttosto difficile per i computer
  • sulla quale si sovrappone il fatto che i cracker CAPTCHA sono sintonizzati per lettere e cifre, non per glifi personalizzati
  • in cima al quale mettiamo a strati il ​​fatto che combinando più trame (con trasparenza) per rivelare il glifo al giocatore, nessuna singola risorsa nel gioco contiene come dovrebbe apparire il glifo
  • usa un'altra trama (con frammenti) in tutto il luogo, ma mai in un modo che generi un glifo completo tranne nei luoghi nascosti che il giocatore non dovrebbe mai essere in grado di raggiungere

e qualsiasi programma per estrarre automaticamente la combinazione di glifi vincente avrà un inferno di un giorno.


In terzo luogo, la prossima difficoltà è la condivisione. Una volta trovata la soluzione a un segreto, verrà rivelata. Idealmente, a ciascun individuo dovrebbe essere consegnata una versione leggermente diversa del software: una in cui la chiave è unica per la sua versione del gioco. Per renderlo pratico, suppongo che sarebbe più facile separare il gioco (con le sue risorse) dai "segreti" (crittografati) e "driver segreto" (il generatore di chiavi, che posiziona molti frammenti di trama in molti luoghi diversi , alcuni dei quali formano le password).

Il vettore di attacco ovvio sta ingannando il generatore nel scegliere sempre la stessa password o inducendo il verificatore ad accettare sempre la stessa password (scaricando ad esempio il file dei segreti di qualcun altro).

Qui, una potenziale soluzione sarebbe quella di collegare i file all'account dell'utente e di salare la password come di solito è raccomandato:

  • quando l'utente richiede un set di file, genera in modo casuale un salt e tutte le password che hai segreti, quindi crea le risorse segrete (potresti voler limitare questo processo a una volta / giorno / utente per esempio, per evitare di sovraccaricare il tuo server)
  • memorizzare il timestamp della generazione e il sale nelle informazioni dell'account dell'utente
  • rispedire all'utente il timestamp e i file segreti personalizzati

Quindi, quando l'utente è pronto a inviare una password:

  • far accedere l'utente (se non lo era già)
  • fare in modo che il software invii sia la data / ora che la password di glifo
  • se il timestamp è diverso da quello memorizzato, avvisare l'utente che sta utilizzando un set obsoleto di file segreti
  • se la password è già stata tentata troppe volte, avvisare l'utente che sta utilizzando un set obsoleto di file segreti
  • altrimenti, hash salt + password per produrre la chiave
  • in caso contrario, rispedire la chiave all'utente in modo che possa vedere i suoi file personalizzati
  • aumentare il numero di volte in cui questa password è stata tentata da questo account

L'obiettivo qui è impedire il più possibile la condivisione degli account:

  • la condivisione di un account per generare file segreti è (a) limitata, perché solo uno può essere generato al giorno e (b) inutile, perché l'ultimo generato rende l'altro obsoleto
  • condividere un account e distribuire i file segreti associati è inutile, perché una determinata password può essere utilizzata solo N volte prima che non restituisca più la chiave

E ci siamo quasi.


Infine, anche lì, un cracker potrebbe rilasciare una versione modificata del gioco in cui le risorse segrete vengono decodificate e integrate direttamente (ignorando il tuo accurato schema di verifica).

La soluzione è semplice (e rende quasi tutto al di sopra di 1 obsoleto ): non fidarti del client.

Crea una classifica sul tuo sito web e tieni traccia dei progressi dei giocatori nel loro account. I giocatori possono affermare di aver finito il gioco tutto ciò che vogliono, ma a meno che il loro account non rifletta questo, tutti sanno che hanno imbrogliato ...

... questo si chiama pressione sociale;)

1 Tranne il file di posizionamento delle trame, che è stato utilizzato per impedire a un programma di indovinare la chiave e tuttavia consentire a un utente di ottenerla.


Grazie per la tua risposta premurosa. Fai buoni punti. Vorrei aggiungere che la chiave / soluzione non deve essere archiviata nel gioco come hai detto. Potrebbe essere nascosto nel codice HTML della pagina Web di gioco, ad esempio, forse vuoi ricompensare le persone che guardano attraverso cose del genere. Ma anche nel gioco potresti essere più creativo come usare gli indovinelli come soluzione, geometria che rivela informazioni se viste da un angolo, usare cose relative al contesto che probabilmente non otterresti se non avessi letto gran parte della tradizione del gioco. Ad esempio il modo in cui Skyrim ha libri o registri nei terminali dei computer.
Christer,

Non ho menzionato questo nella mia domanda, quindi non preoccuparti. Immaginavo che avresti giocato per un intero gioco e sembrava un gioco completo. Tuttavia c'era questa porta nascosta che aveva una strana serratura che non hai mai superato. Si spera che le persone si incuriosiscano e parlino, magari anche le persone che lavorano insieme per capirlo. Dal momento che nessuno lo ha capito, è anche una specie di gloria da provare. Forse se passerà abbastanza tempo i segreti inafferrabili della porta genereranno leggende! Fa schifo avere quello rovinato da qualcuno solo guardando attraverso le risorse del gioco.
Christer,

@Christer: Fa schifo avere quello rovinato da qualcuno che sta solo guardando le risorse del gioco. => questo è risolvibile usando file segreti per descrivere il luogo (riutilizzando principalmente le trame esistenti), una volta che il segreto è stato scoperto una volta, è fuori ...
Matthieu M.

0

È un'idea interessante; una variante sui dischi puzzle e sui sistemi di protezione dalla copia digitati dal manuale. Penso che alcuni dei giochi "ARG" funzionino in questo modo, dove si comprende che i giocatori agiscono collettivamente contro il progettista del gioco.

Ovviamente una volta che la prima persona lo decifrerà lo pubblicheranno su Internet.

I contenuti generativi o procedurali possono funzionare allo stesso modo: non vedi lo stesso mondo di un altro giocatore se non condividi un "seme".

Non riesco a vedere alcun problema legale con esso, anche se Apple potrebbe rifiutarlo dal loro App store e potresti dover fornire la soluzione per ottenerlo approvato sulle console di gioco.


0

Contemplare ulteriori misure di sicurezza è divertente, ma non aggiunge valore concreto al tuo prodotto, ma dimostra la tua abilità con i cracker che incontrano il tuo prodotto. In linea di principio, il tuo antagonista ti raggiungerà.

Contrariamente agli sviluppatori che prosperano nella creatività, i cracker sono persone analitiche: possono sfruttare intuitivamente il tuo programma. Quando gli sviluppatori tendono a misure di sicurezza eccessive, vengono negati: il cracker potrebbe invertire nuovamente il loro schema di protezione .

Che tu voglia partecipare a questo concorso di base, questa è la tua chiamata, ma non lasciarti distrarre dal tuo prodotto finale, il che deve soddisfare il cliente. Uno stravagante schema di crittografia che trasforma il gioco in una lumaca non aiuta.


0

Mason Wheeler ha ragione: non puoi farlo. Qualcuno può sempre decodificare il tuo gioco se lo desidera.

Non è necessario "proteggere" il tuo gioco come descritto. Non appena una persona trova l'uovo di Pasqua, il segreto è fuori dalla borsa. Se ogni copia del gioco ha un uovo di Pasqua diverso, allora sarà conosciuta solo la copia dell'hacker. Ti interessa davvero che un hacker su 1000 persone abbia trovato l'uovo di Pasqua senza passare per il gameplay?

La legge sul copyright è tale che nessuno può guadagnare con il tuo gioco senza rischiare una causa legale, quindi il copyright ti protegge.

Per quanto riguarda gli utenti casuali che mettono le tue trame sull'avatar del loro forum, e allora? Consideralo la pubblicità di base.

Diventare ossessivi riguardo alla "protezione" delle cose ti distrarrà da realtà difficili come: creare il gioco .

Quando vedo persone senza prodotto che parlano dei loro schemi di protezione IP per cose che non esistono nemmeno, è per me un momento di passaggio perché alza un enorme stronzetto rosso su tutto il progetto.


-1

Alcune possibilità:

  • Semplice offuscamento del vecchio codice . Non renderà impossibile la decodifica del codice, ma almeno sarà difficile.

  • Soluzione lato server. Si inviano alcuni comandi speciali al server e il server può inviare il codice ... o persino scaricare un DLC.

  • È possibile utilizzare Steganography per nascondere il codice eseguibile in altri contenuti.

Questo non renderà il tuo segreto sicuro al 100%, ma sembra che nessuno perderà nemmeno i soldi se il segreto viene rivelato.


-1

È inutile come qualsiasi altro schema in cui si memorizzano chiave e algoritmo sul client. Se chiedi "dov'è la chiave, faccio affidamento sul contributo degli utenti e non lo memorizzo da solo?", Ricorda che il tuo puzzle ha regole e risorse per le sue definizioni - è risolto da un algoritmo, non dal bruteforcing. Questo algoritmo esatto e le sue risorse sono l'algoritmo di generazione delle chiavi che hai appena codificato nel gioco in uno stato offuscato. Chiunque può recuperare la chiave "inesistente" semplicemente scrivendo un piccolo programma che risolve il tuo puzzle secondo le tue regole.


1
Ma non tutti i puzzle sono facilmente risolvibili da un computer, come un indovinello che non è mai stato realizzato prima. È anche difficile per un computer leggere tutte le finestre di dialogo del gioco ed elaborare tutte le trame. Anche se lo facesse, come farebbe a sapere quando è apparso qualcosa di simile a questo puzzle? La chiave completa non ha nemmeno bisogno di essere memorizzata nel gioco, forse c'è un indizio per leggere il retro della scatola in cui si trova la chiave, il computer non può farlo. Anche se il puzzle fosse qualcosa che il computer poteva risolvere, come il Sudoku, almeno avrebbe risolto il puzzle senza aggirarlo.
Christer,

@Christer, non è diverso che capire qualsiasi altra crittografia "sicurezza dall'oscurità" fatta in casa. "Sulla scatola": hai appena scritto la chiave per la risorsa "copertina di carta" che dai all'utente invece della risorsa "file" che fornisci all'utente . Grande affare.
Oleg V. Volkov,

@Chriser, ovvero risolvere "un indovinello che non è mai stato fatto prima" equivale esattamente a "risolvere un algoritmo di crittografia fatto in casa che non è mai stato fatto prima".
Oleg V. Volkov,

Non vedi come potresti generare una chiave di decrittazione basata sull'input dell'utente? Non vedi che questo input dell'utente potrebbe essere qualcosa? Qual è l'input dell'utente corretto che genera una buona chiave di decrittazione che chiedi? Chissà, è nascosto in tutto il gioco in tutti i modi interessanti. Spero che tu lo trovi in ​​quanto questo è tutto il punto! In ogni caso, buona fortuna per arrivare a quel contenuto.
Christer,

In che modo esattamente è diverso dalla fonte di lettura? Esegui l'attività secondo le regole stabilite -> ottieni la chiave. È tutto. Tranne che puoi prendere scorciatoie semplicemente leggendo i tuoi "indizi" da altre risorse di gioco invece di giocare effettivamente.
Oleg V. Volkov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.