Ich habe an einer P2P-Architektur für sicheres Spielen gearbeitet und das Problem in fünf Unterprobleme unterteilt:
- Unzulässige Änderung des gesendeten Spielstatus
- Lass Betrüger genau fallen
- Einigung auf einen Spielstand
- Vermeiden Sie "Look Ahead" -Betrug
- Versteckt sensible Informationen vor Gegnern
Die ersten vier habe ich so ziemlich alle gelöst, aber es ist die letzte, mit der ich Probleme habe.
Bevor ich auf Details eingehe, möchte ich nur fragen, ob in meiner Liste etwas verpasst wurde, um ein "betrugsicheres" p2p-Netzwerk zu erstellen. Ich interessiere mich nicht für Cheats wie die Verwendung von Aimbots, sondern nur dafür, das p2p-Netzwerk so sicher wie einen zentralen Server zu machen.
In meinen bisherigen Bemühungen, vertrauliche Informationen zu verbergen, habe ich mich auf die Position der Spieler in einem Spiel konzentriert, bei dem die Position Ihres Gegners nicht immer bekannt sein sollte. Das Problem wird dann, wie Sie bestimmen, ob Sie Ihre Position an Ihren Gegner senden sollten, ohne die Position Ihres Gegners zu kennen.
Ich habe Methoden wie das Senden mehrerer falscher Positionen durch den Gegner ausgeschlossen, damit Sie auch Ihre vergleichen können, da Ihr Gegner ein solches System leicht missbrauchen kann, da er Ihre Position erhält, wenn eine der falschen Positionen von Ihrer Position aus "sichtbar" ist.
Ich habe mich auf eine Methode konzentriert, bei der Sie ein "Gesichtsfeld" von Ihrem Gegner erhalten und dadurch bestimmen können, ob Sie Ihre Position senden sollen oder nicht. Dies ist jedoch ein Problem in Spielen wie League of Legends, in denen das Sichtfeld Ihres Gegners auch hochsensible Informationen enthält. Ich habe versucht, dieses Problem zu lösen, indem ich das Gesichtsfeld mithilfe einer singulären Matrix transformierte. Das bedeutet, dass Sie nicht von der transformierten Version des Gesichtsfelds zur ursprünglichen Version zurückkehren können. Da es sich jedoch um eine lineare Transformation handelt, können Sie immer noch herausfinden, ob sich Ihre Position innerhalb befindet das Gesichtsfeld oder nicht.
Dies funktioniert jedoch nicht perfekt, das genaue Gesichtsfeld kann nach der Transformation nicht wiederhergestellt werden, sondern es können Informationen über die "Steigungen" im Gesichtsfeld (das Gesichtsfeld besteht aus mehreren Linien, und die Steigung jeder Linie kann bestimmt werden) restauriert und damit das ursprüngliche Gesichtsfeld relativ kostengünstig rekonstruiert werden kann.
Im Wesentlichen benötige ich eine Funktion, die bestimmen kann, ob eine Position "sichtbar" ist oder nicht, und die Rekonstruktion dieser Funktion / dieses Gesichtsfelds muss so rechenintensiv sein, dass sie nach Abschluss der Rekonstruktion für das Gesichtsfeld nicht mehr relevant ist das spiel in aktion. Gibt es eine super kluge Person, die zufällig eine solche Methode kennt?
Die Leute sind irgendwie verwirrt über das gesamte "Sichtfeld", daher möchte ich hier eine detailliertere Erklärung geben. Das Sichtfeld besteht aus Gruppen von Linien. Sie können leicht überprüfen, ob sich eine Position innerhalb einer dieser Gruppen befindet, indem Sie nur überprüfen, auf welcher Seite der Linie sich Ihre Position befindet. Wenn sich alle Linien in dieser Gruppe, die Sie kennen, auf derselben Seite befinden Es befindet sich in dieser Gruppe und damit im Sichtfeld.
Bei den gesendeten Informationen handelt es sich jedoch nicht um diese Zeile, sondern um eine Transformation der Zeile und der Transformation (2 × 2-Singular einer Matrix). Sie können weiterhin überprüfen, auf welcher Seite der Zeile sich Ihre Position befindet, indem Sie sie zuerst mithilfe der erhaltenen Transformation transformieren und Vergleichen dieses Wertes mit der transformierten Linie. Der Schlüssel hier ist, dass die Transformation singulär ist, was bedeutet, dass es unmöglich ist, eine Inverse zu finden, um zur ursprünglichen Zeile zurückzukehren. Es ist jedoch möglich, die Neigung der Linie zu bestimmen, die die Rekonstruktion der Linie ermöglicht, indem nur überprüft wird, auf welcher Seite der transformierten Linie viele Punkte liegen, bis Sie den Ursprung der Linie viel rechnerisch billiger lokalisiert haben, als wenn Sie es nicht wüssten die Steigung der Linie.
Was ich suche, ist eine Methode zum Bestimmen, ob sich ein Punkt innerhalb eines Bereichs befindet, wobei das Rekonstruieren des Bereichs aus der Methode entweder unmöglich (was ich bezweifle, da Sie es immer brutal erzwingen können) oder sehr rechenintensiv ist.