KeyExchange Namespace

Namespace: WvdS.System.Security.Cryptography.KeyExchange

Enthält Klassen für Post-Quantum-Schlüsselaustausch mit ML-KEM.


Klassen

Klasse Beschreibung
KeyExchangeService High-Level Service für Client/Server Key Exchange
EphemeralKeyPair Container für kurzlebige ML-KEM/ML-DSA Schlüsselpaare
SecureSession Repräsentiert eine etablierte sichere Session

Anfrage/Antwort-Klassen

Klasse Beschreibung
KeyExchangeInitRequest Client-Initiierungsnachricht
KeyExchangeInitResponse Server-Antwortnachricht
KeyExchangeConfirmRequest Client-Bestätigungsnachricht
KeyExchangeConfirmResponse Server-Bestätigungsantwort

Protokollablauf

Client                              Server
  │                                    │
  ├─ GenerateClientKeysAsync()         │
  │                                    │
  ├─ CreateInitRequest() ──────────────►│
  │   (ML-KEM PubKey + ML-DSA Sig)     │
  │                                    ├─ ProcessClientRequest()
  │                                    │   (Verify, Encapsulate)
  │◄────────────────── InitResponse ───┤
  │   (Ciphertext + ML-DSA Sig)        │
  │                                    │
  ├─ ProcessServerResponse()           │
  │   (Verify, Decapsulate)            │
  │                                    │
  ├─ CreateConfirmRequest() ───────────►│
  │   (HMAC Confirmation)              │
  │                                    ├─ VerifyConfirmation()
  │◄──────────────── ConfirmResponse ──┤
  │                                    │
  ▼                                    ▼
  SecureSession                   SecureSession
  (Shared Secret)                 (Shared Secret)

Beispiel

using WvdS.System.Security.Cryptography.KeyExchange;
 
var kex = new KeyExchangeService();
 
// === Client ===
var clientKeys = await kex.GenerateClientKeysAsync();
var initRequest = await kex.CreateInitRequestAsync(clientKeys);
 
// Sende initRequest an Server...
 
// === Server ===
var serverKeys = await kex.GenerateServerKeysAsync();
var (response, serverSession) = await kex.ProcessClientRequestAsync(
    initRequest, serverKeys);
 
// Sende response an Client...
 
// === Client ===
var clientSession = await kex.ProcessServerResponseAsync(
    response, clientKeys);
 
// Beide haben nun identisches Shared Secret!

Hauptmethoden

KeyExchangeService

Methode Beschreibung
GenerateClientKeysAsync Client-seitige Schlüssel generieren
GenerateServerKeysAsync Server-seitige Schlüssel generieren
CreateInitRequestAsync Initiierungsnachricht erstellen
ProcessClientRequestAsync Server verarbeitet Client-Anfrage
ProcessServerResponseAsync Client verarbeitet Server-Antwort
CreateConfirmRequestAsync Bestätigungsnachricht erstellen
VerifyConfirmationAsync Bestätigung verifizieren

Siehe auch


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: den 29.01.2026 um 15:12