Pagina pubblicata tra il 1995 e il 2013
Le informazioni potrebbero non essere più valide
Documenti e testi normativi non sono aggiornati

 

 Firma digitale

Funziona o non funziona? L'aspetto tecnico
di Corrado Giustozzi - 26.09.02

Ci mancava anche questa. Come se la firma digitale, qui da noi, avesse bisogno di altri ostacoli ed inciampi sul suo già accidentato cammino. Eppure si è montato il "caso": la notizia ha rimbalzato rapidamente fuori e dentro la Rete e, come nel gioco del "telefono senza fili" che facevamo da bambini, ad ogni rimbalzo si è colorita di nuovi ed inediti risvolti, giungendo alla fine ad essere totalmente stravolta.
Tutto è iniziato qualche giorno fa quando ci si è accorti di uno strano comportamento di DiKe, il software di firma digitale di InfoCamere. Firmando con esso un file Word comprendente macro o campi variabili, è possibile in seguito ottenere dal programma la verifica della firma stessa (e dunque la certezza dell'integrità del documento Word) anche se il documento appare chiaramente modificato, appunto nei campi variabili, rispetto a com'era al momento in cui è stato firmato (vedi Tra i "bachi" delle norme e quelli dei programmi di Manlio Cammarata e La firma è sicura, il documento no di Andrea Gelpi).

All'inizio sembrava trattarsi di un semplice bug del prodotto di InfoCamere. Con più calma (ma non ci voleva molto a capirlo) ci si è accorti che il problema era ovviamente generalizzabile a tutti i software di firma digitale, ed è scoppiato il pandemonio. Attorno al caso si sono allora formati due partiti: i "catastrofisti" che si sono sentiti legittimati ad affermare che la firma digitale è inutilizzabile tout court, e gli "inquisitori" che se la sono presa con l'inaffidabilità dei certificatori e dei software da essi prodotti. In parte questi due atteggiamenti riflettono le posizioni contrapposte dei giuristi e dei tecnici: i primi sostengono in buona sostanza che dal momento che la firma digitale sbaglia non possiamo più usarla né darle valore legale, i secondi ribattono che "a firma digitale non sbaglia, occorre solo usarla nel modo giusto. Il bello è che tali posizioni pregiudizialmente conflittuali sono, in certa misura, entrambe giuste!

Vale forse la pena, a questo punto, di tentare di fare un po' di chiarezza sulla situazione, cercando di capire non solo qual è esattamente il problema, ma soprattutto se e come si può cercare di risolverlo. Prima però vorrei notare che ad oggi l'unico effetto di questa bagarre, la quale a volte è sembrata più un dialogo tra sordi che un dibattito costruttivo, è che il proverbiale uomo della strada (o, peggio, qualche parlamentare poco informato.) ascoltandola si è vieppiù convinto che della firma digitale non ci si può fidare, e quindi "meno male che non la stiamo usando". Peggio di così non poteva andare.

Tuttavia non si può evitare di affrontare la questione, liquidandola, come molti hanno fatto, con un'alzata di spalle: il problema c'è davvero ed è anche dannatamente serio, come vedremo. Ed è anche, purtroppo, di difficilissima soluzione, perché non è un problema (solo) tecnico. Siamo nella classica situazione in cui bisogna cercare di salvare capra e cavoli; questa volta però non è detto che ci si riesca, forse occorrerà sacrificare qualche cavolo.

Dov'è l'inganno?

Per capire dov'è il problema cerchiamo innanzitutto di andare a vedere cosa succede esattamente nel caso incriminato. Facciamo dunque un passo indietro.
Quando firmiamo digitalmente un file, non facciamo altro che leggere uno alla volta i bit di quel file, effettuare su di essi un determinato calcolo standard, detto hash, ed infine cifrare il risultato di questo calcolo con la nostra chiave crittografica segreta per "sigillarlo" in un involucro impenetrabile che lo protegge e lo autentica. Il risultato di quest'ultima operazione è la famigerata "firma digitale" da noi generata ed associata a quel documento.

Qualcuno che in seguito volesse verificare l'autenticità di questa firma digitale, dovrebbe innanzitutto ripercorrere il medesimo processo: ossia prendere il file in questione, leggerlo un bit alla volta e calcolare l'hash secondo il metodo standard; poi dovrà prendere l'hash che abbiamo precedentemente cifrato e vedere se è uguale a quello che lui ha appena calcolato. Per fare ciò dovrà procurarsi la nostra chiave crittografica pubblica e decifrare con essa il valore da noi in precedenza fornito per l'hash cifrato. Se il risultato di questa decifrazione corrisponde al calcolo dell'hash del documento da lui appena fatto, egli non può che avere la certezza che il documento è rimasto integro ed immutato da quando è stato firmato, in quanto l'hash che avevamo in precedenza calcolato e "sigillato" coincide con l'hash attuale del file da lui appena ricalcolato; ma siccome nessuno può avere modificato il risultato del nostro calcolo precedente, in quanto impenetrabilmente cifrato con quella particolare chiave crittografica che solo noi al mondo possediamo, ne consegue che l'autore della "firma" originaria siamo necessariamente noi ed essa si riferisce certamente al file in questione.

In pratica tutte queste operazioni vengono svolte automaticamente dal software. Nel caso particolare della firma digitale "qualificata" secondo la normativa italiana, la chiave pubblica viene prelevata direttamente dal certificato inserito nella "busta" insieme al documento, secondo lo standard PKCS#7. La sostanza non cambia.
Non ci sono modi per scappare a questo ferreo processo. La fase di verifica è oggettiva e ripetibile in quanto legata ad un preciso calcolo: se il risultato collima col previsto la firma è autentica, altrimenti no. Fortunatamente la matematica non è una questione di opinioni.

La firma digitale, dunque, stabilisce in modo matematicamente certo. che cosa? Che un certo file è rimasto identico, bit per bit, rispetto a com'era nel momento in cui qualcuno l'ha "fotografato", sigillando poi questa "foto" con una speciale ceralacca digitale. Tutto qui. Il processo di firma digitale non può e non deve entrare nel merito di cosa sia il file in questione, di cosa rappresenti, di cosa significhi. Un file è una determinata sequenza di bit, punto e basta. L'interpretazione del suo significato dovrebbe essere lasciata ai programmi applicativi che dovranno gestirlo, non dovrebbe riguardare il software che genera o verifica la firma digitale.

Cosa stiamo firmando?

Veniamo così al punto dolente. La firma digitale funziona benissimo. Il problema è a monte ed è più sottile, direi quasi filosofico. Il problema vero è: che cos'è un "documento"? O, per essere più precisi, dato il contesto: cos'è un "documento informatico"? Bene, se siamo giuristi possiamo dire che un documento informatico è "una rappresentazione informatica di atti, dati o fatti giuridicamente rilevanti"; se siamo tecnici possiamo dire che un documento informatico è un file, una sequenza di bit che rappresentano qualcosa sotto forma digitale (un testo, un'immagine, un suono, .). In entrambi i casi ciò che viene sottinteso è che un "documento" è qualcosa di statico, ossia di intrinsecamente immutabile; o meglio ancora, che rappresenta un contenuto immutabile (su questo punto vedi Funziona o non funziona? L'aspetto legale di Manlio Cammarata).

Non sto facendo il sofista: nel nostro caso la distinzione tra rappresentazione immutabile e contenuto immutabile non è un bizantinismo, ma è proprio la chiave del problema. Il quale, come dicevo prima, non è strettamente tecnico e soprattutto non è legato alle procedure ed agli algoritmi della firma digitale, né tantomeno alla loro specifica implementazione in questo o quel prodotto di mercato: ma proprio al concetto di "documento" come oggetto "firmabile". La domanda che dobbiamo farci è dunque: l'oggetto di firma è il contenitore o il contenuto?

Mi spiego con un esempio. Supponete di avere un programmino a linea di comando (come quelli che usavano ai tempi del DOS) che si chiama OGGI.EXE e che, quando viene eseguito, scrive su una riga dello schermo la data del giorno corrente. Un vostro amico esperto di diritto, ma assolutamente digiuno di computer, vede il programma, lo "apre" varie volte e si accorge che scrive sempre "25/09/2002"; egli pensa dunque che il file OGGI.EXE altro non sia che una qualche forma di documento il quale contiene al suo interno la stringa fissa "25/09/2002". Decide quindi di firmarlo digitalmente, ed usa a tale scopo un qualsiasi prodotto di firma digitale a norma di legge. Qualche giorno dopo il vostro amico "apre" di nuovo quel "documento" e si accorge che il suo contenuto è stato modificato: esso infatti adesso "contiene" la stringa "30/09/2002". Ne verifica dunque la firma digitale ma scopre con sgomento che essa non rileva anomalie di sorta: secondo il programma di verifica, infatti, il "documento" OGGI.EXE è rimasto assolutamente immutato rispetto a ieri. La conclusione che il vostro amico trae, perfettamente logica dal suo punto di vista, è che il programma di firma digitale non funziona perché non si è accorto che il "documento" OGGI.EXE è stato modificato!

Cos'è un documento?

Ecco quindi il vero busillis. Il vostro amico ha ragione ma ha contemporaneamente torto. Il programma di verifica della firma digitale non ha sbagliato: il file OGGI.EXE ovviamente non è stato modificato. Il fatto è che esso è un programma, non un documento nel senso comune che diamo a questo termine. È una sequenza di istruzioni, le quali pur rimanendo certamente sempre uguali a sé stesse (e ci mancherebbe anzi che cambiassero!) producono risultati diversi a seconda della situazione. E' dunque un contenitore statico ed immutabile, mentre il contenuto che rappresenta, che è poi il vero "documento" nel senso stretto di contenuto informativo, non è evidentemente né statico né immutabile.

L'errore dunque non è né nel programma in sé, né nelle procedure di firma digitale: l'errore è semantico, e consiste nell'aver scambiato il contenitore per il contenuto. Parafrasando in altri termini, è come se un notaio vi autenticasse con il suo sigillo tondo non il documento che gli portate ma la cartellina, aperta, nella quale glielo consegnate: ovviamente l'autentica sulla cartellina non garantirebbe in alcun modo l'integrità del suo contenuto, il quale può essere variato senza alterare minimamente l'integrità della cartellina stessa.

Nel caso particolare del file di Word le cose stanno esattamente allo stesso modo. Purtroppo Word non è solo un elaboratore di testi: esso è un programma a sua volta programmabile, ossia può eseguire particolari meta-istruzioni che servono ad automatizzare determinati compiti ripetitivi i quali altrimenti andrebbero svolti manualmente dall'utente. Uno di questi compiti è, ad esempio, l'inserimento all'interno di un documento della data e dell'ora correnti. Per fare dunque in modo che un documento utilizzato di frequente mostri sempre la data aggiornata, senza doverla correggere ogni volta a mano, basta indicare a Word di inserire lui, automaticamente, la data corrente nella posizione indicata. Ciò si fa inserendo nel documento un apposito comando sotto forma di campo variabile. Questi altro non è che una meta-istruzione che Word, a tempo debito, eseguirà per ottenere un risultato, il cui valore verrà inserito nel documento al posto giusto. Un po' come il nostro programma OGGI.EXE visto poco fa.

Se adesso firmate digitalmente questo documento Word, vi mettete nella stessa situazione in cui si è messo il vostro ipotetico amico di prima quando ha firmato il programma. Domani il vostro documento Word mostrerà una data differente: tuttavia la verifica della sua firma digitale non segnalerà nessuna variazione all'interno del file. Ciò è perfettamente corretto: il file in effetti non è cambiato, dato che la sequenza di istruzioni che inserisce la data nel documento è rimasta sempre uguale; è solo il risultato di questa sequenza di istruzioni ad essere diverso, e certamente il software di firma digitale non può saperlo!

Questo della data è solo il caso più eclatante. Sfruttando l'estrema programmabilità dei documenti Word si possono congegnare situazioni molto più perverse: ad esempio creare documenti che appaiono a video in un modo e in stampa in un altro, oppure documenti che prima di una certa data appaiono in un modo e dopo quella data in un altro. Pensate ad esempio ad un contratto in cui la cifra dell'importo da pagare si dimezza (o cambia segno!) qualche giorno dopo la stipula.

Il problema così com'è stato esposto non riguarda, com'è chiaro, nessun software specifico di firma digitale. Anche l'onesto PGP non può che verificare, in perfetta buona fede, che il file Word (ma non ciò che rappresenta!) non è stato modificato. Tuttavia nel caso specifico di DiKe c'è in effetti un'aggravante: questo software infatti si fa vanto di riconoscere il tipo di file, per poterlo aprire ed interpretare al suo interno. Per DiKe dunque il file Word non è un'anonima sequenza di bit ma è un oggetto con nome e cognome, dalla struttura nota. Tant'è che il suo contenuto viene visualizzato all'interno del browser di cui il programma è dotato. Ciò avviene probabilmente invocando il motore stesso di Word tramite l'apposita interfaccia di programmazione, ma questo non cambia nulla: il fatto è che DiKe stesso si fa carico di aggiornare i campi variabili del documento quando lo mostra, anche se questo è in palese contrasto con la logica della firma digitale.

Tale comportamento è senz'altro fuorviante, e contribuisce ad aggravare un problema che già di per sé risulta piuttosto scabroso. In teoria un software di firma digitale non dovrebbe occuparsi di comprendere cosa sta firmando o verificando: se lo vuole fare ben venga, ma almeno che lo faccia bene!

Non firmiamo più?

Quale può essere infine la conclusione di questa vicenda?
La risposta non è facile. Il buon senso suggerirebbe di risolvere il problema limitando il novero dei documenti firmabili digitalmente ai soli formati "puri", non programmabili, immutabili ed assoluti. Ossia ai veri documenti, e non ai meta-documenti come sono quelli di Word o di Excel. Tuttavia questi ultimi formati sono proprio quelli di utilizzo e scambio più comuni sia fra privati che fra aziende, quindi metterli "fuori legge" per quanto riguarda la firma digitale significherebbe limitare automaticamente portata ed utilità della norma sulla firma digitale stessa.

L'alternativa tuttavia è altrettanto insoddisfacente: essa consisterebbe nell'inserire nei prodotti di firma digitale della "intelligenza", sotto forma di conoscenza dei formati nativi e proprietari dei vari word processor o spreadsheet programmabili, per fare in modo che all'atto della firma i software possano accorgersi della presenza di campi variabili e prendere così gli opportuni provvedimenti. Il che però significa che il produttore del software in questione avrebbe l'obbligo di supportare tutti gli standard di mercato, non solo per quanto riguarda i word-processor ma anche per altre categorie di documenti (ad esempio i formati AutoCAD per schemi meccanici), con la necessità di apportare aggiornamenti al prodotto ogni volta che un formato di mercato cambia, e così via.

Come se non bastasse, questo approccio presenta anche nuovi problemi metodologici: ad esempio, cosa dovrebbe fare un programma di firma qualora si accorgesse che il documento che sta firmando contiene campi variabili? Fermarsi e rifiutare di andare avanti? Modificare il documento, sostituendo tutti i campi variabili con i valori da essi rappresentati in questo preciso momento? In linea di principio entrambi questi comportamenti sembrano ugualmente complessi da ottenere, ma a ben pensarci non ci sono molte altre alternative.

Insomma, in un modo o nell'altro, dal punto di vista tecnico, ci andiamo a cacciare in un ginepraio dal quale è difficile uscire senza graffi.