Pillole di ...

Firma digitale e crittografia: qualche dettaglio tecnico per il quotidiano

Presentati il processo complessivo e la cornice della firma digitale, possiamo introdurre alcuni aspetti tecnici o di dettaglio che aiutano a cimentarsi con la firma digitale anche nell’operatività quotidiana. Non c’è pretesa di completezza tecnica né di fornire definizioni rigorose o indicazioni su come implementare le specifiche delle tecnologie coinvolge, ma solo di evidenziare quei punti che possono essere utili per acquistare quella consapevolezza utile a chi entra in contatto con le firme digitali.

L’impronta

L’impronta è una stringa di bit, di lunghezza variabile, che si ottiene a partire da un’altra stringa di bit (file, oggetto digitale) tramite una funzione, detta di hash. Esistono diverse funzioni di hash che danno origine a impronte differenti. Fra le più note si possono citare:

  • MD5, che produce stringhe di 128 bit – ormai in disuso perché dimostrato poco affidabile;
  • SHA-0 e SHA-1, che producono stringhe di 160 bit;
  • SHA- 2, famiglia di algoritmi che producono stringhe di lunghezza variabile (SHA-224, SHA-256, SHA-384, SHA-512),

ma ne esistono davvero molte.

L’impronta non si usa solo nei processi di firma digitale, anzi, è usata anche in altri contesti quando è necessario legare a un oggetto digitale delle informazioni esterne. E’ il caso della segnatura XML per la trasmissione di documenti fra aree organizzative omogene (pubbliche amministrazioni): la segnatura descrive amministrazioni mittente e destinataria, contenuto e contesto del documento trasmesso. In particolare contiene l’elenco dei file che compongono il documento e le loro impronte. Per questo le linee guida sul documento informatico, nell’allegato 6 dedicato alla segnatura XML, elencano le funzioni di hash che è consentito usare e richiedono di specificare nella segnatura stessa quale è stata utilizzata (la predefinita è la SHA-256).

Dal punto di vista matematico, la funzione di hash non è iniettiva: oggetti digitali diversi possono avere impronte uguali. Si tratta però di un’evenienza molto rara, alla quale si dà il nome di collisione. Quello che conta è che a partire da un’impronta non è possibile ricostruire l’oggetto digitale di partenza né creare ad arte un oggetto digitale con impronta uguale. Impronta e funzione di hash quindi sono utilissime per garantire che un oggetto digitale non abbia subito alterazioni (accidentali o volontarie). Per questo:

  • alcuni servizi on line per il download di file indicano, accanto al link per il download, l’impronta del file. Calcolare l’impronta del file scaricato e confrontarla con quella dichiarata consente di verificare che non ci siano stati errori di download o, peggio ancora, che qualche malintenzionato abbia sostituito il file con uno pericoloso;
Screenshot della pagine di download di una distribuzione Linux, con possibilità di prelevare l'impronta attesa del file
Impronte delle immagini ISO di LinuxMint
  • i sistemi informatici ben progettati non conservano mai le password dei loro utenti, ma solo la loro impronta (si parla per questo di crittografia non reversibile): quando l’utente si autentica e inserisce le sue credenziali l’impronta della password inserita viene confrontata con quella memorizzata sul server. Così un eventuale accesso non autorizzato al server non è in grado di risalire alle password degli utenti, a tutela della loro sicurezza (ovviamente, password come ‘1234’ sono facilmente riconoscibili anche tramite le loro impronte)[1]Diffidate quindi di quei servizi online che, al clic su “ho dimenticato la password”, inviano una e-mail con nome utente e password. Anche se meno immediato, il meccanismo di resettare la … Continue reading.

Un’altra caratteristica delle funzioni di hash è che a piccole variazioni dell’oggetto digitale in ingresso, l’impronta calcolata varia di molto. Questo evita che si possa fare una piccola alterazione dell’oggetto originario (cambiare una data o un importo) e, per tentativi, fare una variazione altrettanto piccola all’impronta. Per esempio, usando l’algoritmo SHA-256 su due stringhe che differiscono per un solo carattere:

Stringa: Ciao Mario
Impronta: 175eebb3094375f42e095ed8d09802e8be519fe754e8e8338fa2ce10d5bca40a

Stringa: Ciao Marco
Impronta: d726e22a9458bd1c8f7d3b3628a146211e3ddc9996389e892727225dc606ffed

Sono disponibili online numerosi calcolatori di impronte, basta digitare “hash calculator online” in un motore di ricerca. Le impronte dell’esempio sono state calcolate con l’Online hash calculator di Tools4noobs.

Algoritmi di cifratura

Gli algoritmi crittografici (cifratura e decifratura) sono noti e descritti meticolosamente nel loro funzionamento. Ciò che li rende sicuri e affidabili non è quindi l’oscurità del loro meccanismo ma solo il fatto che dipendono dalle chiavi usate di volta in volta. Le chiavi – queste sì – sono segrete, con l’eccezione della chiave pubblica nella crittografia asimmetrica.

Algoritmi per la creazione di chiavi o coppie di chiavi si basano, semplificando, sulla risoluzione di problemi matematici molto complessi e computazionalmente onerosi, insostenibili per i moderni strumenti di calcolo. Per esempio, la scomposizione in numeri primi di numeri molto grandi, gestibili solo dalle macchine: per numeri molto molto grandi è già difficile stabilire se sono numeri primi e scomporli può risultare ancora più oneroso.

Poiché gli algoritmi di cifratura e decifratura sono descritti e disponibili per chiunque, niente vieta, in presenza di un messaggio cifrato, di procedere per tentativi e provare tutte le chiavi possibili. Si parla in questo caso di “attacco per forza bruta”. Esistono altri modi per “indovinare” la chiave di decifratura, ma tutti richiedono tempi molto elevati per essere portati a termine. Per questo le chiavi hanno una scadenza (misurabile in anni, tre per la coppia della firma digitale).

Anche gli algoritmi per cifrare e decifrare sono numerosi e si basano su risultati di matematica molto avanzata che coinvolgono aree di specializzazione diverse, fra cui, con apparente meraviglia, anche i gruppi di permutazione (infiniti): in realtà niente di sorprendente, del resto trasformare una sequenza di bit in un’altra è proprio una permutazione degli elementi dell’insieme infinito delle sequenze di bit…

Solitamente una tecnica o schema di crittografia include sia l’algoritmo per la generazione delle chiavi sia quelli di cifratura e decifratura. Fra i moderni schemi di crittografia si possono citare DES, TRIPLEDES e AES fra i simmetrici e RSA, DSA e ElGamal fra gli asimmetrici.

A differenza di quanto avviene con il calcolo dell’impronta, il risultato dell’operazione di cifratura è del tutto reversibile: a partire dal messaggio cifrato si è sempre in grado di risalire al messaggio originario (in chiaro) che è univocamente determinato: sarebbe un bel pasticcio fare tanto sforzo per tenere protetto un messaggio e poi mettere il destinatario di fronte alla scelta fra più possibili messaggi!

Tenere insieme oggetto digitale, dati di firma e dati di verifica.

La descrizione del processo di firma digitale mostra che all’oggetto digitale da firmare si associa la firma propriamente detta (la cifratura dell’impronta dell’oggetto) e i cosiddetti dati di verifica: chiave pubblica e dati di identità del firmatario il “certificato digitale”), resi autorevoli dall’ulteriore firma della CA (Cerfication Authority).

Anche per la firma digitale i sistemi di firma sono diversi. Non cambia il meccanismo di fondo, che si basa sempre su una coppia di chiavi crittografiche da usare sull’impronta dell’oggetto digitale, ma cambiano i modi in cui i 3 oggetti esito del processo di firma sono “impacchettati” per essere condivisi con il destinatario.

Nel sistema CAdES i tre oggetti sono racchiusi in un’unica busta crittografica che, vista come file, assume di solito l’estensione .p7m. Il file firmato può avere qualsiasi natura e formato (testo liscio, formattato, flusso video e/o audio, immagine, oggetto multimediale…).

Esiste una variante del sistema CAdES con firma staccata o separata (detached). In questo caso si condividono due file distinti: il file originario e i dati di firma e verifica in file a parte, che di solito ha estensione .p7s.
Anche se i file sono distinti, non c’è alcuna perdita di affidabilità del sistema. Infatti la firma staccata ci dice che una certa persona ha firmato un oggetto digitale con una certa impronta. Se anche l’oggetto digitale si trova altrove, la firma gli si riferisce sempre con certezza.
La firma CAdES detached è utilizzata nella posta elettronica certificata (PEC). Quando riceviamo un messaggio PEC da qualcuno, in realtà riceviamo un messaggio dal gestore della sua casella certificata, anche se ciò potrebbe non essere evidente perché il software che usiamo per visualizzarlo potrebbe non renderlo manifesto: il messaggio (detto busta di trasporto) contiene il messaggio originario (con estensione .eml), un file XML con i dati di certificazione (es.: l’identificativo univoco assegnato al messaggio) e un file con estensione .p7s che contiene la firma staccata[2]A essere pignoli a firma del gestore della PEC non è propriamente una firma digitale: sistema e algoritmi coinvolti sono gli stessi, ma mancano alcuni dettagli del contesto organizzativo, quale, per … Continue reading.

Il sistema PAdES è concettualmente simile al caso comune della firma CAdES con la differenza che si può applicare solo a file in formato PDF (Portable Data Format). Gli altri due oggetti digitali (impronta cifrata e dati di verifica) necessari per la firma digitale sono inglobati, sfruttando le potenzialità del formato PDF, nel file di partenza. In questo modo il file firmato è sicuramente visualizzabile in qualsiasi lettore di PDF e la firma è verificabile in buona parte di essi. Inoltre, ulteriori caratteristiche del PDF consentono:

  • di storicizzare le firme e, quindi, di inserire annotazioni su un file già firmato e firmare nuovamente: in questo caso, tramite un lettore di PDF avanzato si possono vedere le versioni del documento associato a una certa firma. Per esempio, in teoria, dopo che un soggetto ha scritto e firmato un documento, un altro soggetto potrebbe farci un’annotazione (del tipo “approvo”) e firmarla a sua volta. Con il sistema PAdES chi consulta il documento ha evidenza di cosa ha firmato il primo soggetto e cosa il secondo. Se si fosse usato il sistema CAdES solo la seconda firma sarebbe risultata valida, ma non la prima, perché apposta su un documento diverso, con impronta diversa;
  • di inserire annotazioni alla firma sotto forma di metadati, quali il luogo di firma o il motivo (“sono l’autore del documento”, “ho preso visione” ecc.).

Il terzo sistema più comune di firma digitale è la firma XAdES, che si applica esclusivamente a oggetti digitali (file) in formato XML. Uno scenario d’uso concreto è la fatturazione elettronica, che appunto si basa sulla trasmissione di documenti XML tramite il SdI (SIstema di Interscambio). Un file XML è un file di testo liscio, con una certa sintassi, in cui i dati sono racchiusi in tag che definiscono la struttura del file secondo regole ben definite in appositi schemi, propri del dominio a cui si riferisce il documento (la fattura elettronica ha tag e schema diversi da quelli della segnatura per il protocollo interoperabile). Nella firma XAdES, l’impronta cifrata e la chiave pubblica con annessa identità del titolare sono inseriti all’interno dell’XML in tag dedicati (spesso individuati dal prefisso xml-dsig:). Per evitare paradossi di ricorsività, l’impronta non si calcola sull’XML risultante né su quello originario: all’interno dell’XML risultante è evidenziata, racchiusa in un apposito ulteriore tag, la porzione di dati oggetto di firma. Il file XML quindi è potenzialmente disponibile ad accettare ulteriori dati, purché non si vada a toccare la parte firmata.

Anche la segnatura XML citata in precedenza, secondo le ultime linee guida AgID sul documento informatico, porta con sé una firma XAdES: non si tratta della firma di una persona fisica ma del sigillo elettronico[3]Come sistemi, algoritmi e funzionamento firma digitale e sigillo digitale sono la stessa cosa, con l’eccezione che il sigillo è riferito a un’organizzazione e non a una persona. Per … Continue reading dell’amministrazione mittente.

Gli strumenti (software) di verifica

I software affidabili per verificare un oggetto digitale firmato digitalmente sono elencati in un apposito elenco tenuto dall’Agenzia per l’Italia Digitale e pubblicato all’indirizzo web https://www.agid.gov.it/it/piattaforme/firma-elettronica-qualificata/software-verifica. Per essere certi che una firma digitale sia valida occorre usare uno dei software presenti nell’elenco. Come mai?

Per quanto abbiamo visto l’affidabilità del sistema complessivo della firma digitale poggia anche su elementi esterni al processo matematico-tecnologico di calcolo di impronta e cifratura, e coinvolge i certificatori qualificati. In particolare il software di verifica deve dichiarare attendibile la chiave pubblica e gli associati dati di identità del firmatario e verificare che siano stati emessi da un soggetto autorevole e certificato (dall’AgID). Deve poi verificare che quella chiave pubblica non sia stata “revocata”, cioè dichiarata non utilizzabile, magari perché la corrispondente chiave privata è stata smarrita dal suo titolare. Chi utilizza il software non ha accesso alle operazioni che il software compie in background e anche se vi avesse accesso non sarebbe necessariamente in grado di verificarne la correttezza. Per questo l’Agenzia per l’Italia Digitale verifica e certifica le soluzioni software di validazione delle firme digitali, dopo aver condotto tutte le verifiche del caso.

Foto di Tumisu da Pixabay

Note

Note
1 Diffidate quindi di quei servizi online che, al clic su “ho dimenticato la password”, inviano una e-mail con nome utente e password. Anche se meno immediato, il meccanismo di resettare la password tramite un link inviato esclusivamente all’indirizzo e-mail indicato in fase di registrazione al servizio è senza dubbio più affidabile e depone a favore della sicurezza del servizio.
2 A essere pignoli a firma del gestore della PEC non è propriamente una firma digitale: sistema e algoritmi coinvolti sono gli stessi, ma mancano alcuni dettagli del contesto organizzativo, quale, per esempio, il fatto che chiavi e attestazione dell’identità del loro titolare sono fornite, con stessa autorevolezza, dall’AgID e non da un soggetto certificatore che rilascia firme digitali.
3 Come sistemi, algoritmi e funzionamento firma digitale e sigillo digitale sono la stessa cosa, con l’eccezione che il sigillo è riferito a un’organizzazione e non a una persona. Per questo si usa solo in casi determinati e indicati da leggi o altro tipo di convenzione, visto che gli atti di un’organizzazione sono assunti dalle persone fisiche che operano per conto, e in nome, dell’organizzazione stessa.
Condividi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *