PROGRAMMIAMO
File - Chiave privata e chiave pubblica
Algoritmi simmetrici e asimmetrici

Un problema generale è quello della condivisione della chiave fra mittente e destinatario e questa difficoltà diventa ancora maggiore al crescere della lunghezza della chiave usata. Infatti in che modo mittente e destinatario possono scambiarsi la chiave di cifratura/decifratura? Qualsiasi canale di comunicazione usato (per telefono, per lettera, per email, via radio, con un incontro di persona, etc.) presenta problemi di sicurezza e la possibilità che la chiave venga intercettata da qualcuno.

Il problema è che la chiave non può essere a sua volta cifrata, poiché in tal caso bisognerebbe preventivamente accordarsi sull'algoritmo e sulla chiave di cifratura e così via all'infinito. In pratica, mittente e destinatario devono scambiarsi la chiave di cifratura prima di iniziare la corrispondenza e per fare questo devono usare un metodo non cifrato. Per esempio, nel caso semplice del cifrario di Cesare, Cesare potrebbe comunicare a voce la chiave ai propri generali oppure potrebbe inviargliela per mezzo di un messaggero fidato, ma in entrambi i casi la chiave potrebbe essere intercettata da una spia nemica.

Il problema della condivisione delle chiavi è forse la debolezza principale dei sistemi crittografici tradizionali. Questo problema verrà superato soltanto con i sistemi di cifratura moderna, i quali non richiedono due chiavi separate (per crittare e decrittare il messaggio) e non richiedono lo scambio della chiave di decifratura.

In generale dunque si distingue fra:

 

Algoritmi asimmetrici: chiave privata e chiave pubblica

Come abbiamo appena detto, gli algoritmi asimmetrici (detti anche a chiave pubblica, per le ragioni che saranno chiare fra poco) presentano la caratteristica di usare due chiavi differenti. Le due chiavi, chiamiamole A e B, possono essere usate alternativamente per cifrare o decifrare un messaggio, nel senso che il messaggio cifrato con A può essere decifrato con B e il messaggio cifrato con B può essere decifrato con A.

Ogni persona coinvolta nello scambio di messaggi possiede dunque una coppia di chiavi che agiscono, di fatto, l'una come l'inverso dell'altra. Una di queste due chiavi viene resa pubblica, cioè nota a tutti. La seconda chiave invece viene mantenuta privata.

Consideriamo dunque la situazione mostrata in figura in cui un mittente (Sender) deve inviare un messaggio a un destinatario (Recipient). Il messaggio viene crittato usando la chiave pubblica del destinatario (Recipient Public Key): in questo caso non esiste il problema dello scambio delle chiavi, dal momento che, come si è detto, questa chiave è in  linea di principio nota a tutti (potrebbe essere pubblicata anche sull'elenco telefonico). Tuttavia solo il destinatario è in grado di leggere il messaggio, poiché lui solo possiede la chiave privata (Recipient Private Key) per decrittarlo.

 

Facciamo un esempio ancora più concreto, per quanto semplificato. Supponiamo che Bob voglia mandare un messaggio ad Alice e, temendo che questo messaggio venga intercettato, decide di crittarlo. A tale scopo Bob critta il messaggio usando la chiave pubblica di Alice, chiave che Alice può tranquillamente mandargli per email o dettargli per telefono. Infatti questa chiave serve solo per crittare il messaggio, ma è completamente inutile per decrittarlo. Dunque, anche se cadesse in mani "nemiche" la chiave non servirebbe a nulla, perché non permetterebbe di decifrare nessun messaggio.

Quando Alice riceve il messaggio, essa può decrittarlo usando la propria chiave privata (che lei sola conosce e possiede). In questo modo si è risolto di fatto il problema dello scambio delle chiavi e la sicurezza del sistema (almeno in teoria) è perfetta. Infatti non è possibile in alcun modo ricavare la conoscenza della chiave privata a partire da quella pubblica e perciò conoscere la chiave pubblica non è in alcun modo utile a chi volesse provare a craccare l'algoritmo.

 

Firma digitale

La cifratura asimmetrica con chiave privata e pubblica consente di risolvere anche un altro problema presente nello scambio di messaggi su una rete pubblica (es. Internet), quello dell'identificazione del mittente. Nel nostro esempio precedente Alice riceve un messaggio da Bob, ma come fa ad essere sicura che si tratti veramente di lui? Tenete presente che la chiave di cifratura per Alice è pubblica e dunque chiunque avrebbe potuto inviarle un messaggio cifrato con tale chiave, spacciandosi per Bob.

All'inizio abbiamo tuttavia detto che le due chiavi possono essere usate in modo intercambiabile. Sebbene normalmente i messaggi vengano cifrati usando la chiave pubblica del destinatario e decifrati da quest'ultimo con la sua chiave privata, nulla vieta di fare al contrario. Nel nostro esempio Bob potrebbe allegare al proprio messaggio un secondo messaggio più breve contenente solo il proprio nome.

Il punto è che Bob cifra la propria firma usando la propria chiave privata (quella cioè usata normalmente per decrittare i messaggi ricevuti e che solo lui possiede). Quando Alice riceve il messaggio, essa legge la firma allegata usando la chiave pubblica di Bob. Siccome Bob è l'unico a possedere la chiave privata corrispondente, solo lui può averlo cifrato e dunque la sua identità è confermata.

In realtà il messaggio allegato non contiene il nome del mittente ma un codice alfanumerico, detto hash. In pratica il codice hash è una stringa di caratteri e numeri generata a partire dal file in chiaro che contiene il messaggio. In altre parole: il codice hash permette di sapere se il file decrittato corrisponde all'originale che è stato inviato. Essendo tale codice crittato con la chiave privata del mittente, abbiamo la certezza sia dell'identità di chi ha spedito il messaggio sia del fatto che il messaggio non sia stato contraffatto.

 

Online RSA Key Generator: un sito online per generare automaticamente una coppia di chiavi pubblica e privata

pidCrypt: cifrare e decifrare con l'algoritmo RSA

 

precedente - successiva

Sito realizzato in base al emplate offerto da

http://www.graphixmania.it