Cosa significa «firma valida»
«La firma è valida» è una frase che sta al posto di tre affermazioni distinte, e chi le confonde in una sola perde il controesame. Verificare una firma digitale significa rispondere separatamente a tre domande, e ciascuna può fallire mentre le altre due riescono.
Le tre domande
Domanda 1 — l'integrità
La più semplice, e l'unica interamente matematica. Si estrae dalla busta l'impronta firmata, si ricalcola l'impronta del documento, si confrontano. Se differiscono, il documento è cambiato dopo la firma e ogni altra domanda diventa oziosa.
Probatio verifica la firma con l'algoritmo dichiarato nel certificato. Quelli supportati sono RSA PKCS#1 v1.5 (con SHA-1, SHA-256, SHA-384, SHA-512), RSA-PSS, ECDSA su curve P-256 e P-384, ed Ed25519. Un certificato che usasse qualcosa di diverso verrebbe rifiutato, non «approvato per prudenza».
Domanda 2 — la catena di fiducia
Il certificato del firmatario dice «questa chiave appartiene a Mario Rossi». Ma lo dice il certificato — cioè un file che chiunque può fabbricare. Perché quell'affermazione valga qualcosa, deve essere firmata da qualcun altro: una Certification Authority. E il certificato della CA, a sua volta, deve essere firmato da qualcuno.
La catena si ferma quando raggiunge una radice di fiducia: un certificato che non è firmato da nessuno perché lo abbiamo deciso noi, a monte. Le radici non si scelgono a caso: eIDAS (articolo 22) impone a ogni Stato membro di pubblicare un elenco di fiducia dei prestatori qualificati. In Italia lo pubblica e lo mantiene l'AgID, e quell'elenco confluisce nella lista europea. Probatio costruisce il percorso dal certificato del firmatario fino a una di quelle radici.
Se la catena non si chiude, la firma è matematicamente perfetta e giuridicamente muta: nessuno garantisce che quella chiave sia di Mario Rossi.
Cosa si legge nel certificato
Oltre al nome, Probatio estrae il codice fiscale (il prefisso TINIT- nei certificati italiani), l'organizzazione, l'emittente, il numero di serie, il periodo di validità, il tipo di chiave e l'uso consentito — in particolare il flag nonRepudiation, che distingue un certificato di firma da uno di autenticazione. Riconosce inoltre i certificati della CIE, la carta d'identità elettronica.
Qualificata o no: i QCStatements
Dentro il certificato può esserci un'estensione che dichiara la conformità al regolamento eIDAS. Probatio ne legge due indicatori:
- QcCompliance — il certificato è qualificato: rilasciato da un prestatore di servizi fiduciari qualificato, iscritto negli elenchi europei.
- QcSSCD — la chiave privata risiede su un dispositivo qualificato di creazione della firma (una smartcard certificata, non un file sul disco).
La differenza non è formale, ma va detta con precisione, perché è il punto in cui le semplificazioni fanno danno.
Il regolamento eIDAS, all'articolo 25, paragrafo 2, stabilisce che «una firma elettronica qualificata ha effetti giuridici equivalenti a quelli di una firma autografa». Il paragrafo 1 dello stesso articolo aggiunge che a una firma elettronica non qualificata non possono essere negati gli effetti giuridici e l'ammissibilità come prova per il solo fatto di essere elettronica.
In Italia il quadro lo completa il Codice dell'amministrazione digitale. L'articolo 20, comma 1-bis, dice che il documento informatico soddisfa il requisito della forma scritta e ha l'efficacia prevista dall'articolo 2702 del codice civile quando vi è apposta una firma digitale, qualificata oppure avanzata. Anche la firma avanzata, dunque, produce quell'efficacia: chi scrive il contrario sbaglia.
Le differenze reali sono altre due:
- La presunzione di riconducibilità. L'uso del dispositivo di firma qualificata o digitale si presume riconducibile al titolare, salvo che questi dia prova contraria. Per la firma avanzata quella presunzione non opera.
- Gli atti dell'articolo 1350 del codice civile (numeri da 1 a 12: compravendite immobiliari, ipoteche, e simili) devono essere sottoscritti, a pena di nullità, con firma qualificata o digitale. La firma avanzata non basta.
Sapere se una firma è qualificata non serve a stabilire se «vale»: serve a sapere chi deve provare cosa, e per quali atti è ammessa. È esattamente il tipo di distinzione che una relazione tecnica deve riportare senza arrotondare.
Domanda 3 — il tempo, e perché è la più insidiosa
Un certificato dura tipicamente tre anni. Il documento che hai in mano potrebbe essere stato firmato sei anni fa. Il certificato, oggi, è scaduto. La firma è invalida?
No — se puoi dimostrare quando è stata apposta.
Nella busta CMS il firmatario può inserire un attributo signingTime: l'ora in cui dice di aver firmato. È l'orologio del suo computer, e chiunque può impostarlo. Non prova nulla.
Ciò che prova qualcosa è una marca temporale RFC 3161 incorporata negli attributi non firmati della busta: un'autorità terza ha firmato l'impronta della firma, insieme all'ora. Probatio la estrae e la usa come best signature time, cioè come istante rispetto al quale valutare la validità del certificato e la revoca.
Se la marca manca, non c'è alcun istante dimostrabile e la verifica ricade sull'ora attuale. Ecco perché il livello della firma è un'informazione così importante:
- -BES (Basic Electronic Signature): la firma, e nient'altro. Regge finché il certificato è valido.
- -T (Timestamp): la firma più almeno una marca temporale. Sopravvive alla scadenza del certificato.
Probatio calcola il livello contando le marche presenti: CAdES-T, PAdES-BES, e così via.
Attenzione alla nomenclatura, perché convivono due generazioni di standard. -BES e -T vengono dalle specifiche ETSI storiche (TS 101 733). Gli standard oggi in vigore — EN 319 122-1 per CAdES, EN 319 142-1 per PAdES — chiamano gli stessi livelli B-B e B-T, e aggiungono B-LT e B-LTA per la validità a lungo termine, che incorporano nella firma anche il materiale di validazione (certificati e risposte di revoca). In relazione conviene citarli in coppia.
La revoca
Un certificato può essere revocato prima della scadenza: smarrimento della smartcard, cambio di ruolo, compromissione. Un certificato revocato non vale più — ma le firme apposte prima della revoca restano valide, se hanno una marca che lo dimostra.
Probatio controlla la revoca via OCSP (Online Certificate Status Protocol): estrae dal certificato l'indirizzo del responder, indicato nell'estensione AIA, e gli chiede in tempo reale se quel numero di serie è stato revocato.
Probatio non scarica le CRL, le liste di revoca. Se il certificato non pubblica un responder OCSP raggiungibile, lo stato di revoca risulta non disponibile — che non significa «valido».
È una distinzione che va riportata in relazione con esattezza. «Revoca non verificabile» è un esito, non un dettaglio tecnico da omettere.
Cosa non troverai
- Nessuna CRL. Solo OCSP online, come spiegato sopra.
- Nessuna controfirma. L'attributo CMS
countersignaturenon viene estratto: fra gli attributi non firmati Probatio cerca i token di marca temporale. - Nessun ASiC. I contenitori
.asicee.asicsnon sono gestiti.
Come si scrive in relazione
Non «la firma è valida». Piuttosto, tre frasi:
- Integrità: «l'impronta SHA-256 del documento coincide con quella firmata; il documento non è stato modificato dopo l'apposizione».
- Attribuzione: «il certificato del firmatario, intestato a nome, codice fiscale xxx, risale a una radice presente nell'elenco AgID; reca i QCStatements di firma qualificata e di dispositivo qualificato».
- Tempo: «la firma reca una marca temporale RFC 3161 del data, emessa da TSA; a quella data il certificato era valido e non revocato secondo la risposta OCSP acquisita».
Tre affermazioni, tre fondamenti diversi, ciascuna contestabile separatamente. È scomodo, ed è l'unico modo onesto di dirlo.