2010-08-13 31 views
0

Je suppose que cela aurait pu être posté quelque part, j'ai fait des recherches, mais je n'ai rien trouvé.Comment écrire un système de clé privée/publique pour une authentification de serveur?

J'ai ce serveur sur lequel je lance un serveur de jeu, et où je veux avoir un serveur TCP (éventuellement écrit en Ruby) qui fournira une pseudo-session avec peu de commandes disponibles (comme redémarrer le serveur de jeu, envoyer Ce que je veux, c'est une authentification de type SSH, où les gens ont des clés publiques DSA & (que je sais comment générer), et la clé publique est reconnue par le serveur comme une authentification correcte.

Je ne suis pas à la recherche d'implémentation de code, mais principalement de la façon dont cela devrait être architecturé.

Ce que je pensais était quelque chose comme:

  • [Client] Se connecter au serveur
  • [Server] Envoyer clé publique
  • [Client] Envoyer clé publique codée avec la clé publique du serveur
  • [Server] Comparer la clé avec une base de données de clients autorisés
  • [Server] Générer une clé de session, envoyer il crypté avec pub
  • [Client] clé de session décode et commence à envoyer des messages toujours accompagnés de la clé de session

Mais je me sens comme client ce qui manque quelque chose. En particulier, lorsque je regarde les systèmes DSA et PK, je continue à voir la signature des messages, et je ne suis pas sûr de comprendre à quel point c'est différent de l'utilisation des clés pub pour chiffrer et de la clé de session.

Si ma question n'est pas claire, je serais ravi d'éditer mon post de cours :-).

+1

ne pas oublier l'horodatage ou nonce de sorte que vous n'êtes pas soumis à rejouer les attaques – cobbal

Répondre

2

Ou utilisez SSL, qui a un support de bibliothèque presque omniprésent pour n'importe quelle plate-forme?

D'abord, c'est plus facile. Le code est écrit, testé, revu et maintenu.

Deuxièmement, c'est plus sûr. Si vous ne comprenez pas pourquoi les messages doivent être signés, que pourriez-vous oublier? Honnêtement, même TLS (SSL), qui a fait l'objet d'un examen minutieux, a eu un sérieux défaut dans le bug de renégociation qui a été récemment annoncé. Même lorsque vous savez ce que vous faites, il est difficile de concevoir un protocole sécurisé. Soit dit en passant, SSH et SSL calculent un code d'authentification de message pour chaque enregistrement de protocole afin qu'un man-in-the-middle ne puisse pas altérer le contenu du message.

+0

SSH est hors de question, je ne veux pas qu'ils aient un véritable accès shell à la machine. Cependant, je comprends parfaitement le point au sujet de SSL. Pour une raison quelconque, je pensais que ce n'était pas exactement cela. En fait, je ne savais pas que les certificats X.509 pouvaient jouer le rôle d'un système PK. Je vais ensuite me pencher là-dessus, merci de m'avoir orienté dans une meilleure direction! –

+0

@ ThibaultMartin-Lagardette SSH ne doit pas impliquer 'un véritable accès shell à la machine'. Vous pouvez le limiter aux communications. – EJP

2

Si vous souhaitez une implémentation de type SSL, pourquoi ne pas simplement utiliser SSL? Au lieu de ressembler à SSH, pourquoi ne pas utiliser SSH?

+0

C'est exact. Merci pour un meilleur conseil :-) –

2

Si vous choisissez d'utiliser votre propre couche de sécurité (est parfois la bonne réponse), il y a beaucoup de subtilités à connaître.Commencez par lire ce que je considère la tombe définitif sur le sujet:

Bruce Schneier Applied Cryptography