7. Šifriranje

Scenariji: 3
FFI funkcije: ~25
Status: Načrtovano

Ta kategorija zajema vse scenarije za post-kvantno varno šifriranje. Hibridno šifriranje z ML-KEM, enkapsulacija ključev in simetrično šifriranje.


Scenariji

ID Scenarij Opis Kompleksnost Status
7.1 Hibridno šifriranje ECDH + ML-KEM kombinirano Visoka Načrtovano
7.2 Enkapsulacija ključev ML-KEM za izmenjavo ključev Srednja Načrtovano
7.3 Šifriranje datotek Šifriranje velikih datotek Srednja Načrtovano

Potek hibridnega šifriranja

sequenceDiagram participant A as Alice (Pošiljatelj) participant B as Bob (Prejemnik) Note over B: Generiranje para ključev B->>A: Javni ključ (ECDH + ML-KEM) Note over A: Enkapsulacija ključa A->>A: ECDH SharedSecret + ML-KEM Ciphertext A->>A: HKDF(ECDH || ML-KEM) → KEK A->>A: AES-GCM Encrypt(KEK, Plaintext) A->>B: ECDH Ephemeral PK + ML-KEM Ciphertext + AES Ciphertext Note over B: Dekapsulacija ključa B->>B: ECDH SharedSecret + ML-KEM Decapsulate B->>B: HKDF(ECDH || ML-KEM) → KEK B->>B: AES-GCM Decrypt(KEK, Ciphertext)


Algoritmi

Komponenta Algoritem Varnostni nivo Standard
Enkapsulacija ključa (PQ) ML-KEM-768 192 bitov NIST FIPS 203
Izmenjava ključev (klasično) ECDH P-384 192 bitov NIST SP 800-56A
Izpeljava ključa HKDF-SHA384 - RFC 5869
Simetrično šifriranje AES-256-GCM 256 bitov NIST SP 800-38D

Hibridno načelo: Oba algoritma (ECDH + ML-KEM) morata biti zlomljena, da bi bilo šifriranje ogroženo.


Primeri uporabe

Aplikacija Priporočen način Utemeljitev
Dolgoročna arhivacija ML-KEM (samo PQ) Podatki morajo ostati varni 20+ let
Trenutna komunikacija Hibridno Združljivost + priprava na prihodnost
Podedovani sistemi ECDH (klasično) Brez PQ podpore

Hiter začetek kode

Hibridno šifriranje

using WvdS.Security.Cryptography.Extensions.PQ;
 
// Prejemnik: Generiranje para ključev
using var recipientKey = ctx.GenerateHybridKeyPair(
    classicAlgorithm: EcdhCurve.P384,
    pqAlgorithm: PqAlgorithm.MlKem768
);
var publicKeyPem = recipientKey.ExportPublicKeyPem();
 
// Pošiljatelj: Šifriranje
var (ciphertext, encapsulatedKey) = ctx.HybridEncrypt(
    plaintext: Encoding.UTF8.GetBytes("Skrivno sporočilo"),
    recipientPublicKey: publicKeyPem
);
 
// Prejemnik: Dešifriranje
var plaintext = ctx.HybridDecrypt(
    ciphertext: ciphertext,
    encapsulatedKey: encapsulatedKey,
    privateKey: recipientKey
);

Šifriranje datotek

// Sifriranje velike datoteke (pretočno)
await ctx.EncryptFileAsync(
    inputPath: "dokument.pdf",
    outputPath: "dokument.pdf.enc",
    recipientPublicKey: publicKeyPem,
    mode: CryptoMode.Hybrid
);
 
// Dešifriranje
await ctx.DecryptFileAsync(
    inputPath: "dokument.pdf.enc",
    outputPath: "dokument-decrypted.pdf",
    privateKey: recipientKey
);

Povezane kategorije

Kategorija Povezava
11. Upravljanje ključev Upravljanje parov ključev
10. TLS/mTLS Izmenjava ključev v TLS rokovanju
12. Uvoz/Izvoz Izvoz šifriranih ključev

« ← 6. Preklic | ↑ Scenariji | 8. Digitalni podpisi → »


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