[GNU/Linux] Generare una chiave GPG


In questo articolo verrà presentato il software GPG/PGP, verrà spiegato come generare una chiave in un ambiente Linux e come registrarla su un key server. Questo è la prima parte di una serie di articoli che spiegano il funzionamento di GPG.

Parte 2: Criptare e decriptare un messaggio con GPG

Parte 3: Importare/esportare chiavi in GPG

Innanzitutto GPG è un software che implementa lo standard OpenPGP, e dunque utilizza un sistema di crittografia a chiave pubblica, anche detta crittografia asimmetrica. E’ possibile trovare una spiegazione dettagliata della crittografia asimmetrica su wikipedia:

http://it.wikipedia.org/wiki/Crittografia_asimmetrica

Fondamentalmente con questa tipologia di algoritmi entrambe le persone coinvolte nella comunicazione devono disporre di 2 chiavi, una pubblica e una privata. La chiave pubblica, come dice il nome, deve essere distribuita pubblicamente, mentre deve restare assolutamente segreta la chiave privata. Lo schema di funzionamento di un algoritmo asimmetrico è quello mostrato nella figura seguente.

Crittografia_asimmetrica_schema
Funzionamento di un algoritmo di crittografia asimmetrica.

GPG inoltre permette anche di firmare i messaggi, e il funzionamento può essere visto nella figura sotto.

digitalsignatures
Funzionamento di firma digitale unita alla cifratura del messaggio.

Dunque per poter inviare un messaggio questo deve essere firmato con la propria chiave privata e criptato con la chiave pubblica del destinatario. In generale, per poter usare correttamente GPG dobbiamo tenere sempre a mente questi schemi, altrimenti presto o tardi probabilmente faremo confusione con le chiavi.

Dopo aver installato il software nella propria distribuzione e aver visto come funziona un algoritmo di cifratura asimmetrico, è possibile passare alla creazione della chiave.

Generare una chiave GPG

Da shell dobbiamo digitare:

# gpg --gen-key

Dunque ci viene richiesto quale algoritmo di cifratura deve essere usato per la generazione della chiave:

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1

Possiamo scegliere tranquillamente l’opzione default.

Poi ci viene richiesta la dimensione della chiave:

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)

Direi che la dimensione base (2048) è più che sufficiente.

Poi ci viene richiesto il periodo di validità della chiave:

Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)

In questo caso se la chiave verrà usata per lo scambio di informazioni personali, possiamo tranquillamente non farla scadere mai, mentre se verrà usata per lo scambio di informazioni sensibili e/o professionali allora è bene impostare un intervallo temporale adeguato (1 anno, 6 mesi, 1 mese, …).

Poi sono richieste alcune informazioni personali:

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

—————————————
Real name: Paolino Paperino
Email address: paolino.paperino@paperopoli.com
Comment: My GPG key

quindi ci viene mostrato il riepilogo con le informazioni immesse:

You selected this USER-ID:
"Paolino Paperino (My GPG key) <paolino.paperino@paperopoli.com>"


Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

Se i dati inseriti sono corretti possiamo digitare “O” per proseguire.

Adesso ci verrà richiesta la passphrase, che dovrà essere sufficientemente robusta:

You need a Passphrase to protect your secret key.
Enter passphrase:

E’ importante, anzi fondamentale, scegliere la passphrase attentamente, perché da essa dipende la sicurezza della chiave GPG! Nel caso in cui dovessimo dimenticarcela non potremo più leggere/inviare messaggi cifrati, mentre se dovesse essere crackata lo scambio di testi cifrati con GPG non sarebbe più sicuro.

Dunque verrà generata la chiave GPG unica:

gpg: key 257BAFD8 marked as ultimately trusted
public and secret key created and signed.

————————————–
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u

————————————–
pub 2048R/257BAFD8 2012-09-05
Key fingerprint = A197 6014 A02F 6AFD 4007 5C02 FCB1 2276 257B AFD8
uid Paolino Paperino (My GPG key) <paolino.paperino@paperopoli.com>
sub 2048R/D156C60B 2012-09-05

Controllare la chiave

Dopo aver generato una nuova chiave, è buona cosa controllarne i dati:

# gpg --list-key
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/257BAFD8 2012-09-05
uid Paolino Paperino (My GPG key) <paolino.paperino@paperopoli.com>
sub 2048R/D156C60B 2012-09-05

dove possiamo vedere i dati fondamentali:

  • Key ID: 257BAFD8
  • Real Name: Paolino Paperino
  • E-mail: paolino.paperino@paperopoli.com
  • Expiration date: 2012-09-05

Generare una chiave pubblica

Il prossimo step è quello di salvare la chiave pubblica GPG per poi poterla inviare ad amici o colleghi, in modo che loro possano inviarci messaggi cifrati. Per esportare la chiave pubblica in un file la sintassi da usare è la seguente:

# gpg --armor --output GPG_public_key --export Real Name

oppure

# gpg --armor --output GPG_public_key --export E-mail

oppure

# gpg --armor --output GPG_public_key --export Key ID

E’ da notare che il risultato dei 3 comandi precedenti è identico.

Nel nostro esempio i comandi precedenti diventeranno:

# gpg --armor --output GPG_public_key --export Paolino Paperino
# gpg --armor --output GPG_public_key --export paolino.paperino@paperopoli.com
# gpg --armor --output GPG_public_key --export 257BAFD8

Inviare la chiave ad un key server

Infine, l’ultimo passo (facoltativo) è di inviare la chiave pubblica ad un key server, un server che raccoglie le chiavi pubbliche. Inserendo la chiave in un key server, chiunque voglia inviarci un messaggio cifrato non avrà il bisogno di chiedere a noi la chiave, ma potrà semplicemente cercarla sul server. Il comando da eseguire è questo:

# gpg --send-keys --keyserver url_server Key ID

Per il nostro esempio abbiamo:

# gpg --send-keys --keyserver hkp://subkeys.pgp.net 257BAFD8

Le altre parti sono disponibili a questi link:

Parte 2: Criptare e decriptare un messaggio con GPG

Parte 3: Importare/esportare chiavi in GPG

Matteo

Advertisements

2 risposte a “[GNU/Linux] Generare una chiave GPG

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...