.NET entmystifiziert die Verschlüsselung

Beim Start erstellt der Client seine eigene Instanz der Klasse RSACryptoServiceProvider. Bei der Instantiierung enthält das Objekt in der Standardeinstellung starke Schlüssel. Der Client muss den öffentlichen Schlüssel aus diesem RSA-Objekt bekommen und ihn dem Server senden. Der öffentliche Schlüssel wird mithilfe der ExportParameters-Methode geholt, so dass er sich dann in einem RSAParameters-Objekt befindet. Wie senden wir dieses Objekt an den Server? Wir können hierzu .NETs binäre Serialisierung aus dem Namensraum System.Runtime.Serialization.Formatters.Binary verwenden:


Der BinaryFormatter schreibt direkt in Streams, und in diesem Fall schreibt er die serialisierte Version des RSAParameters in den Netzwerkstrom. Der Server erhält diese Bytes und deserialisiert sie in ein RSAParameters-Objekt:


Jetzt erstellt der Server einen symmetrischen Schlüssel und IV, die beide Seiten verwenden können und verschlüsselt sie mithilfe des öffentlichen Schlüssels des Client:


Im Gegensatz zu den symmetrischen Providern verschlüsseln die asymmetrischen Provider nicht in einen Stream, sondern in ein Byte-Array hinein. Das Byte-Array kann dann mithilfe von NetworkStream an den Client gesendet werden.

Sobald der Client die verschlüsselten Versionen des symmetrischen Schlüssels und des IV erhält, entschlüsselt er sie mithilfe seines eigenen privaten asymmetrischen Schlüssels. Jetzt haben beide Seiten einen gemeinsamen symmetrischen Schlüssel und IV. Von jetzt an senden sie sich Daten zu, die nur mit dem symmetrischen Schlüssel verschlüsselt sind. Der asymmetrische Algorithmus hat seinen Zweck erfüllt und muss nicht mehr verwendet werden.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

ZDNet für mobile Geräte
ZDNet-App für Android herunterladen ZDNet-App für iOS

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu .NET entmystifiziert die Verschlüsselung

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *