Lccwin32 und Verschlüsselung

Rene Albrecht

Erfahrenes Mitglied
Hi,

hat von Euch schon jemand (idealerweise mit dem Lccwin32) in C einen Einstieg in Verschlüsselungsroutinen (AES, Blowfish etc.) gewagt und ein Projekt als Demonstration, wie das funktioniert?

Hintergrund: ich will ein Chatprogramm schreiben, dass serverbasiert Nachrichten innerhalb eines LAN verschickt. Genauer: das Programm ist bereits fertig, ich will jetzt jedoch eine Verschlüsselung einbauen, die ein Sniffen der Nachrichten verhindert.

Leider hab ich da bis jetzt keinerlei Erfahrung und suche HIER (nicht bei Google) Unterstützung. Hab im Tutorials-Teil schon nach Tuts zum Thema Verschlüsselung gesucht - aber war dort leider erfolglos...

Dank und Gruß
René
 
hi,
ich hab zwar keine ahnung von komplizierten verschlüsselungsalgorithmen, aber für deine zwecke sollte ein xor ( ^ ) eigentlich doch reichen oder?

vorgehensweise dabei etwa so:
Code:
void EncryptData(char*data, // ein zeiger auf die daten, die verschlüsselt werden sollen
int datalen, //wie lang sind die daten in bytes
char* key,    //ein schlüssel. nur mit diesem key kann data wieder entschlüsselt werden
int keylen,    //die länge des schlüssels
){
int i = 0;
while(i<datalen)
 data[i] ^= key[i++%keylen]; //jedes bytes in data per xor verschlüsseln
}

mit diesem algorithmus kann man die daten dann auch wieder entschlüsseln.
ich hab einen ähnlichen in assembler geschrieben, der macht in etwa genau das gleiche (mit einer kleinen erweiterung), ist aber 40mal schneller - wenn du willst, kann ich dir den schicken.


wie du es in dein chat-programm einbinden könntest:
wenn eine private verbindung zwischen 2 leuten aufgebaut werden soll, brauchen beide leute den schlüssel, um die daten zu decoden/-encoden, die transferiert werden.
das ist der einzige schwachpunkt, weiss nicht, wie man es hier umgehen soll, dass der schlüssel geschickt und abgehört werden soll.

ansonsten kannst du davon ausgehen, dass diese verschlüsselungsmechanik, solange die schlüssellänge nicht festgelegt ist, ziemlich unknackbar ist.
ansonsten: wer sich mit fortgeschritteneren methoden auskennt oder weiss, wie man das problem mit dem gesendeten schlüssel umgeht -> das würde mich auch interessieren.
 
@beichtpfarrer:

danke für deinen - wie ich finde - genialen einstieg! :-)
die problematik mit dem versenden des schlüssel ist mir auch bewußt. die assemblerroutinen sind für mich lediglich dahingehend interessant, dass ich daraus ein wenig mehr assembler-know-how bekomme. leider werde ich die nicht unbedingt einsetzen können, da die Serveranwendung auf Solaris respektive Linux (64 Bit) laufen wird.

@all:

Wie funktioniert eine Private/Public-Key-Verschlüsselung? Hat jemand Sourcen etc. zu dem Thema in C? Ich hatte den Ansatz, vom Client vor der Anmeldung einen Privat/Public Key erstellen zu lassen und den Public Key bei der Anmeldung an den Server mitzusenden. Geht das auf diese Art und Weise?
 
Zuletzt bearbeitet:
hoi,
also auf dem server muss ja gar keine ent-/verschlüsselung stattfinden (ja darf eigentlich auch gar nicht).
das machen nur die clients.
von dem her wäre die assembler verschlüsselungsroutine für jeden 32-bit Protected-Mode client gültig.
ich kenn mich auch nicht sonderlich gut in assembler aus, daher weiss ich nicht, was sich genau auf 64 bit plattformen ändert, aber interessieren würde ich mich dafür schon.

was ist eine Private-Public-Key-Verschlüsselung überhaupt? (wie gesagt, so genau bin ich in das thema nicht eingestiegen :) )
 
@Beichtpfarrer
Es gibt, soweit ich weiß, 2 Arten von Verschlüsseln.
Die eine ist die, das ein Schlüssel beide Seiten benutzen um die Daten zu verschlüsseln/entschlüsseln.
Dabei tritt das Problem auf, dass auf einer ungesicherten Verbindung kein Schlüsselaustausch stattfinden kann,
d.h. der Schlüssel muss vorher definiert werden.

Beim Public-Key-Verfahren entfällt das. Es werden pro Seite jeweils 2 Schlüssel erstellt,
ein Public-Key und ein Private-Key . Mit dem Public-Key kann jeder Daten verschlüsseln,
sie aber nicht wieder mit diesem Key entschlüsseln. Dieser Public-Key kann jederzeit auf einer unsicheren Verbindung übertragen werden.
Mit dem Private-Key können die mit dem Public-Key verschlüsselten Daten wieder entschlüsselt werden.

@Rene Albrecht
ich weiß nicht in wieweit man aus dieser Bibliothek Verschlüsselung lernen kann,
aber schau dir doch die Crypto++ v5.1 Library mal an.
http://www.eskimo.com/~weidai/cryptlib.html
 
Private/Public-Key-Verschlüsselung hört sich für mich ideal an:
1. jeder Client erstellt Private Key und Public Key und gibt den Public bei der Anmeldung an den Server weiter
2. Client B will an Client A eine Nachricht schicken, holt sich dessen Public Key beim Server ab, verschlüsselt die Nachricht und sendet die Nachricht an den Server
3. Der Server gibt die (unverschlüsselte) Nachricht an Client A weiter, dieser entschlüsselt sie mit seinem Private Key, sodass die Nachricht auf Client A lesbar wird.

Hab ich das so richtig verstanden?

Nachtrag @C Coder: die "Crypto++ Library is a free C++" Bibliothek - ich nutze grds. C. Also ist die leider wenig hilfreich für mich... :( Aber die Seite bietet weitreichende Informationen zum Thema Verschlüsselung :-)
 
Zuletzt bearbeitet:
Jip soweit alles richtig. Jetzt brauchst du nur noch ein Verfahren, mit dem du
verschlüsselst(RSA evtl, oder auch Diffie-Hellman)
 
Zurück