Stampa questa pagina
Venerdì, 30 Ottobre 2009 00:06

OpenSSL – Certificati e Autorità – parte 2

Scritto da
Vota questo articolo
(0 Voti)

Riprendiamo il concetto di firma elettronica. Per fare questo, installiamo il pacchetto GnuPG ( {it:GNU Privacy Guard} ).

luca@giasone:~$ sudo apt-get install gnupg

Una volta installato, avremo a disposizione il comando gpg con il quale potremo fare qualche esperimento. Per prima cosa creiamo una nuova coppia di chiavi:

luca@giasone:~$ gpg --gen-key
[...]
gpg: directory `/home/luca/.gnupg' created
gpg: creato un nuovo file di configurazione `/home/luca/.gnupg/gpg.conf'
[...]
Selezionare il tipo di chiave desiderato:
   (1) DSA ed Elgamal (predefinito)
   (2) DSA (solo firma)
   (5) RSA (solo firma)
Selezione? 1
[...]

Ho scelto la chiave DSA Elgamal per poterla usare sia per la firma che per la crittografia. Le opzioni sucessive sono abbastanza chiare. Preparatevi a fare "rumore" per generare numeri casuali (aprite le risorse del computer, lanciate programmi e via dicendo). Mi raccomando: ricordatevi la password!

 

Una volta generate, le chiavi verranno salvate, insieme ad altre informazioni, in $HOME/.gnupg/ e GnuPG si occuperà di gestirle per noi.

Siamo pronti a firmare digitalmente i nostri documenti. Facciamo subito un esempio:

luca@giasone:~$ cp .bashrc file.txt
luca@giasone:~$ gpg --sign file.txt
È necessaria una passphrase per sbloccare la chiave segreta
dell'utente: "Luca Saba (La mia prima coppia di chiavi) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>"
1024-bit chiave DSA, ID 61117C3A, creata 2009-10-29
luca@giasone:~$ ls
file.txt     file.txt.asc
luca@giasone:~$ gpg --verify test.txt.asc
gpg: Firma fatta da ven 30 ott 2009 12:04:03 CET usando DSA ID chiave 61117C3A
gpg: Good signature from "Luca Saba (La mia prima coppia di chiavi) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>"
luca@giasone:~$

Ecco cosa abbiamo fatto. Abbiamo creato una file di nome test.txt e lo abbiamo firmato.  Il risultato è un nuovo file, con estensione .asc, all'interno del quale si trova sia il messaggio originale, che la firma elettronica. Aprite il file in un editor di testo per vedere cosa contiene:

Firma testo

Alla riga 8, abbiamo verificato che la firma fosse corretta. GnuPG ci da due informazioni:

  • Il file di testo non ha subito alcuna modifica da quando è stato firmato
  • E' stato Luca Saba (riga 10) a firmare il file

A dimostrazione di quanto detto, potete provare a modifica il file test.txt.asc aggiungendo uno spazio tra le parole 'Prova' e 'di'. Se ora provate a fare nuovamente la verifica, ecco cosa succede:

luca@giasone:~$ gedit test.txt.asc
luca@giasone:~$ gpg --verify test.txt.asc
gpg: Firma fatta da ven 30 ott 2009 12:04:03 CET usando DSA ID chiave 61117C3A
gpg: Firma non corretta di "Luca Saba (La mia prima coppia di chiavi) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>"
luca@giasone:~$

Come potete vedere (riga 4) la verifica fallisce, informandoci che, o chi ci ha inviato il file non è chi dice di essere o che il file è stato modificato.

Crittografia

Abbiamo visto come firmare un documento elettronico, vediamo ora come crittografarlo. Per crittografare un documento, dobbiamo conoscere le chiavi pubbliche delle persone a cui vogliamo inviarlo. Attualmente non abbiamo un simile elenco perciò crittograferemo un messaggio per noi stessi. Per poterlo fare, dobbiamo ricordarci l'indirizzo di posta elettronica inserito in fase di creazione della coppia di chiavi crittografiche. Nel caso non ve lo ricordaste, basterà dare il comando:

luca@giasone:~$ gpg --list-keys
/home/luca/.gnupg/pubring.gpg
-----------------------------
pub   1024D/61117C3A 2009-10-29 [scadenza: 2010-10-29]
uid                  Luca Saba (La mia prima coppia di chiavi) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>
sub   2048g/D801A8E2 2009-10-29 [scadenza: 2010-10-29]
luca@giasone:~$

Questo comando ci da la lista di tutte le chiavi pubbliche e private che abbiamo collezionato.
Siamo pronti ad auto-crittografarci un messaggio:

luca@giasone:~$ gpg --encrypt test.txt
Non hai specificato un user ID. (puoi usare "-r")
Current recipients:
Inserisci l'user ID. Termina con una riga vuota: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Current recipients:
2048g/D801A8E2 2009-10-29 "Luca Saba (La mia prima coppia di chiavi) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>"
Inserisci l'user ID. Termina con una riga vuota:
luca@giasone:~$

Il risultato sarà un file con estensione gpg. Se provate ad aprire il file, vedrete una serie di caratteri senza senso (così come chiunque non fosse in possesso della vostra chiave privata).
Per poter riportare in chiaro il testo, dovrete dare il comando:

luca@giasone:~$ gpg --output testodecriptato.txt --decrypt test.txt.gpg
È necessaria una passphrase per sbloccare la chiave segreta
dell'utente: "Luca Saba (La mia prima coppia di chiavi) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>"
2048-bit chiave ELG-E, ID D801A8E2, creata 2009-10-29 (ID chiave principale 61117C3A)
gpg: encrypted with 2048-bit ELG-E key, ID D801A8E2, created 2009-10-29
      "Luca Saba (La mia prima coppia di chiavi) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>"
luca@giasone:~$

Se non avessimo usato l'opzione --output, il file sarebbe stato sparato sulla console: la cosa non è un problema nel caso di file di testo, ma se si fosse trattato di un'immagine.... sarebbe stato difficile poter capire qualcosa.

E', ovviamente, possibile firmare e crittografare un file. Basterà combinare le opzioni encrypt e sign:

luca@giasone:~$ gpg --sign --encrypt test.txt
[...]
Inserisci l'user ID. Termina con una riga vuota: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
[...]
luca@giasone:~$ gpg --decrypt test.txt.gpg
[...]
gpg: encrypted with 2048-bit ELG-E key, ID D801A8E2, created 2009-10-29
      "Luca Saba (La mia prima coppia di chiavi) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>"
Prova di file di testo
gpg: Firma fatta da ven 30 ott 2009 12:35:24 CET usando DSA ID chiave 61117C3A
gpg: Good signature from "Luca Saba (La mia prima coppia di chiavi)<Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>"
luca@giasone:~$

A questo punto non ci rimane che iniziare a collezionare le chiavi dei nostri conoscenti e provare a firmare e crittografare i nostri messaggi.
Ecco come fare, se si è a conoscenza dell'id della chiave:

luca@giasone:~$ gpg --keyserver pgp.mit.edu --recv-keys AF82BF80
gpg: richiesta della chiave AF82BF80 dal server hkp pgp.mit.edu
gpg: chiave AF82BF80: chiave pubblica «Luca Saba » importata
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: il prossimo controllo del trustdb sarà fatto il 2010-10-29
gpg: Numero totale esaminato: 1
gpg:               importate: 1
luca@giasone:~$

A questo punto la mia chiave pubblica è stata importata in GnuPG. Potete verificarlo con il comando precedetemente utilizzato 'gpg --list-keys'.

Due ultime note. Potete cercare le chiavi dei vostri destinatari in alcuni server pubblici. Quelli normalmente più utilizzati sono:

  • http://pgp.mit.edu:11371
  • http://keyserver.ubuntu.com:11371
  • http://keyserver.pgp.com

Potete registrare la chiave pubblica che avete generato leggendo questo articolo (in questo modo chiunque potrà inviarvi testi crittografati). Per fare ciò, alcune raccomandazioni:

  • assicuratevi che la chiave sia associata ad un indirizzo mail valido
  • assicuratevi di dare un tempo di scadenza alla vostra chiave (2, 3 anni sono più che sufficienti)

Se avete fatto tutto ciò, potete inviare la vostra chiave al server, nel seguente modo:

luca@giasone:~$ gpg --list-keys
/home/luca/.gnupg/pubring.gpg
-----------------------------
pub   1024D/61117C3A 2009-10-29 [scadenza: 2010-10-29]
uid                  Luca Saba (La mia prima coppia di chiavi) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>
sub   2048g/D801A8E2 2009-10-29 [scadenza: 2010-10-29]
luca@giasone:~$ gpg --keyserver pgp.mit.edu --send-key 61117C3A

Per prima cosa mi sono fatto dare la lista delle mie chiavi (riga 1). Ho quindi letto l'id della mia chiave (riga 4, l'id è il numero subito dopo il segno di '/'). A questo punto ho inviato la chiave passando come argomento il suo id (riga 7, --send-key 61117C3A).

E il gioco è fatto.

Letto 7107 volte Ultima modifica il Sabato, 14 Dicembre 2013 19:27