====== Namespace KeyExchange ======
**Namespace:** ''WvdS.System.Security.Cryptography.KeyExchange''
Contiene classi per lo scambio chiavi post-quantum con ML-KEM.
----
===== Classi =====
^ Classe ^ Descrizione ^
| KeyExchangeService | Servizio high-level per scambio chiavi Client/Server |
| EphemeralKeyPair | Container per coppie di chiavi effimere ML-KEM/ML-DSA |
| SecureSession | Rappresenta una sessione sicura stabilita |
----
===== Classi Request/Response =====
^ Classe ^ Descrizione ^
| KeyExchangeInitRequest | Messaggio di inizializzazione client |
| KeyExchangeInitResponse | Messaggio di risposta server |
| KeyExchangeConfirmRequest | Messaggio di conferma client |
| KeyExchangeConfirmResponse | Risposta di conferma server |
----
===== Flusso del protocollo =====
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-+
| |
v v
SecureSession SecureSession
(Shared Secret) (Shared Secret)
----
===== Esempio =====
using WvdS.System.Security.Cryptography.KeyExchange;
var kex = new KeyExchangeService();
// === Client ===
var clientKeys = await kex.GenerateClientKeysAsync();
var initRequest = await kex.CreateInitRequestAsync(clientKeys);
// Inviare initRequest al Server...
// === Server ===
var serverKeys = await kex.GenerateServerKeysAsync();
var (response, serverSession) = await kex.ProcessClientRequestAsync(
initRequest, serverKeys);
// Inviare response al Client...
// === Client ===
var clientSession = await kex.ProcessServerResponseAsync(
response, clientKeys);
// Entrambi hanno ora lo stesso Shared Secret!
----
===== Metodi principali =====
==== KeyExchangeService ====
^ Metodo ^ Descrizione ^
| ''GenerateClientKeysAsync'' | Generare chiavi lato client |
| ''GenerateServerKeysAsync'' | Generare chiavi lato server |
| ''CreateInitRequestAsync'' | Creare messaggio di inizializzazione |
| ''ProcessClientRequestAsync'' | Server elabora richiesta client |
| ''ProcessServerResponseAsync'' | Client elabora risposta server |
| ''CreateConfirmRequestAsync'' | Creare messaggio di conferma |
| ''VerifyConfirmationAsync'' | Verificare conferma |
----
===== Vedi anche =====
* [[.:encryption|Namespace Encryption]]
* [[.:keyderivation|Namespace KeyDerivation]]
* [[.:start|Panoramica API]]
{{tag>namespace keyexchange ml-kem}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//