TCP-Server absichern gegen Mitschneiden (verschlüsseln?)

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    TCP-Server absichern gegen Mitschneiden (verschlüsseln?)

    Hallo,

    ich habe vor ein größeres Projekt zu realisieren.
    Dabei geht es um einen Server, der mit mehreren Clients Daten austauscht.
    Nun würde ich gerne wissen, wie ich den Datenaustausch absichern kann, sowohl gegen Sniff-Attacken (Man in the Middle) als auch gegen Clientseitige modifizierung.

    Wie macht das z.B. Steam, dort wird ja auch das Passwort übertragen?

    Ich hoffe ihr könnt mir weiterhelfen.

    Mfg,
    Battlestr1k3
    Loggen sich die Clients etwa ein? Username Passwort, dann verschickst du zu beginn den Usernamen, verschlüsselt über den Key von Diffie-Hellman, dann hast du auf dem Server den Passwort Hash gespeichert und erstellst ihn ebenfalls am Client(mit dem eingegebenen Passwort), aus diesen beiden Hashs kannst du dann ein Passwort generieren(vlt. mit dem Key vom Diffie-Hellman-Schlüsselaustausch verrechnen). Diesen kennt der Man-In-The-Middle dann nicht mehr, dann erfährt er den Benutzernamen aber mehr nicht...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    //Edit:

    Zu spät gelesen.
    Danke für den Tipp!
    Mit dem aus diesem Verfahren erstellten Key kann ja dann alles vershclüsselt und beim Gegenüber wieder entschlüsselt werden.

    Ich werdem ir das mal in Ruhe anschauen.

    Ich hätte noch ein anderes Bedenken:
    Wie kann ich das Programm am besten vor Modifizierung durch den Benutzer absichern.
    Das müsste doch mit Sessions gehen.
    Weil ich denke mir eben, dass sich ein Admin einloggt und der Server als Antwort z.B. UserType=3 (Admin) schickt.
    Daraufhin öffnet das Programm den Admin-Bereich sozusagen. Wie kann ich es fertig bringen, dass die Befehle die vom Admin-Bereich gegeben werden nochmals überprüft werden, ob der User sich korrekt angemeldet hat oder ob einfach der Befehl gesendet wurde (Den Befehl hätte man ja mitschneiden können und danach einfach als unangemeldeter User dem Server schicken.)?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Battlestr1k3“ ()

    1. Beitrag über mir ist mit VB.Net
    2. de.wikipedia.org/wiki/Diffie-Hellman-Schl%C3%BCsselaustausch
    en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

    Wikipedia ist immer gut...

    Ich hab mir dafür eine Tabelle erstellt(Binär - eigenes Format)welches 1000 Primzahlen von 17 ab mit den dazugehörigen Primitivwurzeln speichert. Zu beginn wird eine Primzahl mit einer zugehörigen Primitivwurzel per Zufall ausgewählt(allgemein umso größer die Zahlen, um so schwieriger das knacken - da die Zufallszahlen immer kleiner die Primzahl sind) und diese an den Client gesendet, mit diesen Infos wird dann ein Key erstellt(als UShort) das ganze passiert 16 mal, damit hab ich 32 Byte auf dem Server und Client, die ein Sniffer nicht mit bekommt(AES-128 Bit Schlüssel+IV)...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    FTPWebRequest hat eine Property "EnableSSL".
    wie schon erwähnt, benötigst du dafür vmtl. ein Zertifikat.
    SSL beruht auf dem Diffie-Hellmann-Verfahren (hats noch um die Zertifiziererei erweitert - gugge wikipedia).

    also wenn du dieses Build-In-SSL des Frameworks zu laufen kriegst, bist du sicherlich auf der sicheren Seite.

    Würde mich übrigens sehr interessieren, auch wennich nich sehe, wie ich an ein Zertifikat kommen sollte.
    Ok, ich bedanke mich schonmal für Eure super Unterstützung!

    Wegen dem Zertifikat:
    Guckst Du hier (ist für Linux-Server, sollte aber euch unter Windows so ähnlich funktionieren).

    SSL bei Apache

    Das funktioniert super, der User bekommt nur den Hinweis, dass das Zertifkat nicht verifiziert wurde (Das kostest nämlich ordentlich Geld.).
    Weil ich denke mir eben, dass sich ein Admin einloggt und der Server als Antwort z.B. UserType=3 (Admin) schickt.
    Daraufhin öffnet das Programm den Admin-Bereich sozusagen. Wie kann ich es fertig bringen, dass die Befehle die vom Admin-Bereich gegeben werden nochmals überprüft werden, ob der User sich korrekt angemeldet hat oder ob einfach der Befehl gesendet wurde (Den Befehl hätte man ja mitschneiden können und danach einfach als unangemeldeter User dem Server schicken.)?

    Auf dem Server ist gespeichert, ob der jeweilige User ein Admin ist(wie du sagtest UserType=3), immer wenn ein COmmand kommt, wird überprüft ob dieser Admin-Rechte benötigt, ist das der Fall wird(Serverseitig) überprüft, ob der User Admin ist, wenn ja, dann ausführen, wenn nein(würd ich Verbindung direkt kappen)^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Battlestr1k3 schrieb:

    Das funktioniert super, der User bekommt nur den Hinweis, dass das Zertifkat nicht verifiziert wurde (Das kostest nämlich ordentlich Geld.).

    Ok - aber ist es mit sonem nicht verifizierten Zertificat auch möglich, die SSL-Funktionalität der FTPWebrequest-klasse zu nutzen?
    Sowas entwickelt sich halt schlecht, wenn man bei fehlermeldungen nicht weiß: habich mist gecodet, oder funzt das mittm Zertificat nicht?

    ErfinderDesRades schrieb:


    Sowas entwickelt sich halt schlecht, wenn man bei fehlermeldungen nicht weiß: habich mist gecodet, oder funzt das mittm Zertificat nicht?


    Also, das müsste mit jeder SSL-Klasse funktionieren, da die Verschlüsselung ja die gleiche wie bei einem verifizierten Zertifikat ist. Verfiziert heisst im Prinzip nur, dass eine Firma sicherstellt, dass das verwendete Zertifikat auch der angegeben Person gehört und das dann dem Benutzer zu verstehen gibt.