Scenarij 11.1: Generiranje ključev

Kategorija: 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 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