Gestire le firme digitali è più complesso di quanto possiamo supporre a prima vista.
Il tuo scenario è corretto: se non hai una prova della data / ora della firma non puoi essere sicuro che non sia stato fatto dopo la revoca e la scadenza del certificato. Puoi anche notare che, anche se il certificato non è stato revocato, una firma fatta dopo la scadenza del certificato non dovrebbe essere considerata valida.
Prima soluzione
Aggiunta di una marca temporale alla firma del software. Il timestamp è denominato signature time stamp . Questo timestamp fornisce una prova che la firma esisteva in una determinata data. Esso garantisce che la firma sia stata calcolata prima della scadenza del certificato. Ma non risolve il secondo problema: cosa succede se il certificato è stato revocato?
Seconda soluzione
Insieme al timestamp della firma è anche possibile allegare una copia del CRL (o una risposta OCSP) alla firma. Dimostrerà che il certificato non è stato revocato quando è stata prodotta la firma.
Ma i token con timestamp e CRL sono anche oggetti firmati. Devono anche essere convalidati. Quindi, dovremmo ottenere anche il CRL che dimostra che il timbro temporale della firma è stato firmato da un certificato valido? Risposta breve: Sì, le cose sembrano essere più complicate.
Terza soluzione
Alcuni standard di firma (come CAdES ) hanno proposto una soluzione migliore: insieme al timestamp della firma , dovresti raccogliere tutti gli elementi necessari per convalidare la firma off-line (cioè essere in grado di convalidare il certificato senza dover scaricare alcun oggetto aggiuntivo). Include tutti i certificati e i CRL CA intermedi. Questo non è un processo infinito dato che alla fine si arriverà a una o più CA di root, ma potrebbe essere piuttosto complesso (si noti che un buon algoritmo di validazione X.509 dovrebbe generare tutti questi elementi insieme allo stato di validità del certificato). E dopo aver recuperato tutti questi oggetti, devi inserire una data / ora. Questo timestamp è chiamato time-stamp dell'archivio
Ora il processo di convalida della firma è il seguente:
- Convalidi la data / ora globale online . Significa che scarichi tutti gli elementi necessari per garantire che la firma del timestamp sia valida. Ora hai una prova che tutti gli oggetti inclusi (CRL ...) esistevano alla data di scadenza dell'archivio.
- Convalidi la firma off-line solo con gli elementi che erano coperti dal timestamp dell'archivio come se la data corrente fosse la data del timestamp dell'archivio .
Con questa soluzione lo scenario che stavi presentando non è possibile poiché il verificatore della firma ha una prova della scadenza e dello stato di validità del certificato alla data della firma.
Questa soluzione è attualmente implementata per la convalida della firma di documenti a lungo termine, ma sfortunatamente, per quanto ne so, non per la convalida della firma del codice. Oggi i fornitori utilizzano altri meccanismi come blacklist rubate, che sono più facili da implementare.
AGGIORNAMENTO, 25 settembre 2014 (dopo aver letto il commento @maureen)
In primo luogo, la comprensione del processo è corretta: poiché ogni certificato viene rimosso dal CRL dopo la data di scadenza, non è possibile valutare se un certificato è stato revocato o meno in passato. Quindi non è possibile convalidare una firma dopo la scadenza di un certificato.
Ma anche se un certificato è stato compromesso (o semplicemente revocato perché, ad esempio, il cliente ha perso il suo cripto-token USB), tutte le firme create prima dovrebbero essere considerate valide. Il processo che ho descritto nella mia risposta cerca di spiegare come è possibile rispondere oggi (cioè anche dopo la scadenza del certificato) alla domanda: "La firma era valida era stata creata".