Questo documento fornisce una guida per effettuare le operazioni di base necessarie all'utilizzo, gestione e manutenzione delle chiavi GPG.
Per tutto il resto fare riferimento alla documentazione disponibile on-line sulle decine di siti specializzati. Potete partire da [**qui**][1], da [**qui**][2] per qualche info su come funziona la crittografia a chiave pubblica, o da [**qui**][3] per la lista completa dei comandi.
Per farsi un'idea del perché, a volte, è consigliabile cifrare le comunicazioni digitali, consigliamo la lettura della nostra guida di autodifesa digitale disponibile [**qui**][4].
**Alice** e **Barbara** sono due amiche/compagne che condividono esperienze di vita e di lotta. Barbara deve trasferirsi in un'altra città per motivi di lavoro, così decidono di organizzarsi per poter comunicare anche a distanza in modo sicuro.
Alice consegna a Barbara una cassetta aperta e vuota, che chiamiamo **cassetta_A** (immagina una piccola cassaforte a prova di scasso che si chiuda automaticamente chiudendo lo sportello) tenendosi però la chiave per aprirla che chiameremo **chiave_A** e, contemporaneamente, riceve da Barbara una cassetta aperta e vuota simile alla sua, che chiamiamo **cassetta_B**, la cui chiave che chiameremo **chiave_B** resta a Barbara.
Barbara vuole mandare un messaggio riservato ad Alice, prende la **cassetta_A** (quela che le ha dato Alice) scrive il messaggio su un foglietto, lo mette nella cassetta e chiude lo sportello.
Barbara si incontra con un'amica, che chiameremo **Claudia**, che si deve recare nella città dove vive Alice, le affida la cassetta chiedendole di consegnarla ad Alice, sicura del fatto che in nessun modo né Claudia né nessun altro, potrà aprirla e leggerne il contenuto.
Quando Alice riceve da Claudia la **cassetta_A**, la apre con la sua **chiave_A** che aveva conservato (e che ha solo lei) e può così leggere il messaggio di Barbara.
Questo esempio, che funzionerebbe anche nella vita reale ma con qualche complicazione dovuta all'andare avanti e indietro delle cassette, funziona in realtà benissimo (sin dagli anni '70) nella sua implementazione digitale.
Chiunque stia nel mezzo del percorso che fa la mail tra Alice e Barbara (normalmente uno o più service provider) non può, non avendo la chiave privata di Barbara, leggerne il contenuto.
- Utilizza sempre **PASSWORD ROBUSTE** [**-▸**][6] per gli account di posta (e non solo) e **passphrases altrettanto robuste** per proteggere le chiavi.
- Ricordati che se usate le funzioni qui descritte su una rete telnet [**-▸**][7], per un malintenzionato sarà relativamente facile spiare i tuoi messaggi!
- Fatti SUBITO almeno una copia (più avanti capirai come farlo) delle chiavi (pub e sec) e del certificato di revoca in un posto sicuro, diverso dal pc che normalmente usi.
- Visto che non è semplice per tutti, memorizzare differenti password e passphrases, ti consiglio di utilizzare un password manager (ad es. keepassxc [**-▸**][8]).
Negli esempi che seguono, immagina che la tua mail sia mia@mail.org e che hai un'amica che si chiama Lea con la quale vuoi comunicare in modo riservato. La mail di Lea è lea@mail.org.
Lea, che è una tosta (e sta sempre un passo avanti a noi) ha già una chiave GPG collegata alla sua mail, la cui fingerprint (cioè l'impronta digitale della sua chiave) è "5678EFGH5678EFGH5678EFGH5678EFGH5678EFGH".
Sarà richiesto di selezionare un tipo di crittografia da un menu. A meno che non si abbia una buona ragione per non farlo, digitare '**1**' e premere Invio. L'opzione **1** di default, attiva la generazione di sottochiavi RSA che permettono non solo di firmare/crittografare le e-mail, ma anche i files.
È necessario inoltre, scegliere una lunghezza in bit (tra 1024 e 4096) per le chiavi di crittografia, o premendo **Invio** si accetta l'impostazione predefinita visualizzata. Più la chiave è lunga, più è difficile da decifrare in caso di tentativo di attacco.
È necessario indicare la durata della chiave. Se si imposta '**0**' avrà durata illimitata. Se si imposta ad es. '**1y**' durerà un anno. Leggere le indicazioni e scegliere la durata che si desidera. Confermare la scelta con '**Y**'.
Se condividiamo il pc con altre persone o semplicemente perché questo ci fa dormire più tranquilli, possiamo cambiare i permessi di accesso al file del certificato di revoca impedendone, di fatto, l'utilizzo ad altri utenti mediante il comando chmod [**-▸**][9]
**Attenzione**: la chiave privata/segreta dobbiamo averla solo noi (non va data **MAI** a nessunx) e **non deve essere pubblicata**. Deve essere conservata in modo sicuro come la passphrase, ad esempio su un dispositivo (HD o chiavetta) crittografato.
Inoltre è una buona regola averne più di una copia, su dispositivi (**sicuri**) diversi conservati in luoghi diversi.
#### 4.4.2 - Se invece dobbiamo cercarla su un key-server remoto (ce ne sono tanti qui ne citiamo solo uno come esempio) utilizziamo il suo indirizzo mail associato alla chiave
Ciò può essere fatto di persona (consigliato), per telefono o attraverso un qualsiasi altro mezzo con il quale sia possibile garantire che si sta comunicando con il vero possessore della chiave.
Se l'impronta digitale è la stessa che il possessore della chiave detiene, allora si può essere sicuri della sua autenticità.
Ora che Lea può avere la nostra chiave pubblica (perché le abbiamo passato il file "mia.key" o perché se l'è procurata da un key-server remoto) possiamo iniziare a scambiarci mail in modo sicuro, ma come?
Il modo più semplice è quello di utilizzarle tramite un client di posta tipo **Thunderbird** [**-▸**][11] (che richiede l'installazione del add-on **Enigmail** [**-▸**][12]), o **Evolution** [**-▸**][13].
In entrambi i casi questi strumenti hanno già nei loro menu, le funzioni che ci permettono di firmare e/o cifrare le mail che inviamo e decifrare quelle che riceviamo, ovviamente solo se abbiamo nel nostro portachiavi le chiavi pubbliche dei nostri contatti e la nostra chiave privata.
Se usate **Thunderbird + Enigmail** avrete una voce "Enigmail" nella barra del Menu con tutte le opzioni disponibili (firmare/crittografare un messaggio, allegarvi la vostra chiave pubblica più altre funzioni per la generazione e la gestione delle chiavi).
Se usate **Evolution** quando componete un messaggio, cliccando sul menu "Opzioni" avrete la possibilità di firmarlo/cifrarlo, mentre quando ricevete un messaggio cifrato avrete la possibilità di decifrarlo.
Il loro utilizzo è comunque molto semplice ed intuitivo, quindi non stiamo a dilungarci troppo. Per una guida più completa per Thunderbird + Enigmail vedi [**-▸**][14], per Evolution vedi [**-▸**][15].
e permette di eseguire con l'ausilio di un'interfaccia grafica, le operazioni più comuni compresa la sincronizzazione del proprio keyring (il portachiavi) con i key-server remoti.
Periodicamente, è possibile chiedere a GPG di controllare le chiavi in uso rispetto ad un key-server e di aggiornare le chiavi modificate. Lo si può fare ogni pochi mesi o quando si riceve una chiave da un nuovo contatto.
L'opzione --refresh-keys consente a GPG di eseguire il controllo. L'opzione --keyserver deve essere seguita dal key-server scelto. I key-server si sincronizzano tra loro periodicamente, pertanto la scelta di quale utilizzare non è così importante. Il key-server https://pgp.mit.edu è comunque sempre una buona scelta iniziale.
Quando abbiamo creato le chiavi GPG, le abbiamo associate ad un accont (indirizzo e-mail). Molti però possiedono più di un indirizzo e-mail, ad esempio: uno privato, uno per il lavoro e così via.
Per evitare di creare chiavi diverse per ogni indirizzo e poi dovrele gestire, è bene sapere che una chiave può essere associata a più indirizzi mail, vediamo come.
Ora sei sulla riga di comando GPG. Per aggiungere un'identità di posta, digitare '**adduid**' e premere **Invio**. Verrà quindi richiesto quanto segue:
La nuova identità viene considerata di default come '**non attendibile**'.
Visto che si tratta della **nostra** chiave e quindi ci possiamo fidare, si consiglia di digitare '**trust**' e selezionare '**final**' (premere '**5**' e premere '**Invio**').
Potremmo accorgerci, o anche solo avere il dubbio, che la nostra chiave sia stata compromessa. In questi casi è bene revocare la chiave affinché nessuno possa utilizzarla spacciandosi per noi.
Ricordiamoci che oltre alla nostra privacy, dobbiamo sempre pensare anche a **salvaguardare la rete di persone che ci ha dato fiducia**.
Una volta revocata la chiave localmente, è **necessario** inviare il certificato revocato a un keyserver, indipendentemente dal fatto che la chiave sia stata originariamente rilasciata in questo modo. La distribuzione tramite un server remoto consente ad altri utenti di rendersi rapidamente conto che la chiave è stata compromessa.
Può essere una buona regola anche informare della revoca la nostra rete di contatti.
Per diversi motivi, potremmo aver bisogno di spostare le nostre chiavi da un computer ad un altro. Per la chiave pubblica, non ci sono problemi, essendo appunto pubblica e da divulgare.
Spostare la chiave privata invece dovrebbe essere fatto senza lascire tracce della stessa sugli eventuali dispositivi (es. chiavetta usb) utilizzati per il trasferimento. **Evitare assolutamente** di far transitare la propria chiave privata su servizi di cloud-sharing, anche se gestiti da persone o gruppi di cui ci fidiamo.
Il metodo descritto consente di esportare insieme chiavi pubbliche e private, in modo che possano essere facilmente importate e con il minimo di dati segreti scritti sul dispositivo utilizzato per il trasferimento.
#### 6.6.3 - Ora, in un solo passaggio, esporteremo la chiave segreta, la combineremo in un file con la chiave pubblica, e la codificheremo per il trasferimento
Sarà richiesto di inserire una passphrase, ovvero la passphrase specifica per questa crittografia **temporanea** per il trasferimento. Quindi usa una buona passphrase per la sicurezza, e **ricordala!**
Ora trasferisci il file {lemiechiavi}.asc nel nuovo computer o da qualsiasi altra parte.
Dal momento che il file è crittografato, il trasferimento si può tecnicamente fare anche via internet, ma se non è proprio necessario, meglio farlo tramite un hard-disk esterno o chiavetta usb.
Pensiamo di voler crittografare un file che contiene informazioni riservate ed inviarlo ad un altra persona (es. la solita Lea). Il file, nell'esempio, si chiama {prova.txt}
Nell'esempio, vogliamo crittografare il file e vogliamo inviarlo alla nostra amica Lea.
L'opzione '--encrypt' consente a gpg di crittografare il file, mentre l'opzione '--sign' le consente di firmare il file con i dettagli. L'opzione '--armor' consente a gpg di creare un file ASCII. L'opzione '-r' (destinatario) deve essere seguita dall'indirizzo e-mail della persona a cui si sta inviando il file.
Il file viene generato con lo stesso nome dell'originale, ma con '.asc' aggiunto come ulteriore estenzione al nome del file. Diamo un'occhiata a cosa contiene.
Il file è del tutto illeggibile e può essere decrittografato solo da un utente che possiede sia la tua chiave pubblica che la chiave privata di Lea (quindi solo da lei). Ora possiamo inviare il file a Lea fiduciosi che nessun altro possa decifrarlo, perchè solo Lea possiede, oltre alla nostra chiave pubblica, la sua chiave privata.
Lea ci ha inviato una risposta. Si trova in un file crittografato denominato {testo.asc}. Possiamo decrittografarlo molto facilmente utilizzando l'opzione decrypt. L'output verrà reindirizzato in un altro file chiamato {messaggio.txt}.