Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.03.2015, 09:39

Client - Server Authentifizierung

Guten Tag,

ich versuche gerade meine ersten Schritte in der Netzwerkprogrammierung zu machen. Bevor ich jedoch direkt wieder ans Coden an sich denke, versuche ich gerade zuerst einmal ein paar grundlegende Dinge zu verstehen und mir zu erarbeiten.
Prinzipiell bin ich mit Netzwerken und ihren Funktionsweisen vertraut, aber dennoch stehe ich ein wenig auf dem Schlauch, wie man das Problem am Besten löst.

Die Ausgangslage ist folgende:

Es gibt einen Server, der entsprechende Nachrichten entgegen nimmt. Der Client soll sich allerdings zuerst authentifizieren. Das soll heißen, er soll beweisen, das er auch berichtigt ist, diese Nachrichten zu versenden.

Zu den Clients:
Die Clients nutzen eine von mir erstellte API, um sich mit dem Server zu connecten. D.h. ich versuche nicht zwischen 2 gleichen Clients auf unterschiedlichen Rechner zu unterscheiden, sondern zwischen 2 unterschiedlichen Programmen, die diese API nutzen.

Wenn man diese API in seinem Programm nutzen möchte, muss man (der Entwickler) sich zuerst vom Server eine UID besorgen, welche für das Programm einzigartig ist.
Diese UID wird bei der Verbindung mit geschickt.
Nun ist jedoch das Problem, das man durch einfaches durchsuchen des Quellcodes, die UID des entsprechenden Programms finden und auslesen kann.
Das hat zur Folge, dass ein anderes Programm diese UID nutzen kann und selbst Nachrichten im Namen des 1. Programms verschicken könnte.

Meine Frage ist nun, wie ich mir sicher sein kann, dass das Programm, welches mir die Nachricht schickt, auch das ist, was es vorgibt zu sein.
Ich hoffe das war soweit verständlich ;)

Gibt es dazu ein passendes Stichwort, nach dem ich googlen kann?

mfg

2

18.03.2015, 10:37

Das kann man mit Client Zertifikaten lösen (SSL). Der Server muss dann nur noch den Public-Key kennen und kann von diesem Zeitpunkt an sicherstellen, dass die Nachrichten tatsächlich vom Client kommen.

3

18.03.2015, 13:54

Wie darf ich mir das dann genau vorstellen?
Ich muss zugeben, dass ich bei Zertifikaten noch einige Wissenslücken habe, weswegen ich mir gerade nicht vorstellen kann, wie ich das umsetzen soll. Wie mir das Ganze am Ende weiterhelfen soll, erschließt sich mir leider auch nicht.

Wenn der Entwickler sein Programm verteilt, kann man dieses Zertifikat ja immer noch einfach kopieren und in einem anderen Programm nutzen.

Vll ist es aus dem Text nicht ganz klar geworden.
Die Programme, welche diese API nutzen, werden verteilt und jeder x-beliebige Nutzer kann sie nutzen. Es sind keine Programme für den Eigengebrauch.
Dementsprechend fällt diese Zertifikat Lösung eigentlich raus, da ich ja dann den private key immer mit liefern müsste, damit eine Verbindung möglich ist.

Mal komplett stumpf gefragt, wie regeln es denn Gameserver, dass man nur den original Client nutzen kann und sie nicht einfach mit fake Messages bombardiert?

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

18.03.2015, 14:11

Genau für dieses Problem gibt es RSA, bei dem man nur den public Key rausgibt.
Dabei ging es ja nicht nur um Verschlüsselung sonder auch um Identitätssicherheit (digitale Signatur). Da ich mich selbst aber nicht so gut damit auskenne, ließt du dir am besten mal den Wikipedia Artikel dazu durch.
Oder wie wäre es damit? Gehört zu TLS (SSL).

Bei Spielen und vielen anderen System wird auch auf eine einfache Benutzererkennung gesetzt. So wie Steam Spiele an meinen Account gebunden sind, bestätige ich dann damit beim Server meine Identität bzw. dass ich die Berechtigung habe ein Programm zu nutzen. Wenn die Legitimation scheitert weist der Server die Verbindung einfach ab und man kann nicht spielen.

5

18.03.2015, 14:32

Sehe ich das richtig, dass es heir darum geht, dass du ein Programm (Client) hast, das an verschiedene Teilnehmer verteilt wird. Dieses Programm soll eindeutig für den Server erkennbar sein, wobei Teilnehmer 1 und Teilnehmer 2 die selbe Kennung haben?

Oder geht es darum, dass du die einzelnen Teilnehmer, fälschungssicher voneinander unterscheiden möchtest?

Tobiking

1x Rätselkönig

  • Private Nachricht senden

6

18.03.2015, 14:32

Mal komplett stumpf gefragt, wie regeln es denn Gameserver, dass man nur den original Client nutzen kann und sie nicht einfach mit fake Messages bombardiert?

Verschlüsseln (siehe SSL) ist ein Ansatz es schwieriger zu machen den Traffic zu analysieren. Letztendlich hindert das aber nicht daran das jemand herausfindet wie du es machst und es einfach genau so macht. Deswegen gibts auch zu jedem etwas bekannterem Spiel Bots.

7

18.03.2015, 14:33

Zitat

Sehe ich das richtig, dass es heir darum geht, dass du ein Programm (Client) hast, das an verschiedene Teilnehmer verteilt wird. Dieses Programm soll eindeutig für den Server erkennbar sein, wobei Teilnehmer 1 und Teilnehmer 2 die selbe Kennung haben?

Oder geht es darum, dass du die einzelnen Teilnehmer, fälschungssicher voneinander unterscheiden möchtest?


Richtig. Ich suche eine Möglichkeit Programme zu unterscheiden, nicht ihre User.

8

18.03.2015, 14:46

Zitat

Sehe ich das richtig, dass es heir darum geht, dass du ein Programm (Client) hast, das an verschiedene Teilnehmer verteilt wird. Dieses Programm soll eindeutig für den Server erkennbar sein, wobei Teilnehmer 1 und Teilnehmer 2 die selbe Kennung haben?

Oder geht es darum, dass du die einzelnen Teilnehmer, fälschungssicher voneinander unterscheiden möchtest?


Richtig. Ich suche eine Möglichkeit Programme zu unterscheiden, nicht ihre User.


Dafür gibt es keine 100% Prozentige Lösung, alle Authentifizierungen basieren darauf, dass es ein Geheimnis (Secret) gibt, was nur Client und Server bekannt ist. In diesem Fall würde das Geheimnis aber an viele Clients verteilt und ist dementsprechend kein Geheimnis mehr.

Man kann nur mit Verschlüsselung und dergleichen es möglichst schwer machen soetwas zu machen.

Welche Befürchtung hast du eigentlich bezüglich auf FremdClients? Was könnten die mit deiner API machen, was Schaden anrichtet?

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

18.03.2015, 15:05

Was willst du überhaupt erreichen? Macht es nicht vielleicht mehr Sinn deine API so anzupassen, dass sich der Client authentifizieren muss?

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

10

18.03.2015, 15:25

Wie bereits geschrieben wurde: bitte kläre erstmal, was du genau haben willst, sonst kann über mögliche Lösungen nur geraten werden.

Bisher hätte ich es so verstanden, dass du wissen willst, ob auf Seite des Clients der von dir geschriebene Code ohne Anpassung anderer läuft (im Gegensatz zu einem modifizierten Client oder einem Client, der von jemand anderes geschrieben wurde).
Einfache Antwort: vergiss es
Ausführlich: Es gibt viele verschiedene Möglichkeiten, wie man es anderen schwerer machen kann, den Client zu modifizieren, man kann es aber nie zweifelsfrei verhindern. Es wird immer eine Abwägung zwischen Kosten (Aufwand für die Implementierung) und Nutzen (Zeitraum ohne Modifikationen) sein. Gerade als Hobby-Entwickler wird man in der Hinsicht eher dahin gehend entscheiden müssen, dass es den Aufwand nicht wert ist.

Stattdessen solltest du den Aufwand auf den Server fokussieren, damit dieser alle Eingaben der Clients validieren kann, um so modifizierte Clients identifizieren und herausfiltern zu können. Ebenso sollte der Server nur so wenig Informationen wie möglich (bspw. Positionen von anderen Spielern) an die Clients schicken, da Modifikationen im Bereich der Darstellung (Wallhack) Serverseitig nicht erkannt werden können.

Solltest du aber etwas anderes wissen wollen, so musst du deine Frage deutlicher Formulieren.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige