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:

  1. [ ] Salvare vecchia chiave (se ancora necessaria)
  2. [ ] Identificare tutti i sistemi che usano il certificato
  3. [ ] Creare piano di deployment
  4. [ ] Preparare piano di rollback
  5. [ ] Comunicare finestra di manutenzione

Dopo il Rekey:

  1. [ ] Distribuire nuovo certificato su tutti i sistemi
  2. [ ] Testare connessioni
  3. [ ] Revocare vecchio certificato
  4. [ ] Distruggere in sicurezza vecchia chiave
  5. [ ] 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