Einzelnen Beitrag anzeigen
Alt 26.01.09, 11:19   #7 (permalink)
Elderan
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Hallo,
naja je nach Programmiersprache ist Socket/NetworkStream Programmierung für den Arsch oder extrem einfach (z.B. bei C# ist es sehr angenehm).


Also ein NetworkStream hat i.d.R., wie jeder andere Stream auch, eine Methode read() und write(byte[] value).

Mit write sende ich Daten über das Netzwerk, mit read kann ich Daten vom Netzwerk lesen.
On-the-fly heißt nun, du machst das ganze Transparent für den Programmierer.
Wenn er write() aufruft, werden die Daten nicht nur übers Netzwerk gesendet, sondern zuvor auch verschlüsselt (d.h. write verschlüsselt die Daten erst und sendet sie dann).
Bei read() werden die ankommenden Daten beim/vom Socket gelesen und entschlüsselt, so dass der Programmierer den ursprünglichen Text hatte (d.h. read liest die Daten die ankommen, entschlüsselt sie und gibt diese zurück).

Der Programmierer soll nichts davon mitbekommen, dass die Daten ver- und wieder entschlüsselt werden. Für ihn soll es so aussehen, als sei es ein ganz normaler Stream.

Da du ja mit einem Stream arbeitest, wäre eine Streamcipher zu empfehlen. Man könnte RC4 nehmen, was aber schwierig in der Handhabung ist.
Besser ist AES o.ä. in einem Streamcipher Mode zu verwenden, beispielsweise im Counter-Mode.


Je nach Programmiersprache ist solch ein geschützter NetworkStream mal mehr mal weniger aufwendig.
Bei C# reicht es schon, einfach vom NetworkStream zu erben, beim Verbindungsaufbau einen Schlüssel auszutauschen (Diffie-Hellman) und dann read() und write() zu überschreiben, dass die Daten ver-/entschlüsselt werden. Danach bzw. davor (bei read) kann man weiter die Methode der Elternklasse (NetworkStream) verwenden.
Elderan ist offline   Mit Zitat antworten
 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61