~~NOTOC~~ ====== Scenarij 4.2: Ponovna izdaja ključa (Rekey) ====== **Kategorija:** [[.:start|Upravljanje certifikatov]] \\ **Kompleksnost:** Visoka \\ **Predpogoji:** Obstoječi certifikat \\ **Ocenjeni čas:** 20-30 minut ---- ===== Opis ===== Ta scenarij opisuje **ponovno izdajo ključa (Rekey)** - izdajo novega certifikata z **novim parom ključev**. Ponovna izdaja je potrebna ob sumu ogroženosti, nadgradnjah algoritmov ali povečanju moči ključa. **Kdaj je ponovna izdaja potrebna:** * Sum ogroženosti ključa * Migracija z RSA na ML-DSA (post-kvantno) * Povečanje dolžine ključa * Rutinska rotacija (varnostna politika) * Iztek maksimalne življenjske dobe ključa ---- ===== Potek dela ===== flowchart LR OLD[Stari certifikat] --> GEN[Nov par ključev] GEN --> CSR[Nov CSR] CSR --> ISSUE[Nov certifikat] ISSUE --> DEPLOY[Namestitev] DEPLOY --> REVOKE[Preklic starega] GEN --> BACKUP[Varnostna kopija ključa] style GEN fill:#fff3e0 style ISSUE fill:#e8f5e9 ---- ===== Primer kode (C#) ===== using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; using var ctx = PqCryptoContext.Initialize(); // Nalaganje starega certifikata (za Subject/SANs) var oldCert = ctx.LoadCertificate("server.crt.pem"); // Nalaganje CA var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem"); var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!"); // NOVO generiranje para ključev (PQ nadgradnja!) using var newKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65); // Prevzem Subject in SANs iz starega certifikata var oldSans = ctx.GetSubjectAlternativeNames(oldCert); // Nov CSR z novim ključem var csr = ctx.CreateCertificateRequest( newKey, oldCert.SubjectName, // Prevzem Subject new ExtBuilder() .SubjectAlternativeName(oldSans) // Prevzem SANs .Build() ); // Izdaja novega certifikata 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) // NOV SKI! .AuthorityKeyIdentifier(caCert) .CrlDistributionPoint("http://crl.example.com/intermediate.crl") .Build() ); // Shranjevanje newCert.ToPemFile("server-rekeyed.crt.pem"); newKey.ToEncryptedPemFile("server-rekeyed.key.pem", "NewKeyPassword!"); Console.WriteLine("Ponovna izdaja končana:"); Console.WriteLine($" Stari algoritem: {oldCert.PublicKey.Oid.FriendlyName}"); Console.WriteLine($" Nov algoritem: ML-DSA-65"); Console.WriteLine($" Stari SKI: {oldCert.GetSubjectKeyIdentifier()}"); Console.WriteLine($" Nov SKI: {newCert.GetSubjectKeyIdentifier()}"); ---- ===== PQ migracija: RSA na ML-DSA ===== Za migracijo s klasičnih na post-kvantne algoritme: // Hibridna ponovna izdaja: RSA + ML-DSA vzporedno public class HybridRekey { public static (X509Certificate2 classical, X509Certificate2 pq) PerformHybridRekey( X509Certificate2 oldRsaCert, PqCryptoContext ctx, X509Certificate2 caCert, AsymmetricAlgorithm caKey) { // 1. Obnova RSA ključa (prehodna faza) using var newRsaKey = RSA.Create(4096); var rsaCsr = ctx.CreateCertificateRequest(newRsaKey, oldRsaCert.SubjectName); var rsaCert = ctx.IssueCertificate(rsaCsr, caCert, caKey, validDays: 365); // 2. Ustvarjanje ML-DSA ključa (prihodnost) 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); } } ---- ===== Panožne zahteve za ponovno izdajo ===== ^ Panoga ^ Maks. življenjska doba ključa ^ Sprožilec ponovne izdaje ^ Posebnost ^ | **Finančni sektor** | 2 leti | Politika HSM | Skladnost FIPS 140-3 | | **Zdravstvo** | 3 leta | Ugotovitev revizije | Skladnost DiGAV | | **Energetika/SCADA** | 5 let | Vzdrževalno okno | Zmožnost dela brez povezave | | **Avtomobilska** | Življenjska doba vozila | Varnostna posodobitev | OTA mehanizem | ---- ===== Kontrolni seznam ponovne izdaje ===== **Pred ponovno izdajo:** - [ ] Varnostna kopija starega ključa (če je še potreben) - [ ] Identifikacija vseh sistemov, ki uporabljajo certifikat - [ ] Priprava načrta namestitve - [ ] Priprava načrta povrnitve - [ ] Sporočanje vzdrževalnega okna **Po ponovni izdaji:** - [ ] Namestitev novega certifikata na vse sisteme - [ ] Test povezav - [ ] Preklic starega certifikata - [ ] Varno uničenje starega ključa - [ ] Posodobitev dokumentacije ---- ===== Povezani scenariji ===== ^ Povezava ^ Scenarij ^ Opis ^ | **Alternativa** | [[.:renewal|4.1 Obnova]] | Isti ključ | | **Naslednji korak** | [[sl:int:pqcrypt:szenarien:widerruf:zertifikat_widerrufen|6.4 Preklic]] | Stari certifikat | | **Predpogoj** | [[sl:int:pqcrypt:szenarien:schluessel:generierung|11.1 Generiranje ključev]] | Nov ključ | | **Povezano** | [[sl:int:pqcrypt:szenarien:schluessel:vernichtung|11.5 Uničenje ključev]] | Brisanje starega ključa | ---- << [[.:renewal|← 4.1 Obnova]] | [[.:start|↑ Pregled upravljanja]] | [[.:archivierung|4.3 Arhiviranje →]] >> {{tag>szenario verwaltung rekey schluessel migration pq}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//