2010-10-19 6 views
2

Je crée un service de connexion pour un jeu MMO open source. Je ne connais pas grand chose du côté de la sécurité/du cryptage et je recherche une solution qui offrira une bonne protection contre les pirates et ne doit pas être trop coûteuse à générer.Algorithme de génération de jeton de sécurité pour le service de connexion MMO

Notre ancien système utilisait un système d'authentification très simple en stockant le mot de passe comme SHA1 dans la base de données. Pour notre nouveau service, nous souhaitons authentifier ceci via un jeton d'authentification généré lorsque l'utilisateur se connecte pour la première fois et est valide tout au long de la session. Est-ce qu'une simple chaîne générée aléatoirement suffirait pour cela ou devrais-je envisager quelque chose de plus compliqué pour le garder en sécurité?

Répondre

4

Ne pas réinventer la roue. Le plus gros problème avec la cryptographie moderne est lorsque les gens veulent utiliser leur propre, utiliser SSL/TLS ou HTTPS. Cela peut être fait en toute sécurité sans l'achat d'un certificat si vous codez en dur un certificat autodéclaré. Bien que chaque serveur devrait avoir son propre certificat, ou vous courez ce risque de MITM.

Ce que vous cherchez est un gestionnaire de session, et idéalement vous utiliseriez le witty library. Cependant, cette bibliothèque peut être appropriée ou non. En résumé, un gestionnaire de session utilise une clé Cryptographic Nonce et cette clé est utilisée pour rechercher l'état d'une session dans un magasin de données permanent. Chaque fois qu'un utilisateur s'authentifie, il reçoit un nouveau Nonce cryptographique, et cette valeur expire après un certain temps d'inactivité. Pour la génération de nonce j'utiliserais le openssl library, et 256 octets de taille devraient être abondance. Un délai d'attente dépend de votre application, mais il ne doit pas dépasser 1 jour.

+0

Merci Rook, je pense que cela devrait me conduire dans la bonne direction. –

+0

@Kyle C votre bienvenue. Je suis heureux d'aider. – rook

2
  • Règle 1: n'essayez pas de créer votre propre connexion unique.
  • Règle 2: si vous êtes tenté, reportez-vous à la Règle 1.

Il y a beaucoup de systèmes disponibles librement. Pensez à utiliser OpenID. C'est simple, plutôt fort et gratuit.

PS. Jetez un oeil à l'article Wiki.

+0

J'ai vérifié OpenID initialement, mais je ne vois pas une bonne implémentation disponible pour C++ ... –

1

Eh bien, il y a tellement de vecteurs d'attaque dans un système. Ces sortes de problèmes sont assez compliqués à résoudre correctement. La première étape serait certainement de s'assurer que vous ne réinventez pas la roue, cela vous fera gagner du temps et évitera probablement une foule d'erreurs.

J'ai récemment construit un système. Dans mon cas, je n'avais pas besoin de secret, j'avais juste besoin d'authenticité. J'ai construit mon système au-dessus de la bibliothèque de chiffrement d'openssl. J'ai utilisé principalement le DSA algorthim. La communication a été authentifiée avec des signatures attachées à toutes les communications. Ce n'est pas particulièrement efficace de le faire de cette façon, mais pour mes fins, la communication était irrégulière et en tant que telle c'était bien. La clé correspondante a été distribuée avec le logiciel pour générer des communications signées DSA.

+0

Ceci est un bon conseil. J'ai fini par discuter avec les autres membres de l'équipe et ils ont réfléchi à ce que nous allions faire. Vraiment ça va être très simple. Nous authentifions le combo utilisateur/passe via un backend mysql (mots de passe stockés sous SHA1). Ensuite, nous allons générer une chaîne de hachage basée sur l'adresse du client, le port, la date-heure actuelle et une autre valeur aléatoire, puis SHA1 cela et le stocker dans la base de données. –