IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau et multijoueurs Discussion :

Sécurité pour le réseau?


Sujet :

Réseau et multijoueurs

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 195
    Points
    195
    Par défaut Sécurité pour le réseau?
    Bonjour,

    Je travaille actuellement sur un MMO, et j'ai une question sur le réseau.
    Lors de la connexion d'un utilisateur il devra envoyer ses identifiant, mais si le mot de passe est envoyé en clair rien n'empêchera un pirate d'intercepter la conversation et de récupérer le mot de passe.

    La solution qui m'est venue à l'esprit est de hacher le mot de passe côté client avant de l'envoyer.

    Cependant, cette solution ne fonctionne que pour le mot de passe (Et encore il y a le danger des dictionnaires de hashs), ce qui signifie que les transmissions entre le client et le serveur ne seront pas protégés.

    J'ai donc pensé à utiliser un cryptage asymétrique (RSA) puis un cryptage symétrique comme pour le protocole SSH

    Cela me semble la solution idéale, cependant je cherche toujours une façon simple de crypter en RSA, pour ce qui est du cryptage symétrique j'utiliserais l'opération XOR.

    Je poste ce topic car je ne trouve pas de façon simple de crypter asymétriquement en RSA, et que j'aimerais avoir votre avis sur cette architecture.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    salut,

    rien ne t'empêche de faire une connexion spécifique avec du bon vieux SSL standard pour les données 'confidentielles'.

    Mais pour un jeu, il n'y a aucun intérêt à crypter les données (encore moins pour 'protéger' le protocole d'échange de données !), d'autant que c'est un excellent moyen pour mettre à genoux en moins de deux les ressources CPU de ton serveur pour rien.

    La règle de base est: "Never trust the client".

    Donc tout ce que veut faire le client doit être systématiquement vérifié par le serveur (je parle là des communications en cours de partie). Parce que même si tu as le meilleur cryptage des données du monde, rien ne te garanti que le client n'est pas une version patchée du jeu qui fait des choses non autorisées.

    A partir de là, il n'y a plus aucun intérêt à crypter les échanges.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Citation Envoyé par Lynix Voir le message
    Je poste ce topic car je ne trouve pas de façon simple de crypter asymétriquement en RSA, et que j'aimerais avoir votre avis sur cette architecture.

    Merci d'avance
    Pour du RSA, le mieux est quand même de passer par une lib. Et dans l'idéal, via du SSL, c'est plus simple !

    Mais franchement, c'est bien compliqué pour pas grand chose. Si tu veux faire un accès vraiment sécure, voila comment tu peux t'y prendre :

    Le serveur possède le mot de passe haché n fois (le hash du hash du hash du . . .). Quand le client veux se connecter, le serveur envoie n-1 . le client hache donc le mot de passe n-1 fois et l'envoie au serveur.

    Le serveur peut hacher ce mot de passe une fois de plus afin de voir s'il correspond à ce qu'il a en mémoire. Si l'identification est ok, le serveur a deux choix :
    1/ Stocker le nouveau hash dans sa BDD, associé a n-1. A la prochaine connexion, il enverra n-2 comme challenge au client.
    2/ Si n devient petit, le serveur peut renvoyer une autre requête avec un challenge très grand afin de relancer la machine. Une fois que ceci a été fait, il est important de demander au client de changer de mot de passe pour éviter une attaque par dictionnaire de challenge/hash. Cela ne devrait pas se produire avant un moment si n fait quelque dizaine de milliers.

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 195
    Points
    195
    Par défaut
    Citation Envoyé par nouknouk Voir le message
    salut,

    rien ne t'empêche de faire une connexion spécifique avec du bon vieux SSL standard pour les données 'confidentielles'.

    Mais pour un jeu, il n'y a aucun intérêt à crypter les données (encore moins pour 'protéger' le protocole d'échange de données !), d'autant que c'est un excellent moyen pour mettre à genoux en moins de deux les ressources CPU de ton serveur pour rien.

    La règle de base est: "Never trust the client".

    Donc tout ce que veut faire le client doit être systématiquement vérifié par le serveur (je parle là des communications en cours de partie). Parce que même si tu as le meilleur cryptage des données du monde, rien ne te garanti que le client n'est pas une version patchée du jeu qui fait des choses non autorisées.

    A partir de là, il n'y a plus aucun intérêt à crypter les échanges.
    Le cryptage est surtout pour empêcher les pirates d'intercepter la communication et de découvrir des données sensible.

    Je précise qu'il n'y a pas que les mots de passe qui seront sensible.

    L'idéal serait donc d'ouvrir un canal sécurisé et un non-sécurisé?

    Et comment passer par le SSL? J'utilise la SFML pour les sockets

  5. #5
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par Lynix Voir le message
    Le cryptage est surtout pour empêcher les pirates d'intercepter la communication et de découvrir des données sensible.
    Je précise qu'il n'y a pas que les mots de passe qui seront sensible.
    1/ Je ne vois pas vraiment ce qui pourrait être sensible hormis éventuellement le mot de passe de connexion.


    2/ De toute façon c'est un faux débat pour moi: c'est à l'utilisateur de protéger son accès (jusqu'à son FAI, on peut ensuite considérer que globalement le réseau est sûr), pas à chaque programme de blinder ses comms !

    Aucun jeu n'a jamais mis en place de connexion sécurisée client/serveur. Si un joueur utilise un réseau WiFi non protégé ou bien a un ordi blindé de keyloggers et qu'il se fait pirater son compte, tu n'est pas responsable de sa propre négligence.

    Raisonnement par l'absurde: te viendrait-il à l'idée d'intégrer dans ton jeu un détecteur de virus/trojan/keylogger ? Pourtant, c'est la même idée.

    Et comment passer par le SSL? J'utilise la SFML pour les sockets
    SMFL ne semble pas proposer de sockets SSL en standard ; rien ne t'empêche d'utiliser une autre lib réseau tierce en complément.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 195
    Points
    195
    Par défaut
    Le jeu est un jeu de programmation, le code sera envoyé par le client, et ce code peut être sensible selon son application dans le jeu

    Mais bon, je vais me rabattre sur le hashage comme sécurité.

    Lequel choisir entre SHA-338, SHA-512 et WhirlPool?

    Il est rare d'avoir des bases de données de SHA-338 (Plus rare que le SHA-512)

    Ensuite, je ne sais pas si c'est mieux que le SHA-512 niveau sécurité et collisions

    Sans parler du whirlpool

    Lequel utiliser dans le cas d'un mot de passe? Et lequel utiliser pour l'empreinte d'un fichier (Côté mise à jour)

    Merci d'avance

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Citation Envoyé par nouknouk Voir le message
    1/ Je ne vois pas vraiment ce qui pourrait être sensible hormis éventuellement le mot de passe de connexion.
    En effet, si c'est le cas il y a probablement problème de conception.


    Citation Envoyé par nouknouk Voir le message
    2/ De toute façon c'est un faux débat pour moi: c'est à l'utilisateur de protéger son accès (jusqu'à son FAI, on peut ensuite considérer que globalement le réseau est sûr), pas à chaque programme de blinder ses comms !
    C'est en effet un faux débat, les bonne manière en réseau sont claires. Et c'est tout le contraire de ce que tu racontes. La couche session est au dessus de la couche réseau.

    D'ailleurs SSL est lui aussi au dessus des couches réseau.

    Citation Envoyé par nouknouk Voir le message
    Aucun jeu n'a jamais mis en place de connexion sécurisée client/serveur. Si un joueur utilise un réseau WiFi non protégé ou bien a un ordi blindé de keyloggers et qu'il se fait pirater son compte, tu n'est pas responsable de sa propre négligence.
    Il n'y a pas besoin de connexion sécurisée pour faire une authentification sécurisée. Il faut juste passer par un système de challenge/réponse, afin que l'échange permettant d'identifier la personne ne puisse pas être rejoué.

    Citation Envoyé par nouknouk Voir le message
    Raisonnement par l'absurde: te viendrait-il à l'idée d'intégrer dans ton jeu un détecteur de virus/trojan/keylogger ? Pourtant, c'est la même idée.
    Absolument pas. Et c'est faire un très grave contresens que de le croire.

    Pour ce qui est des hachage, si tu veux mettre en place la solution que je propose, alors il n'y a pas besoin d'un truc bien compliqué. Un simple MD5 ou SHA-1 suffit largement puisque chaque hachage est a usage unique

    Pour les MAJ, MD5 ou SHA-1 suffisent aussi largement.

    Pas besoin de sortir un bazooka pour écraser une mouche.

Discussions similaires

  1. Réponses: 61
    Dernier message: 29/12/2016, 12h58
  2. [2.0] Modifier le niveau de sécurité pour une appli réseau
    Par Cereal123 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 30/05/2007, 15h28
  3. Réponses: 7
    Dernier message: 29/07/2005, 09h51
  4. quels types de cable faut -il pour un réseau LAN
    Par oumarsaw dans le forum Développement
    Réponses: 6
    Dernier message: 25/08/2004, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo