Scenarij 11.2: Hramba ključev

Kategorija: Upravljanje ključev
Kompleksnost: ⭐⭐⭐⭐ (Visoka)
Predpogoji: Generirani ključi
Predviden čas: 20-30 minut


Opis

Ta scenarij opisuje varno hrambo kriptografskih ključev. Zaščita zasebnih ključev je bistvena - kompromitirani ključi ogrožajo vse certifikate in podpise, ki temeljijo na njih.

Možnosti hrambe:

Možnost Varnost Stroški Uporaba
Datotečni sistem (šifriran) Srednja Nizki Razvoj, testiranje
Windows DPAPI Dobra Nizki Windows Server
Azure Key Vault Visoka Srednji Oblak
HashiCorp Vault Visoka Srednji On-Premise/Oblak
HSM Zelo visoka Visoki CA, kritični sistemi

Potek dela

flowchart TD KEY[Zasebni ključ] --> ENCRYPT[Šifriranje] ENCRYPT --> ACL[Nadzor dostopa] ACL --> STORE{Lokacija hrambe} STORE --> FILE[Datotečni sistem] STORE --> VAULT[Key Vault] STORE --> HSM[HSM] FILE --> BACKUP[Varnostna kopija] VAULT --> BACKUP HSM --> BACKUP style ENCRYPT fill:#fff3e0 style ACL fill:#e8f5e9


Primer kode: Šifrirana datoteka (PEM)

using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
 
using var ctx = PqCryptoContext.Initialize();
 
// Generiranje ključa
using var keyPair = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65);
 
// Shranjevanje kot šifriran PEM (PKCS#8)
keyPair.ToEncryptedPemFile(
    path: "private-key.pem",
    password: "StrongPassword123!",
    pbeAlgorithm: PbeAlgorithm.Aes256Cbc,
    prf: PbePrf.HmacSha256,
    iterations: 100000  // PBKDF2 iteracije
);
 
// Javni ključ (nešifriran, javno deljen)
keyPair.PublicKey.ToPemFile("public-key.pem");
 
Console.WriteLine("Ključi shranjeni:");
Console.WriteLine("  Zasebni: private-key.pem (AES-256-CBC šifriran)");
Console.WriteLine("  Javni: public-key.pem");

Primer kode: Windows DPAPI

using System.Security.Cryptography;
 
public class DpapiKeyStorage
{
    private readonly string _keyStorePath;
 
    public DpapiKeyStorage(string basePath = null)
    {
        _keyStorePath = basePath ?? Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
            "WvdS", "Keys"
        );
        Directory.CreateDirectory(_keyStorePath);
    }
 
    public void StoreKey(string keyId, byte[] privateKey, DataProtectionScope scope = DataProtectionScope.CurrentUser)
    {
        // Šifriranje z DPAPI
        var protectedData = ProtectedData.Protect(
            privateKey,
            entropy: Encoding.UTF8.GetBytes(keyId),  // Dodatna entropija
            scope: scope
        );
 
        var keyPath = Path.Combine(_keyStorePath, $"{keyId}.dpapi");
        File.WriteAllBytes(keyPath, protectedData);
 
        Console.WriteLine($"Ključ shranjen z DPAPI: {keyPath}");
    }
 
    public byte[] LoadKey(string keyId, DataProtectionScope scope = DataProtectionScope.CurrentUser)
    {
        var keyPath = Path.Combine(_keyStorePath, $"{keyId}.dpapi");
 
        if (!File.Exists(keyPath))
        {
            throw new FileNotFoundException($"Ključ ni najden: {keyId}");
        }
 
        var protectedData = File.ReadAllBytes(keyPath);
 
        return ProtectedData.Unprotect(
            protectedData,
            entropy: Encoding.UTF8.GetBytes(keyId),
            scope: scope
        );
    }
}

Panožne zahteve za hrambo

Panoga Lokacija hrambe Šifriranje Nadzor dostopa
Razvoj Datotečni sistem PKCS#8 Datotečna dovoljenja
Enterprise Key Vault / Vault AES-256 RBAC
Finančni sektor HSM (FIPS 140-3) Strojna oprema Več oseb
Zdravstvo HSM ali Vault AES-256 Revizijski dnevnik
CA/PKI HSM Strojna oprema n-of-m kvorum

Povezani scenariji

Povezava Scenarij Opis
Predpogoj 11.1 Generiranje ključev Ustvarjanje ključev
Naslednji korak 11.3 Rotacija ključev Redna zamenjava
Povezano 11.4 Varnostna kopija ključev Varnostne kopije
Povezano 11.5 Uničenje ključev Varno brisanje

« ← 11.1 Generiranje ključev | ↑ Pregled ključev | 11.3 Rotacija ključev → »


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