~~NOTOC~~
====== Szenario 4.2: Rekey (Neuer Schlüssel) ======
**Kategorie:** [[.:start|Zertifikate verwalten]] \\
**Komplexität:** ⭐⭐⭐⭐ (Hoch) \\
**Voraussetzungen:** Bestehendes Zertifikat \\
**Geschätzte Zeit:** 20-30 Minuten
----
===== Beschreibung =====
Dieses Szenario beschreibt das **Rekey** - die Ausstellung eines neuen Zertifikats mit einem **neuen Schlüsselpaar**. Rekey ist notwendig bei Kompromittierungsverdacht, Algorithmus-Upgrades oder Schlüsselstärke-Erhöhung.
**Wann Rekey erforderlich ist:**
* Verdacht auf Schlüsselkompromittierung
* Migration von RSA zu ML-DSA (Post-Quantum)
* Erhöhung der Schlüssellänge
* Routine-Rotation (Sicherheitsrichtlinie)
* Ablauf des maximalen Schlüssel-Lebenszyklus
----
===== Workflow =====
flowchart LR
OLD[Altes Zertifikat] --> GEN[Neues Schlüsselpaar]
GEN --> CSR[Neuer CSR]
CSR --> ISSUE[Neues Zertifikat]
ISSUE --> DEPLOY[Deployment]
DEPLOY --> REVOKE[Altes widerrufen]
GEN --> BACKUP[Key Backup]
style GEN fill:#fff3e0
style ISSUE fill:#e8f5e9
----
===== Code-Beispiel (C#) =====
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
using var ctx = PqCryptoContext.Initialize();
// Altes Zertifikat laden (für Subject/SANs)
var oldCert = ctx.LoadCertificate("server.crt.pem");
// CA laden
var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem");
var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!");
// NEUES Schlüsselpaar generieren (PQ-Upgrade!)
using var newKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65);
// Subject und SANs vom alten Zertifikat übernehmen
var oldSans = ctx.GetSubjectAlternativeNames(oldCert);
// Neuer CSR mit neuem Schlüssel
var csr = ctx.CreateCertificateRequest(
newKey,
oldCert.SubjectName, // Subject übernehmen
new ExtBuilder()
.SubjectAlternativeName(oldSans) // SANs übernehmen
.Build()
);
// Neues Zertifikat ausstellen
var newCert = ctx.IssueCertificate(
csr,
issuerCert: caCert,
issuerKey: caKey,
serialNumber: ctx.GenerateSerialNumber(),
validDays: 365,
extensions: new ExtBuilder()
.BasicConstraints(ca: false, critical: true)
.KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment)
.ExtendedKeyUsage(ExtKeyUsage.ServerAuth)
.SubjectKeyIdentifier(newKey.PublicKey) // NEUER SKI!
.AuthorityKeyIdentifier(caCert)
.CrlDistributionPoint("http://crl.example.com/intermediate.crl")
.Build()
);
// Speichern
newCert.ToPemFile("server-rekeyed.crt.pem");
newKey.ToEncryptedPemFile("server-rekeyed.key.pem", "NewKeyPassword!");
Console.WriteLine("Rekey abgeschlossen:");
Console.WriteLine($" Alter Algorithmus: {oldCert.PublicKey.Oid.FriendlyName}");
Console.WriteLine($" Neuer Algorithmus: ML-DSA-65");
Console.WriteLine($" Alter SKI: {oldCert.GetSubjectKeyIdentifier()}");
Console.WriteLine($" Neuer SKI: {newCert.GetSubjectKeyIdentifier()}");
----
===== PQ-Migration: RSA zu ML-DSA =====
Für die Migration von klassischen zu Post-Quantum-Algorithmen:
// Hybrid-Rekey: RSA + ML-DSA parallel
public class HybridRekey
{
public static (X509Certificate2 classical, X509Certificate2 pq) PerformHybridRekey(
X509Certificate2 oldRsaCert,
PqCryptoContext ctx,
X509Certificate2 caCert,
AsymmetricAlgorithm caKey)
{
// 1. RSA-Schlüssel erneuern (Übergangsphase)
using var newRsaKey = RSA.Create(4096);
var rsaCsr = ctx.CreateCertificateRequest(newRsaKey, oldRsaCert.SubjectName);
var rsaCert = ctx.IssueCertificate(rsaCsr, caCert, caKey, validDays: 365);
// 2. ML-DSA-Schlüssel erstellen (Zukunft)
using var mlDsaKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65);
var pqCsr = ctx.CreateCertificateRequest(mlDsaKey, oldRsaCert.SubjectName);
var pqCert = ctx.IssueCertificate(pqCsr, caCert, caKey, validDays: 365);
return (rsaCert, pqCert);
}
}
----
===== Branchenspezifische Rekey-Anforderungen =====
^ Branche ^ Max. Schlüssel-Lebensdauer ^ Rekey-Trigger ^ Besonderheit ^
| **Finanzsektor** | 2 Jahre | HSM-Policy | FIPS 140-3 Compliance |
| **Healthcare** | 3 Jahre | Audit-Befund | DiGAV-Konformität |
| **Energie/SCADA** | 5 Jahre | Wartungsfenster | Offline-Fähigkeit |
| **Automotive** | Fahrzeug-Lebensdauer | Security-Update | OTA-Mechanismus |
----
===== Rekey-Checkliste =====
**Vor dem Rekey:**
- [ ] Alten Schlüssel sichern (falls noch benötigt)
- [ ] Alle Systeme identifizieren, die das Zertifikat nutzen
- [ ] Deployment-Plan erstellen
- [ ] Rollback-Plan vorbereiten
- [ ] Wartungsfenster kommunizieren
**Nach dem Rekey:**
- [ ] Neues Zertifikat auf allen Systemen deployen
- [ ] Verbindungen testen
- [ ] Altes Zertifikat widerrufen
- [ ] Alten Schlüssel sicher vernichten
- [ ] Dokumentation aktualisieren
----
===== Verwandte Szenarien =====
^ Beziehung ^ Szenario ^ Beschreibung ^
| **Alternative** | [[.:renewal|4.1 Renewal]] | Gleicher Schlüssel |
| **Nächster Schritt** | [[de:int:pqcrypt:szenarien:widerruf:zertifikat_widerrufen|6.4 Widerrufen]] | Altes Zertifikat |
| **Voraussetzung** | [[de:int:pqcrypt:szenarien:schluessel:generierung|11.1 Schlüsselgenerierung]] | Neuer Schlüssel |
| **Verwandt** | [[de:int:pqcrypt:szenarien:schluessel:vernichtung|11.5 Schlüsselvernichtung]] | Alten Key löschen |
----
<< [[.:renewal|← 4.1 Renewal]] | [[.:start|↑ Verwaltung-Übersicht]] | [[.:archivierung|4.3 Archivierung →]] >>
{{tag>szenario verwaltung rekey schluessel migration pq}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//