Scenario 4.2: Rekey (Nuova chiave)
Categoria: Gestire certificati
Complessità: Alta
Prerequisiti: Certificato esistente
Tempo stimato: 20-30 minuti
Descrizione
Questo scenario descrive il Rekey - l'emissione di un nuovo certificato con una nuova coppia di chiavi. Il Rekey è necessario in caso di sospetta compromissione, upgrade di algoritmo o aumento della forza della chiave.
Quando è richiesto il Rekey:
- Sospetto di compromissione della chiave
- Migrazione da RSA a ML-DSA (Post-Quantum)
- Aumento della lunghezza della chiave
- Rotazione di routine (policy di sicurezza)
- Scadenza del ciclo di vita massimo della chiave
Workflow
flowchart LR
OLD[Vecchio certificato] --> GEN[Nuova coppia chiavi]
GEN --> CSR[Nuovo CSR]
CSR --> ISSUE[Nuovo certificato]
ISSUE --> DEPLOY[Deployment]
DEPLOY --> REVOKE[Revocare vecchio]
GEN --> BACKUP[Backup chiave]
style GEN fill:#fff3e0
style ISSUE fill:#e8f5e9
Esempio codice (C#)
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; using var ctx = PqCryptoContext.Initialize(); // Caricare vecchio certificato (per Subject/SAN) var oldCert = ctx.LoadCertificate("server.crt.pem"); // Caricare CA var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem"); var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!"); // Generare NUOVA coppia di chiavi (upgrade PQ!) using var newKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65); // Mantenere Subject e SAN dal vecchio certificato var oldSans = ctx.GetSubjectAlternativeNames(oldCert); // Nuovo CSR con nuova chiave var csr = ctx.CreateCertificateRequest( newKey, oldCert.SubjectName, // Mantenere subject new ExtBuilder() .SubjectAlternativeName(oldSans) // Mantenere SAN .Build() ); // Emettere nuovo certificato 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) // NUOVO SKI! .AuthorityKeyIdentifier(caCert) .CrlDistributionPoint("http://crl.example.com/intermediate.crl") .Build() ); // Salvare newCert.ToPemFile("server-rekeyed.crt.pem"); newKey.ToEncryptedPemFile("server-rekeyed.key.pem", "NewKeyPassword!"); Console.WriteLine("Rekey completato:"); Console.WriteLine($" Vecchio algoritmo: {oldCert.PublicKey.Oid.FriendlyName}"); Console.WriteLine($" Nuovo algoritmo: ML-DSA-65"); Console.WriteLine($" Vecchio SKI: {oldCert.GetSubjectKeyIdentifier()}"); Console.WriteLine($" Nuovo SKI: {newCert.GetSubjectKeyIdentifier()}");
Migrazione PQ: RSA a ML-DSA
Per la migrazione da algoritmi classici a Post-Quantum:
// Rekey ibrido: RSA + ML-DSA in parallelo public class HybridRekey { public static (X509Certificate2 classical, X509Certificate2 pq) PerformHybridRekey( X509Certificate2 oldRsaCert, PqCryptoContext ctx, X509Certificate2 caCert, AsymmetricAlgorithm caKey) { // 1. Rinnovare chiave RSA (fase di transizione) using var newRsaKey = RSA.Create(4096); var rsaCsr = ctx.CreateCertificateRequest(newRsaKey, oldRsaCert.SubjectName); var rsaCert = ctx.IssueCertificate(rsaCsr, caCert, caKey, validDays: 365); // 2. Creare chiave ML-DSA (futuro) 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); } }
Requisiti Rekey specifici per settore
| Settore | Durata max. chiave | Trigger Rekey | Particolarità |
|---|---|---|---|
| Settore finanziario | 2 anni | Policy HSM | Conformità FIPS 140-3 |
| Sanità | 3 anni | Risultato audit | Conformità DiGAV |
| Energia/SCADA | 5 anni | Finestra manutenzione | Capacità offline |
| Automotive | Vita del veicolo | Security-Update | Meccanismo OTA |
Checklist Rekey
Prima del Rekey:
- [ ] Salvare vecchia chiave (se ancora necessaria)
- [ ] Identificare tutti i sistemi che usano il certificato
- [ ] Creare piano di deployment
- [ ] Preparare piano di rollback
- [ ] Comunicare finestra di manutenzione
Dopo il Rekey:
- [ ] Distribuire nuovo certificato su tutti i sistemi
- [ ] Testare connessioni
- [ ] Revocare vecchio certificato
- [ ] Distruggere in sicurezza vecchia chiave
- [ ] Aggiornare documentazione
Scenari correlati
| Relazione | Scenario | Descrizione |
|---|---|---|
| Alternativa | 4.1 Renewal | Stessa chiave |
| Passo successivo | 6.4 Revocare | Vecchio certificato |
| Prerequisito | 11.1 Generazione chiavi | Nuova chiave |
| Correlato | 11.5 Distruzione chiavi | Eliminare vecchia chiave |
« ← 4.1 Renewal | ↑ Panoramica gestione | 4.3 Archiviazione → »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: il 30/01/2026 alle 07:10