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