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!

Vedi anche


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

Zuletzt geändert: il 30/01/2026 alle 09:05