Manipulationssicherer Multiplayer

O

Oppomat

Neues Mitglied
0
Hallo,

momentan entwickele ich ein Spiel mit Multiplayer Modus. Das Problem was sich mir gerade stellt: Wie kann ich Spieldaten an einen Server senden, ohne das der Spieler über irgendeine Netzwerk App mitprotokolliert an welchen Server was gesendet wird, und damit seine ganze Punktezahl manipulieren kann. Kennt jemmand einen Algorithmus? Vorgestellt hatte ich mir einen TCP Server mit RSA Verschlüsselung, aber leider nicht Manipulationssicher. Ich frage mich schon eine Weile, wie machen das die großen Apps, wie Quizduell? Alles was an einen Server versendet wird kann mitgesnifft werden, und ist damit doch schon nicht manipulationssicher, oder?

MfG


Oppomat
 
Worin siehst Du das primäre Problem? Dass man mit Hinreichender Rechenleistung den den RSA Key kanacken kann oder dass der Key auf dem Client gespeichert ist und daher gefunden werden könnte?

Wenn es um den ersten Punkt geht, hätte ich keine Lösung anzubieten, aber ich sage mal so, dass die wenigsten User die benötigte Rechenleistung zur Verfügung haben, und dass unsere Freunde von NSA (oder sonstigen Drei Buchstaben) nicht unbedingt ein Online-Spiel hacken würden)

Aber gegen den zweiten Punkt könnte man über einen Diffie-Hellmann Algorythmus nachdenken, denn der Key wird da 'On-The-Fly' ausgehandelt und ist nur im Memory des Client vorhanden. Theoretisch kann man natürlich auch den Memory des Gerätes auslesen, aber das ist auf einem Linux-artigen System eher anspruchsvoll.
 
Man kann auch die App selbst manipulieren. Ne 100%ig sichere Lösung kann es nicht geben.

Aber ist doch egal, wer sich selbst bescheißen will um als coolster ganz oben im Highscore zu stehen... Wers braucht, lass sie doch.

cu
 
Danke für die Antworten.

@u.k-f

Jeder kann eine App ja ziemlich einfach dekompilieren, d.h. jeder könnte sehen was verschlüsselt wird, und dann mit dem ohnehin öffentlichen RSA Schlüssel die Zeichenfolge verschlüsseln und an den Server schicken, oder?

MFG
 
Oppomat schrieb:
...Jeder kann eine App ja ziemlich einfach dekompilieren, d.h. jeder könnte sehen was verschlüsselt wird, und dann mit dem ohnehin öffentlichen RSA Schlüssel die Zeichenfolge verschlüsseln und an den Server schicken...

eine Java-App zu dekompilieren ist in jedem Fall einfach, aber ich würde den Schlüssel immer in einer nativen Library ablegen, das ist schon etwas schwerer.

Deswegen der Vorschlag des Diffie-Hellman, der wird bei jeder Session neu aufgebaut und nicht lokal gespeichert. Wenn dann die Session mit einer nativen JNI Library authentifiziert wird kann man nicht so leicht die Authentifizierung nachbauen.

Es wäre noch zu verhindern, dass ein User das Jar soweit modifiziert, dass es 'Illegal die jni-Library aufruft', aber ich denke, auch da gibt es Mittel und Wege, das zu erschweren (nicht unmöglich, aber für viele zu schwer).

Aber eines muss klar:

Niemals kann eine Maschine einen Schlüssel benutzen, ohne dass ein Mensch es nachmachen kann. Es geht immer nur um die Höhe des Hindernisses...
 
Mit Proguard kann man das decompilieren der app erschweren.

ProGuard | Android Developers

Gegen die Manipulation von Werten in der App kann man im Endeffekt nichts machen, da man auch direkt zu Laufzeit der App die Werte aus dem Speicher auslesen und manipulieren kann.

Im Endeffekt gibt es wohl kein Highscore bei den erfolgreicheren Spielen, der noch nicht manipuliert wurde. ;)
 
Oppomat schrieb:
Alles was an einen Server versendet wird kann mitgesnifft werden, und ist damit doch schon nicht manipulationssicher, oder?

KISS Prinzip (keep it simple "and" stupid).

HTTP über SSL mit JSON Strings.

Hier noch ein paar waste of time Tips:

- SSL Client Zertifikate verwenden (damit kannst dann "kompromitierte Apps" deaktivieren)
- den JSON String verschlüsseln
- Ein Anmeldesystem verwenden und auf Plausibilität testen, ob der Client auch wirklich die Mindestspielzeit für den Highscore verbracht hat.
- Mehrere gleichzeitige Spiele von einer Anmeldung nicht zulassen

... oder einfach HTTP mit SSL verwenden - dann musst nicht mal denken.
 

Ähnliche Themen

Linux4ever
  • Linux4ever
Antworten
2
Aufrufe
648
Linux4ever
Linux4ever
ui_3k1
Antworten
2
Aufrufe
659
ui_3k1
ui_3k1
kukuk
Antworten
1
Aufrufe
885
erli2909
E
Zurück
Oben Unten