====== 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//