Che cos’è e come funziona la firma digitale? Perché è così importante? Perché internet non potrebbe fare a meno della tecnologia che sta alla base della firma digitale?
Ecco, scrivere di firma digitale è un modo come un altro di raccontare l’informatica formale, logica, trasparente, riproducibile, calcolabile, alla portata di tutti.
Ma iniziamo pure.
(1) La firma digitale viene generata grazie ad una coppia di chiavi digitali asimmetriche attribuite in maniera univoca ad un soggetto, detto titolare:
- la chiave privata è conosciuta solo dal titolare ed è usata per generare la firma digitale da apporre al documento;
- la chiave da rendere pubblica è usata per verificare l’autenticità della firma.
Questo metodo è conosciuto come crittografia a doppia chiave e garantisce la piena sicurezza visto che la chiave pubblica non può essere utilizzata per ricostruire la chiave privata.
Questa descrizione, tratta dal sito dell’AGID – Agenzia per l’Italia digitale, tecnicamente non fa una piega, è corretta. Ma, a parte chi è della materia, qualcuno/a di voi ha capito che significa?
Le chiavi, privata e pubblica (useremo nelle nostre prove chiavi di piccola dimensione), possono, ad esempio, essere queste:
-----BEGIN RSA PRIVATE KEY----- MIIBOwIBAAJBAJbHTITzx5yKWytPyJG0s+bpu0mApzmFTEZC3mo2ul0w+o7rG/qA 3j99n1c5cDJmd18NGoRqoW1dTyaZONPN+xECAwEAAQJAeB/eScpCzOe5zN7qh5M1 BRJQITY7hGs7onqh4nMptRYYaQIayGyPMdnhO6iZq1BgAbQY5yAAl2pCfJAD7cNK dQIhAMX6G06DIoTIyVa4DLMFSFYrdZpvmFJ2LFkMCzFHY2nPAiEAwvf3o/R3fS4T aUDi2CcmiWjMb1nqO0csrTY4TZqC5R8CIQCZGW4ujBiQqRmSd2hStN4YzSj4Eh6w fnSTNE4fgL5vXwIgVzFIKaXB7lS1z6N6D4rqvBcHHmFK1HnPLCOMaIBKO6cCIQCs +ZfXbQffLC7GI0Ivv7rA+xofHDay5kLcgzJIzKzb0A== -----END RSA PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPLF6gD+P6DDsgQCYxApd843JNblUXTC f0dSzwNFlc/ev8wuQdd+9O7yUhNZInaIpUtWMEE+IafLUNBvEI51vmsCAwEAAQ== -----END PUBLIC KEY-----
Chiaro no? Oppure è buio totale?
Facciamo allora un esperimento, proviamo a “convertire” tali “geroglifici” in parole.
Invece di un dizionario BASE64 (nome tecnico della codifica) useremo un dizionario italiano.
La chiave privata, tradotta in lemmi italiani, sarà a questo punto:
casuario abrostine accidioso abacari costei morettino dipetto tosta nobelio falciuola docciare messaggio pongo suffuso detenuta panni liefa davanzi soffocare cicindela fedare unitario sventato unio sodamente ipocromia ergotina grecale fumaiuolo ficcare bagarozzo gergale giusarma ditenere naca scossato urinifero accignere ablato ablatorio corsi biaccone devonico criogenia stranirsi samoano surto millesimo afato dolentare cianciata letto colonnese inoliare spetta caiaco astorini gasarsi baillamme giovevole cazzuto spalata parlanza pelosuzza filopiuma poplite stordo abbuccari genovina invagarsi adenoide rifallare immersi bindanaio riposi ballotta leccone lezzo rosatello progedito polipnea dentame caminata necamento munerare improperi essedo amenduni deflorato gemale accoccato abete tsarina ossido incoiarsi caraibico gattonare spigolata bucero luppolino salnitro ettometro collato cantaride ciancetta disdissi lazzezza benvisto bindanaio muto gocciato manaiuola meningeo azimo inciucio eccelso sobrioso sannita tuberosa ben irrumare millennio dismodato lamblia grale accoccare ergastolo demonico pagliccio tegolo preavviso ortottico apistico svaccare attiguo beilicato dido ingioiare candido manga lacrosse colorante accoccato abdussi uguale serico albero candore ripulsare crenato regole resumere baccino barbicato polifagia cripto ledire derivata perito scalmana
Insomma, una lunghissima password … E la chiave pubblica? Eccola:
castagna casilini agareno caliente depingere trisecare ablatore ablegato abachiera difalcare cassia accorato abituarsi ripolpare ablasmare core rifulsi adersi forbirsi caffeino saturno bozzino stappato imbroso istesso ecdisone acta mondatoio solazione salerno crampo isonne tendare duglia essudare inambu pacciame eparchia cotidiana bisacuto saccardo scapolone appuntito impietoso ghebbio acquatico abaca
(2) Continua il nostro viaggio nel mondo della firma digitale e vediamo ora come applicare queste chiavi per firmare digitalmente un semplice testo e anche per cifrarlo.
Codice fiscale, partita IVA, codice IBAN, codice a barre … cos’hanno in comune questi e tanti altri codici simili? Oltre ad essere codici univoci che identificano un soggetto fiscale, un’attività, un conto corrente bancario, un prodotto, ecc. c’è un aspetto che li unisce. Sono formati da una serie di numeri e lettere; alcuni dei quali hanno la funzione di controllare che il codice sia corretto. Questi numeri e/o lettere vengono chiamati: check-digit (o cifra/e di controllo). Per calcolarli si usano dei semplici algoritmi, ad esempio la formula di Luhn (v. https://it.wikipedia.org/wiki/Formula_di_Luhn ). Quindi, ad esempio, la partita IVA è un numero di 11 cifre, delle quali le prime sette identificano il numero di matricola del soggetto assegnato dal relativo ufficio provinciale, le cifre dall’ottava alla decima indicano il codice dell’ufficio provinciale del fisco che ha rilasciato la matricola, e l’ultima, la undicesima, è la cifra di controllo. Per controllarne l’esattenza formale di una partita IVA è sufficiente applicare la formula di Luhn alle prime 10 cifre e confrontare il risultato con l’ultima cifra.
Cosa c’entra questa premessa con la firma digitale?
C’entra perché una procedura simile è quella che avviene nel momento in cui firmiamo digitalmente un testo.
L’operazione alla base dell’applicazione della firma digitale è detta hashing, un termine informatico intraducibile in italiano, perché sarebbe: tritare, sminuzzare …, e il risultato di questa operazione: “tritato” o “digerito” (digest). Il messaggio comunque è chiaro, da un testo corposo, anche di migliaia di pagine, serve “calcolarne” un estratto, pressoché univoco, di pochi caratteri. Perché dico “pressoché”? Perché in teoria due “digest” uguali possono esistere, ma la probabilità è di una su miliardi di miliardi (con “miliardi” ripetuto almeno otto volte).
In sostanza, così come la partita IVA ha la sua “singola” cifra di controllo, anche un testo scritto ha la sua “parola di controllo”. Parola che, negli anni, si è allungata sempre più, per evitare quella che in gergo tecnico viene chiamata “collisione”, ovvero due digest identici, che grazie alla sempre maggiore potenza dei calcolatori, possa inficiare la sicurezza della procedura firma.
Si è passati da una “parola” di 16 caratteri prodotta dall’algoritmo MD5 ad una di 32 caratteri prodotta dall’algoritmo SHA256 (256 elevato a 32 fa un numero di 77 cifre, a paragone il numero di stelle è stimato in 1 seguito da 22 a 24 zeri).
A questo punto abbiamo il nostro “digest”, la nostra impronta digitale del testo. E’ esattamente questo pezzettino che verrà firmato digitalmente.
Facciamo adesso qualche prova per vedere nei fatti cosa succede. Usiamo, così come nella scorsa lezione, parole al posto di cifre e di caratteri non intellegibili.
Prendiamo l’incipit dei Promessi Sposi:
“Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a ristringersi, e a prender corso e figura di fiume, tra un promontorio a destra, e un’ampia costiera dall’altra parte”.
Se Alessandro Manzoni avesse voluto firmare digitalmente solo questa frase, con i mezzi attuali, il “digest” (in SHA1 esadecimale) sarebbe stato questo: 32385c93d36e6f998f204a66ba916f9cad28076a e in parole: colf, forre, sguitti, indizio, nasica, editui, rifiuto, indolci, proludo, alammo.
Ipotizziamo un plagiatore che, venuto in possesso del testo, ne avesse omesso l’ultima virgola e lo avesse a sua volta firmato digitalmente.
“Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a ristringersi, e a prender corso e figura di fiume, tra un promontorio a destra e un’ampia costiera dall’altra parte”.
In questo caso il risultato dell’operazione di hashing sarebbe stato questo: 076dcc66f9cf1c3c1f962e89911c85982b254425 e, in parole: alane, scrurivi, vaiuola, bifolco, boriero, cimanti, niellai, melliti, cederai, disperi.
Come vedete, una semplice virgola in meno ha generato due liste di parole completamente differenti. Essendo, peraltro, un’operazione unidirezionale, da esse è impossibile risalire al testo che le ha generate.
Bene, ora abbiamo tutti gli elementi per firmare digitalmente un testo (o qualsiasi altro file), ovvero la coppia di chiavi, privata e pubblica e l’impronta (o digest o hash) del documento.
(3) Concludiamo questa breve narrazione sul mondo della firma digitale e torniamo al nostro Alessandro Manzoni del Duemila alle prese con l’apposizione del suo sigillo sull’incipit dei Promessi Sposi:
“Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a ristringersi, e a prender corso e figura di fiume, tra un promontorio a destra, e un’ampia costiera dall’altra parte”.
Trasformata questa frase in numeri e applicate alcune formule matematiche ne viene fuori il “digest” 32385c93d36e6f998f204a66ba916f9cad28076a ovvero una serie di numeri e lettere che identificano il testo che si vuole firmare digitalmente. Come abbiamo visto la scorsa volta, anche la più piccola variazione al testo originario produrrebbe una stringa completamente diversa.
Tale stringa, per comodità di lettura, possiamo “tradurla” in una frase formata dalle parole: colf forre sguitti indizio nasica editui rifiuto indolci proludo alammo.
Bene, adesso abbiamo tutto quello che ci serve per procedere all’apposizione della firma digitale. La coppia di chiavi, privata e pubblica, e il “digest”.
A questo punto occorre aprire una parentesi.
La crittografia ha una storia millenaria, dal “cifrario di Cesare” (un banale metodo usato da Giulio Cesare per cifrare i messaggi), ai crittografi rinascimentali come Leon Battista Alberti, fino a Arthur Scherbius, inventore della macchina Enigma, forse la macchina crittografica più famosa della storia ( https://it.wikipedia.org/wiki/Enigma_(crittografia) ) e, quindi, Alan Turing che ha contribuito a decrittarne i codici. Parlare dettagliatamente di crittografia ci porterebbe via troppo tempo ma fortunatamente in rete c’è tantissimo materiale, a cominciare degli articoli di uno dei maggiori crittografi italiani, Corrado Giustozzi ( http://www.nightgaunt.org/testi/tangram/tangram.htm ).
Ai nostri fini ci serve sapere che fino agli anni Settanta del Novecento la crittografia era esclusivamente a chiave segreta singola. Questo significa che sia il mittente che il destinatario del messaggio cifrato dovevano conoscere la stessa chiave. Il problema nasceva quando si doveva comunicare la chiave a soggetti distanti. A volte era necessario incaricare corrieri il cui compito era quello di trasportare foglietti con scritta la chiave segreta, magari dentro una valigetta ammanettata ai polsi.
Ciò che ha permesso di rivoluzionare il mondo della crittografia è stata la geniale invenzione del metodo della crittografia asimmetrica o a chiave pubblica ( https://it.wikipedia.org/wiki/Crittografia_asimmetrica ). Con questo sistema la chiave privata rimane esclusivamente in mano al mittente (ad esempio dentro una smart-card da dove è impossibile estrarla) e la chiave pubblica può benissimo essere diffusa.
Oggi, tutto quello che è e-(qualcosa), dall’e-banking all’e-commerce non potrebbe esistere senza la crittografia asimmetrica.
Nella procedura di firma, il firmatario usa la chiave privata per cifrare il “digest”. Il “digest” cifrato viene aggiunto, assieme alla chiave pubblica, al testo e quindi registrato e/o inviato al destinatario. Il destinatario o chiunque volesse verificarne la firma, dovrebbe procedere all’operazione inversa, ma stavolta non con la chiave privata di cui, ovviamente, non è a conoscenza ma con la chiave pubblica. Chiave privata e chiave pubblica sono strettamente connesse, ma dall’una non è possibile ricavarne l’altra.
Il programma informatico di verifica procede in questo modo. Prende il testo originario (viene detto “in chiaro”), ne calcola il “digest” come abbiamo visto nella seconda lezione, e lo confronta con il risultato della decifratura del “digest” cifrato dal firmatario. Se i due “digest” corrispondono vuol dire che il testo è stato firmato dal possessore della coppia di chiavi.
Con una coppia di chiavi è possibile anche cifrare un testo e renderlo leggibile solo al proprietario della chiave privata.
Vediamo come si fa.
Alice vuole inviare un messaggio segreto a Marco. Marco ha una coppia di chiavi e invia la chiave pubblica ad Alice. Non deve preoccuparsi di un’eventuale intercettazione perché la chiave pubblica può essere diffusa senza alcun rischio, non essendo possibile, da essa, ricavarne la chiave privata.
Alice cifra il testo con la chiave pubblica di Marco, in questo caso non serve effettuare l’operazione di “hashing”, perché è l’intero testo che deve essere cifrato.
Marco, venuto in possesso del testo cifrato, può a sua volta decifrarlo con l’utilizzo della chiave privata che solo lui possiede.
Bene abbiamo terminato queste brevi note sulla firma digitale, sorvolando sulle tante formule e procedure matematiche richieste ma l’obiettivo era quello di presentarvi un’altra informatica.
L’informatica formale, logica, trasparente, riproducibile, calcolabile, alla portata di tutti.
Esattamente l’opposto dell’informatica che va più di moda adesso, quella approssimativa, statistica, probabilistica, allucinata, incalcolabile, non riproducibile, oscura … e alla portata di pochi, che viene passata sotto il nome di intelligenza artificiale.












