Home / Indice sezione
 www.icosaedro.it 

 Crittografia - Introduzione

La riservatezza nelle comunicazioni è da sempre un elemento strategico nelle applicazioni diplomatiche, spionistiche, militari ed economiche. La moderna elettronica di consumo e le reti telematiche consentono oggi l'impiego di massa delle tecnologie crittografiche: non più appannaggio delle élite degli establishment governativi, ma accessibili ai comuni cittadini, oggi le tecniche crittografiche permettono a chiunque di salvaguardare le proprie comunicazioni dagli occhi indiscreti, permettono di autenticare con la firma digitale documenti, contratti e messaggi in generale. Alla ceralacca, al timbro in ferro, alla firma autografa e al notaio, si sostituiscono flussi di bit, chiavi pubbliche e private, schede elettroniche ed autorità di certificazione delle chiavi. Questi nuovi sistemi permettono di avvalersi dei computer e delle reti di telecomunicazione, con tutti i vantaggi che ne conseguono. Si aprono anche nuove possibilità, in parte ancora da esplorare.

In questa sezione descriviamo alcuni termini tecnici e alcuni concetti fondamentali delle tecnologie crittografiche; segue una breve panoramica storica cella crittografia, da Giulio Cesare ai giorni nostri.

Indice

Terminologia
Panoramica storica
Bibliografia

Terminologia

Questo non vuole essere un trattato di crittografia: primo perché non sono un esperto e quindi non ne sarei capace, secondo perché la materia è vasta e può essere anche molto complessa in alcuni aspetti; terzo perché questi sono i miei appunti scritti nel tentativo di capirci di più... Comunque, è necessario fare subito chiarezza sui termini, in modo da evitare ambiguità future. Ecco perchè qui riporto le definizioni più accreditate dei principali termini che useremo.

Crittologia - Lo studio della crittografia (v.) e della crittanalisi (v.).

Crittografia: - Studia metodi per proteggere le informazioni riservate, metodi per garantirne l'autenticità e l'integrità. Sono questi gli aspetti sui quali ci concentreremo in questa serie di letture.

Crittanalisi: - Si occupa del procedimento inverso delle crittografia, cioè studia possibili modi per forzare gli algoritmi crittografici verificandone così la robustezza. Qui non ci occuperemo di questa branca della crittanalisi. Ci basterà arrivare a capire come le cose funzionano e come ci possono tornare utili.

Bit (abbreviazione: b) - Sta per "binary digit" (cifra binaria). Come saprete, i computer e i dispositivi digitali in generale, elaborano essenzialmente numeri, ma questi numeri non vengono rappresentati nella forma decimale (cioè con dieci cifre come siamo abituati a fare) bensì nella forma binaria (cioè con due sole cifre). Queste due cifre sono lo 0 e l'1. Per chi non si intende di queste cose, ricordo che la scelta di usare 10 cifre per l'aritmetica è puramente arbitraria: potremmo ugualmente usarne per esempio 20, oppure 5. La scelta del numero di cifre, cioè della base di numerazione, ha motivi di praticità, e non esiste alcuna limitazione nell'usare una base piuttosto che un'altra. Naturalmente si possono convertire i numeri da una base all'altra, così ad esempio il numero binario 11010 corrisponde al numero decimale 26. Chi usa un computer probabilmente non ha mai visto apparire sullo schermo numeri in forma binaria, ma sempre e solo in forma decimale: sono i programmi ad occuparsi della conversione, in modo da favorire la leggibilità da parte di noi umani. Ma dentro al computer tutti i numeri e i dati vengono rappresentati ed elaborati in base 2.

Byte (abbreviazione: B) - Nell'ambito dei sistemi informatici si è consolidato nel tempo l'uso di raggruppare 8 bit insieme: l'unità così formata viene detta byte. I bit che compongono il byte hanno un certo ordine: esattamente come le cifre dei numeri decimali, anche l'ordine delle cifre binarie ha il significato di "peso" della cifra. Quindi il numero binario 11010 che abbiamo visto nella descrizione del termine bit potrebbe essere rappresentato così in un byte:

00011010

I tre zeri che appaiono a sinistra sono necessari per riempire tutti gli otto bit che costituiscono il byte. Quanti possibili valori diversi si possono rappresentare in un byte? Questo è abbastanza facile da calcolare: siccome ciascuno degli otto bit può assumere due valori, 0 e 1, avremo due possibilità per ciascuna cifra del byte, per un totale di 2*2*2*2*2*2*2*2=28=256 combinazioni diverse. Queste 256 combinazioni si possono utilizzare per rappresentare, ad esempio, i numeri da 1 a 256, oppure per rappresentare i numeri da 0 a 255 (notare la sottile differenza), oppure per rappresentare i caratteri alfabetici, le cifre e gli altri simboli di punteggiatura di un testo. Il byte, di per sè, non riporta il tipo della informazione che esso rappresenta, ma sono i programmi ad attribuirgli il significato corretto a seconda del contesto.

Testo ASCII - Tra i tanti modi possibili per rappresentare un testo, lo standard ASCII è diventato quello comunemente accettato nel mondo informatico. L'ASCII non è altro che una tabella che dà la corrispondenza tra vari caratteri stampabili e il byte che li rappresenta. Ad esempio, la lettera 'A' maiuscola viene codificata nel byte 10000001, mentre la cifra '7' viene codificata nel byte 00110111, e così via. L'ASCII codifica anche certi caratteri speciali necessari per la corretta formattazione dei testi, come gli a-capo e le tabulazioni.

Simbolo - Nell'ambito di questo documento userò questo termine ad indicare gli elementi che compongono un messaggio. Nel caso di un testo i simboli sono i caratteri che lo compongono, tipicamente nella rappresentazione ASCII che abbiamo descritto. Nel caso di un file binario come una immagine, i simboli saranno i valori dei byte che lo compongono. Per fissare meglio le idee, i simboli che userò negli esempi saranno sempre alfabetici, e tipicamente mi limiterò alle sole lettere maiuscole. E' facile immaginare come gli stessi ragionamenti si possano estendere ad un numero arbitrario di simboli, per esempio i 256 possibili valori che può assumere un byte in un file generico. Siccome qui ci occuperemo di capire i concetti fondamentali, eviterò generalizzazioni astratte che, seppur corrette teoricamente, tendono ad oscurare il ragionamento.

Messaggio - E finalmente veniamo al messaggio, cioè il documento o l'informazione che dobbiamo trasmettere. Un messaggio è una sequenza di simboli, cioè potrebbe essere una sequenza di byte come in un file binario, oppure una sequenza di caratteri ASCII come in un testo: sappiamo che tutti questi tipi di informazione, sebbene diversi, vengono comunque rappresentati con dei byte, e quindi tutte le tecniche crittografiche che vedremo sono impiegabili a prescindere dal tipo specifico di messaggio. Un messaggio nel senso di questa documentazione potrebbe quindi contenere un file, una immagine, un suono, un breve commento o un libro intero, un preventivo, una ordinazione, una password, ecc. Per chiarezza di esposizione, i messaggi che useremo negli esempi saranno sempre dei brevi testi in prosa dal contenuto banale. In alcuni contesti tratteremo il messaggio come se fosse un numero e lo inseriremo dentro a una espressione aritmetica: in effetti basta mettere in fila tutti i byte che lo compongono e poi leggere tutti i bit nell'ordine per ottenere un numero binario, magari lunghissimo, ma pursempre solo un numero.

Integrità del messaggio - Tecniche per verificare che un messaggio trasferito o archiviato non sia stato accidentalmente alterato. Esempi: checksum, CRC, MAC, HMAC.

Autenticità del messaggio - Tecniche per verificare che il messaggio di un certo autore appartenga effettivamente a quell'autore. E' una sorta di firma digitale, ma meno versatile.

Aldo e Bruno - Questi due signori saranno i protagonisti principali dei nostri esempi, e che si scambieranno messaggi variamente crittati. La scelta di questi due nomi ci permetterà anche due utili appreviazioni: A e B, che un po' di sintesi non guasta.

Intercettatore o intruso - L'intercettatore è colui che carpisce copia del messaggio in transito tra i signori A e B, ed è perciò il loro naturale antagonista. Poiché però la parola "intercettatore" è troppo lunga per i miei gusti, userò più spesso la parola "intruso": il significato è diverso, ma tutto sommato rende meglio l'idea del terzo incomodo indesiderato.

Algoritmo - Parolone che significa questo: assegnati certi dati di partenza, l'algoritmo è la procedua dettagliata da seguire in modo da pervenire ai risultati voluti. Descriveremo gli algorimi usando il linguaggio in prosa, e useremo solo un po' di algebra elementare.

Password - Traducibile in "parola di accesso", è un codice segreto che permette di accedere a una qualche funzione riservata. Esiste un solo posto sicuro dove custodire una password: la propria testa.

Chiave - Codice segreto usato per parametrizzare un algoritmo di crittazione. La chiave usata per crittare si chiama chiave di crittazione, mentre la chiave per decrittare si chiama chiave di decrittazione.

Crittare - Applicazione di un algoritmo per rendere incomprensibile il contenuto di un messaggio, salvo che al destinatario. Il messaggio di partenza viene detto messaggio in chiaro, mentre il messaggio ottenuto con questo algoritmo viene detto messaggio crittato. Generalmente l'algoritmo di crittazione viene parametrizzato da una chiave, che permette di utilizzare lo stesso algoritmo tra diversi interlocutori.

Decrittare - Applicazione di un algoritmo che converte il messaggio crittato nel suo originale in chiaro. La decrittazione è quindi l'applicazione dell'algoritmo inverso della crittazione.

Algoritmo di crittazione a chiavi simmetriche - Un algoritmo di crittazione dove la chiave di crittazione è uguale alla chiave di decrittazione. Due soggetti che vogliano scambiarsi messaggi crittati, dovranno preventivamente concordare una chiave segreta in comune.

Algoritmo di crittazione a chiavi asimmetriche - Un algoritmo di crittazione dove la chiave di crittazione è diversa dalla chiave di decrittazione. Con questi algoritmi i due soggetti non hanno bisogno di concordare una chiave segreta in comune, perché la crittazione avviene usando la chiave pubblica della controparte, mentre la decrittazione richiede la conoscenza della chiave segreta, e non sarebbe altrimenti possibile usando la stessa chiave pubblica usata per la crittazione.

Chiave segreta e chiave pubblica - Negli algoritmi di crittazione a chiavi asimmetriche ogni soggetto dispone di due chiavi: quella segreta deve essere conservata e mantenuta scrupolosamente segreta dal proprietario; quella pubblica invece deve essere diffusa il più possibile, magari anche registrandola presso un key server o una Certification Authority (v. più avanti).

Fingerprint (impronta digitale) - Codice numerico caratteristico di una chiave pubblica ma più corto, e riportato a scopo di verifica incrociata nella corrispondenza, nei biglietti da visita, ecc. Vedremo maggiori dettagli nella sezione dedicata alle implementazioni dei sistemi crittografici.

Key ID (identificativo della chiave) - Versione ancora più ridotta del fingerprint, costituita dai suoi ultimi 64 b. Vedremo maggiori dettagli nella sezione dedicata alle implementazioni dei sistemi crittografici.

Spazio delle chiavi - Con questo termine un po' oscuro si indica semplicemente il numero di chiavi diverse che un certo algoritmo di crittazione può accettare. In generale più grande è questo numero, più robusto è l'algoritmo rispetto agli attacchi di forza bruta (v.).

Attacco di forza bruta - Noto l'algoritmo di crittazione usato, consiste nell'esplorare sistematicamente lo spazio delle chiavi alla ricerca di quella usata per crittare il messaggio. Per svolgere questo compito noioso e ripetitivo, i computer sono lo strumento ideale. Recentemente è stato dimostrato come uno spazio delle chiavi a 56 bit (che corrisponde ad oltre 72 milioni di miliardi di combinazioni) può essere esplorato completamente in pochi giorni da computer opportunamente predisposti. Questo insegna che gli attacchi di forza bruta da parte dei moderni computer si prevengono solo usando chiavi molto più lunghe di questa: un semplice ragionamento mostra che per ogni bit aggiunto alla chiave, lo spazio delle chiavi raddoppia e quindi raddoppia anche il tempo necessario per un attacco di forza bruta.

Robustezza dell'algoritmo - Valutazione per lo più empirica delle possibilità di invertire l'algoritmo di crittazione pur senza conoscere la chiave, oppure della possibilità di ridurre l'ampiezza dello spazio delle chiavi a causa della presenza di particolari debolezze logiche, così facilitando il lavoro dell'intruso. Del resto la logica insegna che non si può dimostrare che un algoritmo è corretto, ma si può solo dimostrare che è errato, qualora questo errore venga scoperto. In generale gli algoritmi in uso corrente sono considerati robusti, nel senso che resistono alle forme di attacco crittanalitico note. Vedremo che sono noti diversi algoritmi di crittazione, firma digitale, digest ecc., e perciò i programmi che li impiegano permettono di scegliere quali utilizzare. Perciò nella evenienza che un qualche algoritmo oggi in uso si dovesse un giorno rivelare debole, la migrazione verso nuovi algoritmi sarebbe (abbastanza) indolore per l'utilizzatore.

Sicurezza del sistema crittografico - Valutazione delle concrete possibilità che un intruso particolarmente determinato e che dispone di mezzi adeguati, possa in qualche modo violare un certo sistema crittografico, vuoi con un attacco di forza bruta condotto con macchine potentissime, vuoi sfruttando qualche debolezza negli algoritmi usati. Ci sono molti esempi clamorosi in cui sistemi di crittazione ritenuti inviolabili, si sono poi dimostrati deboli. Vedremo alcuni di questi casi, come il codice di Vigenère e la macchina Enigma. Come è facile rendersi conto, nessun sistema di sicurezza è mai perfetto, e probabilmente nessuno lo sarà mai. Ciò che conta è valutare il rapporto rischi/benefici delle tecnologie, tenersi informati e poter disporre all'occorrenza di soluzioni alternative.

Key server - Server di rete Internet abilitato alla registrazione, alla consultazione e alla revoca delle chiavi pubbliche. In generale tutte le operazioni sono gratuite, ma l'identità del registrante non viene accertata. La validità di questo strumento sta nei controlli incrociati che si possono fare, e nel fatto che la chiave si può registrare presso diversi server. Si tratta di un modello di certificazione di tipo ``diffuso'' tipico del Web-of-trust, come vedremo nella sezione dedicata alle implementazioni.

Certification Authority (in breve: CA) - Svolge lo stesso ruolo dei key server (v. punto precedente), ma con alcune differenze sostanziali: 1) la CA è un ente, pubblico o privato, al quale viene riconosciuto questo ruolo, magari come conseguenza di una normativa di legge; 2) la CA si preoccupa di accertare la validità della chiave pubblica registrata, cioè accerta la corrispondenza tra il soggetto e la sua chiave pubblica; 3) il servizio delle CA è a pagamento, per cui tipicamente ci si limita alla registrazione presso una sola CA.

Panoramica storica

Solitamente si intende per crittografia "tradizionale" la crittografia dove gli interlocutori concordano un algoritmo e una chiave in comune: si parla allora di crittografia a chiavi simmetriche per evidenziare questo fatto.

Crittografia nell'antichità. I primi sistemi crittografici di cui si abbia notizia risalgono all'antichità. La prima tecnologia crittografica che abbia riscontro nei sistemi crittografici moderni, è forse la soluzione adottata da Giulio Cesare durante la sua campagna di Gallia: descriveremo il sistema a sostituzione monoalfabetica da lui utilizzato nella prossima sezione.

Nel corso dei secoli furono messi a punto altri sistemi crittografici più sofisticati, e l'ufficio della cifra diventava il fulcro informativo di ogni governo o esercito ben organizzati. Tuttavia, in mancanza di dispositivi automatici per la manipolazione delle informazioni, tutti questi sistemi soffrivano o di scarsa praticità, o di scarsa sicurezza.

Il codice di Vigenère è il più noto sistema crittografico a chiavi simmetriche. Inventato nel 1562, si meritò l'appellativo di "indecifrabile". Nella sezione dedicata agli algoritmi crittografici a chiavi simmetriche lo vedremo nel dettaglio.

Tutti questi sistemi erano però laboriosi, richiedevano personale appositamente addestrato, ed erano alla portata di pochi. Del resto a quel tempo le comunicazioni erano comunque intrinsecamente lente e costose.

L'era tecnologica. Nel corso del ventesimo secolo le nuove tecnologie di telecomunicazione, e due guerre mondiali, hanno dato nuovo impulso alla ricerca di nuove e più efficaci tecniche crittografiche, sicché la crittografia è diventata una scienza a tutti gli effetti. Dalla macchina Enigma tedesca, alle Bombe di decrittazione polacche [SINGH99], era tutto un fiorire di reparti di intelligence dediti alla crittanalisi, di camere nere e di speciali macchine dedicate alla crittazione, alla decrittazione e alla intercettazione. Enti supersegreti, come l'NSA, e nuovi dispositivi di calcolo precursori dei moderni computer, nacquero negli anni della Guerra Fredda inaugurando l'era moderna della crittografia [GARF95]. Ma, ancora, si trattava di sistemi utilizzati esclusivamente nell'ambito diplomatico, militare e dei servizi segreti. Le applicazioni in ambito civile rimanevano piuttosto limitate.

Nel corso degli anni 196X e 197X si assiste alla progressiva diffusione dei calcolatori elettronici: queste macchine, capaci di eseguire senza errore complesse operazioni logiche e matematiche, erano lo strumento ideale per lo sviluppo di nuove soluzioni crittografiche avanzate. L'introduzione delle prime reti telematiche consentiva, almeno alle aziende più importanti, di dotarsi di sistemi crittografici basati su computer. Nasceva anche la necessità di standardizzare il software impiegato, in modo da favorire l'intercomunicabilità: a questo scopo nascevano i primi standard crittografici destinati alla implementazione su computer, come il DES [GMZ99].

L'era del villaggio globale. Alcuni pionieri della crittografia cominciarono a ragionare su nuove soluzioni che permettessero l'uso diffuso di queste tecnologie: siamo ancora lontani dalla diffusione di massa dei computer e di Internet, ma per le menti più brillanti e lungimiranti le premesse c'erano già tutte. Il principale scoglio da superare erano le chiavi segrete: prima di poter comunicare fra di loro attraverso un canale insicuro come il telefono, i due soggetti erano costretti a concordare un codice segreto univoco sfruttando un qualche altro canale di comunicazione "sicuro". Questa incombenza sembrava all'epoca inevitabile, sicché la valigetta diplomatica rimaneva uno strumento d'obbligo, comune a tutti i sistemi crittografici noti. Oltre al problema dei trasferimenti "fisici", c'era da considerare anche il problema dell'enorme proliferazione di codici segreti in circolazione qualora queste tecnologie fossero state adottate diffusamente: per consentire a n persone di comunicare fra di loro è necessario che ciascuna di esse abbia concordato preventivamente n-1 chiavi segrete con ogni suo possibile interlocutore, per un totale complessivo di ben n(n-1)/2 chiavi in circolazione.

Figura 1. La sequenza di figure illustra bene la proliferazione di chiavi segrete al crescere del numero di interlocutori A, B, C, ... Siccome ogni coppia desidera scambiarsi messaggi riservati che nessun altro possa leggere, si dovranno concordare tante chiavi quanti sono le coppie possibili. Ogni linea che congiunge due soggetti corrisponde a una chiave segreta: si può verificare che la formula n(n-1)/2 dà effettivamente il numero di chiavi totali in circolazione quando ci sono n interlocutori.

Solo nel 1976, grazie al lavoro di Diffie e Hellman [DIHE76] è stata dimostrata la fattibilità di scambiare messaggi crittati senza bisogno di concordare preventivamente una chiave comune: il mittente critta il messaggio usando la chiave pubblica del destinatario, e il destinatario decritta il messaggio usando la propria chiave segreta. Questi algoritmi vengono perciò detti a chiavi asimmetriche. Gli algoritmi di crittazione a chiavi asimmetriche hanno aperto la strada all'applicazione di massa della crittografia e della firma digitale, e in certi ambiti sono già impiegati nelle applicazioni informatiche di tutti i giorni: vari protocolli di rete locale e vari protocolli Internet fanno già uso di queste tecnologie in modo trasparente per l'utilizzatore, a riprova che la crittografia è diventata una tecnologia alla portata di tutti.

Nel seguito passeremo in rassegna vari algoritmi crittografici, cominciando da quelli a chiave simmetrica per poi passare a quelli a chiave asimmetrica. Ricordiamo che gli algoritmi a chiave simmetrica vengono ancora utilizzati in combinazione con gli algoritmi a chiave asimmetrica, per cui è importante comprenderli entrambi.

Uno sguardo al futuro. Cercare di prevedere il futuro è azzardato, perché non si tiene conto delle scelte spesso arbitrarie degli uomini, perché non si tiene conto delle scoperte tecniche e scientifiche ancora inimmaginabili, e altri mille fattori. Forse, più che prevedere, possiamo immaginare scenari futuri auspicabili, e starà a noi agire e lavorare perché questi possibili futuri si realizzino. Per alcuni tecnofobi è spaventoso pensare a un domani fatto solo di cose immateriali come bit, codici, e denaro elettronico, e, come al solito, all'ignoranza si unisce la paura. Eppure queste tecnologie sono utili, e servono ad estendere in modo naturale le nostre attività quotidiane, portandole nella dimensione delle reti telematiche e delle memorie elettroniche, rendono possibile il denaro elettronico, le transazioni finanziarie telematiche, riducono la necessità dei trasferimenti fisici di persone e di carte, permettono il dialogo con interlocutori remoti preservando la riservatezza e l'autenticazione, ci forniscono un potente strumento per salvaguardare la proprietà intellettuale, ecc. Chiudo subito questa breve digressione sul futuro perché questo documento non si occupa del futuro nè del passato, ma vuole spiegare il presente e gli strumenti che già oggi sono disponibili.

Bibliografia


Umberto Salsi
Commenti
Contatto
Mappa
Home / Indice sezione
Still no comments to this page. Use the Comments link above to add your contribute.