Kategorija: Upravljanje ključev
Kompleksnost: ⭐⭐⭐⭐ (Visoka)
Predpogoji: Generirani ključi
Predviden čas: 20-30 minut
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 |
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");
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 ); } }
| 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 |
| 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