economia news e media viaggi informatica internet salute e benessere int rattenimento e spettacolo sport tempo libero istruzio ne e formazione arte cultura scienza

Crittografia

Funzionamento del PGP

A cura di Antonio Parziale

Pubblicato il 23/05/2005

Il PGP sfrutta quattro programmi base combinati secondo necessità: RSA, IDEA, MD5, ZIP. L'articolo è tratto dalla tesi di laurea in "Applicazione delle tecniche di crittografia nella trasmissione ed elaborazione dati" redatta dall'ingegnere Federico Gennari nell'anno accademico 2000/2001

8.13 – funzionamento del PGP

Il PGP sfrutta quattro programmi base combinati secondo necessità: RSA, IDEA, MD5, ZIP.

Il messaggio in chiaro viene comunque compresso con lo ZIP per poter velocizzare l’operazione. La compressione si fa anche quando si usano le codifiche perché, oltre a far risparmiare spazio e tempo (ed il tempo può essere significativo quando si hanno a che fare con i numeri usati dagli algoritmi), rafforza la sicurezza eliminando la ridondanza del testo.

La cifratura sfrutta l’algoritmo RSA con le coppie di chiavi P, pubblica, e S, segreta, insieme al cifratore a blocco IDEA, la cui chiave è k. Il PGP genera casualmente la chiave k a 128 bit, e cifra il messaggio M: IDEA(M, k). La chiave pubblica del ricevente P1 viene usata per lo scambio della chiave segreta: P1(k). In totale viene spedita la coppia {IDEA(M, k); P1(k)}.

Per leggere il messaggio, prima si recupera chiave segreta k tramite la propria chiave privata P0, e poi si decifra l’IDEA con la chiave ottenuta.

La firma è ottenuta in due passi distinti, prima si usa l’algoritmo hash sul messaggio M: MD5(M). Quindi si applica la propria chiave privata per ottenere la firma: S0[MD5(M)]. Si spedisce la coppia {M; S0[MD5(M)]}. In genere, la firma è posta prima del messaggio effettivo che si sta spedendo, ma se si preferisce l’opzione “firma chiara”, la firma è posta sotto il messaggio.

L’autenticazione si basa sulla verifica del nostro messaggio {M; S0[MD5(M)]} da parte del ricevente, che possiede la nostra chiave pubblica. Applicandola si ottiene: MD5(M) = P0{ S0[MD5(M)]}. Poi si confronta il risultato con il nostro calcolo di MD5(M), effettuabile sul messaggio ricevuto. Se i due coincidono, la verifica ha avuto esito positivo.

Il problema si sposta sul sapere se la chiave pubblica che uno sta usando per la verifica appartiene realmente o meno alla persona da cui dice di provenire. Per questo esistono i certificati che consentono di legare un’entità alla sua chiave tramite una intermediario di fiducia; nel PGP è un conoscente diretto od indiretto che garantisce.Uno dei vantaggi del PGP è di non aver bisogno di una infrastruttura di supporto per questo, la distribuzione dei certificati è manuale o automatica, semplicemente allegandoli ai messaggi, senza aver bisogno di una gerarchia di autenticazione (anche se è capace di leggere ed importare nel suo formato la certificazione X.509). 

Esiste anche la possibilità di firmare e cifrare il messaggio M, combinando le due strategie già viste come segue creando X = {M; S0[MD5(M)]} e quindi lo cifra: {IDEA(X, k); P1(k)}.

L’operazione inversa della precedente consiste dunque prima nel recuperare la chiave segreta tramite la propria chiave privata, decifrare con la chiave segreta fornisce la firma da verificare nel modo usuale. E’ ovvio che il PGP procede automaticamente nella sequenza di azioni senza coinvolgere l’utente se non nell’opzione di cifratura e nella lettura dei messaggi.

Le chiavi dell’utente sono conservate in forma cifrata; il PGP alloca le chiavi in due file distinti sull’hard disk: uno per le chiavi pubbliche e l’altro per quelle private. Questi file sono detti portachiavi (keyrings), e quando si usa il PGP le chiavi pubbliche dei riceventi sono aggiunte al portachiavi pubblico. Perdere il portachiavi privato rende incapaci di leggere i messaggi cifrati con tali chiavi. I vari portachiavi, poi, sono protetti da una parola d’ordine che, se è facilmente prevedibile, è l’unica debolezza del insieme. In realtà non c’è una parola singola a proteggere gli anelli, ma una frase intera, che passata attraverso una funzione hash decifra i file contenenti gli anelli; se dimenticata si perde tutto.

I certificati digitali semplificano il lavoro di stabilire se una chiave pubblica appartiene al possessore conclamato; è dunque una sorta di credenziale. Il certificato generico consiste in tre cose:

- una chiave pubblica

- informazioni certificate: informazioni sull’identità dell’utente, come il nome, ID utente e così via

- una o più firme digitali

Le firme digitali sul certificato attestano che le informazioni presenti sono garantite da un’altra persona od identità di fiducia. La firma digitale non attesta l’autenticità del certificato; comprova solo che le informazioni di identità che l’accompagnano sono univocamente legate alla chiave pubblica. I certificati sono usati nel caso di dover scambiare chiave pubbliche con qualcun altro, assegnandogli inequivocabilmente la provenienza; nel PGP la creazione e la distribuzione è diretta, ma a questo scopo esistono anche dei depositi pubblici in rete detti Certificate Servers, oppure sistemi più strutturati come le Public Keys Infrastructures (PKI), con le proprie Autorità di Certificazione (CA) autorizzate legalmente a rilasciare, revocare, depositare, recuperare, verificare e firmare certificati ad utenti (un esempio di questi è il certificato X.509).

Il certificato PGP comprende (ma non si limita a):

- chiave pubblica del possessore del certificato, insieme all’algoritmo per la chiave: RSA, DH, DSA

- Informazioni sul possessore del certificato, come il nome il suo “user ID”, la foto e così via

- La firma digitale del possessore del certificato (auto firma), fatta con la chiave privata

- Altre firme di attestazione

- Periodo di validità del certificato

- L’algoritmo simmetrico preferito per la chiave, scelto tra IDEA, CAST, o triplo DES

Come quantificare la fiducia che riponiamo nelle entità che  presentano e firmano i certificati? Ci sono tre modelli di fiducia: diretta (per conoscenza esplicita della persona), gerarchica (una persona è garantita da una figura di calibro superiore, così anche lei e via dicendo), a ragnatela (che è circa una composizione delle precedenti). La ragnatela è la base del PGP: quando un utente firma un certificato altrui,  diventa presentatore della specifica chiave, e quando il processo va avanti (un utente firma il successivo e così via), si forma una ragnatela di fiducia (web of trust). Nel PGP ogni utente agisce come autorità di certificazione convalidando la chiave, ma la sua qualifica differisce di persona in persona (a differenza di un’entità autorizzata legalmente, che è parificata), che in effetti gli assegna la propria opinione personale per identificarne il livello di fiducia riposta. Nel proprio portachiavi per ogni chiave, l’utente ha due indicatori: se la chiave è ritenuta valida o meno, ed il livello di fiducia assegnato dall’utente alla chiave stessa in base al suo possessore. Quindi la fiducia che poniamo sul possessore è anche la fiducia che poniamo sui certificati che lui convalida.

I tre livelli di validità assegnabili alla chiave sono: valida, marginalmente valida, invalida.

I tre livelli di affidamento assegnabili alla chiave sono: completa, marginale, nessuna (a parte quella implicita che riguarda la propria chiave).

Cosicché quando ci arriva una nuova chiave pubblica, per vedere se appartiene davvero ad una certa persona si analizza il certificato. Quando il certificato è firmato da una chiave, si cerca nel proprio portachiavi la suddetta e si controlla la sua affidabilità: se va bene, di conseguenza anche il certificato è approvato e la chiave corrisponde univocamente ad un certo utente. Una conferma è data dalla verifica della firma presentata (notare che la chiave che ha firmato corrisponde univocamente ad una persona, che è quindi un presentatore).

Il PGP richiede almeno una firma di fiducia completa o due marginali per stabilire se una chiave è valida.

Vuoi essere aggiornato sulle novità della guida?

Feed RSS XML vostro feed RSS