la crittografia a doppia chiave in INTERNET

La crittografia è l'arte (arte in senso lato, ma arte perché richiede immaginazione, tecnica e ingegnosità) delle scritture segrete. Etimologicamente deriva dalle parole greche kriptos = nascosto e graphos = scrittura.

Le scritture segrete possono raggrupparsi in tre classi fondamentali:

La terza classe di scritture segrete è quella che presenta maggiori garanzie di sicurezza dall'attacco dei decriptatori (hacker), i decifratori non autorizzati. Le scritture cifrate richiedono la conoscenza di una chiave con la quale si stabiliscono le regole per passare dal messaggio in chiaro al messaggio criptato e viceversa. Purtoppo, la necessità di concordare un codice tra A e B comporta che le parti devono scambiarsi la chiave e dunque devono disporre di un canale "sicuro". Facile, certo... ma non pratico. Se A e B non possono incontrarsi fisicamente cosa fanno? Si chiamano per telefono o inviano una e-mail? Poco sicuro. Meglio un piccione viaggiatore (se non arriva la chiave è stata intercettata)!

Nel 1978, Ron Rivesta, Adi Shamir e Leonard Adleman, misero a punto un sistema detto RSA (dal nome delle iniziali degli autori) che eliminava il problema: il sistema prende il nome di crittografia a chiave pubblica.
netsacpe (893 bytes)Coloro che usano il browser di Netscape, avranno notato il simbolo di una chiave spezzata nell'angolo in basso a sinistra (o sulla barra di stato). Bene, quando le parti della chiave si ricompongono, la trasmissione è a prova di hacker. Infatti, il browser sta trasmettendo le informazioni codificate con la chiave pubblica del sito che stiamo consultando. Anche Explorer lo fa, ma il simbolo della chiave non si vede (anche perché l'utente sa quando sta trasmettendo un codice sicuro).

Le conoscenze teoriche alla base della criptatura a chiave pubblica sono piuttosto articolate (aritmetica con insiemi finiti, funzione di Eulero, teorema di Fermat-Eulero); tuttavia, anche limitandoci ad applicare le semplici formule algebriche necessarie, possiamo renderci realmente conto di come funziona il metodo. Poi, completeremo la discussione con alcune note chiarificatrici.

public key (3,5 Kb)Per criptare un testo si usa un algoritmo controllato da una chiave di codifica detta pubblica, ma per decodificarlo si usa un algoritmo correlato al primo, pero' controllato da una chiave detta privata.
La strategia di questa codifica è legata al fatto che l'algoritmo di decodificazione non funziona con la chiave pubblica: occorre necessariamente la chiave privata.

Per visualizzare la cosa intuitivamente, si puo' pensare ad una scatola antiscasso con un cassetto apribile dai due lati opposti (v. figura sotto): quando si apre il cassetto da una parte e poi lo si chiude (con dentro un documento), scatta un meccanismo che permette di aprire il cassetto solo dalla parte opposta e con una chiave diversa.

scatola con due sportelli

Le chiavi pubbliche vengono distribuite in rete, mentre quelle private sono note soltanto ai destinatari. Per esempio, il gestore di un negozio on-line che commercializza i suoi prodotti su INTERNET, fornisce ai suoi clienti la chiave pubblica con cui possono crittografare (con adatti programmi on-line) il numero della propria carta di credito. A questo punto, il messaggio criptato può essere decodificato solo dal gestore del negozio in quanto unico possessore della chiave privata.
Questa strategia comporta che qualora un malintenzionato (cliente o meno) riuscisse ad accedere al file che contiene i numeri criptati delle carte di credito memorizzati nel data base del negozio, non potrebbe utilizzarli in quanto non conosce la chiave privata. E ciò indipendentemente dal fatto che tutti i clienti utilizzano la stessa chiave pubblica.

La questione può essere compresa pienamente solo ricorrendo ad un esempio pratico (per i calcoli in aritmedica modulare, si faccia riferimento all'articolo "aritmetica modulare e generazione di numeri pseudocasuali").

Ora che abbiamo le due chiavi, possiamo inviare il nostro messaggio. Associando ad ogni lettera un numero (per esempio secondo lo standard ASCII), si ottiene un messaggio (in chiaro) numerico che poi (segmentato in brevi messaggi ognuno di dimensioni minori di m) verrà criptato. Supponiamo, per semplicità, che il messaggio sia codificato con il numero 58473 (si può usare qualsiasi numero intero purché minore di m, diversamente occorre dividerlo in blocchi).

chiave pubblica (77, 13); chiave privata (77, 37)

criptazione del messaggio

Il messaggio alfanumerico, per renderlo minore di m, è scomposto in tre blocchi numerici di due cifre: 58, 47, 3.

l'algoritmo di criptazione è: (messaggio)E mod pq = 5813 mod 77 = 16

l'algoritmo di criptazione è: (messaggio)E mod pq = 4713 mod 77 = 5

l'algoritmo di criptazione è: (messaggio)E mod pq = 313 mod 77 = 38

i blocchi che compongono il messaggio criptato (16, 5, 38) vengono portati tutti a due cifre premettendo, con una procedura automatizzata, uno 0 a sinistra: 16, 05, 38. Riunendo i blocchi, il messaggio cifrato diviene: 160538

decriptazione del messaggio

il destinatario - utilizzando la sua chiave privata - attiva il programma di decriptazione, che decompone il messaggio in tre blocchi (16, 05, 38) i quali vengono elaborati con l'algoritmo di decriptazione:

(messaggio cifrato)D mod pq = 1637 mod 77 = 58

(messaggio cifrato)D mod pq = 0537 mod 77 = 47

(messaggio cifrato)D mod pq = 3837 mod 77 = 3

Riunendo i blocchi, viene ricostruito il messaggio originale: 58473

L'esempio che qui esaminato, oltre che semplificato, era basato su numeri primi piccoli (e quindi non dà ragione della complessità del metodo). In realtà, vengono usate coppie di numeri primi formati da almeno 128 cifre che, elaborati al computer, forniscono le chiavi pubbliche e private. E' evidente allora come anche l'utente che codifica il proprio messaggio, poiché non conosce nessuno dei numeri primi generatori, p e q (è facile trovare i generatori del numero 77, ma non lo è per un numero di oltre 128 x 128 cifre: anche con un supercomputer la cosa è teoricamente impossibile), non è in grado di ricavare la chiave privata.
Quando si parla di crittografia, il "teoricamente impossibile" deve essere inteso in un'accezione diversa dalla fisica: in fisica un'impossibilità teorica corrisponde alla violazione di una legge conosciuta; in informatica un'impossibilità teorica significa... "beh, dovrebbe essere impossibile". E questo perché, ci puo' essere qualcosa di imprevisto oppure il "colpaccio" fatto un qualche modo! Per questa ragione, il governo USA considera d'importanza strategica - e quindi ne è vietata l'esportazione - la crittografia RSA a 200 bytes.


La correlazione tra l'algoritmo di codifica e quello di decodifica, permette anche di risolvere un problema non marginale...
Come fa il ricevente ad essere sicuro che il messaggio crittografato sia inviato proprio dal suo corrispondente, X, e non da qualcuno che si spaccia per lui? Questa è un'importantissima questione, particolarmente nella trasmissione di messaggi militari e di acquisto-vendita di grandi pacchetti di titoli azionari, che oltre a non dover essere decifrati, devono garantire la loro origine.

Ecco il protocollo da adottare:

Se avete qualche dubbio, è facile chiarirlo: gli algoritmi di codifica e decodifica, essendo uno l'inverso dell'altro, sono intercambiambiabili, ovviamente con le loro rispettive chiavi.

L'utilizzo di un sistema di crittografia a chiave pubblica costituisce al momento la forma di protezione più sicura, ma occorre tener conto che il suo impiego non è lo standard per la corrispondenza on-line... meglio inviare la corrispondenza già criptata: potete prelevare il programma freeware a chiave pubblica/privata "Pretty Good Privacy" dal sito: www.pgpinternational.com (tenete conto che occupa 7.9 Mb, il download richiede tempo)

nemesi: alertPensate che qualcuno possa leggere la vostra corrispondenza? Non vi propongo un sistema sicuro (è adatto solo per ottenere un minimo di privacy) però potete utilizzare questa piccola routine di crittografia!

1) Inserite il testo della lettera; 2) digitate una chiave di codifica numerica (max 6 cifre); 3) premete il pulsante codifica; 4) copiate il messaggio criptato (cut & paste); inviatelo con la posta elettronica. Il destinatario, che deve conoscere la chiave che avete utilizzato, eseguirà queste operazioni: 1) incollerà il testo in questa finestra; 2) inserirà la chiave; 3) premerà il pulsante decodifica.

Chiave Numerica:

ultimo aggiornamento: 18 dicembre, 2002

nemesi

copyright Marcello Guidotti, 1999-2001