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