Inhaltsverzeichnis

WvdS.System.Security.Cryptography.KeyExchange prostor imena

Sadrži klase za post-kvantnu razmjenu ključeva s ML-KEM.


Klase

Klasa Opis
KeyExchangeService High-level servis za Client/Server razmjenu ključeva
EphemeralKeyPair Kontejner za kratkotrajne ML-KEM/ML-DSA parove ključeva
SecureSession Predstavlja uspostavljenu sigurnu sesiju

Klase zahtjeva/odgovora

Klasa Opis
KeyExchangeInitRequest Poruka inicijacije klijenta
KeyExchangeInitResponse Poruka odgovora poslužitelja
KeyExchangeConfirmRequest Poruka potvrde klijenta
KeyExchangeConfirmResponse Odgovor potvrde poslužitelja

Tijek protokola

Klijent                             Poslužitelj
  |                                    |
  +- 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)

Primjer

using WvdS.System.Security.Cryptography.KeyExchange;
 
var kex = new KeyExchangeService();
 
// === Klijent ===
var clientKeys = await kex.GenerateClientKeysAsync();
var initRequest = await kex.CreateInitRequestAsync(clientKeys);
 
// Pošalji initRequest poslužitelju...
 
// === Poslužitelj ===
var serverKeys = await kex.GenerateServerKeysAsync();
var (response, serverSession) = await kex.ProcessClientRequestAsync(
    initRequest, serverKeys);
 
// Pošalji response klijentu...
 
// === Klijent ===
var clientSession = await kex.ProcessServerResponseAsync(
    response, clientKeys);
 
// Oba sada imaju identičan dijeljeni tajni ključ!

Vidi također


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