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