2009-06-25 4 views
5

Sto facendo un piccolo webgame che ha compiti e soluzioni, le soluzioni sono risolte inserendo un codice dato all'utente dopo il completamento di un compito. Per avere un po 'di sicurezza (contro l'inganno) non voglio memorizzare i codici generati dal gioco in testo semplice. Ma dal momento che ho bisogno di essere in grado di dare a un giocatore il codice quando ha portato a termine il compito, non posso farlo da allora, non posso ripresentarlo.Qual è la crittografia "password" Python più sicura

Quindi qual è il modo più sicuro per crittografare/decodificare qualcosa usando python?

+0

guarda qui: http://stackoverflow.com/questions/172486/what-pure-python-library-to-use-for- aes-256-encryption –

+2

Come saresti in grado di imbrogliare se hai memorizzato quei codici in formato testo? – innaM

+0

Proprio perchč qualcuno si aggrappi alla tabella del database con i codici ... – espenhogbakk

risposta

5

Se il tuo script è in grado di decodificare le password, così qualcuno può entrare nel tuo server. La cifratura è utile solo quando qualcuno inserisce una password per sbloccarla - se rimane sbloccata (o la password ha la password per sbloccarla), la crittografia è inutile

Ecco perché l'hashing è più utile, dal momento che è un processo unidirezionale - anche se qualcuno conosce l'hash della password, non conosce il testo normale che deve immettere per generarlo (senza molta forza bruta)

Non mi preoccuperei di mantenere le password di gioco come plain-text. Se sei preoccupato di proteggerli, correggere eventuali iniezioni SQL/etc, assicurati che il tuo server web e altro software sia aggiornato e configurato correttamente e così via.

Forse pensi ad un modo per rendere meno attraente il rubare le password rispetto al gioco? Ad esempio, c'era un gioco (non ricordo cosa fosse) che se hai usato il livello skip cheat, sei passato al livello successivo ma non lo ha contrassegnato come "completo", oppure potresti saltare il livello ma non ha ottenuto alcun punto.Oppure guarda Project Euler, puoi fare qualsiasi livello, ma ottieni solo punti se inserisci la risposta (e risolvere la risposta è l'intero punto del gioco, quindi sconfiggere ingannare il gioco)

Se siete veramente paranoico, si potrebbe crypto possibilmente uso asimmetrica, in cui è fondamentalmente crittografare qualcosa con key A, e si può solo leggere con key B ..

mi si avvicinò con un concetto simile per l'utilizzo di crittografia GPG (popolare asimmetrica sistema crittografico, utilizzato principalmente per la crittografia e la firma delle e-mail) to secure website data. Non sono sicuro di come questo si applicherebbe alla protezione delle password di livello di gioco e, come ho detto, avresti bisogno di essere davvero paranoico per considerare anche questo ..

In breve, direi memorizzare le password in testo semplice, e concentrare i tuoi problemi di sicurezza altrove (il codice delle applicazioni web stesso)

+0

Sono d'accordo con te per la maggior parte, e questo è quello con cui mi ritrovo. Anch'io penso che se lo faccio "impossibile" per fare gli iniettori di SQL e cose del genere non ci sono problemi nel memorizzare le password di livello in testo normale, dal momento che nessuno dovrebbe essere in grado di farle uscire, ma se le fanno uscire , possono "correre" nel gioco senza problemi ed essere il vincitore ... Quindi stavo pensando che solo per essere sicuri, alcune crittografie non avrebbero danneggiato. – espenhogbakk

+0

E le soluzioni di crittografia GPG sembrano un po 'paranoiche sì :) – espenhogbakk

2

Se si tratta di un gioco Web, non è possibile memorizzare i codici lato server e inviarli al client quando ha completato un'attività? Qual è l'architettura del tuo gioco?

Come per la crittografia, forse provare qualcosa come pyDes?

5

La crittografia più sicura non è crittografia. Le password dovrebbero essere ridotte a un hash. Questa è una trasformazione unidirezionale, rendendo la password (quasi) irrecuperabile.

Quando dare a qualcuno un codice, è possibile effettuare le seguenti di essere in realtà sicuro.

(1) genera una stringa casuale.

(2) dare loro la stringa.

(3) salva l'hash della stringa che hai generato.

Una volta.

Se "dimenticano" il codice, è necessario (1) assicurarsi che sia autorizzato a ricevere il codice, quindi (2) ripetere il processo (generare un nuovo codice, darlo a loro, salvare l'hash.)

+0

come dice la domanda, gli hash non vanno bene, dal momento che deve essere in grado di dire al giocatore la password –

+2

@Adrian: buon punto. Tuttavia, penso che la domanda sia difettosa. Oppure, questa non è una vera sicurezza, nel qual caso la crittografia non aiuta molto. –

+0

C'era un altro post ma è stato eliminato che penso sia stata una buona idea: generare l'hash di una stringa nel nome utente + "_ mygame _" + livello (magari aggiungere anche un sale per una maggiore sicurezza?) Non so chi ha postato lo ha cancellato in seguito, ma penso che sia un buon approccio. –

0

La tua domanda non è chiara. Dove vuoi che si verifichi la decrittografia? In un modo o nell'altro, il testo in chiaro deve emergere perché hai bisogno che i giocatori lo conoscano.

Scegli uno cipher e fallo.