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

1 Integrità «il documento è quello che è stato firmato?» L'impronta del documento coincide con quella firmata. Matematica pura. Sì o no. 2 Fiducia «di chi è la chiave che ha firmato?» Il certificato risale a una radice riconosciuta (AgID). Catena di certificati. 3 Tempo «era valida quando ha firmato?» Certificato non scaduto né revocato a quella data. Marca temporale + OCSP. Le tre risposte sono indipendenti. Una firma può essere matematicamente intatta e apposta con un certificato revocato. Oppure valida e rilasciata da un ente sconosciuto. «Firma valida» senza specificare quale delle tre è una frase priva di contenuto.
Ogni verificatore serio risponde a tutte e tre. Il rischio non è che una fallisca: è che chi legge il rapporto creda che sia stata posta una domanda sola.

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.

certificato valido certificato scaduto emissionescadenzaoggi firma signingTime dichiarato marca RFC 3161 best signature time Firma con marca: valida si verifica alla data della marca Firma senza marca: si verifica a oggi certificato scaduto → esito negativo Il signingTime lo dichiara il firmatario: è un'affermazione, non una prova. La marca temporale la dichiara un terzo: è una prova.
Il best signature time è l'istante rispetto al quale si valutano scadenza e revoca. Senza marca temporale, quell'istante è «adesso» — ed è per questo che le firme senza marca invecchiano male.

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 countersignature non viene estratto: fra gli attributi non firmati Probatio cerca i token di marca temporale.
  • Nessun ASiC. I contenitori .asice e .asics non sono gestiti.

Come si scrive in relazione

Non «la firma è valida». Piuttosto, tre frasi:

  1. Integrità: «l'impronta SHA-256 del documento coincide con quella firmata; il documento non è stato modificato dopo l'apposizione».
  2. 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».
  3. 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.