AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Netzwerkkommunikation / Diffie-Hellman Fragen und Probleme
Thema durchsuchen
Ansicht
Themen-Optionen

Netzwerkkommunikation / Diffie-Hellman Fragen und Probleme

Ein Thema von btrterra · begonnen am 20. Dez 2010 · letzter Beitrag vom 31. Dez 2010
Antwort Antwort
btrterra

Registriert seit: 19. Dez 2010
4 Beiträge
 
#1

Netzwerkkommunikation / Diffie-Hellman Fragen und Probleme

  Alt 20. Dez 2010, 22:25
Hallo

Vorab entschuldige ich mich für den gewählten Titel, er ist sicher nicht zu 100% Aussagekräftig aber es geht hier nicht direkt nur um ein Problem. Sonfern eher um eine Verkettung von Problemen bzw. Verständnisfragen.

In meiner Firma existiert ein Großprojekt von mir, bestehend aus einem Server und mehreren Client Instanzen. Derzeit arbeitet die Kommunikation noch im Klartext mittels eines Terminatorzeichen Protokoll.
Nun wächst das Programm von Jahr zu Jahr weiter und das Protokoll mach ein paar Probleme, liegt wohl an meinem Source den ich vor 6 jahren geschrieben habe(als Neuling).
Über die Suche in diversen Foren bin ich dann mal auf die Tutorials von Narses gestolpert. Da ich ja bereits ein Terminatorzeichen Protokoll am laufen habe, auch wenn eben nicht so ausgereift wie das von Narses, habe ich mich dann direkt an das Binär-Tutorial gewidmet.
Soweit ist das auch kein Problem. Es läuft so vor sich hin.

Aus einigen Spielen weiß ich von dem Diffie-Hellman Key Exchange. Da dachte ich mir, das wäre doch auch recht nützlich um die Kommunikation des Programms nach außen hin offen zu legen. Somit müßte sich nicht jeder übers VPN einwählen sondern kann die Client direkt starten. Dient in dem Fall eigentlich nur zu Kontrollfunktionen und ein paar Statistiken.

Das Beispiel der WIKI konnte ich ja noch nachvollziehen aber bei größeren und dann Primitiv Wurzel hat es mich dann verlassen. Vorallem mit den großen Zahlen, die dann letzendlich als String vorliegen, kam ich natürlich auch nicht zurecht. Eine Weile gesucht und auch etwas gefunden was mir die Schlüssel erzeugt. Jetzt stehe ich vor dem Problem wie verwende ich die Schlüssel, welches verschlüsselungsverfahren wende ich an oder besserr gesagt sollte ich anwenden und vorallem wie...
http://www.opensc.ws/unsorted/9803-d...-exchange.html Es sind ja nur die Schlüssel.

Wenn ich das Terminatorzeichen Protokoll weiter verwende, wäre das einbinden der Verschlüsselung ja recht einfach, nach meiner bisherigen Meinung. Der Frame Header wird im Klartext übertragen, sowie das Terminatorzeichen. So habe ich dann den Anhaltspunkt ob alle Daten des Frames zusammen habe.
Bei dem Binär-Protokoll dagegen schaut es schon etwas anders aus, da ich dort natürlich kein Terminatorzeichen habe, wenn ich nach Narses Definition gehe, weiß ich in dem Moment nicht ob der gesamte Frame bereits angekommen ist. Jetzt kommt das nächste Problem, da ich ja mit Verschlüsselungen auch eher der neuling bin, weiß ich nicht ob ich auch einen noch nicht abgeschlossenen Frame entschlüsseln kann, was mich ja wieder zur ersten Frage bringt, welches Verfahren sollte ich anwenden. Ich habe ja keine feste Frame größe.

In einem Post den ich gefunden habe schrieb
4.) wird bei RSA niemals eine Nachricht Zeichenweise ver/entschlüsselt. Dies reduziert die erwünschte Sicherheit des Gesamtverfahrens auf defakto NULL. Normalerseise wird man bei RSA nur in Blöcken a X Bits arbeiten, wobei X meistens >= 1024 ist.

5.) es ist tödlich eine RSA Nachricht direkt mit RSA zu verschlüsseln, dies ist unsicher ! Normalerweise werden heute nur sogenannte Hybridsysteme verwendet. Ein per Zufall erzeugter Schlüssel mindestens 128 Bit groß wird mit RSA verschlüsselt. Die eigentliche Nachricht wird mit einem symmetrischen Verfahren verschlüsselt wobei eben unser Zufallsschlüssel als Passwort dient. Die verschlüsselte Nachricht enthält also mindestens 2 Datenbereiche -> 1.) mit RSA geschützer Zufallskey 2.) Nachricht mit diesem Zufallskey verschlüsselt.
Gruß Hagen
Bisher einges gelsen aber schlauer hat es mich leider nicht gemacht.
Ehrlich gesagt habe ich mir das leichter forgestellt anhand einer fertigen Klasse um die Keys zu erstellen.

Hier noch etwas wie ich es mir vorstegellt habe wenn es denn mal fertig ist.
-> Client(Alice) verbindet sich mit dem Server
-> Server(Biob) sendet "CMD_HELLO" mit der Session ID und den 3 Keys. In Wiki p,g und B.
-> Client sendet ebenfalls "CMD_HELLO" mit seiner Session ID und A. Da ich ja bereits alles habe um für den Server die Daten zu verschlüsseln, sende ich diesen Befehl schon verschlüsselt.
-> Server entschlüsselt den Befehlsinhalt und trägt in seiner Client List den Key A ab um folge Nachrichten an den Client zu verschlüsseln.
Nun folgt die Authentifizierung über die "gesicherte" Leitung und natürlich der Rest der Kommunikation.

Wenn das alles nur so einfach umzusetzen wäre wie es zu beschreiben...

Ich hoffe ich habe mich gut genug ausgedrückt mit meinen Fragen und Problemen, in der Hoffnung das ich mich Hilfe der Community dies so umsetzen kann.

MfG

btrterra
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Netzwerkkommunikation / Diffie-Hellman Fragen und Probleme

  Alt 22. Dez 2010, 07:58
Hi,

wenn du das Ganze produktiv einsetzen willst, wie du ja schreibst, und nicht nur um damit zu spielen, rate ich dir unbedingt eine fertige und anerkannte Implementierung der Verschlüsselung zu verwenden, wie etwa die aus OpenSSL. Man kann bei der Implementierung von Verschlüsselungsalgorithmen viel falsch machen, und wenn du keinen Mathematiker oder Kryptographen an der Hand hast, der deinen Code auf Fehler hin überprüft, ist die Wahrscheinlichkeit hoch, dass dein Verfahren unsicher ist. WEP ist ein prominenetes Beispiel für dieses Problem.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
btrterra

Registriert seit: 19. Dez 2010
4 Beiträge
 
#3

AW: Netzwerkkommunikation / Diffie-Hellman Fragen und Probleme

  Alt 22. Dez 2010, 08:15
Es geht ja nicht nur um den Produktiven Einsatz. Klar wäre das eines der Ziele. Aber die Fragestellung ist ja auch darauf aus es zu verstehen.

Derzeit läuft es ja alles eher Firmenintern wenn man das VPN dazu zählt. Ob ich die Freigabe ans Netz bekomme steht zum jetzigen Zeitpunkt eh noch nicht fest. Eine Verschlüsselung wäre allerdings der Nächste Schritt in den Klassen.
Selbst wenn ich mich für OpenSLL Entscheide bleiben hier diese Fragen ja weiterhin offen.

Dazu kommt das ich ohne mich in SSL einzulesen nicht weiß ob ich die Klassen nicht noch einmal komplett überarbeiten muss um sie SSL Fähig zu bekommen. Es Läuft alles mit den TServerSocket und TClientSocket Komponenten. Dies würde ich natürlich auch gerne beibehalten.

Geändert von btrterra (22. Dez 2010 um 08:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Netzwerkkommunikation / Diffie-Hellman Fragen und Probleme

  Alt 22. Dez 2010, 10:55
Selbst wenn ich mich für OpenSLL Entscheide bleiben hier diese Fragen ja weiterhin offen
Erstens:
Was genau ist überhaupt deine Frage?

Zweitens (AFAIK, unter Vorbehalt):
Nein. Du könntest dein Protokoll so lassen wie es ist, der Secure Sockets Layer schiebt sich dann zwischen dein Protokoll (Anwendungsebene) und TCP.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
btrterra

Registriert seit: 19. Dez 2010
4 Beiträge
 
#5

AW: Netzwerkkommunikation / Diffie-Hellman Fragen und Probleme

  Alt 22. Dez 2010, 11:15
Ich meinte damit das Austauschen der Komponenten.
Zumindest habe ich hier auf anhieb keinen Beitrag gefunden der beides beinhaltet ClientSocket + SSL.

Bei den Indy Komponenten kann man ja glaub ich OpenSSL direkt mit nutzen, was aber wieder bedeutet ich muss die Klassen anpassen, was ich natürlich ungerne möchte. Ansonsten brauche ich etwas mehr Informationen was dies angeht.

Ich habe die Schlüssel die ich zur Verschlüsselung nutzen kann -> Diffie-Hellman
Nur wie verschlüssel ich danach die Daten.
1. Nach welchem Verfahren.
2. Aufgrund von Hagens Beitrag, mit einer Variablen Frame Lenge deren Ende verschlüsselt nicht eindeutig ist nach meinem derzeitigen Protokoll die Daten wieder zu entschlüsseln. Siehe letzter Abschnitt.

Das sind eigentlich die Grundlegenden Fragen um die es sich hier dreht.

Framaufbau nach Narses Bin-Tutorial

FrameHeader 8Byte
-> Bit 31 zur Kennzeichnung des Frames(4Byte)
-> Command(2Byte)
-> Anzahl der Argumente(2Byte)

Ein Argument besteht aus zwei Teilen, Die Länge ddes Argumentes nach der Größe der Variable(Int, In64, Cardinal, Word, Double, ...) dahinter dann die Daten selbst.

Sende ich einen Frame mit 3 Argumenten so weiß ich wann ich alle Argumente zusammen habe und der Frame komplett ist. Wenn ich aber die Daten verschlüssel. Also den gesamten Frame Inhalt abgesehen vom Header so weiß ich erst ob er vollständig sein könnte wenn ein neuer Frame ankommt und ich den vorherigen versuche zu entschlüsseln. Wenn aber eben kein folge Frame ankommt habe ich da das Problem. Dies könnte ich natürlich daruch lösen indem ich eben ans Ende auch etwas eindeutiges setze. Was dann wieder dem Terminatorzeichen Protokoll nah kommt. Ob es hier eine alternative gibt ausser nun ein Frame-Ende hinzuzufügen.
  Mit Zitat antworten Zitat
btrterra

Registriert seit: 19. Dez 2010
4 Beiträge
 
#6

AW: Netzwerkkommunikation / Diffie-Hellman Fragen und Probleme

  Alt 31. Dez 2010, 11:54
Habe das Protokoll nun mit einem "End Frame" erweitert.
Bleibt immernoch die Frage wie ich mit den Schlüsseln richtig verschlüssel.

Es mag ja sein das OpenSLL um längen besser ist aber meine Frage bezog sich eben auf etwas anderes. Es geht mir hier nicht nur darum es in der Firma einzusetzen sondern es umzusetzen.

Es wäre schön, wenn ich hierzu eben etwas Hilfe bekommen würde.
Wie machen es denn die Hersteller von Online Spielen.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Netzwerkkommunikation / Diffie-Hellman Fragen und Probleme

  Alt 31. Dez 2010, 15:17
Wie machen es denn die Hersteller von Online Spielen.
Bei Google suchenworld of warcraft encryption www.gamedev.net modifiziertes SRP-6

EDIT: Da gibt es auch hier in der DP was zu SRP von Hagen.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (31. Dez 2010 um 15:35 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz