Netzwerk - Ver/Entschlüsseln

WorldRacer

Erfahrenes Mitglied
Hallo zusammen,

ich baue gerade ein Client/Server-Programm, das verschlüsselten Datenaustausch garantieren soll.

Dazu nutze ich einen TcpListener und einen TcpClient. Die Verbindungen funktionieren einwandfrei, der Datenaustausch selbst klappt. Das ist nicht wirklich das Problem, das hat man ja fix erledigt. Problem ist folgendes:

Ich möchte den Datenaustausch schon verschlüsselt starten, heißt es soll folgende Szenerie stattfinden (Je Zeile ein Datenpaket):

Client sagt: Hallo!
Server sagt auch: Hallo!
Client möchte sich einloggen!
Server sagt: OK, du darfst!
Client schickt den Benutzernamen...
Server sagt: Gib mir jetzt dein Passwort
Client: OK, da hast'es!
Server sagt: Bist in Ordnung(, was gibts?)


[Client und Server: Bla blubber blaa bla.]

Client sagt. Schööö!
Server: Bis denne!

Problem ist bei mir der grün formatierte Text. Denn den Rest kann ich mit Hilfe des Benutzernamens und des Passworts verschlüsseln. Das ist kein Problem :) Der Server weiß ja, mit wem er gerade spricht und hat somit die Zuordnung zum Benutzernamen und zum Passwort.

Ich habe nur die Schwierigkeit, irgendwie den Verbindungsaufbau (Authentifizierung) zu verschlüsseln. Denn zu diesem Zeitpunkt gibt es noch keinen Benutzernamen und auch kein Passwort, mit dem verschlüsselt werden kann, das wird dort erst übertragen!

Bin etwas ratlos, was sagt ihr dazu?

LG und Danke im Voraus!
WorldRacer
 
Hi,

kenne mich mit .Net so ziemlich überhaupt nicht aus, aber du könntest die komplette Kommunikation transparant mit TLS verschlüsseln. Hierzu braucht dein Server ein Zertifikat (das kannst du dir auch selbst erstellen) das der Client kennen muss. Hierfür solltest du mit Hilfe von Google ein paar Seiten und Beispiele zu dem Thema finden.

Dann funktioniert die komplette Verschlüsselung ohne dass du dafür extra viel Code schreiben musst.

Gruß,
BK
 
Hi,

danke für die fixe Antwort. TLS kommt leider nicht in Frage, da das ein Kostenfaktor ist, den ich einfach nicht tragen möchte ;) Aber mir kommt da schon eine Idee. Ich könnte mit Hilfe der MAC-Adresse der beiden Rechner verschlüsseln. Die sollten ja beide Rechner kennen.

Für weitere Lösungsvorschläge bin ich natürlich gerne offen.

LG
Marco
 
Hi,

wie kommst du bei TLS auf Kosten?

Die MAC-Adresse kennen die beiden nur vom jeweils anderen, wenn diese direkt verbunden sind. Sobald ein Router dazwischen hängt, funktioniert das nicht mehr.

Gruß,
BK
 
Hi,

okay :) TLS heißt kosten, da das Zertifikat nicht kostenlos ist ;) Das muss ja an einer Zertifikatsstelle gegen Gebühren eingetragen werden, damit es gültig ist :) Ich schaue mir momentan das Public-Key-Verfahren an.

LG
WorldRacer
 
Hi,

wie schon gesagt, du kannst dir die Zertifikate auch komplett selbst erstellen, kostenlos natürlich. Du musst ja nicht mit anderen kommunizieren, sondern nur mit deinem Programm. Und in diesem kannst du dein Serverzertifikat als Vertrauenswürdig einstellen.

Hab ich für meine Anwendungen auch so gemacht, funktioniert wie ne 1.

Grüße,
BK
 
Hallo zusammen,

danke für die vielen Ratschläge :) Da ich zwischenzeitlich Vorlieb mit RSA genommen habe, werd ich das wohl auch nehmen :) Im Endeffekt sieht TLS nicht anders aus, dort werden ebenfalls asymmetrische Verschlüsselungsverfahren verwendet :)

LG
WR
 
Hallo nochmal,

habe es nun folgendermaßen gelöst:

Client connected
Server schickt darauf seinen Public Key im Plain-Text
Client schickt seinen Public Key verschlüsselt mit dem Public Key des Servers zurück

Somit ist der Schlüsselaustausch abgehandelt, jegliche weitere Kommunikation folgt verschlüsselt. :)

LG und danke für eure Hilfe!
WR
 

Neue Beiträge

Zurück