Netzwerk - Ver/Entschlüsseln

Hi,

noch eine kleine Anmerkung: den Public-Key kannst du immer ohne Verschlüsselung übertragen, deswegen heißt er ja so ;)

Grüße,
BK
 
Hi Bratkartoffel,

nicht ganz: Mit Hilfe der Public Keys kann man doll böse Man-in-the-middle-attacken zusammen stricken :)

LG
Marco
 
Aber wenn der Man-in-the-middle weiß, dass der Public Key des Clients mit dem Public Key des Servers verschlüsselt wurde, dann kann der Mensch in der Mitte diesen leicht entschlüsseln und kennt den Public Key. Fazit: der Public Key bleibt öffentlich, egal was du tust. Oder?
 
Nicht ganz. Der man in The middle kann den public Key nicht. Entschluesseln, da ihm dazu der Passende private Key fehlt ;)

//3dit: dämliche autokorrektur vom android ;)
 
Zuletzt bearbeitet:
Nicht ganz. Der man in The middle kann den public Key nicht. Entschluesseln, da ihm dazu der Passende private Key fehlt ;)
Der Angreifer braucht aber nicht unbedingt den Public Key vom Client entschlüsseln, er kann auch gleich den Public Key vom Server abfangen und austauschen. Damit kann er dann auch wieder die gesammte Kommunikation belauschen / ändern.

Du mußt eine Methode finden die Public Keys zu verifizieren, damit du dir sicher bist, das die Nachrichten auch vom richtigen Partner kommen (Authentizität).

Z.B. könntest du den Public Key des Servers fest in den Client einbetten. Dann kann der Client verschlüsselte Nachrichten vom Server entschlüsseln.

Oder siehe https://en.wikipedia.org/wiki/Station-to-Station_protocol

Gruß
 
Habe da noch eine andere Lösung: einen.neuen public Key des Webers generieren und ebenfalls verschluesselt mit dem zuvor verschluesselten pubkey an den Client senden.
 
Hallo zusammen,

also es sieht insgesamt so aus:

1. Client baut die Verbindung auf.
2. Server akzeptiert diese zunächst und generiert ein Private/Public-Key-Paar.
Beispiel: 1234 Pub, 5678 Priv.
3. Server sendet dieses Paar unverschlüsselt an den Client.
4. Client generiert ebenfalls ein Schlüsselpaar.
Beispiel: 9012 Pub, 3456 Priv.
5. Der Client verschlüsselt seinen Public Key mit Hilfe des Public Keys vom Server
Beispiel-Ergebnis: abc#*1$
6. Der Client sendet die verschlüsselte Nachricht an den Server.

Folglich: Ein Mithörer ist also ohne den privaten Schlüssel des Servers nicht mehr in der Lage, den Öffentlichen Schlüssel des Clients zu missbrauchen um Nachrichten vom Server an den Client zu Faken. Denn dafür, benötigt er den Öffentlichen Schlüssel des Clients, mit dem der Server normalerweise seine Nachrichten an den Client verschlüsselt.

7. Damit die Client-Nachrichten nicht verfälscht werden, folgt nun eine weitere Prozedur.
8. Da der Server nun den Public-Key des Clients hat, generiert der Server ein neues Schlüssel-Paar.
Beispiel: 9876 Pub, 4321 Priv.
9. Der Public-Key des Servers wird nun mit dem Public-Key des Clients verschlüsselt.
Beispiel: $$%#ab
10. Das Ergebnis wird nun an den Client gesendet.
11. Nun haben beide Partner die entsprechenden Schlüssel für die folgende Kommunikation, ohne dass jemand weiß, mit welchen Daten verschlüsselt wird.

Folglich benötigt ein Mithörer mehrere Schlüssel um den Verkehr abzuhören!

//edit: Anbei halte ich mich an das Schema der typischen asymmetrischen Verschlüsselung:

800px-Orange_blue_public_key_cryptography_de.svg.png

LG
Marco
 
Zuletzt bearbeitet:
Folglich: Ein Mithörer ist also ohne den privaten Schlüssel des Servers nicht mehr in der Lage, den Öffentlichen Schlüssel des Clients zu missbrauchen um Nachrichten vom Server an den Client zu Faken. Denn dafür, benötigt er den Öffentlichen Schlüssel des Clients, mit dem der Server normalerweise seine Nachrichten an den Client verschlüsselt.
Da ist ein Fehler in deiner Logik.

1. Client baut die Verbindung auf.
2. Server akzeptiert diese zunächst und generiert ein Private/Public-Key-Paar.
Beispiel: 1234 Pub, 5678 Priv.
3. Server sendet dieses Paar unverschlüsselt an den Client.
{ ich vermute du meinst nur den Public Key, das Schlüsselpaar zu senden wäre Unfug }
3. a) Mallory fängt die Schlüssel ab, generiert seinerseits ein neues Schlüsselpaar und sendet es zum Client
4. Client generiert ebenfalls ein Schlüsselpaar.
Beispiel: 9012 Pub, 3456 Priv.
5. Der Client verschlüsselt seinen Public Key mit Hilfe des Public Keys vom Server
Beispiel-Ergebnis: abc#*1$
6. Der Client sendet die verschlüsselte Nachricht an den Server.
6. a) Mallory fängt die Nachricht ab, sendet seinerseits eine Nachricht an den Server mit seinem eigenen Public Key

7. Damit die Client-Nachrichten nicht verfälscht werden, folgt nun eine weitere Prozedur.
8. Da der Server nun den Public-Key des Clients hat, generiert der Server ein neues Schlüssel-Paar.
Beispiel: 9876 Pub, 4321 Priv.
9. Der Public-Key des Servers wird nun mit dem Public-Key des Clients verschlüsselt.
Beispiel: $$%#ab
10. Das Ergebnis wird nun an den Client gesendet.
11. Nun haben beide Partner die entsprechenden Schlüssel für die folgende Kommunikation, ohne dass jemand weiß, mit welchen Daten verschlüsselt wird.

Irrtum. Mallory kann jede Nachricht mithören, Nachrichten ändern und eigene Nachrichten im Namen vom Server oder Client schicken.

Gruß
 
Hi,

warum nimmst du nicht einfach ein normales TLS-Zertifikat von deiner eigenen CA her? Diese CA als vertrauenswürdig im Programm hinterlegen und fertig. Dieses System ist erprobt und man kann wenig (im Sinne von: weit weniger als bei einer eigenen Implementierung) falsch machen. Vorallem läuft die Verschlüsselung dann auf einer niedrigen Ebene, ergo dürfte die Performance weit besser sein wie wenn du in deinem .Net Programm das manuell machst. Desweiteren ist TLS transparent, du brauchst dich in der Oberfläche nicht um die Verschlüsselung selbst kümmern, nur um den Aufbau der Verbindung und der Überprüfung des Zertifikats. Der Schlüsselaustausch läuft dann automatisch über ein sicheres System (z.B.: Diffie-Hellmann) und wurde oft genug getestet und von Leuten die weit intelleigenter als du, ich und deepthroat zusammen sind, als sicher eingestuft.

Ausserdem ist das generieren von 2 Schlüsselpaaren bei jedem Client meiner Meinung nach Unfug und unnötig. Das frisst zu viele Ressourcen ohne dass es etwas bringt und öffnet einem DDoS Tür und Tor.

Gruß,
BK
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück