TesinaGPG

CRITTOGRAFIA A CHIAVE PUBBLICA

I meccanismi crittografici possono essere utilmente impiegati per proteggere l'integrità ed accertare l'autenticità del traffico email, come avviene per i client che implementano S/MIME e/o PGP (o GPG). Scrivere una relazione che illustri i passi da compire per creare la propria coppia di chiavi pubblica e privata; cosa fare per pubblicare quella pubblica, e come impiegare la propria chiave privata, e quella pubblica degli altri.






1 - introduzione

Internet è percepita come la più grande rete telematica mondiale, e collega alcune centinaia di milioni di elaboratori per suo mezzo interconnessi. In questo scenario virtuale risulta difficile "fidarsi" di qualcuno: Come posso essere certo che il sito dove sto navigando sia effettivamente quello e non un suo fake creato da qualcun altro? Come faccio ad essere sicuro che la mia posta e-mail arrivi solo ed esclusivamente a chi voglio io e che invece non ci sia qualcuno che riesce a leggerla a mia insaputa? E come questi potrei citare altri infiniti esempi di questo tipo... a queste domande risponde la parola crittografia o firma digitale: La firma digitale, o firma elettronica qualificata, basata sulla tecnologia della crittografia a chiavi asimmetriche, è un sistema di autenticazione di documenti digitali analogo alla firma autografa su carta; Nell'ordinamento giuridico italiano la firma digitale a crittografia asimmetrica è riconosciuta ed equiparata a tutti gli effetti di legge alla firma autografa su carta. Questo sistema sfrutta le caratteristiche dei sistemi crittografici a due chiavi (detti anche a chiave pubblica o asimmetrici), i quali garantiscono la riservatezza e segretezza del contenuto dei messaggi


2 - che cosa è una chiave pubblica e privata

Una chiave privata/pubblica è una chiave crittografica utilizzata in un sistema di crittografia asimmetrica; ogni chiave privata/ pubblica è associata ad una chiave pubblica/privata. Vengono distinte in "pubblica" e "privata" perchè la chiave pubblica è una chiave leggibile a tutti di cui tutti possono esserne a conoscenza; mentre la chiave privata può e deve essere conosciuta solo da diretto proprietario. Questo è il principale vantaggio dei crittosistemi asimmetrici.


3 - come creare la propria coppia di chiavi

Per creare la coppia di chiavi (pubblica / privata), esistono vari software tra cui facciamo riferimento a 2 di questi in particolare: Pretty Good Privacy (PGP) e GNU Privacy Guard (GnuPG o GPG). Entrambi si dividono essenzialmente in 5 passi principali:

  • scelta della lunghezza delle chiavi: Nel 1997, gli NSA Laboratories degli Usa hanno stimato che una chiave lunga 512 bit generata con l'algoritmo RSA (inventato nel 1978 e tuttora tra i più forti ed utilizzati) poteva essere "scoperta" con i computer in possesso di una grande impresa abbastanza in fretta; per una chiave di 1024 bit sarebbero stati necessari tutti i computer del governo Usa al lavoro per qualche mese; mentre una chiave di 2048 bit è ancora al di là della capacità tecnologica attuale.Questo porta alla conclusione che una chiave dovrebbe avere una lunghezza di circa 1024 bit, per essere relativamente sicura
  • proprio user ID: È necessario fornire un identificativo utente in aggiunta ai parametri della chiave. Lo User ID viene utilizzato per associare la chiave che si sta creando ad una persona reale. Si può comunque aggiungere nuovi user ID attinenti a quella coppia di chiavi, ma nn sarà più possibile dissociare il primo User ID creato dalla coppia di chiavi
  • pass phrase: E' una specie di codice o parola segreta usata solo nel caso in cui un altra persona entri in possesso della propria chiave privata. Dal punto di vista della sicurezza, la passphrase usata per sbloccare la chiave privata è uno dei punti più deboli di GnuPG (così come di altri sistema di crittografia a chiave pubblica).
  • data di scadenza: Ogni coppia di chiavi ha una determinata data di scadenza (decisa dal creatore al momento della creazione stessa), una volta raggiunta la data prefissata la coppia di chiavi cessa di esistere. E' possibile comunque modificare la data di scadenza in seguito, dopo la creazione.
  • certificato di revoca: serve per revocare la chiave se compromessa e/o persa.




4 - cosa fare con la chiave pubblica e/o privata?

Ora che ho creato la mia chiave pubblica e segreta posso tranquillamente scambiare informazioni, sicure con chi voglio. Ad esempio Luca vuole inviare dei dati Claudia, per far ciò utilizza la crittografia asimmetrica: Luca prende i suoi dati e li critta sigillandoli con la chiave pubblica di Claudia (essendo la chiave pubblica può conoscerla chiunque); [ora è importante notare che nessun altro eccetto Claudia può leggere quei dati, neanche Luca che ne è l'autore potrebbe leggerli, dato che non conosce la chiave privata di Claudia] Claudia riceve i dati e li apre con la propria chiave privata (solo lei la conosce), decripta il tutto e ottiene i dati che Luca voleva inviarle. In questo modo hanno effettuato una trasmissione di dati sicura; anche se qualcuno avesse intercettato quelle informazioni, non avrebbe mai potuto leggerle dato che non aveva la chiave giusta per aprirli. (fig1)

La chiave pubblica e quella privata possono anche essere utilizzate per produrre firme digitali: il mittente di un messaggio può infatti firmarlo grazie alla sua chiave privata (che solo lui possiede), ma tutti sono in grado di verificare l'autenticità della firma grazie alla chiave pubblica (che è globalmente nota).La firma può poi essere abbinata alla normale cifratura, ottenendo messaggi firmati e cifrati, nel modo seguente. Ad esempio, Luca vuole inviare dei dati a Claudia: per iniziare Luca cifrerà con la propria chiave privata (firma) (in realtà cifra soltanto una piccola parte del messaggio "digest", ottenuto tramite una particolare funzione di hash; il digest cifrato viene poi unito ai dati da inviare e ne costituisce la firma. e poi con quella pubblica di Claudia (cifratura), infine invierà i dati; ora Claudia può ricevere i dati e prima dovrà decifrarli con la propria chiave privata (operazione che solo lei può fare, per cui è garantita la confidenzialità) e quindi ritrovare il digest cifrato, poi usare la funzione di hash inversa (le funzioni di hash sono pubbliche) e poi confronta il risultato della funzione di hash con la chiave pubblica del mittente la firma allegata: se l'operazione va a buon fine Claudia ha la certezza che il mittente è davvero Luca, perché solo lui può aver cifrato i dati con la propria chiave privata. (fig.2)




5 - web of trust (rete della fiducia)

Con le chiavi si possono, inoltre, firmare (digitalmente) documenti; la firma digitale, tutt’ora, è riconosciuta, a livello giuridico, quanto quella cartacea... con l’unica differenza che la firma digitale nn può essere contraffatta. Per firmare digitalmente un documento, basta sigillarlo con la propria chiave privata, e per aprirlo basta usare la chiave pubblica di chi l’ha sigillato; in questo modo si è sicuri che quel documento è stato realmente firmato da quella specifica persona e non da qualcun altro. Detto ciò è chiaro che basta controllare la firma del mittente per sapere a priori se quel documento è sicuro o meno... questa procedura risulta però, sicura e noisa allo stesso tempo nel caso in cui si debbano controllare numerosi documenti, e quindi numerose chiavi. Ed è qui che entra in gioco la cosiddetta “rete della fiducia”: nella quale la responsabilità di convalidare le chiavi pubbliche è delegata a persone di cui ci si fida. Praticamente se io mi fido di un amico, il quale ha delle chiavi pubbliche di terzi che io non conosco; posso comunque dare per scontato che le chiavi dei “terzi” siano sicure, e quindi posso fidarmi senza doverle controllare (appunto rete della fiducia).Inoltre ogni utente può a sua volta firmare le chiavi di altri utenti (con la propria chiave pubblica), per “rafforzare” il livello di fiducia verso quella chiave firmata (tante più persone hanno posto la firma su di una chiave, tanto più sicura sarà quella chiave (in generale)). Questo sistema è del tutto soggettivo (tutto varia in base alla fiducia che oguno pone verso le altre persone), quindi sono state definite delle opzioni da dare ad ogni chiave del proprio mazzo, in base alla fiducia che vogliamo riporre in quella chiave (utente):

  • sconosciuto: non c'è nessuna informazione sul giudizio del possessore nella chiave di firma. Le chiavi del proprio mazzo che non siano le proprie hanno inizialmente questo livello di fiducia.
  • nessuna: si sa che il possessore non firma opportunamente le chiavi degli altri.
  • marginale: il possessore capisce le implicazioni che comporta firmare una chiave ed è capace di convalidare le chiavi propriamente prima di firmarle.
  • piena: il possessore ha un'eccellente comprensione di ciò che comporta firmare una chiave e la sua firma su una chiave è tanto valida quanto la propria.

Si può quindi creare un algoritmo per convalidare una chiave, e quest’algoritmo si deve compiere di 2 passi principalmente:

  • è stata firmata da un numero sufficiente di chiavi pubbliche, nello specifico:
    • È stata firmata di persona
    • È stata firmata da una chiave di cui ci si fida peinamente
    • È stata firmata da 3 chiavi con fiducia marginale
  • il percorso delle chiavi che risale dalla chiave X, alla propria chiave è al massimo di cinque passi

[queste sono condizioni preimpostate da GnuPG, ma volendo si possono modificare queste impostazioni. Inoltre è comodo crearsi un’algoritmo per la convalida delle chiavi... in questo modo il tutto viene velocizzato e si può decidere in base alle caratteristiche dell’algoritmo se essere “più o meno fiduciosi”.]


6 - come far conoscere la mia chiave pubblica

Se nessuno conosce la mia chiave pubblica, non potrò mai scambiare informazioni "sicure"... dato che nessuno potrò mai leggere o capire i miei messaggi (non conoscendo la mia chiave pubblica). Devo perciò cercare di far conoscere la mia chiave pubblica e soprattutto conoscere io stesso le chiavi pubbliche delle altre persone.

  • Keyserver:Un keyserver e' un database pubblico contenente chiavi pubbliche. Per mettere la propria chiave online (sul keyserver), basta semplicemente seguire i vari passi descritti su ogni key server (di norma basta copiare/incollare la propria chiave pubblica e inviarla, e si è automaticamente inscritti al keyserver).

Alcuni esempi di keyserver (i quali fungono da motore di ricerca per le chiavi pubbliche dei vari utenti)


Inoltre ho trovato in rete alcune guide su come installare un key server, su di un altro possibile uso delle public key, e una guida passo passo per creare la propria coppia di chiavi:

- [http://www.autistici.org/it/stuff/network_howto/key_server/pgp_keyserver-1.html#ss1.1

  guida su come installare un key server ]

- [http://www.tevac.com/article.php/20070711004415732

  come fornire una sorta di biglietto da visita a quei server cui ci si collega spesso e richiedono una password ]

- [ http://www.gnupg.org//howtos/it/GPGMiniHowto-3.html#ss3.1

  Come creare la propria coppia di chiavi (con gnupg) passo per passo ]




7 - How To?: guida su come inviare e ricevere una email crittografata

Usiamo come piattaforma mail Thunderbird, e nello specifico Enigmail: una estensione che permette agli utenti di utilizzare il sistema di autenticazione e cifratura offerto da GnuPG e PGP. Quindi innanzitutto dobbiamo procurarci i seguenti programmi:

Dopo aver installato questi 3 programmini, dobbiamo crearci la nostra coppia di chiave pubblica e privata (come spiegato in precedenza; può essere fatto sia dalla shell o rimanendo semplicemente in ambito Thunderbird). Per creare la nostra coppia di chiavi usando Thunderbird, (e quindi non si deve lavorare per forza sotto ambiente Linux, ma anche in Windows o Mac) basta seguire questi semplici passi:

  1. andare sulla barra degli strumenti di Thunderbird e selezionare “OpenPGP”, a seguito “gestione delle chiavi”, a seguito “genera”, a seguito “nuova coppia di chiavi”
  2. digitare la mail che si vuole associare a questa coppia di chiavi
  3. digitare una password “passphrase” che verrà richiesta prima della ricezione/invio mail cifrate o firmate
  4. vi verrà ora richiesto di scegliere la data di scadenza della vostra coppia di chiavi; mettete pure la durata che volete o anche senza data di scadenza
  5. scegliete la lunghezza della vostra chiave (è consigliabile a 1024 bit, il perchè è spiegato sopra)
  6. vi verrà chiesto se volete creare un “certificato di revoca” (cosa sia e a che serve è specificato sopra)

Ok, avete completato l’operazione di creazione della coppia chiave pubblica / privata. Nella finestra di “gestione chiavi” dovrebbe essere presente il vostro nuovo mazzo di chiavi; per prima cosa è consigliabile inviare la chiave pubblica ad un keyServer (cosa sia e a che serve e come farlo è specificato sopra), di modo che tutti possano conoscerla. Sempre in questa finestra è possibile effettuare alcune operazioni sul vostro nuovo mazzo di chiavi. Ora dobbiamo rendere attivo il supporto GnuPG per il nostro account di posta, di modo da poter inviare / ricevere mail crittate – firmate: sempre da Thunderbird andiamo su “impostazioni Account” a seguire “Open PGP” (del nostro account). Configurare l’account come specificato in figura 3.

Ci rimane ora da configurare Enigmail: sempre dalla barra degli strumenti di Thunderbird selezioniamo “OpenPgp” a seguito “Impostazioni” a seguito “generale”; nel quale dovremmo specificare il percorso dell’eseguibile “GnuPG” che è gpg.exe se usate Windows, gpg.cmd se usate Mac, semplicemente gpg per Linux. Qui inoltre possiamo scegliere / aggiungere i nostri KeyServer (come specificato in figura 4).

Poi passiamo alla cartella “Invio”, nella quale spuntiamo le opzioni indicate in figura 5.

Poi passiamo alla cartella “Scelta della chiave”, nella quale spuntiamo le opzioni indicate in figura 6.

Poi passiamo alla cartella “Scelta della chiave”, nella quale spuntiamo le opzioni indicate in figura 7 (le quali ci permettono di usare le impostazioni di PGP).

Poi passiamo alla cartella “Avanzate”, nella quale spuntiamo le opzioni indicate in figura 8.

E con questo abbiamo completato la configurazione di Enigmail. Ora quando si andrà a creare un nuovo messaggio di posta elettronica, nell’angolo in basso a destra dovrebbero comparire 2 icone (cifratura e firma), che permettono di decidere se firmare e/o cifrare il messaggio. Inoltre ancora per inviare email cifrate è necessario avere la chiave pubblica del destinatario. Se il destinatario non possiede nessuna chiave, i nostri messaggi saranno automaticamente firmati, ma non cifrati, il che comunque ci assicura un buon livello di protezione. Bisogna ricordare che ad essere cifrato è il corpo delle email, mentre il titolo resta sempre in chiaro, anche se Enigmail ci offre la possibilità di omettere il titolo; di modo che il destinatario può a priori leggere il titolo e poi in caso decifrare il contenuto della mail. Per quanto riguarda invece la ricezione delle mail, una volta settato Thunderbird (e dopo aver seguito tutti i passaggi sopra elencati)



8 - Referenze