~~NOTOC~~ ====== Scenarij 11.2: Hramba ključev ====== **Kategorija:** [[.:start|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** | [[.:generierung|11.1 Generiranje ključev]] | Ustvarjanje ključev | | **Naslednji korak** | [[.:rotation|11.3 Rotacija ključev]] | Redna zamenjava | | **Povezano** | [[.:backup|11.4 Varnostna kopija ključev]] | Varnostne kopije | | **Povezano** | [[.:vernichtung|11.5 Uničenje ključev]] | Varno brisanje | ---- << [[.:generierung|← 11.1 Generiranje ključev]] | [[.:start|↑ Pregled ključev]] | [[.:rotation|11.3 Rotacija ključev →]] >> {{tag>scenarij ključ hramba dpapi vault hsm}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//