====== 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 ===== * [[.:encryption|Encryption Namespace]] * [[.:keyderivation|KeyDerivation Namespace]] * [[.:start|API-Übersicht]] {{tag>namespace keyexchange ml-kem}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//