2009-06-25 6 views
5

Je fais un petit jeu web qui a des tâches et des solutions, les solutions sont résolues en entrant un code donné à l'utilisateur après l'achèvement d'une tâche. Pour avoir une certaine sécurité (contre la triche) je ne veux pas stocker les codes générés par le jeu en texte brut. Mais puisque j'ai besoin d'être en mesure de donner à un joueur le code quand il a accompli la tâche je ne peux pas le hacher depuis lors je ne peux pas le reprendre.Quel est le cryptage "mot de passe" python le plus sécurisé

Alors, quel est le moyen le plus sûr de crypter/décrypter quelque chose en utilisant python?

+0

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

+2

Comment seriez-vous capable de tricher si vous stockez ces codes en texte clair? – innaM

+0

Juste en raison de quelqu'un qui obtient une prise de la table de base de données avec les codes ... – espenhogbakk

Répondre

5

Si votre script peut décoder les mots de passe, quelqu'un peut s'introduire dans votre serveur. Le chiffrement n'est vraiment utile que si quelqu'un entre un mot de passe pour le déverrouiller - s'il reste déverrouillé (ou le mot de passe pour le déverrouiller), le chiffrement est inutile. processus à sens unique - même si quelqu'un connaît votre hash de mot de passe, ils ne connaissent pas le texte brut qu'ils doivent entrer pour le générer (sans beaucoup de force brute)

Je ne m'inquiéterais pas de garder les mots de passe du jeu comme texte brut. Si vous êtes préoccupé par leur sécurisation, corrigez éventuellement les injections SQL/etc, assurez-vous que votre serveur Web et d'autres logiciels sont à jour et configurés correctement et ainsi de suite. Peut-être pensez-vous à un moyen de rendre moins attrayant de voler les mots de passe que réellement jouer le jeu? Par exemple, il y avait un jeu (je ne me souviens pas de ce que c'était) qui si vous utilisiez le niveau de triche, vous passiez au niveau suivant mais il ne le marquait pas comme "complet", ou vous pouviez sauter le niveau mais n'a pas obtenu de points.Ou regardez Projet Euler, vous pouvez faire n'importe quel niveau, mais vous n'obtenez des points que si vous entrez la réponse (et la réponse est le point entier du jeu, donc la tricherie bat le jeu)

Si vous êtes vraiment paranoïaque, vous pouvez éventuellement utiliser Crypto asymétrique, où vous chiffrer essentiellement quelque chose avec key A, et vous ne pouvez le lire avec key B ..

je suis venu avec un concept similaire pour l'utilisation du chiffrement GPG (populaire asymétrique système crypto, principalement utilisé pour le cryptage ou la signature des courriels) to secure website data. Je ne suis pas sûr de savoir comment cela s'appliquerait à la sécurisation des mots de passe au niveau du jeu, et comme je l'ai dit, vous devriez être vraiment paranoïaque pour envisager cela ..

En bref, je dirais stocker les mots de passe texte en clair, et concentrez vos préoccupations de sécurité ailleurs (le code des applications Web lui-même)

+0

Je suis d'accord avec vous pour la plupart, et c'est ce que je finis avec. Je pense aussi que si je rends "impossible" de faire sql injectons et des trucs comme ça, il n'y a aucun problème à stocker les mots de passe en texte clair, puisque personne ne devrait pouvoir les sortir, mais s'ils les sortent , ils peuvent "courir" à travers le jeu sans problème et être le gagnant ... Donc je pensais que juste pour être du bon côté, un cryptage ne ferait pas mal. – espenhogbakk

+0

Et les solutions de cryptage GPG semble un peu paranoïaque oui :) – espenhogbakk

2

S'il s'agit d'un jeu en ligne, ne pouvez-vous pas stocker les codes côté serveur et les envoyer au client lorsqu'il a terminé une tâche? Quelle est l'architecture de votre jeu? En ce qui concerne le cryptage, essayez quelque chose comme pyDes?

5

Le cryptage le plus sécurisé n'est aucun cryptage. Les mots de passe doivent être réduits à un hachage. C'est une transformation à sens unique, rendant le mot de passe (presque) irrécupérable. Lorsque vous donnez un code à quelqu'un, vous pouvez faire en fait sécurisé.

(1) générer une chaîne aléatoire.

(2) leur donner la chaîne.

(3) sauvegarder le hachage de la chaîne que vous avez générée.

Une fois. S'ils "oublient" le code, vous devez (1) vous assurer qu'ils sont autorisés à recevoir le code, puis (2) recommencer le processus (générer un nouveau code, le leur donner, enregistrer le hash.)

+0

comme la question dit, les hachages ne sont pas bons, car il doit être en mesure de dire au joueur le mot de passe –

+2

@Adrian: Bon point. Cependant, je pense que la question est erronée. Ou, ce n'est pas la sécurité réelle, auquel cas le cryptage n'aide pas vraiment beaucoup. –

+0

Il y avait un autre message mais a été supprimé que je pense était une bonne idée: Générer le hachage d'une chaîne dans le nom d'utilisateur + "_ mygame _" + niveau (peut-être aussi ajouter un sel pour une meilleure sécurité?) Je ne sais pas et je l'ai supprimé par la suite, mais je pense que c'est une bonne approche. –

0

Votre question n'est pas très claire. Où voulez-vous que le décryptage se produise? D'une manière ou d'une autre, le texte en clair doit faire surface puisque vous avez besoin que les joueurs finissent par le savoir.

Choisissez un cipher et utilisez-le.