LA GUIDA PRATICA

Firma elettronica e firma digitale: cosa sono e come funzionano

Sempre più spesso, soprattutto in ambito aziendale e professionale, si sente parlare di firma elettronica e firma digitale. Ecco un’utile guida pratica per comprendere di cosa si tratta e quali sono le tecnologie che ne consentono il funzionamento

11 Giu 2020
G
Marcello Gorlani

Security engineer


Nell’attuale contesto di digital transformation, è normale che anche la classica firma autografa che tutti abbiamo sempre apposto su documenti di genere più diverso si stia pian piano “trasformando” nella sua controparte digitale: ecco quindi che, soprattutto in ambito aziendale e professionale, sempre più spesso di parla di firma digitale o, più correttamente, di firma elettronica.

Sebbene, infatti, i termini firma elettronica e firma digitale vengono utilizzati come sinonimi, in realtà indicano due tipologie di firma differenti tra di loro, sia da un punto di vista giuridico sia tecnico.

Proviamo quindi ad analizzare, in particolare, le tecnologie di base della firma elettronica e della firma digitale per comprenderne appieno il loro funzionamento.

Firma elettronica e firma digitale: elementi base

In un precedente approfondimento abbiamo introdotto gli elementi base che ci serviranno in questa discussione. In particolare, gli ingredienti che ci servono sono di due tipi:

  • algoritmi di cifratura, che proteggono i dati siano essi in transito o registrati da qualche parte:
  1. con chiave simmetrica (o condivisa): richiede che la chiave sia scambiata tra le parti;
  2. in chiave pubblica: si basano sulla generazione di una coppia di chiavi, che chiamiamo pubblica e privata. Tutto ciò che viene cifrato con la chiave pubblica, viene decifrato con la chiave privata. Simmetricamente, tutto ciò che viene cifrato con la chiave privata può essere decifrato con la chiave pubblica;
  3. sono invertibili, avendo la chiave con lo stesso (basso) sforzo di calcolo si cifra o decifra il messaggio;
  • algoritmi di hashing: prendono un documento in ingresso di qualsiasi dimensione e producono in uscita una stringa di caratteri di dimensione fissata e piuttosto ridotta (32->512 bit):
  1. Non sono invertibili, consentono solo di andare dal documento originale all’hash (o digest), ma non il contrario.

Attenti ai documenti da firmare

Iniziamo dalla necessità: perché vogliamo apporre una firma elettronica (forte o qualificata, per usare i termini corretti) ad un documento digitale? Per gli stessi motivi per cui firmiamo un documento cartaceo, ma con alcuni miglioramenti: ad esempio garantire che la firma non possa essere manomessa o falsificata, che il documento rimanga integro nella sua totalità e, opzionalmente, per apporre una marca temporale al documento.

Come si vede, non abbiamo parlato di cifrarlo o proteggerlo dalle intercettazioni, quindi a cosa servono gli algoritmi di cifratura? Lo scopriremo a breve.

Partiamo dall’assunto di avere un documento da firmare e, già qui, abbiamo una serie di problemi da chiarire: è tecnicamente possibile apporre la firma elettronica a qualsiasi file se lo intendiamo come un generico mucchio di bit.

Possiamo firmare un documento Word, un PDF, un’immagine o un database con lo stesso sforzo, ma dobbiamo prestare attenzione. Abbiamo detto che una delle cose che vogliamo ottenere è la certezza dell’integrità del documento che abbiamo firmato, non vogliamo firmare qualcosa per poi scoprire che il contenuto è cambiato.

È il motivo per cui dobbiamo sempre cercare di firmare documenti che non abbiamo al loro interno dei contenuti attivi, vogliamo cioè dei file “stupidi”.

Prendiamo ad esempio un documento Excel: è possibile inserire al suo interno delle celle dinamiche, che vengono valorizzate al momento in cui il file viene visualizzato; l’esempio più banale è la funzione “data e ora di adesso”, cioè =NOW(). Ogni volta che apriremo il documento, quel campo mostrerà un valore differente ma, tecnicamente, all’interno del documento il contenuto non cambia perché in quella posizione ci sarà sempre la formula =NOW().

Un altro esempio è una cella che contenga il valore di una determinata azione di borsa: la formula è sempre la stessa (=prendiNASDAQ(“MSFT”)) per avere la quotazione di Microsoft che in questo caso dipende addirittura da un server esterno.

La stessa cosa si può ottenere anche nei PDF dove si possono inserire interi programmi che, se necessario, interagiscono anche con server esterni.

Sono questi esempi di documenti che dal punto di vista dei bit sul disco non cambiano mai, ma il contenuto visualizzato è ogni volta differente. Chi vorrebbe firmare un documento che ogni volta contiene qualcosa di nuovo e potenzialmente fuori dal proprio controllo? Sarebbe l’equivalente della firma di un documento in bianco.

Dobbiamo quindi limitarci a firmare documenti in formati “sani”: ad esempio il PDF prevede alcune versioni appositamente pensate, come il PDF/A2, oppure file di testo semplici o immagini in formati statici come i TIFF. Il programma che utilizziamo per la firma solitamente ci avvisa se stiamo firmando dei file con contenuto dinamico, ma è sempre bene sapere in anticipo cosa stiamo facendo.

Come funziona le firma elettronica

Bene, ci apprestiamo quindi a firmare un contratto di vendita tra Alice e Roberto, redatto dal notaio e salvato in un formato PDF statico. La prima cosa che faremo sarà passarlo in un algoritmo di hashing, diciamo SHA256, per ottenere l’hash (o digest) del documento, in questo caso: 0747E5433410300452A01762D05D280BB76642858645C128CEF4593F222D3E59.

Sappiamo dall’altro articolo che basta modificare un singolo carattere nel documento per ottenere un hash completamente differente e qui ci si chiarisce a cosa servano questi algoritmi: “riassumono” in pochi byte un documento, consentendomi di evidenziare la presenza una singola modifica. Se qualcuno prendesse la Divina Commedia e aggiungesse un singolo spazio invisibile a occhio in uno dei canti, potremmo immediatamente dire che una modifica è stata fatta comparando l’hash delle due versioni.

Adesso che abbiamo l’hash del documento possiamo fare il passo successivo: cifrarlo con la nostra chiave privata. Cosa sappiamo di questa operazione: che è fatta da me, essendo appunto la chiave in uso quella privata che non ho distribuito a nessuno e che conservo, ad esempio, su una smartcard (ne parleremo tra poco).

Qui si spiega anche l’operazione curiosa di cui parlavamo nell’approfondimento sulle basi di crittografia accennato all’inizio dell’articolo: che senso ha cifrare qualcosa con la mia chiave privata quando so che il contenuto può essere decifrato da chiunque abbia la mia chiave pubblica, cioè potenzialmente chiunque?

Il senso sta proprio nel fatto che chiunque potrà verificare che quel contenuto (l’hash del documento) è stato crittografato, o come possiamo dire ora firmato, proprio da me che sono l’unico ad avere la chiave privata che produca un contenuto decifrabile con la chiave pubblica relativa.

Non solo: siccome chiunque può calcolare l’hash del documento che ho firmato è anche possibile stabilire che la mia firma è proprio per quel documento e che esso non ha subito alcuna modifica (cambierebbe l’hash). Non è possibile prendere la mia firma ed associarla ad un documento differente, che ha un altro hash. Riassumendo:

Partiamo dal documento originale di cui calcoliamo l’hash, lo cifriamo con la nostra chiave privata e quello che otteniamo lo chiamiamo firma elettronica del documento.

A questo punto trasferiamo insieme il documento con la sua firma così che chiunque lo riceva potrà:

  • calcolare l’hash SHA256 del documento ricevuto;
  • decifrare la mia firma usando la mia chiave pubblica, disponibile a chiunque;
  • verificare che quello che ne esce è l’hash SHA256 calcolato al primo punto, cioè l’hash del documento originale.

Con questa operazione chiunque può verificare che il documento sia stato firmato da me e che sia quello originale. Abbiamo ottenuto la verifica dell’integrità del documento e il non ripudio.

Metto nuovamente l’accento su due punti: la firma non può essere trasportata da un documento all’altro, essendo basata sull’hash e tutti possono verificarla senza avermi mai visto prima; entrambe queste cose non si possono ottenere con una firma autografa.

Dal punto di vista tecnico la firma elettronica può viaggiare come un file separato rispetto al documento a cui si riferisce oppure più spesso si riuniscono il file originale e quello di firma in un unico file con un formato standard, come il p7m: i programmi di verifica in una operazione unica estraggono e verificano i contenuti.

La firma elettronica in pratica

Per firmare un documento dovete avere un programma, come ad esempio Dyke o PDL della Regione Lombardia, e la vostra chiave privata. Come detto nell’altro articolo la chiave privata può essere contenuta in un certificato digitale, emesso da una PKI, nell’esempio sotto quella di Regione Lombardia, di cui il destinatario del documento si deve fidare (non strettamente, il meccanismo crittografico funziona indipendentemente dalla fiducia in questo caso).

In fase di firma verrà richiesto il PIN della smartcard, perché è grazie a questo che possiamo sbloccare la chiave privata necessaria all’operazione (devo possedere la smart card e conoscere il codice PIN, autenticazione multi-fattore a rafforzare il concetto di non ripudio della firma).

Chi verifica la firma non avrà bisogno di alcun PIN, perché l’unico elemento in uso in questa fase è la chiave pubblica di chi firma, disponibile senza limiti, e l’algoritmo di hash SHA256 che non richiede chiavi per funzionare ma solo il file di ingresso.

Il programma di Regione Lombardia (Postazione di Lavoro) una volta verificato il documento ci dà queste informazioni:

È sufficiente avere la tessera sanitaria (CNS/CRS) col suo PIN e un lettore di smart card per firmare digitalmente qualsiasi documento, oppure come vedremo per accedere ai siti della PA.

Il fatto che vengano richieste differenti smart card per differenti attività, ad esempio la firma del bilancio da depositare da parte dell’amministratore di una società che non si può fare con la CNS ma richiede una smart card emessa da uno degli enti appositi, non è dovuta a differenti procedure tecniche di firma, che pure esistono essendo gli standard più di uno.

In questo caso le differenze sulle smart card sono da riferire a differenti root of trust richieste da chi la verifica o, più spesso, questioni amministrative.

Nell’immagine sopra vediamo che il programma ha evidenziato presunte per quanto riguarda data e ora di firma.

Queste informazioni sono inserite e poi firmate quindi non sono modificabili. Allora perché sono considerate presunte? Perché le ha inserite il computer dove è stata effettuata la firma che potrebbe avere data e ora sbagliate o appositamente manomesse per pre/retro datare il documento.

Attenzione: per chiarezza che ci si riferisce all’istante di apposizione della firma; se il documento contiene in calce una qualsiasi data non è possibile modificarlo per i motivi che ci siamo detti relativi all’hash che cambierebbe. Come facciamo allora ad avere una data ed ora certe per la nostra firma ed il documento relativo? Dobbiamo rivolgerci ad un ente terzo fidato (torna sempre il discorso del trust) che ci fornirà un servizio, solitamente a pagamento.

Come ne usufruiamo? Calcolato l’hash del documento, usiamo lo stesso per richiedere al servizio esterno di apporre la marca temporale a quell’hash. Come lo fa? Firmando digitalmente i dati (hash) nella richiesta che abbiamo fatto e ritornandoci un pacchetto di byte che viene messo insieme al documento originale (ci sono delle tecnicalità in questo che ometto) e che provvederemo a firmare con la nostra chiave.

In questo modo vengono garantiti l’istante di firma ed il contenuto firmato, siccome nella marca c’è l’hash del documento a cui viene apposta (oltre ad altre cose come l’emittente della marca e dati tecnici). Quindi, come per la firma, anche questa marca temporale non è riferibile ad altro se non il documento per cui l’abbiamo richiesta, non si può riciclare o manomettere.

Altri usi della firma elettronica

La firma elettronica di cui abbiamo parlato fino ad ora è intesa come sostitutiva di quella autografa tradizionale nei medesimi ambiti di applicazione, come l’autenticazione dei documenti. Tuttavia la medesima tecnologia viene utilizzata in molti altri ambiti della nostra vita quotidiana.

Abbiamo citato i siti web protetti (https), ma possiamo continuare con i programmi (ed il loro ambiente vitale, i sistemi operativi) che eseguiamo sui nostri computer che hanno firme elettroniche per garantirne provenienza e integrità, nel tentativo di mantenere un livello di sicurezza soddisfacente.

Se assumiamo di avere uno stato iniziale sicuro, ogni aggiornamento ed evoluzione avverrà solo se sono verificate le firme di tutti i nuovi componenti, per portarsi ad un nuovo stato sicuro. Ad esempio la maggior parte dei componenti di Windows (come gli altri maggiori sistemi operativi) e degli aggiornamenti che regolarmente riceve è costituita da codice firmato digitalmente; è sufficiente chiedere le proprietà di un eseguibile per ottenere informazioni a riguardo, come visibile nelle immagini.

Ancora prima, il firmware del computer oggi supporta meccanismi di avvio che verificano le firme digitali dei componenti fin da quando premiamo il tasto di accensione (Secure Boot) per garantire che componenti integri si passino il controllo in successione senza interruzioni.

Un altro ambito molto comune di applicazione, che merita una esposizione dedicata, è quello relativo alla e-mail dove firma elettronica e cifratura sono all’ordine del giorno, fino a renderla equivalente alla raccomandata come per la posta elettronica certificata (PEC).

Conclusioni

La firma elettronica si basa su due meccanismi crittografici: le funzioni di hash, per “riassumere” il documento ed evidenziare manomissioni, e la crittografia in chiave pubblica/privata per apporre la firma e verificare chi l’abbia fatto. Con la marca temporale possiamo anche definire l’esatto istante di firma del documento.

Infine non confondiamo la firma elettronica forte o qualificata, quella di cui abbiamo parlato fino ad ora, con altre forme di firma digitale:

  1. quella autografa acquisita con uno scanner e inserita in un documento digitale, che non ha alcun valore. In questo caso si parla di firma elettronica (genericamente), o di firma elettronica debole.
  2. quella grafometrica, effettuata su apposite tavolette che verificano ritmo, pressione, accelerazione e movimento, in uso in alcuni ambienti (ad esempio quello Finance), che se anche può essere qualificata come firma elettronica avanzata, a mio parere personale non rappresenta un metodo educativo di evolvere la coscienza tecnologica della popolazione: mi sembra un modo per procrastinare l’inevitabile attingendo al concetto de “la firma come si faceva una volta”.

Oggi non è più “una volta”.

@RIPRODUZIONE RISERVATA

Articolo 1 di 5