Je travaille sur une architecture P2P pour des jeux sécurisés et j'ai divisé le problème en cinq sous-problèmes:
- Modification illégale de l'état du jeu envoyé
- Supprimez avec précision les tricheurs
- Se mettre d'accord sur un état du jeu
- Éviter la triche «regarder vers l'avenir»
- Cacher des informations sensibles aux opposants
Les quatre premiers que j'ai à peu près tous résolus, mais c'est le dernier avec lequel j'ai du mal.
Avant d'entrer dans les détails, je veux juste demander s'il y a quelque chose que j'ai manqué dans ma liste de création d'un réseau p2p "anti-triche". Je ne suis pas intéressé par les astuces comme l'utilisation des aimbots, je ne souhaite que rendre le réseau p2p aussi sécurisé qu'un serveur centralisé.
Donc, jusqu'à présent, dans mes efforts pour cacher des informations sensibles, je me suis concentré sur la position des joueurs dans un jeu où la position de votre adversaire ne devrait pas toujours être connue. Le problème devient alors comment déterminer si vous devez envoyer votre position à votre adversaire sans connaître la position de votre adversaire.
J'ai exclu des méthodes telles que l'adversaire envoyant plusieurs fausses positions pour que vous puissiez également comparer la vôtre, car votre adversaire peut facilement abuser d'un tel système car il obtiendra votre position si l'une des fausses positions se trouvait "visible" de votre position.
La méthode que je me suis concentrée sur celle dans laquelle vous recevez un "champ visuel" de votre adversaire et peut ainsi déterminer si vous devez envoyer votre position ou non. C'est cependant un problème dans des jeux comme League of Legends où le champ visuel de votre adversaire est également une information très sensible. J'ai essayé de résoudre ce problème en transformant le champ visuel à l'aide d'une matrice singulière, ce qui signifie que vous ne pouvez pas revenir de la version transformée du champ visuel à la version d'origine, mais comme il s'agit d'une transformation linéaire, vous pouvez toujours déterminer si votre position est à l'intérieur le champ visuel ou non.
Cela ne fonctionne cependant pas parfaitement, le champ visuel exact ne peut pas être restauré après la transformation, mais des informations sur les "pentes" du champ visuel (le champ visuel est construit par plusieurs lignes et la pente de chaque ligne peut être déterminée) peuvent être restauré et cela peut être utilisé pour reconstruire à peu de frais le champ visuel d'origine.
En substance, j'ai besoin d'une fonction qui puisse déterminer si une position est "visible" ou non, et la reconstruction de cette fonction / champ visuel doit être si exigeante en termes de calcul qu'une fois que vous avez fini de reconstruire le champ visuel, il n'est plus pertinent pour le jeu en action. Y a-t-il une personne super intelligente qui connaît une telle méthode?
Modifier Les gens semblent un peu confus à propos de l'ensemble du "champ de vision", donc je vise à donner une explication plus détaillée ici. Le champ de vision se compose de groupes d'un ensemble de lignes, vous pouvez facilement vérifier si une position se trouve dans l'un de ces groupes en vérifiant simplement de quel côté de la ligne se trouve votre position, si elle est du même côté pour toutes les lignes de ce groupe que vous connaissez c'est à l'intérieur de ce groupe et donc à l'intérieur du champ de vision.
Les informations envoyées ne sont cependant pas cette ligne, mais une transformation de la ligne et la transformation (2 par 2 singulier une matrice), vous pouvez toujours vérifier de quel côté de la ligne se trouve votre position en la transformant d'abord en utilisant la transformation que vous avez reçue et comparer cette valeur à la ligne transformée. La clé ici est que la transformation est singulière, ce qui signifie qu'il est impossible de trouver un inverse pour revenir à la ligne d'origine. Cependant, il est possible de déterminer la pente de la ligne, ce qui rend la reconstruction de la ligne en vérifiant simplement de quel côté de la ligne transformée se trouvent de nombreux points jusqu'à ce que vous ayez identifié l'origine de la ligne beaucoup moins cher que si vous ne saviez pas la pente de la ligne.
Ce que je recherche, c'est une méthode pour déterminer si un point se trouve à l'intérieur d'une zone, où la reconstruction de la zone à partir de la méthode est soit impossible (dont je doute qu'il existe car vous pouvez toujours la forcer brutalement), soit très lourde à calculer.