~~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//