Glossario crittografico

Alcuni termini tecnici da comprendere quando parliamo di crittografia
Crittologia: Lo studio della crittografia e della crittanalisi.
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: 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: 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.
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.
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, 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.
Autore: Umberto Salsi