Guida a GnuPG programma libero da restrizioni per crittografare: algoritmi.

gnupg-logoGNU Privacy Guard (GnuPG o GPG), rilasciato sotto la licenza GNU GPL, è un programma progettato per sostituire la suite crittografica PGP.

GPG è completamente compatibile con gli standard OpenPGP dell'IETF ed è sostenuto dal governo tedesco.

Fa parte del software sviluppato dalla Free Software Foundation.
E' importante specificare che GnuPG è un programma  libero da restrizioni, potete usarlo anche in azienda.

Il progetto GnuPG va avanti grazie anche a finanziamenti concessi dal Ministero tedesco per l'Economia e la Tecnologia.
Principale autore del progetto è Werner Koch.

GnuPG vi permette di crittografare e/o firmare documenti e email, è indispensabile per proteggere la privacy ma anche per certificare la propria identità in Internet o anche per assicurare l'integrità di programmi scaricabili (eseguibili firmati).

Se siete una banca, un azienda ma anche semplicemente un privato  potreste prima o poi sentire l'esigenza di un programma simile, siamo nell'era digitale e delle telecomunicazioni ma quella della sicurezza informatica è ancora molto lontana.

Vi ricordo che dal Gennaio 2004 in Italia  è in vigore la legge (196/03)  Decreto Legislativo del 30 Giugno 2003

"Codice in materia di protezione dei dati personali" dove all'articolo 34 punto h potete leggere proprio : "adozione di tecniche di cifratura o di codici identificativi per determinati trattamenti di dati idonei a rivelare lo stato di salute o la vita sessuale effettuati da organismi sanitari"

Quindi se siete un organo istituzionale, un azienda o un semplice studio medico potete ottemperare agli obblighi di legge usando il programma GnuPG a costo zero per conservare al sicuro i dati o farli viaggiare cifrati per  email.

GPG è un programma stabile e maturo, ed è distribuito con parecchi sistemi operativi liberi come FreeBSD, OpenBSD, e NetBSD, oltre che, ovviamente, con tutte le distribuzioni GNU/Linux. È disponibile anche per le varie versioni dei sistemi operativi proprietari Microsoft Windows e Mac OS X, e grazie alla sua portabilità ed alla disponibilità del codice sorgente è possibile crearne una versione per qualsiasi OS.

Nonostante la versione di base di GPG fornisca un'interfaccia a riga di comando completa, sono state sviluppate parecchie interfacce grafiche, Seahorse per GNOME, KGPG per KDE, o metodi per integrarlo all'interno di programmi di posta elettronica, come KMail, Evolution (i client e-mail di default per, rispettivamente, KDE e GNOME). Un plug-in apposito, Enigmail, permette l'integrazione con Thunderbird, semplificando l'utilizzo di GPG (per la posta) sotto Microsoft Windows, GNU/Linux ed altri sistemi operativi. Parecchi client e-mail testuali, tra cui Mutt, supportano la gestione delle mail firmate o cifrate con GPG (o PGP, la configurazione è abbastanza simile per entrambi). 
gnupg_prefs-001
Si deve sempre tenere in mente che, poiché quei sistemi di plugin non fanno parte del progetto GPG né dello standard OpenPGP e che gli sviluppatori di GPG e di OpenPGP non hanno preso parte alla progettazione di tali sistemi, potrebbe accadere che la sicurezza fornita da GPG venga abbassata o addirittura compromessa dall'utilizzo di tali interfacce.

GPG può essere compilato sotto altre piattaforme come Mac OS X e Windows. Per Windows un software che può esser considerato l'erede del commerciale PGP, è Gpg4win, mentre Mac OS X esiste un port chiamato MacGPG. In particolare questo software è stato adattato per usare l'interfaccia utente di OS X e le sue funzioni native. La cross-compilazione non è un lavoro semplice, anche solo per il fatto che i sistemi operativi provvedono ai requisiti di sicurezza in modalità molto diverse (anche da una versione all'altra) ed è spesso complesso adattare a queste modalità il programma per mantenere identici livelli qualitativi sui vari sistemi.

GnuPG utilizza la crittografia a chiave pubblica per permettere a coloro che lo utilizzano di comunicare in sicurezza. In un sistema a chiave pubblica ogni utente ha una coppia di chiavi consistenti in una chiave privata e una chiave pubblica. La chiave privata di una persona viene tenuta segreta; non deve mai essere rivelata. La chiave pubblica può essere data a tutti coloro con i quali l'utente vuole comunicare. GnuPG utilizza uno schema in qualche modo più sofisticato per il quale un utente possiede una coppia di chiavi primaria e zero o più coppie di chiavi subordinate addizionali. La coppia di chiavi primaria e quelle subordinate sono raggruppate assieme per facilitare la gestione delle chiavi e il mazzo così ottenuto può spesso essere considerato semplicemente come un'unica coppia di chiavi.

GnuPG fa uso di diversi concetti di crittografia come algoritmi simmetrici, algoritmi a chiave pubblica, e hashing a senso unico. È possibile utilizzare le funzioni di base di GnuPG senza comprendere appieno tali concetti, ma, se si vuole usarlo con cognizione di causa, una loro comprensione è necessaria.
Questo capitolo introduce i concetti di base della crittografia utilizzati in GnuPG. Si possono trovare altri libri che trattano questi argomenti più dettagliatamente. Un buon testo per approfondire ulteriormente gli studi è ``Applied Cryptography'' di Bruce Schneier.
wpt-keygen-02a

Algoritmi simmetrici.
Un algoritmo simmetrico è un algoritmo che utilizza la stessa chiave sia per criptare che per decriptare. Due parti che comunicano sfruttando un algoritmo simmetrico devono innanzi tutto mettersi d'accordo sulla chiave. Una volta d'accordo, il mittente cifra un messaggio utilizzando la chiave, lo spedisce al destinatario e questi decripta il messaggio usando la stessa chiave. Per esempio, il tedesco Enigma è un algoritmo simmetrico per il quale venivano distribuite delle chiavi giornaliere sotto forma di libri di codici. Ogni giorno un operatore radio, fosse esso un trasmittente o un ricevente, consultava la propria copia del libro codici per trovare la chiave di quel giorno. Il traffico radio di quel giorno veniva quindi criptato e decriptato utilizzando la quella chiave. Esempi moderni di algoritmi simmetrici includono 3DES, Blowfish e IDEA.

Un buon algoritmo di cifratura racchiude completamente la sicurezza nella chiave senza lasciare nulla nell'algoritmo. In altre parole, non dovrebbe essere di alcun aiuto per un malintenzionato conoscere il tipo di algoritmo utilizzato. Solo se ottenesse la chiave la conoscenza dell'algoritmo sarebbe necessaria. L'algoritmo usato in GnuPG possiede tale proprietà.

Poiché tutta la sicurezza è riposta nella chiave, è importante che sia veramente difficile indovinare la chiave stessa. Detto altrimenti, l'insieme di chiavi possibili, cioè lo spazio delle chiavi, deve essere grande. A Los Alamos, Tichard Feynman era famoso per la sua abilità nell'aprire casseforti. Per incoraggiare l'alone di mistero che lo circondava egli portava con sé perfino un serie di attrezzi, compreso un vecchio stetoscopio. In realtà egli usava una varietà di trucchi per ridurre il numero di combinazione che doveva provare e poi semplicemente tirava ad indovinare finché trovava la giusta combinazione. In altre parole, egli riduceva la dimensione dello spazio di chiavi.

La Gran Bretagna, durante la Seconda Guerra Mondiale, usò delle macchine per cercare di indovinare le chiavi usate dagli avversari. Il tedesco Enigma, infatti, possedeva uno spazio di chiavi veramente ampio, ma la Gran Bretagna costruì dei motori di calcolo specializzati, i Bombes, per provare meccanicamente le chiavi finché la chiave del giorno non veniva trovata. Questo significa che a volte riuscivano a trovare la chiave di quel giorno in capo a poche ore dal momento in cui una nuova chiave veniva usata, ma significa anche che alcuni volte non riuscissero affatto a trovare la chiave giusta. I Bombes non erano computer multi-funzione ma erano comunque i precursori dei nostri moderni elaboratori.

Oggigiorno i computer possono indovinare una chiave molto rapidamente e questo è il motivo per cui la dimensione della chiave è un requisito importante per i moderni sistemi di crittografia. L'algoritmo DES usa una chiave da 56 bit. Ciò significa che ci sono 256 chiavi possibili. 256 sono 72,057,594,037,927,936 chiavi. Un sacco di chiavi, ma un computer non specializzato può controllarle tutte in una manciata di giorni. Un computer specializzato in poche ore. D'altro canto, algoritmi sviluppati più recentemente, come il 3DES, il Blowfish e IDEA, usano tutti chiavi da 128 bit. Ciò implica che ci sono 2128 possibili chiavi. Queste sono molte, molte di più e, anche se tutti i computer della terra cooperassero, sarebbe ancora necessario più tempo di quello rappresentato dall'età dell'universo per trovare la chiave corretta.

Algoritmi a chiave pubblica.
Il problema principale con gli algoritmi simmetrici non risiede nella loro sicurezza, ma nello scambio della chiave. Una volta che il mittente ed il destinatario si sono scambiati la chiave, quella chiave può essere usata per comunicare in sicurezza. Ma quale canale sicuro è stato utilizzato per comunicare la chiave stessa? In particolare sarebbe probabilmente più semplice per un malintenzionato cercare di intercettare la chiave piuttosto che provare tutte le chiavi possibili dello spazio di chiavi. Un altro problema consiste nel numero di chiavi necessarie. Se ci sono n persone che vogliono comunicare privatamente fra loro, allora servono n(n-1)/2 chiavi per ogni coppia di persone. Ciò può andar bene per una ristretta cerchia di persone, ma il numero diventa rapidamente enorme per un gruppo largo.
Gli algoritmi a chiave pubblica furono inventati per aggirare completamente il problema dello scambio di chiavi. Un algoritmo a chiave pubblica utilizza una coppia di chiavi per spedire messaggi, entrambi appartenenti alla persona che riceve il messaggio. Una chiave è detta chiave pubblica e può essere data a chiunque. L'altra chiave è detta chiave privata e viene mantenuta segreta dal suo possessore. Il mittente cifra un messaggio usando la chiave pubblica e, una volta criptato, il messaggio può essere decifrato solo con la chiave privata.

Questo protocollo risolve il problema dello scambio di chiavi intrinseco agli algoritmi simmetrici. Non c'è bisogno che mittente e destinatario si mettano d'accordo su una chiave comune. Tutto ciò che serve è che, qualche tempo prima della effettiva comunicazione segreta, il mittente entri in possesso di una copia della chiave pubblica del destinatario. Inoltre una sola chiave pubblica può essere utilizzata da chiunque desideri comunicare con il destinatario. Così solo n coppie di chiavi sono sufficienti a permettere ad n persone di comunicare segretamente una con l'altra.

Gli algoritmi a chiave pubblica sono basati sulle funzioni a difficilmente invertibili con trapdoor[1] o, più brevemente, funzioni trapdoor. Una funzione difficilmente invertibile è una funzione facile da computare, ma la cui inversa è di difficile calcolo. Per esempio, è facile moltiplicare assieme due numeri primi per ottenere un numero composto, ma è difficile fattorizzare un numero composto nelle sue componenti prime. Una funzione trapdoor è simile, ma possiede una scappatoia: se si conosce una parte dell'informazione, diventa facile calcolarne l'inversa. Per esempio, se si considera un numero composto da due fattori primi, allora, conoscendo uno dei due fattori, risulta facile calcolare l'altro. Dato un algoritmo a chiave pubblica basato sulla fattorizzazione in numeri primi, la chiave pubblica contiene un numero composto formato da due fattori primi elevati e l'algoritmo di cifratura usa questo numero composto per criptare il messaggio. L'algoritmo per decriptare il messaggio richiede la conoscenza dei due fattori primi. Così, possedendo la chiave privata che contiene uno dei due fattori, è facile decifrare il messaggio, mentre è estremamente difficile se non si conosce la chiave privata.
Così come accade per gli algoritmi simmetrici, anche per gli algoritmi a chiave pubblica tutta la sicurezza risiede nella chiave. Perciò la dimensione della chiave è una misura della sicurezza del sistema, anche se non è possibile paragonare la dimensione della chiave di un algoritmo simmetrico con quella di di un algoritmo a chiave pubblica per misurare il loro grado di sicurezza. In un attacco a forza bruta contro un algoritmo simmetrico con una chiave da 80 bit, un malintenzionato deve contare al massimo 280 chiavi per trovare quella giusta. In un attacco a forza bruta contro un algoritmo a chiave pubblica con una dimensione della chiave pari a 512 bit, lo stesso malintenzionato deve fattorizzare un numero composto codificato in 512 bit (fino a 155 cifre decimali).

Il carico di lavoro per il malintenzionato è fondamentalmente differente a seconda dell'algoritmo che viene attaccato. Mentre 128 bit sono sufficienti per un algoritmo simmetrico, data la tecnologia odierna di fattorizzazione, sono raccomandate chiavi da 1024 bit per la maggior parte degli scopi.

Note[1]   
One-way trapdoor function nel testo originale. Qui il termine trapdoor potrebbe essere tradotto con botola, scappatoia. Tali espressioni però non sono utilizzate nella pratica
Algoritmi .
Gli algoritmi a chiave pubblica non sono una panacea. Molti algoritmi simmetrici sono più forti dal punto di vista della sicurezza; le operazioni di criptazione e decriptazione a chiave pubblica sono più costose delle corrispondenti operazioni dei sistemi simmetrici. Ciò nonostante, gli algoritmi a chiave pubblica rappresentano uno strumento efficace per distribuire le chiavi degli algoritmi simmetrici e per questo vengono usati in sistemi di crittografia ibridi.

Un algoritmo ibrido utilizza sia un sistema simmetrico che uno a chiave pubblica. In particolare esso funziona utilizzando un algoritmo a chiave pubblica per condividere una chiave per il sistema simmetrico. Il messaggio effettivo è quindi criptato usando tale chiave e successivamente spedito al destinatario. Poiché il metodo di condivisione della chiave è sicuro, la chiave simmetrica utilizzata è differente per ogni messaggio spedito. Per questo viene detta a volte chiave di sessione.

Sia PGP che GnuPG usano algoritmi ibridi. La chiave di sessione, criptata utilizzando l'algoritmo a chiave pubblica, e il messaggio da spedire, cifrato con l'algoritmo simmetrico, sono automaticamente combinati in un solo pacchetto. Il destinatario usa la propria chiave privata per decifrare la chiave di sessione che viene poi usata per decifrare il messaggio.

Un algoritmo ibrido non è mai più forte del più debole algoritmo utilizzato, sia esso quello a chiave pubblica o quello simmetrico. In PGP e GnuPG l'algoritmo a chiave pubblica è probabilmente il più debole dei due. Fortunatamente, però, se un malintenzionato dovesse decifrare una chiave di sessione, egli sarebbe in grado di leggere solo un messaggio, quello criptato con quella chiave di sessione. Il malintenzionato dovrebbe ricominciare di nuovo e decifrare un'altra chiave di sessione per poter leggere un altro messaggio.

Ricerca personalizzata


Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:


Commenti

Post popolari in questo blog

Rilasciano BlenderBot v3, un chatbot che utilizza il loro modello OPT e aprono la demo per testarlo

Componenti aggiuntivi di Google Workspace

Come rimuovere il virus che trasforma le cartelle in collegamenti nella tua pendrive.