24.3.1 Generazione delle chiavi

La prima operazione da compiere quando si vuol utilizzare il meccanismo di cifratura offerto da GPG è quella di generare una keypair, cioè una coppia di chiavi asimmetriche: una pubblica ed una privata. Questo è possibile per mezzo del comando

 
$ gpg --gen-key  
I dettagli relativi alla keypair da generare vengono richiesti da gpg per mezzo della riga di comando. Infatti, subito dopo aver impartito il precedente comando verrà visualizzato un messaggio analogo al seguente

 
gpg (GnuPG) 1.4.2.2; Copyright (C) 2005 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (5) RSA (sign only)
Your selection? _  

È possibile che venga visualizzato anche un messaggio relativo all’impossibilità di raggiungere la directory ~/.gnupg nella quale vengono memorizzate per default tutte le informazioni relative a gpg. Per ovviare tale problematica è sufficiente creare la directory ~/.gnupg.

Per default viene generata una keypair che permette di firmare e cifrare/decifrare messaggi con gli algoritmi DSA e ElGamal. Successivamente viene richiesta la lunghezza della chiave (più una chiave è lunga più difficile sarà decifrare i messaggi da parte di terzi non autorizzati a farlo) e quella di 1024 bit (default) dovrebbe essere sufficientemente sicura per la maggior parte degli utenti.

Una keypair DSA può avere una lunghezza massima di 1 024 bit, mentre una keypair ElGamal può avere anche lunghezza superiore. Quindi, scegliendo di generare chiavi con una lunghezza di 2 048 bit, la keypair DSA avrà una lunghezza di 1 024 bit, mentre la keypair ElGamal sarà effettivamente lunga 2 048 bit.

Quindi viene richiesto il periodo di validità della keypair, ovvero la sua scadenza che per default è indeterminata (la keypair generata sarà sempre considerata valida). Per aumentare la sicurezza della keypair può essere opportuno fissare la sua validità di un periodo di tempo limitato che può variare da un giorno ad un determinato numero di anni. Saranno infine richiesti altri dati, come il nome completo dell’utente a cui la keypair viene assegnata, il suo indirizzo e-mail ed un eventuale commento che serviranno come riferimento per la keypair che verrà generata. Verrà inoltre richiesta una passphrase, cioè una parola d’ordine, con la quale verrà cifrata la chiave privata all’interno del keyring: in questo modo soltanto l’utente che ha richiesto la generazione della keypair sarà in grado di vedere la propria chiave privata (nemmeno il superuser sarà in grado di vederla).

La generazione della keypair ha necessità di creare un bel po’ di byte casuali (per un computer la generazione di numeri casuali è impossibile: ci si deve accontentare di valori pseudocasuali) e pertanto è consigliabile che l’utente effettui, durante questa fase, un po’ di operazioni che aumentano l’entropia del sistema come premere dei tasti a caso sulla tastira, muovere il mouse, accedere al disco, ... in maniera da garantire una più efficace generazione di valori pseudocasuali, come indica il messaggio finale di gpg

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Di seguito veranno riprodotti sullo schermo una serie di caratteri ‘.’, ‘+’ ed altri inusuali caratteri che indicano l’operazione di produzione di byte casuali in corso.

Infine gpg visualizzerà un messaggio del tipo

public and secret key created and signed.
key marked as ultimately trusted.
pub   1024D/8D267827 2005-01-02 [expires: 2006-01-02]
  Key fingerprint = 6EEC 205F 3577 A542 9F65  2C03 9996 B5F3 8D26 7827
uid                  Daniele Masini (daniele) <d.masini@tiscali.it>
sub   1024g/73FAA737 2005-01-02 [expires: 2006-01-02]
per indicare che la keypair è stata generata.

In questo caso è stata scelta l’opzione di default riguardo al tipo di keypair da generare (DSA e ElGamal) e pertanto sono state generate due keypair: una primaria (pub), DSA, che serve soltanto per firmare i messaggi (sign only) ed una secondaria (sub), ElGamal, usata per operazioni di cifratura/decifratura.

Per ogni keypair vengono visualizzati il tipo (pub indica la keypair primaria e sub quelle secondarie), la relativa lunghezza (nel caso mostrato 1024 bit), la tipologia di algoritmo a cui si riferisce la keypair stessa (D indica una keypair DSA e g una ElGamal), l’identificatore univoco della keypair (ID) generato automaticamente da gpg (nel caso riportato 8D267827 per la keypair DSA e 73FAA737 per quella ElGamal), la data di creazione e quella di scadenza. Per la keypair primaria è riportato anche il riferimento dell’utente e dell’indirizzo e-mail al quale essa è associata (uid).

L’elenco delle chiavi pubbliche presenti nel proprio keyring può essere visualizzato con il comando

 
$ gpg --list-public-keys  
che visualizzerà delle indicazioni analoghe a quelle di seguito riportate

/home/daniele/.gnupg/pubring.gpg
-----------------------------------------
pub   1024D/8D267827 2005-01-02 [expires: 2006-01-02]
uid                  Daniele Masini (daniele) <d.masini@tiscali.it>
sub   1024g/73FAA737 2005-01-02 [expires: 2006-01-02]
Il percorso /home/daniele/.gnupg/pubring.gpg indica il file che rappresenta il keyring (portachiavi) contenente le chiavi pubbliche conosciute da GnuPG.

In maniera analoga è possibile visualizzare l’elenco delle hiavi private presenti nel proprio keyring, per mezzo del comando

 
$ gpg --list-secret-keys  
che visualizzerà delle indicazioni analoghe a quelle di seguito riportate

/home/daniele/.gnupg/secring.gpg
--------------------------------
sec   1024D/8D267827 2005-01-02 [expires: 2006-01-02]
uid                  Daniele Masini (daniele) <d.masini@tiscali.it>
ssb   1024g/73FAA737 2005-01-02