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


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

Zuletzt geändert: il 29/01/2026 alle 23:17