~~NOTOC~~ ====== Scenarij 11.1: Generiranje ključev ====== **Kategorija:** [[.:start|Upravljanje ključev]] \\ **Kompleksnost:** ⭐⭐⭐ (Srednja) \\ **Predpogoji:** OpenSSL 3.6+, varen vir entropije \\ **Predviden čas:** 15-20 minut ---- ===== Opis ===== Ta scenarij opisuje **varno generiranje kriptografskih ključev** za postkvantne algoritme. Generiranje ključev je najbolj kritičen korak - šibki ključi ogrožajo vse operacije, ki temeljijo na njih. **Podprti algoritmi:** ^ Algoritem ^ Tip ^ Varnost ^ Velikost ključa (javni) ^ | **ML-DSA-44** | Podpis | 128-bit | 1.312 bajtov | | **ML-DSA-65** | Podpis | 192-bit | 1.952 bajtov | | **ML-DSA-87** | Podpis | 256-bit | 2.592 bajtov | | **ML-KEM-512** | KEM | 128-bit | 800 bajtov | | **ML-KEM-768** | KEM | 192-bit | 1.184 bajtov | | **ML-KEM-1024** | KEM | 256-bit | 1.568 bajtov | ---- ===== Potek dela ===== flowchart LR ENTROPY[Vir entropije] --> RNG[CSPRNG] RNG --> KEYGEN[Generiranje ključa] PARAM[Izbira parametrov] --> KEYGEN KEYGEN --> PUBKEY[Javni ključ] KEYGEN --> PRIVKEY[Zasebni ključ] PRIVKEY --> ENCRYPT[Šifrirano shranjevanje] style ENTROPY fill:#fff3e0 style ENCRYPT fill:#e8f5e9 ---- ===== Primer kode: ML-DSA podpisni ključ ===== using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; using var ctx = PqCryptoContext.Initialize(); // Generiranje para ključev ML-DSA-65 (priporočeno) using var signatureKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65); Console.WriteLine("Generiran ključ ML-DSA-65:"); Console.WriteLine($" Javni ključ: {signatureKey.PublicKey.GetRawData().Length} bajtov"); Console.WriteLine($" OID: {signatureKey.PublicKey.Oid.Value}"); // Shranjevanje kot PEM signatureKey.PublicKey.ToPemFile("signing.pub.pem"); signatureKey.ToEncryptedPemFile("signing.key.pem", "SecurePassword123!"); // Različne varnostne ravni using var mlDsa44 = ctx.GenerateKeyPair(PqAlgorithm.MlDsa44); // 128-bit using var mlDsa65 = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65); // 192-bit (standard) using var mlDsa87 = ctx.GenerateKeyPair(PqAlgorithm.MlDsa87); // 256-bit (visoka varnost) ---- ===== Primer kode: ML-KEM šifrirni ključ ===== using var ctx = PqCryptoContext.Initialize(); // ML-KEM-768 za Key Encapsulation (priporočeno) using var kemKey = ctx.GenerateKeyPair(PqAlgorithm.MlKem768); Console.WriteLine("Generiran ključ ML-KEM-768:"); Console.WriteLine($" Javni ključ: {kemKey.PublicKey.GetRawData().Length} bajtov"); Console.WriteLine($" Uporaba: Key Encapsulation"); // Shranjevanje kemKey.PublicKey.ToPemFile("encryption.pub.pem"); kemKey.ToEncryptedPemFile("encryption.key.pem", "EncryptionPassword!"); ---- ===== Primer kode: Hibridni par ključev ===== public class HybridKeyPair { public AsymmetricAlgorithm ClassicalKey { get; set; } public PqKeyPair PqKey { get; set; } public static HybridKeyPair Generate( ClassicalAlgorithm classical, PqAlgorithm pq) { using var ctx = PqCryptoContext.Initialize(); // Klasični ključ var classicalKey = classical switch { ClassicalAlgorithm.RsA4096 => RSA.Create(4096), ClassicalAlgorithm.EcdsaP384 => ECDsa.Create(ECCurve.NamedCurves.nistP384), ClassicalAlgorithm.EcdhP384 => ECDiffieHellman.Create(ECCurve.NamedCurves.nistP384), _ => throw new ArgumentException("Neznan algoritem") }; // PQ ključ var pqKey = ctx.GenerateKeyPair(pq); return new HybridKeyPair { ClassicalKey = classicalKey, PqKey = pqKey }; } } public enum ClassicalAlgorithm { RsA4096, EcdsaP384, EcdhP384 } ---- ===== Panožne zahteve ===== ^ Panoga ^ Min. varnost ^ Priporočen algoritem ^ HSM obvezen? ^ | **Standardna IT** | 128-bit | ML-DSA-65 / ML-KEM-768 | Ne | | **Finančni sektor** | 192-bit | ML-DSA-65 / ML-KEM-768 | Da | | **Zdravstvo** | 192-bit | ML-DSA-65 / ML-KEM-768 | Priporočeno | | **Vlada** | 256-bit | ML-DSA-87 / ML-KEM-1024 | Da | | **IoT** | 128-bit | ML-DSA-44 / ML-KEM-512 | Ne | ---- ===== Povezani scenariji ===== ^ Povezava ^ Scenarij ^ Opis ^ | **Naslednji korak** | [[.:speicherung|11.2 Hramba ključev]] | Varno shranjevanje | | **Povezano** | [[.:rotation|11.3 Rotacija ključev]] | Redna zamenjava | | **Povezano** | [[sl:int:pqcrypt:szenarien:csr:csr_server|2.1 Strežniški CSR]] | Ustvarjanje CSR | ---- << [[.:start|← Pregled ključev]] | [[sl:int:pqcrypt:szenarien:start|↑ Scenariji]] | [[.:speicherung|11.2 Hramba ključev →]] >> {{tag>scenarij ključ generiranje ml-dsa ml-kem entropija}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//