Highscore sicher übertragen, wie am besten?

Anfängerfragen zum Programmieren mit PureBasic.
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Highscore sicher übertragen, wie am besten?

Beitrag von Ractur »

Hallo,

ich habe schon gesucht, allerdings ergibt sich bei mir ein Verständnisproblem mit der ganzen Highscore übertragerei.

Folgendes möchte ich tun:

Die Highscore kann maximale Zahlenwerte von 1-12 erreichen, die Highscore wird einmal täglich übermittelt. Und so möchte ich vorgehen:

Nehmen wir mal an, der User hat 5 Punkte erreicht, diesen Wert möchte ich nun verschlüsselt in die Registry schreiben.

Highscore = 5
md5 Highscore
ab in die Registry damit

Irgendwann ist es dann Zeit den Wert zu übermitteln:

Highscore_registry = Registry Stelle auslesen
Sende anfrage an Server
Server schickt Zufallsschlüssel

md5 Highscore_registry+Zufallsschlüssel
sende Highscore_registry+Zufallsschlüssel an Server

Der Server braucht nun nur schauen:

Der Wert der Highscore kann nur 1-12 sein, daher vergleiche nun:
Zahl 1-12 + Zufallsschlüssel

= Treffer Zahl erkannt
= Nix, Zahl womöglich gefälscht

Das Problem,

md5 Zahl 1-12 ergeben ja immer die gleichen md5 Strings, nicht Sonderlich Sinnvoll bzw. sicher erachte ich das.

Ich bräuchte vvl. eine Möglichkeit die winzigen Zahlen 1-12 irgendwie anders zu deklarien:

Z.b. Zahl 1 = "ein Wort"
Zahl 2 = "ein Wort"
usw...

Dennoch hab ich ja dann wieder ständig den selben md5 in der Registry stehen. Allerdings ka, ob der "Cracker oder Hacker" darauf kommen würde das die Highscore ein Wort ist und keine Zahl.

Man könnte ja Worte machen für z:b.

Zahl1 = "registry"
Zahl2 = "get"
Zahl3 = "post"

*grins*

Allerdings irgendwo im Programm PB müsste ich den Zahlen ja wieder das Wort zuweisen, auch nicht besonders Sinnvoll denke ich, ach je eine never end Story ist das mit mir.

Ka, wie ich die Sache einfacher oder effizienter Lösen könnte, da hab ich meist ne Blockade wenns um Verschlüsselungen geht *grin

Vielleicht hat ja von Euch einer ne Idee...
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag von Ractur »

Mir kommt gerade eine womöglich bessere Idee:

Client sendet anfrage
Server schickt Client ein paar Zufallszahlen
Mit diesen Zufallszahlen wird der Zahlenwert, z.B. Zahl = 5 verschlüssel
Danach sendet er das Verschlüsselte an den Server
Der Server dekodiert und schon hat er die Zahl

- Weiterhin ist der Zufallsschlüssel nur wenige Sekunden gültig als auch die Anfrage

Ist das sicher?

Grüsse Ractur
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

MD5 ist keine Verschlüsslung. MD5 ist eine Prüfsumme.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Das Problem fängt ja schon da an, daß Du die Highscore auch lokal auf dem Rechner ablegen mußt, also z.B. in der Registry. Bereits hier könnte es einer hinkriegen, die Zahl zu ändern, noch bevor sie abgeschickt wird.

Das heißt, Du mußt einen Weg finden, wie Du es bereits auf dem Rechner des Spielers sicher verschlüsseln kannst. Wenn Du das hinkriegst, dann kannst Du es auch einfach übertragen.

Eine Möglichkeit wäre z.B., die ganzen Spielzüge aufzuzeichnen, und diese mitzuschicken. Der Server kann das dann nachvollziehen und schauen, ob die Punkte wirklich stimmen (oder die Punkte gleich selbst ausrechnen, brauchst die ja dann nicht mehr zu übertragen). Allerdings ist das wohl sehr aufwendig und je nach Spiel vielleicht nicht mal machbar.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Ractur hat geschrieben: Client sendet anfrage
Server schickt Client ein paar Zufallszahlen
Mit diesen Zufallszahlen wird der Zahlenwert, z.B. Zahl = 5 verschlüssel
Danach sendet er das Verschlüsselte an den Server
Der Server dekodiert und schon hat er die Zahl

- Weiterhin ist der Zufallsschlüssel nur wenige Sekunden gültig als auch die Anfrage

Ist das sicher?
Naja, wirklich sicher geht es nicht.
Im Prinzip ist das sogar schon zu aufwändig, den Schlüssel erst vom Server anzufordern. Bringt im Prinzip keine zusätzliche Sicherheit. Verschlüssle ihn einfach mit einem Zufallsschlüssel, den Zufallsschlüssel mit einem fixen Schlüssel und häng ihn hinten an die Highscore drann oder setz ihn davor und schick das an den Server.

Wer das knacken kann, der hat auch keine probleme mit der Anforderung des Schlüssels, spielt keine Rolle wie lange der Schlüssel gültig bleibt.

Die Möglichkeit, welche ZeHa anspricht, ist sehr gut aber auch sehr aufwändig.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Polarwolf
Beiträge: 56
Registriert: 14.01.2008 20:34

Beitrag von Polarwolf »

Übertragen von Highscoresachen.... ZeHa hat leider vollkommen recht. Mehrere User hier im Bord haben ja auch Spiele gehostet und senden die Highscore an die Websites. k.A. ob die besonders geschützt waren, aber ein ändern war in Sekunden möglich. Wer wirklich seine Highscore "hacken" oder "fälschen" will, der wird es vmtl. immer hinkriegen. Im Notfall fängt der den von deinem Programm gesendeten Datenstrom ab, manipuliert ihn und sendet ihn dann. Es gibt so viele Möglichkeiten wie man das machen könnte... Was meinste warum so viele Spiele Probleme mit Hacker und Cheatern haben? Es ist wohl die höchste Kunst, sein Programm sicher zu machen. Es wird nie eine auch nur "gute" Sicherheit geben für Hobbyprogrammierer wie euch. (Dich, Uns wer auch immer) Es wird immer jemanden geben der es schafft. Selbst die großen Firmen haben da kaum eine Chance. Machs einfach nur n Tick schwerer.

Ein Beispiel:
Wenn der Ball ins Netz geht, setzt du nicht nur die richtige Score + X sondern auch eine zweite Variable. Und diese aber nicht immer +1 sondern *1.5. Jetzt kannst du dein Spiel kurz vor dem Speichern der Highscore (ich würd sie direkt senden lassen, ist sicherer) die Richtigkeit der Score checken lassen. Indem du einfach die zweite Variable Xmal /1.5 rechnest. Oder so ähnlich. Denk dir was aus! Sei kreativ! Und stellt dein Programm eine abweichung fest, pack nen Key in die Reg. Beim nächsten Start meldest du dem Benutzer Unregelmäßigkeiten bei den Punkten und verwarnst ihn. Dann schickste noch n Hardwarekey an deine Website. Deine Website lässt du dann einfach alles Highscores von verbotenen Hardwarekeys verweigern. Am besten wäre auch ein Handshake mit nem Code o.ä. den deine Website entschlüsselt bzw speichert. (am besten beim Installieren generieren) Mit dem Code kannste den User dann individuel ansprechen. Beim ansprechen sendet dein Server einen Code auf den das Programm mit der größe der EXE o.a. Dateien antwortet. Schon weißte ob da rumgefummelt wurde. Aber schön codieren alles. So. Mir fällt noch viel mehr ein... aber is halt aufwendig. Den Highscore vllt auch in mehreren Parts senden? O_o
Also z.B: Part1: FakeData, Part2: 1er Teil vom Code+FakeDaten, uswuswusw. Und das noch random wobei deine Website dann wissen muss, wo der Code is... am besten auch codieren und checksum von MD5 nutzen... ach man so viel is möglich
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag von Ractur »

Huhu,

danke danke :allright: Das hat mich auf einige neue Ideen gebracht. Vor allem werd ich nicht das Programm berechnen lassen sondern den Server, das erscheint mir noch ein Tick besser, denn in meinen Fall weiss der Benutzer dann nicht nach was genau berechnet wird :)

Danke für alle Hilfreiche Ideen, sobald ich es umgesetzt habe werde ich hier nochmal posten wie ich es letztendlich gemacht habe!

Danke! Grüsse Ractur
Polarwolf
Beiträge: 56
Registriert: 14.01.2008 20:34

Beitrag von Polarwolf »

Eins noch... wenn der Server rechnet, bringt das auch net viel mehr als lokal... denn:
Datenpaket abfangen, auslesen, modifizieren, senden... aber egal. Du wirst schon den richtigen Weg finden.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

als kleine anregung könnten dir vielleicht auch meine billigen codier routinen dienen:

CODY: http://www.purebasic.fr/german/viewtopic.php?t=8799
CODY2: http://www.purebasic.fr/german/viewtopic.php?t=8807
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Polarwolf hat geschrieben:Eins noch... wenn der Server rechnet, bringt das auch net viel mehr als lokal... denn:
Datenpaket abfangen, auslesen, modifizieren, senden... aber egal. Du wirst schon den richtigen Weg finden.
Nicht, wenn Du wirklich alle Spielzüge sendest. Sprich alle Tastendrücke inkl. Zeitpunkt, und alle Zufallsentscheidungen inkl. Zeitpunkt. Das läßt sich vom Server komplett rekonstruieren. Aber vom Spieler wohl kaum sinnvoll ändern. Es sei denn, er modifiziert Deine Engine so, daß er jederzeit pausieren und auch in der Zeit wieder zurückgehen kann, sodaß er jeden Fehlschlag korrigieren kann. Der Aufwand sowohl für das Modifizieren als auch für das eigentliche Spielen wäre dann aber so immens, daß das keine Sau machen würde (es sei denn, mit Deinen Highscores ist ein 50.000 EUR Gewinnspiel verknüpft). Und wenn es doch einer machen würde, dann würde ich den Typen sofort kontaktieren und als Programmierer einstellen ;)
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Antworten