Barvna shema: Riviera
Trenutno dejavna stran: start » sl » Dokumentacija » Postkvantna kriptografija » WKL.System.Security.Cryptography – pregled » Navodila » Dogovor o hibridnem ključu

Dogovor o hibridnem ključu

Strani vašega lastnega protokola naj se dogovorita o skupnem ključu. Ključ naj ostane varen, dokler je varen ECDH ali ML-KEM.

Pregled rešitve

ElementNamen
ECDiffieHellman.Create(ECCurve.NamedCurves.nistP384)klasični par ključev prejemnika, iz .NET
MLKemKey.Generate(MLKemParameterSet.MLKem768)par ključev ML-KEM prejemnika
HybridKeyAgreement.Encapsulatepošiljatelj: izpelje ključ in vrne, kar prejemnik potrebuje zanj
HybridKeyAgreement.Decapsulateprejemnik: izpelje isti ključ
HybridEncapsulationrezultat pošiljatelja: SharedKey, EphemeralPublicKey, MLKemCiphertext

Obe metodi skrivnosti privzeto združita s KeyCombine po NIST SP 800-227, kot priporoča BSI TR-02102-1; glejte Pravila za postkvantne postopke.

Izvedba

Prejemnik ustvari svoje ključe in javna dela preda pošiljatelju:

using var recipientEcdh = ECDiffieHellman.Create(ECCurve.NamedCurves.nistP384);
using var recipientKem = MLKemKey.Generate(MLKemParameterSet.MLKem768);
 
ECDiffieHellmanPublicKey ecdhPublic = recipientEcdh.PublicKey;
byte[] kemPublic = recipientKem.ExportEncapsulationKey();

Pošiljatelj izpelje ključ ter prejemniku pošlje EphemeralPublicKey in MLKemCiphertext:

byte[] info = Encoding.UTF8.GetBytes("example.com file transfer v1");
 
using var kemForSender = MLKemKey.ImportEncapsulationKey(MLKemParameterSet.MLKem768, kemPublic);
var sent = HybridKeyAgreement.Encapsulate(ecdhPublic, kemForSender, info);
 
byte[] message = SymmetricEncryptionExtensions.EncryptAesGcm(
    Encoding.UTF8.GetBytes("Pozdravljeni"), sent.SharedKey);

Prejemnik izpelje isti ključ in dešifrira:

byte[] key = HybridKeyAgreement.Decapsulate(
    recipientEcdh, recipientKem, sent.EphemeralPublicKey, sent.MLKemCiphertext, info);
 
Console.WriteLine(Encoding.UTF8.GetString(SymmetricEncryptionExtensions.DecryptAesGcm(message, key)));

Primeri potrebujejo using System.Security.Cryptography;, using System.Text;, using WKL.System.Security.Cryptography;, using WKL.System.Security.Cryptography.KeyDerivation; in using WKL.System.Security.Cryptography.Encryption;.

Opombe

  • Enake vrednosti na obeh straneh. info, keyLength in combiner morajo biti na obeh straneh enaki. Drugačna vrednost ne sproži izjeme, temveč da drug ključ. Dešifriranje nato ne uspe pri preverjanju oznake AES-GCM.
  • Spremenjeni podatki. Spremenjeno šifrirano besedilo ali tuj kratkotrajni ključ prav tako dasta drug ključ. To je namerno: ML-KEM neveljavnih šifriranih besedil ne zavrne z napako, spremembo pa prepozna protokol nad njim.
  • Nabori parametrov. ML-KEM-768 in ML-KEM-1024 sta dovoljena brez izjeme. Z ML-KEM-512 Encapsulate sproži CryptographicException, dokler manjka PostQuantumExemptions.ReducedParameterSets.
  • Nasprotne strani s starejšo različico. Če ima nasprotna stran različico knjižnice s prvim združevalnikom, obema metodama podajte combiner: HybridKeyCombiner.Version1. Prejemnik za to ne potrebuje izjeme in sporoči dogodek PolicyDeviation. Pošiljatelj potrebuje PostQuantumExemptions.NonRecommendedCombiners.
  • Lastni protokoli z drugimi postopki. Za drugo kombinacijo kot ECDH in ML-KEM KeyCombiner.Combine združi dve skrivnosti z njunima šifriranima besediloma in javnima ključema po KeyCombine.

Sorodne teme

sl/wiki/pqcrypt/lib/how-to/agree-hybrid-keys.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille