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

Tobiking

1x Rätselkönig

  • Private Nachricht senden

11

31.05.2014, 16:16

Und der aber als extra Thread, weil sonst nicht mehr empfangen wird, solange der zum Beispiel in den Datenbanken herumschreibt/liest?
Oder ist das egal, weil es ein Stream-Socket ist und ich nacher alles auslesen kann was dazwischen angekommen ist?

Das Auslesen kannst du eine gewisse Zeit unterbrechen, bis der Empfangspuffer voll ist oder ein Timeout erreicht wird. Du willst aber währenddessen üblicherweise auch noch weiter Verbindungen annehmen.

Eine Möglichkeit wäre für alles Threads zu erzeugen. Also ein Thread der Verbindungen annimmt und dann jede Verbindung einem eigenen Thread (aus einem Threadpool, da neu erzeugen meist aufwändig ist) übergibt. Da musst du natürlich alle Stellen wo Daten zwischen den Threads übertragen werden absichern.

Alternativ lässt sich das auch asynchron lösen. Bedingung dafür ist, dass keine blockierende Aktionen durchgeführt werden, die länger brauchen. Dann kannst du einfach durch ankommende und aktive Verbindungen iterieren und diejenigen verarbeiten die es gerade nötig haben. Man spart sich dabei die Synchronisierung der Threads. Wird gerne im Web Bereich verwendet um sehr viele Verbindungen zu verarbeiten. Für einen einfachen Loginserver wäre das vielleicht auch eine Option.

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

12

31.05.2014, 16:40

Ok danke. Noch eine Frage hätte ich: Ich will die Daten mit AES verschlüsseln, dafür brauche ich einen Initialisierungsvektor und einen Key. Zufall ist nicht, da der Server wieder entschlüsseln muss, was nimmt man dann, nimmt man x-beliebige, konstante keys, oder sendet man ihn mit RSA verschlüsselt mit?

Tobiking

1x Rätselkönig

  • Private Nachricht senden

13

31.05.2014, 16:54

Ok danke. Noch eine Frage hätte ich: Ich will die Daten mit AES verschlüsseln, dafür brauche ich einen Initialisierungsvektor und einen Key. Zufall ist nicht, da der Server wieder entschlüsseln muss, was nimmt man dann, nimmt man x-beliebige, konstante keys, oder sendet man ihn mit RSA verschlüsselt mit?

Was du suchst ist https://en.wikipedia.org/wiki/Password-a…d_key_agreement wie z.B. https://en.wikipedia.org/wiki/Secure_Rem…ssword_protocol was unter anderem von Blizzard für alle aktuellen Spiele verwendet wird.

Einen Schlüssel einfach mitschicken reicht nicht, da sich ein Angreifer mit dessen Wissen einfach das Passwort rausholen könnte. Feste Keys geht nicht, da ein Angreifer einfach die gesendeten Daten abfangen und von sich aus schicken könnte. Da muss schon etwas mehr Aufwand betrieben werden um sicherzugehen das Client und Server die gleichen Benutzerdaten kennen.

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

14

31.05.2014, 17:03

Einen Schlüssel einfach mitschicken reicht nicht


Den will ich ja mit RSA verschlüsseln. Die Clients haben den öffentlichen Key und nur der Server einen privaten.
Für verschlüsselte Übertragung in die andere Richtung erzeugt der Client zunächst ein Keypair und schickt den öffentlichen dem Server.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

01.06.2014, 07:56

Wieso glaubst Du, dass das auch nur Ansatzweise sicher wäre?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

16

01.06.2014, 11:06

Nächste häretische Frage: willst du etwas lernen oder willst du eine funktionierende Lösung?
Im ersten Falle kannst du ruhig den angefangenen Weg weitergehen. Anderenfalls rate ich zur Nutzung fertiger Bibliotheken. Dann kannst du dich nämlich auf dein eigentliches Ziel konzentieren und musst nicht voraussichtlich 1-2 Jahre für Netzwerkgeschichten investieren.
Nebenbei erwähnt reicht ein Netzwerkthread in Verbindung mit einem select um den listen und alle client sockets zu überprüfen völlig. Von "1 client:1 thread" kann ich nur abraten, da threads bzw viele threadwechsel einen nicht unwesentlichen overhead bedeuten.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

17

01.06.2014, 16:13

Ok, also wegen der Verschlüsselung dachte ich, weil mein Info-Lehrer sagte man verschlüsselt z.B. mit AES und der Key wird mit RSA verschlüsselt mitgesendet.
Weil nur der Server den privaten Key hat, kann nur er ihn dann wieder entschlüsseln.
Außerdem hat jeder Client auch einen privaten Key, der öffentliche geht dann an den Server, damit dieser auch senden kann.

Wo besteht hierin eine Sicherheitslücke?

EDIT: Wäre das SRP Protokoll hier vielleicht die richtige Wahl?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »birdfreeyahoo« (01.06.2014, 16:21)


18

01.06.2014, 16:26

Replay-Attacken, PFS.

Außerdem sollte man nie kryptographische Protokolle/Funktionen selbst implementieren/ausdenken, wie auch Nox schon sagte.
Such dir ne Bibliothek.

Für deine Zwecke wäre TLS wohl passend.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

01.06.2014, 16:26

Wenn der Key RSA verschlüsselt ist, geht das natürlich. Da habe ich wohl etwas zu sehr überflogen statt im Detail zu lesen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

20

01.06.2014, 16:35

Ok, die Daten werden dann verschlüsselt gespeichert und kurz vor Absenden der AES Key entschlüsselt und über das Keypair vom Client verschlüsselt um es zurück zu senden.
Da der Client ein anderer PC aber gleicher Benutzer sein kann und ich keine privaten Keys senden will, muss das sein.

Wäre es sicher, den privaten Key vom Server auf dem Server zu speichern? Also der SQL Injection werde ich durch Maskierung vorbeugen, aber kann man da trotzdem irgendwie rankommen?
Das Problem ist, wenn ich den nicht speicher und mir dann das Server-Programm abschmiert, die Nutzerdaten alle nutzlos werden.

Werbeanzeige