Erstellung eines verschlüsselten Chat Clients |
||
---|---|---|
#0
| ||
01.05.2015, 23:02
Gesperrt
Beiträge: 8 |
||
|
||
05.05.2015, 09:01
Moderator
Beiträge: 2312 |
#2
Wie Xeper schon im anderen Beitrag geschrieben hat, ist der Verzicht auf TLS nicht wirklich sinnig. Das mit RSA nachzubasteln kann schnell fehlerbehaftet sein. Es wäre ja auch möglich, ein Zertifikat selber zu erstellen und das dann in den Client zu importieren, oder?
Ein weiteres Problem sehe ich auch noch. Durch den Einsatz eines asynchronen Verschlüsselungsverfahrens müsste man ja irgendwie den privaten Schlüssel mitnehmen können, um meherere Geräte nutzen zu können, oder sehe ich das falsch? Gruß __________ Woher soll ich wissen was ich denke, bevor ich höre was ich sage?? Sag NEIN zu HD+/CI+ - boykottiert die Etablierung von HD+/CI+! |
|
|
||
05.05.2015, 09:54
Member
Beiträge: 5291 |
#3
Das ist natürlich vollkommen richtig, der Schlüssel muss mitgenommen werden.
Macht zb. das OTR Plugin für Pidgin auch so, letztendlich muss man aber sehen das die Welt keinen weiteren Bedarf an Chat Clients hat - es gibt schon zu genüge. Es wäre wesentlich besser sich an existierende Standards zu halten wie TLS und als Protokoll zb. XMPP (libpurple?) - ein Chat Programm womit wieder nur 3 Leute miteinander kommunizieren ist vollkommen unsinnig. __________ E-Mail: therion at ninth-art dot de IRC: megatherion @ Freenode |
|
|
ich bin dabei mittels C# einen Chat Client zu schreiben, welcher über einen Server mit PHP Skripts auf eine MySQL Datenbank zugreift und so die Nachrichten der Benutzer austauscht. Der Client soll relativ abhörsicher sein.
Das Programm sowie den Quellcode gibts auf http://csharp-tricks.blogspot.de/p/c-crypto-chat.html, würde mich freuen, falls ihrs euch mal anschaut.
Insbesondere möchte ich aber hier die Sicherheit des Chats diskuttieren.
Das Prinzip ist das folgende (ich möchte gerne auf TLS verzichten um den Client schnell und generell lauffähig zu halten):
Beim Erstellen eines neuen Benutzers wird ein RSA Schlüsselpaar erstellt, der private Schlüssel auf dem lokalen PC mit AES verschlüsselt gespeichert, der öffentliche in die Serverdatenbank eingetragen.
Der Login ist eine Challenge Response Authentication, der Server erstellt einen zufälligen String und verschlüsselt diesen mit dem öffentlichen Key, der Client entschlüsselt diesen.
Möchte man nun eine Nachricht an einen anderen Nutzer schicken, fragt der Client den Server nach dessen Public Key, mit diesem verschlüsselt der Client dann die Nachricht, der Empfänger entschlüsselt diese. Der Server benutzt PHP Sessions um sicherzustellen, dass nur die richtigen Benutzer ihre Nachrichten abholen können bzw. senden können.
Durch die Verschlüsselung der Nachrichten ist ja zuerst einmal sichergestellt, dass die Nachrichten nur von den richtigen Empfängern gelesen werden können.
Ich sehe jetzt noch folgende Angriffsmöglichkeiten:
1. Die Anfragen des Clients an den Server wie Nachrichten für Benutzer X holen oder als Benutzer X senden können replayed werden, jemand anderes könnte also die Session von Benutzer X missbrauchen.
Lösung: Der Client signiert jede Anfrage mit seinem privaten Schlüssel, der Server prüft diese.
2. Bei Anfragen an den Server zur Abfrage eines Public Keys kann die Nachricht von einem Man in the Middle o.ä. abgefangen und verändert werden. Lösung: Der Server verschlüsselt die Antwort mit dem Public Key des Benutzers. (Oder besser: Der Server kriegt auch ein Schlüsselpaar und signiert seine Antwort?)
Ansonsten sehe ich momentan aber keine Probleme. Was haltet ihr davon?
Würde mich sehr über Antworten freuen, liebe Grüße
Oliver