Guida Crittografia Introduzione al PGP

N

Nhoya

Ultima modifica da un moderatore:
IL PGP

pgp.jpg

PGP, acronimo di Pretty Good Privacy è una suite di programmi che rende possibile l'utilizzo di una sessione (compresa autenticazione) completamente in modo anonimo
Il PGP è stato sviluppato da Phil Zimmermann (stesso sviluppatore di PGPfone e ZRTP)
Questo programma è famoso in tutto il mondo perchè è stato il primo a sfruttare un sistema di crittografia asimmetrica (anche se comunque ha la possibilità di avvalersi anche di quello simmetrico)

Possiamo suddividere il funzionamento del PGP in 8 passaggi fondamentali:

  1. Generazione del Message Digest*
  2. Esecuzione della firma del Message Digest (calcolato precedentemente) utilizzando la Chiave privata
  3. La firma viene inclusa (in chiaro) nel messaggio
  4. Il messaggio viene compresso
  5. Generazione di una session-key (SK)**
  6. La SK viene utilizzata per cifrare il messaggio
  7. La precedente SK viene anchessa cifrata utilizzando però la Chiave pubblica dell'utente appartente al ricevente (non al mittente)
  8. Il pacchetto completo di tutto viene inviato al destinatario
*generato utilizzando gli Algoritmi MD5 e SHA. Il risultato sarà un MD a 128 bit, se generato con MD5 e 160 bit se generato con SHA
**Per la generazione della Session-key vengono utilizzati numeri pseudocasuali contenuti in un particolare algoritmo (contenuto nell' ANSI X9.17) e che utilizzano come input:
  • il seed value (64 bit) (numero casuale)
  • la rappresentazione a 64 bit di data e ora della generazione
  • una coppia di chiavi a 56 bit
E il risultato in output sarà:
  • il seed value aggiornato
  • la SK
--- Chiavi asimmetriche

q009800b.gif
Funzionamento cifratura asimmetrica

I sistemi a crittografia asimmetrica basano tutto il loro funzionamento su due chiavi (una pubblica e una privata). La chiave pubblica è addetta alla cifratura e può essere distribuita senza che l'algoritmo risulti indebolito, quella privata invece deve essere conosciuta SOLO e SOLTANTO dal proprietario in quanto è il fulcro che permette il decrypt del messaggio.
Sia la chiave pubblica che quella privata vengono generate randomicamente così da accrescerne ancora di più la sicurezza.
Gli algoritmi previsti per l'uso di PGP sono fra i più stabili e sicuri in circolazione, bisogna peró considerare che il processo di cifratura/decifratura ha ovviamente bisogno di un maggior numero di risorse rispetto all'invio degli stessi messaggi in chiaro, mi sembra ovvio.

--- Protocollo CAST-128 (CAST-5)


q009800a.gif

Funzionamento della cifratura simmetrica

Il cifrario Utilizzato di default da PGP e GPG prende il nome di CAST-128 (predecessore di CAST-256) e appartiene a quella categoria di algoritmi denominati Cifrari di Feistel
Riporto qui sotto le quattro fasi del funzionamento:

  1. (key schedule) Compute 16 pairs of subkeys {Kmi, Kri} from K
  2. (L0,R0) <-- (m1...m64). (Split the plaintext into left and right 32-bit halves L0 = m1...m32 and R0 = m33...m64.)
  3. (16 rounds) for i from 1 to 16, compute Li and Ri as follows
    Li = Ri-1;
    Ri = Li-1 ^ f(Ri-1,Kmi,Kri), (f is of Type 1, Type 2, or Type 3, depending on i)
  4. c1...c64 <-- (R16,L16). (Exchange final blocks L16, R16 and concatenate to form the ciphertext.)

Ha una chiave di lunghezza variabile dai 40 ai 128 bit e basa la resistenza del suo algoritmo sulle Substitution Box, che detto molto alla spicciola, convertono x bit in entrata in y in uscita rendendone più difficile la crittanalisi

In particolare questo protocollo utilizza operazioni XOR, sottrazioni e addizioni (modulari)



cast128.gif

Diagramma Cast 128


How to in linux - GPG

Un'implementazione di OpenPGP all'interno di sistemi Linux è GPG (Gnu Privacy Guard) realizzato da Werner Koch rilasciato per la prima volta nel lontano 1999. Nel 2000 invece, dato il grande successo, è stato anche un porting per versioni Windows

Questo programma di base andrebbe utilizzato sfruttando la riga di comando, ma esistono parecchie GUI che vi faciliteranno la vita. Consiglio comunque di utilizzare la shell in quanto non si è limitati alle operazioni che la GUI ha preimpostato.

--- Compilare e Installare GPG
100px-GnuPG-Logo.svg.png

Logo GPG

Per installare GPG sui vostri terminali sarà necessario seguire la guida sotto riportata.

  1. Rechiamoci sul sito https://www.gnupg.org/download/ e scarichiamo il pacchetto (che sarà in formato .tar.gz)
  2. utilizziamo il comando
    Codice:
    $ tar xvzf gnupg-x.x.x.tar.gz
    per estrarne il contenuto
  3. andiamo poi nella directory contenente il source e digitiamo
    Codice:
    $ ./configure --help
    per visualizzare le opzioni di compilazione
  4. Scriviamo adesso
    Codice:
    $ make
    per compilare i sorgenti e successivamente
    Codice:
    # make install
    per installare il tutto
N.B. Avremmo potuto scrivere anche
Codice:
# make && make install
ma dal momento che potrebbero verificarsi errori in fase di compilazione è preferibile sviluppare le due operazioni distintamente

Ecco una lista dei metodi di installazione per le distro più conosciute (nel caso in cui non vi vogliate compilare i sorgenti)
ArchLinux (e derivate)
Codice:
[COLOR=#000000]pacman -Sy gnupg[/COLOR]
Debian (e derivate)
Codice:
apt-get install gnupg
RedHat (e derivate)
Codice:
rpm -q gnupg
Fedora (e derivate)
Codice:
yum install gnupg

--- Configurare GPG
Ci mancano gli ultimi 3 passaggi ovvero:

  • Generare le coppie di chiavi
  • Creare un certificato di revoca
  • Inserire le chiavi in un Keyserver (opzionale)
--- Generare una coppia di chiavi
Cominciamo per ordine, rechiamoci nel nostro terminale e digitiamo:
Codice:
$ gpg --gen-key
vi saranno richiesti Nome, Cognome, mail, un commento opzionale e una parola segreta (passphrase) molto importante perchè bloccherà l'accesso alla chiave privata quindi cercate di non dimenticarla e di non distribuirla in giro. (La passphrase potrebbe anche non essere inserita lasciando lo spazio vuoto e premendo invio ma è fortemente sconsigliato)

--- Generare ed utilizzare un certificato di revoca
Adesso il secondo passaggio vedrà protagonista il Certificato di Revoca.
Immaginate adesso che la vostra Identità (che è rappresentata dalla coppia di chiavi) viene compromessa (o perchè l'avete cambiata o perchè qualcuno è entrato in possesso della vostra passphrase). In questo caso avete necessità di un modo veloce per far sapere a tutti che quelle chiavi non sono più in uso e che probabilmente ne utilizzerete altre. Quello che vi permette di compiere questa operazione è il Certificato di Revoca.
Per generarlo digitiamo:
Codice:
gpg --armor --output revoca.asc --gen-revoke ID.chiave
in questo modo avete creato un file chiamato revoca.asc che conterrà appunto il certificato.
Per utilizzare e quindi pubblicare il certificato di revoca basterà scrivere
Codice:
gpg --import revoca.asc
e
Codice:
gpg --send-key ID.Chiave


--- I Keyserver
Alle volte si può sentire la necessità di voler condividere la propria chiave pubblica e di inserirla in uno spazio web, così da poter dare la possibilità a chiunque di potervi contattare , è il caso dei Keyserver ovvero veri e propri server adibiti appunto allo storage delle chiavi pubbliche

Per richiedere la chiave al Keyserver basta scrivere
Codice:
gpg --keyserver NOMEKEYSERVER --recv-key id_chiave

Per inviarla invece basta inserire il comando
Codice:
gpg --keyserver http://pool.sks-keyservers.net/ --send-key id_chiave

Per assicurarsi che una chiave appartenga davvero al legittimo proprietario usiamo un metodo fornito dal pgp stesso: la firma di autenticità da parte di altre chiavi pubbliche su una specifica chiave.

Quella di firmare una chiave è un'operazione utilizzata da molti che consiste nell'associare alla propria chiave una fingerprint.
Per firmare una chiave ci basta digitare il comando
Codice:
[COLOR=#000000][FONT=monospace]gpg --edit-key ID[/FONT][/COLOR]
e subito dopo
Codice:
sign

Adesso siamo pronti per poter cifrare e decifrare i messaggi.
Utilizziamo i seguenti comandi:
Codice:
gpg --output file.gpg --encrypt --recipient [EMAIL="[email protected]"][email protected][/EMAIL] file
e
Codice:
gpg --output file --decrypt file.gpg

Se si fosse deciso di utilizzare la cifratura simmetrica allora avremmo dovuto aggiungere l'opzione -d e cambiare l'estensione da pgp a pgpi come sotto:
Codice:
gpg -d file.gpgi

--- Enigmail, il PGP menu per Icedove e Thunderbird

Enigmail è un software che si associa ad uno dei client di posta tra Icedove e Thunderbird e rende più facile la gestione di chiavi e messaggi cifrati con RSA

per installare Enigmail scriviamo
Codice:
# apt-get install enigmail
N.B. Sono indispensabili GnuPG e un client di posta

Dopo aver configurato l'account mail ci basterà accedere alla voce OpenPGP presente nella barra superiore per poter interfacciarci graficamente con il management di PGP.


9480-introduzione-al-pgp-il-protocollo-crittografico-piu-diffuso-al-mondo-bygghvc.png


9482-introduzione-al-pgp-il-protocollo-crittografico-piu-diffuso-al-mondo-tvwcpzl.png

Consigliata la lettura anche di questi documenti:

 
Ultima modifica da un moderatore:
Una curiosita': poiche' a quei tempi il software di crittografia era considerato arma, non poteva essere esportato direttamente dagli Stati Uniti.

Pero' potevano essere scritti libri e il codice poteva essere stampato.

Allora Zimmermann che ha fatto?

Ha spedito via fax la stampa di tutti i sorgenti, in Finlandia. Qui, mediante OCR, hanno ricostruito i sorgenti e compilato il tutto.
Ma c'e' di peggio: i sorgenti sono stati stampati e si potevano acquistare in libreria.

Li ho visti alla Hoepli a Milano. Sono stata li per acquistarli. Peccato! Oggi avrei un piccolo pezzo di storia.

Zimmermann ha avuto un sacco di grane per questa storia. Comunque tutto si e' risolto bene.
E' stato una pietra migliare della crittografia commerciale.

Con un po' di pazienza si trovano ancora i sorgenti di PGP (attenzione, NON GPG, che e' la stessa cosa, ma rivista ed aggiornata in versione GNU).

La parte divertente e' che non e' difficile modificare il limite massimo del numero di bit che possono essere utilizzati per generare le chiavi. Il codice lo aveva impostato a 512. L'avevo modificato per portarlo a 2048 bit.

Quindi ho richiesto la generazione delle chiavi con 2048 bit.

Ci sono volute 5 o 6 ore perche' trovasse la coppia di primi necessari ;)