~~NOTOC~~ ====== Scenarij 4.2: Re-Key (Novi ključ) ====== **Kategorija:** [[.:start|Upravljanje certifikatima]] \\ **Složenost:** ⭐⭐⭐⭐ (Visoka) \\ **Preduvjeti:** Postojeći certifikat \\ **Procijenjeno vrijeme:** 20-30 minuta ---- ===== Opis ===== Ovaj scenarij opisuje **Re-Key** - izdavanje novog certifikata s **novim parom ključeva**. Re-Key je potreban kod sumnje na kompromitaciju, nadogradnje algoritma ili povećanja jačine ključa. **Kada je Re-Key potreban:** * Sumnja na kompromitaciju ključa * Migracija s RSA na ML-DSA (Post-Quantum) * Povećanje duljine ključa * Rutinska rotacija (sigurnosna politika) * Istek maksimalnog životnog ciklusa ključa ---- ===== Tijek rada ===== flowchart LR OLD[Stari certifikat] --> GEN[Novi par ključeva] GEN --> CSR[Novi CSR] CSR --> ISSUE[Novi certifikat] ISSUE --> DEPLOY[Deployment] DEPLOY --> REVOKE[Opoziv starog] GEN --> BACKUP[Sigurnosna kopija ključa] style GEN fill:#fff3e0 style ISSUE fill:#e8f5e9 ---- ===== Primjer koda (C#) ===== using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; using var ctx = PqCryptoContext.Initialize(); // Učitavanje starog certifikata (za Subject/SAN) var oldCert = ctx.LoadCertificate("server.crt.pem"); // Učitavanje CA var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem"); var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!"); // NOVI par ključeva (PQ nadogradnja!) using var newKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65); // Preuzimanje Subjecta i SAN-ova od starog certifikata var oldSans = ctx.GetSubjectAlternativeNames(oldCert); // Novi CSR s novim ključem var csr = ctx.CreateCertificateRequest( newKey, oldCert.SubjectName, // Preuzimanje Subjecta new ExtBuilder() .SubjectAlternativeName(oldSans) // Preuzimanje SAN-ova .Build() ); // Izdavanje novog 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) // NOVI SKI! .AuthorityKeyIdentifier(caCert) .CrlDistributionPoint("http://crl.example.com/intermediate.crl") .Build() ); // Spremanje newCert.ToPemFile("server-rekeyed.crt.pem"); newKey.ToEncryptedPemFile("server-rekeyed.key.pem", "NewKeyPassword!"); Console.WriteLine("Re-Key završen:"); Console.WriteLine($" Stari algoritam: {oldCert.PublicKey.Oid.FriendlyName}"); Console.WriteLine($" Novi algoritam: ML-DSA-65"); Console.WriteLine($" Stari SKI: {oldCert.GetSubjectKeyIdentifier()}"); Console.WriteLine($" Novi SKI: {newCert.GetSubjectKeyIdentifier()}"); ---- ===== PQ migracija: RSA na ML-DSA ===== Za migraciju s klasičnih na post-kvantne algoritme: // Hibridni Re-Key: RSA + ML-DSA paralelno public class HybridRekey { public static (X509Certificate2 classical, X509Certificate2 pq) PerformHybridRekey( X509Certificate2 oldRsaCert, PqCryptoContext ctx, X509Certificate2 caCert, AsymmetricAlgorithm caKey) { // 1. Obnova RSA ključa (prijelazna faza) using var newRsaKey = RSA.Create(4096); var rsaCsr = ctx.CreateCertificateRequest(newRsaKey, oldRsaCert.SubjectName); var rsaCert = ctx.IssueCertificate(rsaCsr, caCert, caKey, validDays: 365); // 2. Kreiranje ML-DSA ključa (budućnost) 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); } } ---- ===== Zahtjevi za Re-Key po industrijama ===== ^ Industrija ^ Maks. životni vijek ključa ^ Okidač za Re-Key ^ Posebnost ^ | **Financijski sektor** | 2 godine | HSM politika | FIPS 140-3 usklađenost | | **Zdravstvo** | 3 godine | Nalaz revizije | DiGAV sukladnost | | **Energetika/SCADA** | 5 godina | Prozor održavanja | Offline sposobnost | | **Automobilska** | Životni vijek vozila | Sigurnosno ažuriranje | OTA mehanizam | ---- ===== Kontrolna lista za Re-Key ===== **Prije Re-Key-a:** - [ ] Osigurati stari ključ (ako je još potreban) - [ ] Identificirati sve sustave koji koriste certifikat - [ ] Kreirati plan deploymenta - [ ] Pripremiti plan povratka - [ ] Komunicirati prozor održavanja **Nakon Re-Key-a:** - [ ] Deploirati novi certifikat na sve sustave - [ ] Testirati veze - [ ] Opozvati stari certifikat - [ ] Sigurno uništiti stari ključ - [ ] Ažurirati dokumentaciju ---- ===== Povezani scenariji ===== ^ Odnos ^ Scenarij ^ Opis ^ | **Alternativa** | [[.:renewal|4.1 Obnova]] | Isti ključ | | **Sljedeći korak** | [[hr:int:pqcrypt:szenarien:widerruf:zertifikat_widerrufen|6.4 Opoziv]] | Stari certifikat | | **Preduvjet** | [[hr:int:pqcrypt:szenarien:schluessel:generierung|11.1 Generiranje ključeva]] | Novi ključ | | **Povezano** | [[hr:int:pqcrypt:szenarien:schluessel:vernichtung|11.5 Uništavanje ključeva]] | Brisanje starog ključa | ---- << [[.:renewal|← 4.1 Obnova]] | [[.:start|↑ Pregled upravljanja]] | [[.:archivierung|4.3 Arhiviranje →]] >> {{tag>scenarij upravljanje rekey ključ migracija pq}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//