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
| Element | Namen |
|---|---|
ECDiffieHellman.Create(ECCurve.NamedCurves.nistP384) | klasični par ključev prejemnika, iz .NET |
MLKemKey.Generate(MLKemParameterSet.MLKem768) | par ključev ML-KEM prejemnika |
HybridKeyAgreement.Encapsulate | pošiljatelj: izpelje ključ in vrne, kar prejemnik potrebuje zanj |
HybridKeyAgreement.Decapsulate | prejemnik: izpelje isti ključ |
HybridEncapsulation | rezultat 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,keyLengthincombinermorajo 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
EncapsulatesprožiCryptographicException, dokler manjkaPostQuantumExemptions.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 dogodekPolicyDeviation. Pošiljatelj potrebujePostQuantumExemptions.NonRecommendedCombiners. - Lastni protokoli z drugimi postopki. Za drugo kombinacijo kot ECDH in ML-KEM
KeyCombiner.Combinezdruž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 · Last modified: by Wolfgang van der Stille