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 :

partage de score


Sujet :

Réseau et multijoueurs

  1. #1
    Membre éprouvé

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 386
    Points : 1 163
    Points
    1 163
    Par défaut partage de score
    Bonjour a tous et a toutes.

    Voici mon problème : Je souhaite envoyer le score d'un joueur vers un serveur en ligne affin de le partager et d’établir un classement. Jusque la rien de sorcier. Mon problème vient de la sécurité : comme envoyer une valeur a un serveur est simple, il est relativement simple de corrompre cette valeur avant l'envoi (on le vois souvent dans les jeux flash avec un classement).

    Je me demande donc si certains d'entre vous connaissent des techniques pouvant rendre ce mécanisme de partage plus robuste a la "triche".

    Pour répondre partiellement à la question, on peu envoyer des événements de jeu au serveur et lui laisser calculer le score. Mais ca fait plus de et de trafique, surtout pour un jeu solo ou une simple requête http suffirai.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Bonjour,

    Tu peux déjà chiffrer la communication et mettre la clé privée dans ton exécutable compilé (via une bibliothèque statique ou une implémentation perso).
    Ainsi, impossible d'envoyer un score sans regarder le binaire de ton exécutable.

    Après, il est possible d'offrir une sécurité plus importante mais je pense que ce sera plus une perte de temps qu'autre chose.

    EDIT : côté serveur, tu peux aussi utiliser des techniques de fouilles de données pour repérer les scores "étranges" (mon bon, c'est vraiment si tu veux t'amuser).

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 386
    Points : 1 163
    Points
    1 163
    Par défaut
    Ok ça confirme l'idée que ça va pas se faire en 3 lignes de code

    Merci pour ces idées je vais voir jusqu’où je veux pousser le concept. Note qu'un simple chiffrage symétrique peu demander de fouiller dans le code.

  4. #4
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Tu peux déjà chiffrer la communication et mettre la clé privée dans ton exécutable compilé (via une bibliothèque statique ou une implémentation perso).
    Ainsi, impossible d'envoyer un score sans regarder le binaire de ton exécutable.
    Ça ne paraît pas très sécurisé (et pas très applicable au logiciel libre).

    Citation Envoyé par Neckara Voir le message
    Après, il est possible d'offrir une sécurité plus importante mais je pense que ce sera plus une perte de temps qu'autre chose.
    Si tu veux bien détailler un peu plus, juste pour avoir l'idée de comment faire (ça m’intéresse par curiosité, j'ai pas encore chercher sur le net).

    Sans trop vraiment y réfléchir, j'ai quelques idées mais rien de vraiment sécurisé.

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Ça ne paraît pas très sécurisé
    Si tu as une meilleure solution...

    Après, il faut déjà toucher le binaire de l'exécutable, combien de personnes savent faire cela et combien encore s'enquiquineront juste pour tricher pour une histoire de score ?

    (et pas très applicable au logiciel libre).
    Logiciel libre ne veut pas dire mettre les clés privées dans le code github .
    De plus, où est-il question de logiciel libre dans le sujet ?

    Si tu veux bien détailler un peu plus, juste pour avoir l'idée de comment faire (ça m’intéresse par curiosité, j'ai pas encore chercher sur le net).
    Tu enregistres le tout dans une base de données et tu repères certains pattern que tu considère comme étant de la triche.

    Par exemple, s'il avait des score < 50 et que tout à coup il a un score super élevé et qu'en plus ce score est très "rond" ex. 1 000 000 000. on peut penser qu'il y a triche.
    Ou si le score est supérieur au score maximum théorique.
    Ou si le score atteint est impossible à atteindre pendant le laps de temps qu'il y a eu entre deux propositions de score.

    Après, ça pourrait être un vrai thème de recherche .

    Sans trop vraiment y réfléchir, j'ai quelques idées mais rien de vraiment sécurisé.
    Normal vu qu'on est obligé de faire confiance au client ce qui est par essence une faille de sécurité.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 386
    Points : 1 163
    Points
    1 163
    Par défaut
    Après, il faut déjà toucher le binaire de l'exécutable, combien de personnes savent faire cela et combien encore s'enquiquineront juste pour tricher pour une histoire de score ?
    Moi en l'occurrence il m'est arrivé de tester sur des jeux flash plus pour l’expérimentation que pour le score (sinon je me serait souvenu du jeu or ce n'est pas le cas). Si on peu s'arranger pour modifier le code, chiffrage ou pas ça ne change que peu de choses. Le chiffrage permet de s'assurer que c'est probablement le client qui envoi les données.

    La ou ça devient plus ardu de tricher (mais pas impossible) c'est si le client envoi tout les éventements (ennemis tuer, a quel moment, nombre de tir, de mort ...) et que le serveur vérifie la cohérence. Dans ces conditions on se rapproche d'un jeu en ligne et non d'un score en ligne

    On pourrai faire un truc un peu tordu ou le client envoi le hash de son binaire suivi d'un code envoyer par le serveur (pour éviter l'envoi d'un hash pré-calculé), le serveur vérifie ainsi l’intégrité du client. Ca force le tricheur a faire un programme externe et ne pas utiliser le client, pour tricher mais ca reste faillible et ca simplifie pas la gestion de plusieurs versions du client

    J'ai pas vraiment le goût de faire une revue de littérature sur le sujet ^^ je vais bricoler un truc pour mon petit jeu et ca ferra l'affaire

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Citation Envoyé par forthx Voir le message
    Moi en l'occurrence il m'est arrivé de tester sur des jeux flash plus pour l’expérimentation que pour le score (sinon je me serait souvenu du jeu or ce n'est pas le cas). Si on peu s'arranger pour modifier le code, chiffrage ou pas ça ne change que peu de choses. Le chiffrage permet de s'assurer que c'est probablement le client qui envoi les données.
    Il est bien évident que si on utilise un langage interprété comme du JavaScript, cela ne sert plus à rien.

    La ou ça devient plus ardu de tricher (mais pas impossible) c'est si le client envoi tout les éventements (ennemis tuer, a quel moment, nombre de tir, de mort ...) et que le serveur vérifie la cohérence. Dans ces conditions on se rapproche d'un jeu en ligne et non d'un score en ligne
    Bien évidement, mais j'avais cru comprendre que tu voulais éviter de trop charger ton serveur.
    Sinon, il n'y a pas que la cohérence à vérifier mais aussi voir si le score n'est pas "un peu trop parfait" (= bot).


    On pourrai faire un truc un peu tordu ou le client envoi le hash de son binaire suivi d'un code envoyer par le serveur (pour éviter l'envoi d'un hash pré-calculé), le serveur vérifie ainsi l’intégrité du client. Ca force le tricheur a faire un programme externe et ne pas utiliser le client, pour tricher mais ca reste faillible et ca simplifie pas la gestion de plusieurs versions du client
    A partir du moment où on récupère la clé, on peut faire du MITM.
    Il suffit donc d'intercepter ton hash et de le remplacer.

    je vais bricoler un truc pour mon petit jeu et ca ferra l'affaire
    Oui, comme je l'ai dit, on peut faire plus compliqué, plus sûr, mais tu perdras plus de temps que tu n'en fera perdre au hacker.

  8. #8
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 607
    Points : 188 574
    Points
    188 574
    Par défaut


    À mon avis, il n'existe pas vraiment de solution parfaite dès le moment où le joueur possède l'exécutable : il pourra toujours reforger un paquet. Si tu mets en place des techniques pour éviter le rejeu de paquets (renvoyer un paquet connu en écoutant ce que fait l'application, puis en modifiant des morceaux), tu évites déjà les attaques par Wireshark ou équivalent, sans que ce soit affreusement horrible à mettre en place.

    Ensuite, pour assurer la cohérence, tu peux simplement mettre en place un envoi de score plus régulier qu'en fin de partie (chaque seconde, chaque minute, selon le cas). Tu enregistres toutes ces données, tu estimes l'incrément maximal de score par unité de temps, tu laisses au joueur une certaine marge : si des données dépassent franchement cette limite, c'est une triche. Bien évidemment, les données de test doivent être mises à jour régulièrement, en supposant que les joueurs améliorent leur niveau et que leur score augmente de plus en plus vite dans une partie. Tu peux alors aussi faire un test sur la longueur de la partie. Deux points noirs :
    - le risque de faux positif ;
    - la forte dépendance au type de jeu implémenté.
    J'omets ici tous les détails concernant l'envoi de paquets aussi régulièrement (le serveur pourra-t-il tenir la charge ?), le calcul des marges (techniques de traitement de données volumineuses…) et d'autres choses trop pratiques .

    Pour moi, la meilleure solution, c'est de faire quelque chose de relativement simple à coder pour toi : l'idée est plus de ralentir celui qui veut tricher qu'autre chose (donc d'en décourager une bonne partie). Plus tu passeras de temps sur cette partie, plus ça sera difficile de passer à côté, mais ça sera toujours possible : il faut trouver un juste équilibre, selon le type de jeu (avec une popularité de type World of Warcraft, c'est un point plus important que pour d'autres jeux).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  9. #9
    Membre éprouvé

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 386
    Points : 1 163
    Points
    1 163
    Par défaut
    Comme tu dit, je veux du simple c'est pour mon space devastation 2 je précisai juste mes pistes de réflexion.

    si on fait un MITM pour le score de space devastation je prendrai ca pour une réussite personnel pour avoir suscité une telle motivation.

    Enfin pour le coup j'utilise du java (pour cibler ios, windows et linux) donc même si c'est pas de l'open source (ce n'ai pas encore décidé), je considère que le code est relativement accessible.

    dourouc05 : en effet envoyer le score tout les niveaux avec un score max théorique connu coter serveur peu en décourager plus d'un ca me parait un compromis intéressant compte tenu de l'ampleur du jeu.

  10. #10
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Citation Envoyé par forthx Voir le message
    Enfin pour le coup j'utilise du java (pour cibler ios, windows et linux) donc même si c'est pas de l'open source (ce n'ai pas encore décidé), je considère que le code est relativement accessible.
    Oui donc à ce niveau là, ça ne sert à rien de tenter d'ajouter une sécurité côté client, tout ce que tu peux faire, c'est récupérer des données et les vérifier côté serveur.

    Après quand bien même une personne tricherait, ce ne serait pas si dramatique que cela.

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 815
    Points : 218 179
    Points
    218 179
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    Faisons des choses simples. Je pensais (peut être à tort) à des solutions comme :
    • Faites un checksum du score et envoyé le checksum -> ça embêtera tous les gens assez bas niveau qui pense qu'à ne modifier le score (et puis, c'est une solution en trois lignes) ;
    • placez un bit spécial dans le score. Par exemple, vous avez des scores qui sont incrémentés de 10 en 10. En théorie, vous ne pouvez jamais avoir de 105, 109, ou autre. Par contre, le score envoyé au serveur, c'est 109. Il suffit de ne pas l'afficher auprès de l'utilisateur (arrondi à la dizaine), mais si le serveur ne reçoit pas un score qui a le dernier chiffre à 9, alors le score est cheaté. Ça rajoute une protection vraiment débile, mais bon, le gars qui veut tricher va passer à coté, surtout si à aucun moment, il n'a d'indice sur cette astuce (le score 109, n'est jamais affiché, c'est juste 100).

    et si vraiment vous voulez plus :
    • envoyer le nombre d'ennemies tués par catégorie et vous pouvez ainsi estimé au niveau du serveur, un score pour valider le score envoyé.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    Membre éprouvé

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 386
    Points : 1 163
    Points
    1 163
    Par défaut
    Merci pour toutes ces pistes, ca fait une bonne base de travail. Je considère le problème comme résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Kylix] partager fonctions
    Par RezzA dans le forum EDI
    Réponses: 1
    Dernier message: 16/03/2003, 17h02
  2. [VB6] [Réseau] Connexion et partage de données
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 21/10/2002, 19h12
  3. Partager son disque
    Par tintin22 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 16/09/2002, 01h34
  4. Réponses: 4
    Dernier message: 13/05/2002, 17h43
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 17h20

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