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  
che indica appunto a gpg di provvedere alla creazione di una keypair. I dettagli relativi alla keypair da generare vengono richiesti da gpg per mezzo della linea di comando. Infatti subito dopo aver impartito il comando verrà visualizzato un messaggio analogo al seguente

 
gpg (GnuPG) 1.2.6; Copyright (C) 2004 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)
   (4) RSA (sign only)
Your selection? _  

È possibile che venga visualizzato anche un messaggio relativo all’impossibilità di reaggiungere la directory ~/.gnupg nella uale vengono memorizzati per default tutte le informazioni relative a gpg. Per ovviare tale problematica è sufficiente interrompere l’esecuzione del comando (che comunque non andrebbe a buon fine) e creare appunto 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 1.024 bit (default) dovrebbe essere sufficientemente sicura per la maggior parte degli utenti. 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: 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 come muovere il mouse, accedere al disco, ... per 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.

Quindi gpg visualizzerà un messaggio del tipo

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

In realtà, 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 (sign only) ed una secondaria (sub) (ElGamal) usata per operazioni di cifratura/decifratura. Inoltre, una keypair DSA può avere una lunghezza massima di 1.024 bit, mentre una keypair ElGamal può avere anche lunghezza superiore. Quindi se si è scelto di generare keypair 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.

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

I riferimenti alle chiavi pubbliche relative alle keypair generate potranno essere visualizzati con il comando

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

/home/daniele/.gnupg/pubring.gpg
-----------------------------------------
                                                                        
                                                                        
pub  1024D/8D267827 2005-01-02 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.

Ad una chiave primaria pubblica è anche associata un’impronta digitale o fingerprint ... Essa è visualizzabile per mezzo del comando

 
$ gpg --fingerprint  
che mostrerà delle indicazioni analoghe a quelle di seguito riportate

/home/daniele/.gnupg/pubring.gpg
-----------------------------------------
pub  1024D/8D267827 2005-01-02 Daniele Masini (daniele) <d.masini@tiscali.it>
 Key fingerprint = 6EEC 205F 3577 A542 9F65  2C03 9996 B5F3 8D26 7827
sub  1024g/73FAA737 2005-01-02 [expires: 2006-01-02]