Einzelnen Beitrag anzeigen

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