Kategorija: Upravljanje ključev
Kompleksnost: ⭐⭐⭐ (Srednja)
Predpogoji: OpenSSL 3.6+, varen vir entropije
Predviden čas: 15-20 minut
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 |
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)
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!");
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 }
| 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 |
| Povezava | Scenarij | Opis |
|---|---|---|
| Naslednji korak | 11.2 Hramba ključev | Varno shranjevanje |
| Povezano | 11.3 Rotacija ključev | Redna zamenjava |
| Povezano | 2.1 Strežniški CSR | Ustvarjanje CSR |
« ← Pregled ključev | ↑ Scenariji | 11.2 Hramba ključev → »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional