Project

General

Profile

UsoDiOpenPGPCard » History » Version 22

Simone Piccardi, 11/04/2016 04:48 PM

1 1 Elena Grandi
h1. Uso di OpenPGP Card
2
3 2 Elena Grandi
L'"OpenPGP Card":https://en.wikipedia.org/wiki/OpenPGP_card è una smartcard sulla quale si possono salvare in modo sicuro ed usare le sottochiavi segrete usate da GnuPG per crittografia, firma ed anche autenticazione; ne esistono versioni tradizionali, oppure implementate in un dispositivo USB. In ogni caso si possono caricare nuove chiavi sulla scheda, ma non si possono estrarre (per via software) quelle salvate ed è la scheda stessa ad effettuare le operazioni crittografiche.
4 1 Elena Grandi
5 2 Elena Grandi
L'obiettivo che si vuole ottenere è di non avere materiale crittografico segreto sui computer, in modo che un attaccante remoto non possa impossessarsene, mantenendo comunque la comodità di poter usare le chiavi sulla stessa macchina di uso comune. Per farlo si dovrà avere una chiave principale di lunga durata conservata offline ed usata solo saltuariamente per operazioni di gestione della chiave stessa (creazione di nuove sottochiavi, modifica delle scadenze, firma di altre chiavi per la _Web Of Trust_) e delle sottochiavi da usare quotidianamente, conservate sulla card.
6
7 19 Elena Grandi
L'OpenPGP Card permette di caricare tre sottochiavi con finalità di crittografia, firma ed autenticazione: le prime due si usano normalmente tramite GnuPG, la terza può essere usata per l'autenticazione ssh tramite gpg-agent.
8 2 Elena Grandi
9 3 Elena Grandi
h2. prerequisiti
10
11 2 Elena Grandi
Tutte le versioni di "GnuPG":https://gnupg.org/ supportano l'uso di base delle OpenPGP Card, ma per meglio sfruttarne le capacità è meglio usare la versione 2.1 (_modern_), specialmente in fase di creazione della chiave e delle sue sottochiavi.
12 1 Elena Grandi
13 20 Elena Grandi
In questa guida si da per scontato l'uso di GnuPG 2.1 installato come eseguibile @gpg@, come ad esempio su Debian da stretch in poi; versioni precedenti o altre distribuzioni potrebbero usare un eseguibile @gpg2@ o altre varianti.
14
15 3 Elena Grandi
Nel caso si voglia usare poi la Card per autenticazione ssh con versioni precedenti di GnuPG è necessario installare anche gpg-agent (in 2.1 usato di default).
16
17
Per il supporto della Card è poi necessario installare "PC/SC Lite":http://pcsclite.alioth.debian.org/.
18
19 21 Simone Piccardi
Sotto distribuzioni Debian o derivate (che già preinstallano @gnupg@ e @openssh-client@) i pacchetti da installare sono quindi:
20 3 Elena Grandi
21 1 Elena Grandi
<pre>
22 20 Elena Grandi
apt install pcscd gnupg-agent scdaemon
23 1 Elena Grandi
</pre>
24
25 21 Simone Piccardi
Si tenga presente che in alcuni casi l'accesso alla Card può richiedere versioni sufficientemente aggiornate della libereria, ad esempio con il lettore _O2 Micro OZ776_ è necessario usare una versione di @libccid@ sufficientemente recente (la versione 1.4.15 di Ubuntu Trusty/Mint 17 non funziona, la versione 1.4.22 di Xenial/Mint 18 si).
26
27 20 Elena Grandi
Si consiglia di svolgere le operazioni di creazione di chiavi e tutto ciò che coinvolga la chiave principale su un sistema pulito, ad esempio una distribuzione live, meglio se scollegato da internet, e di configurare poi le macchine di uso quotidiano secondo quanto descritto nella sezione "Configurazione su una nuova macchina".
28 2 Elena Grandi
29
h2. creazione della chiave
30
31 4 Elena Grandi
Innanzitutto bisogna creare una chiave principale che verrà associata alla nostra identità; questa dovrà essere da almeno 4096 bit per garantirle sufficiente longevità, dato che la sua sostituzione comporta un nuovo ingresso nella Web of Trust.
32
33
Ovviamente, se si ha già una chiave gpg da 4096 bit si può saltare questo passaggio ed usare quella.
34
35
Innanzitutto, configurare gpg per l'uso di SHA2 aggiungendo le seguenti righe a @~/.gnupg/gpg.conf@:
36
37
<pre>
38
personal-digest-preferences SHA256
39
cert-digest-algo SHA256
40
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
41
</pre>
42
43
Quindi generare una nuova chiave: notare l'uso di gpg versione 2.1 e la dimensione a 4096 bit (per il resto si sono accettate le scelte di default oppure inseriti i propri dati).
44
45
<pre>
46
$ gpg --full-gen-key 
47
gpg (GnuPG) 2.1.15; Copyright (C) 2016 Free Software Foundation, Inc.
48
This is free software: you are free to change and redistribute it.
49
There is NO WARRANTY, to the extent permitted by law.
50
51
Please select what kind of key you want:
52
   (1) RSA and RSA (default)
53
   (2) DSA and Elgamal
54
   (3) DSA (sign only)
55
   (4) RSA (sign only)
56
Your selection? 1
57
RSA keys may be between 1024 and 4096 bits long.
58
What keysize do you want? (2048) 4096
59
Requested keysize is 4096 bits
60
Please specify how long the key should be valid.
61
         0 = key does not expire
62
      <n>  = key expires in n days
63
      <n>w = key expires in n weeks
64
      <n>m = key expires in n months
65
      <n>y = key expires in n years
66
Key is valid for? (0) 
67
Key does not expire at all
68
Is this correct? (y/N) y
69
70
GnuPG needs to construct a user ID to identify your key.
71
72
Real name: Random User
73
Email address: random@example.org
74
Comment: 
75
You selected this USER-ID:
76
    "Random User <random@example.org>"
77
78
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
79
We need to generate a lot of random bytes. It is a good idea to perform
80
some other action (type on the keyboard, move the mouse, utilize the
81
disks) during the prime generation; this gives the random number
82
generator a better chance to gain enough entropy.
83
gpg: key 3E0EE5BAC50DF7C1 marked as ultimately trusted
84
gpg: directory '/home/random/.gnupg/openpgp-revocs.d' created
85
gpg: revocation certificate stored as '/home/valhalla/.gnupg/openpgp-revocs.d/19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1.rev'
86
public and secret key created and signed.
87
88
pub   rsa4096 2016-10-19 [SC]
89
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
90
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
91
uid                      Random User <random@example.org>
92
sub   rsa4096 2016-10-19 [E]
93
</pre>
94
95 2 Elena Grandi
h2. creazione delle sottochiavi
96
97 5 Elena Grandi
Questo è il punto in cui è particolarmente importante l'uso di GnuPG 2.1, che rende molto più semplice la creazione di una chiave per l'autenticazione.
98
99
Molte delle OpenPGP Card disponibili sul mercato supportano chiavi al massimo a 2048 bit: questo non è un grosso problema dato che al momento sono considerate ancora ragionevolmente sicure, ed una loro eventuale sostituzione in futuro non è particolarmente onerosa (oltre ovviamente alla necessità di usare una Card o un dispositivo diverso).
100
101
Per generare le sottochiavi necessarie, si entra in modalità di modifica con l'opzione @--expert@ che abilita la creazione di chiavi di autenticazione.
102
103
<pre>
104
$ gpg --expert --edit-key 3E0EE5BAC50DF7C1
105
gpg (GnuPG) 2.1.15; Copyright (C) 2016 Free Software Foundation, Inc.
106
This is free software: you are free to change and redistribute it.
107
There is NO WARRANTY, to the extent permitted by law.
108
109
Secret key is available.
110
111
sec  rsa4096/3E0EE5BAC50DF7C1
112
     created: 2016-10-19  expires: never       usage: SC  
113
     trust: ultimate      validity: ultimate
114
ssb  rsa4096/F303978FEBB6E995
115
     created: 2016-10-19  expires: never       usage: E   
116
[ultimate] (1). Random User <random@example.org>
117
</pre>
118
119 22 Simone Piccardi
Quindi si crea prima una normale sottochiave di firma (opzione 4), alla selezione verrà chiesta (due volte) una passphrase per la nuova sottochiave ed anche la passphrase per la chiave principale:
120 5 Elena Grandi
121
<pre>
122
gpg> addkey 
123
Please select what kind of key you want:
124
   (3) DSA (sign only)
125
   (4) RSA (sign only)
126
   (5) Elgamal (encrypt only)
127
   (6) RSA (encrypt only)
128
   (7) DSA (set your own capabilities)
129
   (8) RSA (set your own capabilities)
130
  (10) ECC (sign only)
131
  (11) ECC (set your own capabilities)
132
  (12) ECC (encrypt only)
133
  (13) Existing key
134
Your selection? 4
135
RSA keys may be between 1024 and 4096 bits long.
136
What keysize do you want? (2048) 
137
Requested keysize is 2048 bits
138
Please specify how long the key should be valid.
139
         0 = key does not expire
140
      <n>  = key expires in n days
141
      <n>w = key expires in n weeks
142
      <n>m = key expires in n months
143
      <n>y = key expires in n years
144
Key is valid for? (0) 1y
145
Key expires at Thu 19 Oct 2017 12:15:49 CEST
146
Is this correct? (y/N) y
147
Really create? (y/N) y
148
We need to generate a lot of random bytes. It is a good idea to perform
149
some other action (type on the keyboard, move the mouse, utilize the
150
disks) during the prime generation; this gives the random number
151
generator a better chance to gain enough entropy.
152
153
sec  rsa4096/3E0EE5BAC50DF7C1
154
     created: 2016-10-19  expires: never       usage: SC  
155
     trust: ultimate      validity: ultimate
156
ssb  rsa4096/F303978FEBB6E995
157
     created: 2016-10-19  expires: never       usage: E   
158
ssb  rsa2048/40A2ADF0FE9E4620
159
     created: 2016-10-19  expires: 2017-10-19  usage: S   
160
[ultimate] (1). Random User <random@example.org>
161
162
</pre>
163
164 22 Simone Piccardi
Poi occorre creare una normale sottochiave per la crittografia (opzione 6), anche in questo caso verrà chiesta due volte la passphrase per la nuova chiave, ma avendola già data prima non sarà richiesta quella della chiave principale:
165 5 Elena Grandi
166
<pre>
167
gpg> addkey 
168
Please select what kind of key you want:
169
   (3) DSA (sign only)
170
   (4) RSA (sign only)
171
   (5) Elgamal (encrypt only)
172
   (6) RSA (encrypt only)
173
   (7) DSA (set your own capabilities)
174
   (8) RSA (set your own capabilities)
175
  (10) ECC (sign only)
176
  (11) ECC (set your own capabilities)
177
  (12) ECC (encrypt only)
178
  (13) Existing key
179
Your selection? 6
180
RSA keys may be between 1024 and 4096 bits long.
181
What keysize do you want? (2048) 
182
Requested keysize is 2048 bits
183
Please specify how long the key should be valid.
184
         0 = key does not expire
185
      <n>  = key expires in n days
186
      <n>w = key expires in n weeks
187
      <n>m = key expires in n months
188
      <n>y = key expires in n years
189
Key is valid for? (0) 1y
190
Key expires at Thu 19 Oct 2017 12:18:16 CEST
191
Is this correct? (y/N) y
192
Really create? (y/N) y
193
We need to generate a lot of random bytes. It is a good idea to perform
194
some other action (type on the keyboard, move the mouse, utilize the
195
disks) during the prime generation; this gives the random number
196
generator a better chance to gain enough entropy.
197
198
sec  rsa4096/3E0EE5BAC50DF7C1
199
     created: 2016-10-19  expires: never       usage: SC  
200
     trust: ultimate      validity: ultimate
201
ssb  rsa4096/F303978FEBB6E995
202
     created: 2016-10-19  expires: never       usage: E   
203
ssb  rsa2048/40A2ADF0FE9E4620
204
     created: 2016-10-19  expires: 2017-10-19  usage: S   
205
ssb  rsa2048/ED9BBD7B3BFF900F
206
     created: 2016-10-19  expires: 2017-10-19  usage: E   
207
[ultimate] (1). Random User <random@example.org>
208
</pre>
209
210 22 Simone Piccardi
Ed infine una sottochiave per l'autenticazione, selezionando l'opzione 8, togliendo le capacità di firma e crittografia e mettendo quella di autenticazione (anche qui occorrerà specificare una passphrase).
211 5 Elena Grandi
212
<pre>
213
gpg> addkey 
214
Please select what kind of key you want:
215
   (3) DSA (sign only)
216
   (4) RSA (sign only)
217
   (5) Elgamal (encrypt only)
218
   (6) RSA (encrypt only)
219
   (7) DSA (set your own capabilities)
220
   (8) RSA (set your own capabilities)
221
  (10) ECC (sign only)
222
  (11) ECC (set your own capabilities)
223
  (12) ECC (encrypt only)
224
  (13) Existing key
225
Your selection? 8
226
227
Possible actions for a RSA key: Sign Encrypt Authenticate 
228
Current allowed actions: Sign Encrypt 
229
230
   (S) Toggle the sign capability
231
   (E) Toggle the encrypt capability
232
   (A) Toggle the authenticate capability
233
   (Q) Finished
234
235
Your selection? s
236
237
Possible actions for a RSA key: Sign Encrypt Authenticate 
238
Current allowed actions: Encrypt 
239
240
   (S) Toggle the sign capability
241
   (E) Toggle the encrypt capability
242
   (A) Toggle the authenticate capability
243
   (Q) Finished
244
245
Your selection? e
246
247
Possible actions for a RSA key: Sign Encrypt Authenticate 
248
Current allowed actions: 
249
250
   (S) Toggle the sign capability
251
   (E) Toggle the encrypt capability
252
   (A) Toggle the authenticate capability
253
   (Q) Finished
254
255
Your selection? a
256
257
Possible actions for a RSA key: Sign Encrypt Authenticate 
258
Current allowed actions: Authenticate 
259
260
   (S) Toggle the sign capability
261
   (E) Toggle the encrypt capability
262
   (A) Toggle the authenticate capability
263
   (Q) Finished
264
265
Your selection? q
266
RSA keys may be between 1024 and 4096 bits long.
267
What keysize do you want? (2048) 
268
Requested keysize is 2048 bits
269
Please specify how long the key should be valid.
270
         0 = key does not expire
271
      <n>  = key expires in n days
272
      <n>w = key expires in n weeks
273
      <n>m = key expires in n months
274
      <n>y = key expires in n years
275
Key is valid for? (0) 1y
276
Key expires at Thu 19 Oct 2017 12:24:56 CEST
277
Is this correct? (y/N) y
278
Really create? (y/N) y
279
We need to generate a lot of random bytes. It is a good idea to perform
280
some other action (type on the keyboard, move the mouse, utilize the
281
disks) during the prime generation; this gives the random number
282
generator a better chance to gain enough entropy.
283
284
sec  rsa4096/3E0EE5BAC50DF7C1
285
     created: 2016-10-19  expires: never       usage: SC  
286
     trust: ultimate      validity: ultimate
287
ssb  rsa4096/F303978FEBB6E995
288
     created: 2016-10-19  expires: never       usage: E   
289
ssb  rsa2048/40A2ADF0FE9E4620
290
     created: 2016-10-19  expires: 2017-10-19  usage: S   
291
ssb  rsa2048/ED9BBD7B3BFF900F
292
     created: 2016-10-19  expires: 2017-10-19  usage: E   
293
ssb  rsa2048/5F89B668295AE797
294
     created: 2016-10-19  expires: 2017-10-19  usage: A   
295
[ultimate] (1). Random User <random@example.org>
296
</pre>
297
298
Si può quindi uscire dalla modalità di modifica chiave, salvando le modifiche.
299
300
<pre>
301
gpg> save
302
</pre>
303
304 7 Elena Grandi
h2. salvataggio su supporto esterno
305
306 8 Elena Grandi
A questo punto la chiave è ancora gestita nel modo tradizionale, su hard disk. Questo è il momento di salvarne un backup e di farne una copia su chiavetta USB da usare in futuro per le modifiche della chiave.
307
308 9 Elena Grandi
Per il backup ci sono vari metodi, da una semplice e poco efficiente copia di tutta la @~/.gnupg@ su un ulteriore supporto all'uso di "paperkey":http://www.jabberwocky.com/software/paperkey/ per salvare una copia su carta; l'importante è che venga fatto e custodito in un luogo sicuro, anche se magari remoto (cassetta di sicurezza).
309 8 Elena Grandi
310 22 Simone Piccardi
Per avere una copia della chiave principale da usare sporadicamente, invece, è necessario copiare l'intera @~/.gnupg@ su una chiavetta USB o simili; una volta fatta la copia verificare che contenga quanto dovuto con:
311 9 Elena Grandi
312
<pre>
313
$ gpg --homedir indirizzo/della/chiavetta/gnupg --list-secret-keys
314
indirizzo/della/chiavetta/gnupg
315
pubring.gpg
316
---------------------------------
317
sec   rsa4096 2016-10-19 [SC]
318
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
319
uid           [ultimate] Random User <random@example.org>
320
ssb   rsa4096 2016-10-19 [E]
321
ssb   rsa2048 2016-10-19 [S] [expires: 2017-10-19]
322
ssb   rsa2048 2016-10-19 [E] [expires: 2017-10-19]
323
ssb   rsa2048 2016-10-19 [A] [expires: 2017-10-19]
324
</pre>
325
326
smontare la chiavetta e riporla in un luogo sicuro; la si userà nuovamente quando sarà necessario cambiare le date di scadenza delle sottochiavi, oppure firmare chiavi di altre persone, per la Web of Trust.
327 8 Elena Grandi
328 22 Simone Piccardi
h2. Spostamento delle chiavi sulla Card
329 2 Elena Grandi
330 10 Elena Grandi
Per il prossimo passaggio è estremamente importante assicurarsi di aver fatto le copie delle chiavi e sottochiavi private: in questo passaggio verranno trasferite sulla Card, dalla quale non possono più essere estratte, e cancellate dal disco.
331
332
Collegare il lettore al computer, inserire la Card e controllare che venga correttamente riconosciuta:
333
334
<pre>
335
$ gpg --card-status 
336
Reader ...........: ####
337
Application ID ...: ####
338
Version ..........: 2.0
339
Manufacturer .....: ####
340
Serial number ....: ####
341
Name of cardholder: [not set]
342
Language prefs ...: [not set]
343
Sex ..............: unspecified
344
URL of public key : [not set]
345
Login data .......: [not set]
346
Signature PIN ....: forced
347
Key attributes ...: rsa2048 rsa2048 rsa2048
348
Max. PIN lengths .: 127 127 127
349
PIN retry counter : 3 3 3
350
Signature counter : 0
351
Signature key ....: [none]
352
Encryption key....: [none]
353
Authentication key: [none]
354
General key info..: [none]
355
</pre>
356
357 22 Simone Piccardi
Se la Card è nuova occorre cambiare poi i PIN della chiave rispetto ai default:
358 12 Elena Grandi
359
<pre>
360
$ gpg --card-edit
361
Reader ...........: ####
362
Application ID ...: ####
363
Version ..........: 2.0
364
Manufacturer .....: ####
365
Serial number ....: ####
366
Name of cardholder: [not set]
367
Language prefs ...: [not set]
368
Sex ..............: unspecified
369
URL of public key : [not set]
370
Login data .......: [not set]
371
Signature PIN ....: forced
372
Key attributes ...: rsa2048 rsa2048 rsa2048
373
Max. PIN lengths .: 127 127 127
374
PIN retry counter : 3 3 3
375
Signature counter : 0
376
Signature key ....: [none]
377
Encryption key....: [none]
378
Authentication key: [none]
379
General key info..: [none]
380
381
gpg/card> admin
382
Admin commands are allowed
383
384
gpg/card> passwd
385
gpg: OpenPGP card no. #### detected
386
387
1 - change PIN
388
2 - unblock PIN
389
3 - change Admin PIN
390
4 - set the Reset Code
391 1 Elena Grandi
Q - quit
392 21 Simone Piccardi
393
Your selection? 1
394 1 Elena Grandi
</pre>
395 21 Simone Piccardi
396 22 Simone Piccardi
a questo punto verrà chiesto il PIN Standard corrente (il default della carta è 123456) e poi due volte quello nuovo (si faccia attenzione a mettere il PIN corretto, si hanno un massimo di tre errori possibili, dopo verrà bloccato, lo si può sbloccare solo con il PIN amministrativo). Quest'ultimo si cambia dal default selezionando ulteriormente:
397 21 Simone Piccardi
398
<pre>
399
PIN changed.
400
401
1 - change PIN
402
2 - unblock PIN
403 1 Elena Grandi
3 - change Admin PIN
404
4 - set the Reset Code
405
Q - quit
406 21 Simone Piccardi
407
Selezione? 3
408
PIN changed.
409
</pre>
410
411 22 Simone Piccardi
dando quello vecchio e ripetendo due volte quello nuovo; qui però tre errori nel dare quello corrente comporteranno l'impossibilità di modificarlo, rendendo di fatto non più recuperabile la Card senza un reset alle condizioni di fabbrica.
412 21 Simone Piccardi
413 22 Simone Piccardi
A questo menù si può accedere direttamente anche con il comando @gpg --change-pin@, e ad esempio per recuperare un PIN dimenticato si può selezionare l'opzione 2, _Unblock PIN_ nel qual caso verrà chiesto il PIN amministrativo, e si potrà impostare un nuovo PIN. 
414
415 10 Elena Grandi
Si può quindi passare a spostare le varie sottochiavi sulla Card, aprendo la modalità di editing della chiave:
416
417
<pre>
418
$ gpg --edit-key 3E0EE5BAC50DF7C1
419
gpg (GnuPG) 2.1.15; Copyright (C) 2016 Free Software Foundation, Inc.
420
This is free software: you are free to change and redistribute it.
421
There is NO WARRANTY, to the extent permitted by law.
422
423
Secret key is available.
424
425
sec  rsa4096/3E0EE5BAC50DF7C1
426
     created: 2016-10-19  expires: never       usage: SC  
427
     trust: ultimate      validity: ultimate
428
ssb  rsa4096/F303978FEBB6E995
429 1 Elena Grandi
     created: 2016-10-19  expires: never       usage: E   
430 10 Elena Grandi
ssb  rsa2048/40A2ADF0FE9E4620
431
     created: 2016-10-19  expires: 2017-10-19  usage: S   
432
ssb  rsa2048/ED9BBD7B3BFF900F
433
     created: 2016-10-19  expires: 2017-10-19  usage: E   
434
ssb  rsa2048/5F89B668295AE797
435
     created: 2016-10-19  expires: 2017-10-19  usage: A   
436
[ultimate] (1). Random User <random@example.org>
437
</pre>
438
439 22 Simone Piccardi
passando alla modalità di modifica delle chiavi private, con il comando @toggle@ che consente di selezionare le chiavi:
440 10 Elena Grandi
441
<pre>
442
gpg> toggle
443
444
sec  rsa4096/3E0EE5BAC50DF7C1
445
     created: 2016-10-19  expires: never       usage: SC  
446
     trust: ultimate      validity: ultimate
447 1 Elena Grandi
ssb  rsa4096/F303978FEBB6E995
448 10 Elena Grandi
     created: 2016-10-19  expires: never       usage: E   
449
ssb  rsa2048/40A2ADF0FE9E4620
450
     created: 2016-10-19  expires: 2017-10-19  usage: S   
451
ssb  rsa2048/ED9BBD7B3BFF900F
452
     created: 2016-10-19  expires: 2017-10-19  usage: E   
453
ssb  rsa2048/5F89B668295AE797
454
     created: 2016-10-19  expires: 2017-10-19  usage: A   
455
[ultimate] (1). Random User <random@example.org>
456
</pre>
457
458 22 Simone Piccardi
per trasferire una ad una le sottochiavi sulla Card andranno selezionate ed inserite, una volta usato @toggle@ il comando @key@ permette di selezionare/deselezionare le chiavi da trasferire con il comando @keytocard@; pertanto per trasferire la chiave di firma useremo i comandi:
459 10 Elena Grandi
460
<pre>
461
gpg> key 2
462
463
sec  rsa4096/3E0EE5BAC50DF7C1
464
     created: 2016-10-19  expires: never       usage: SC  
465
     trust: ultimate      validity: ultimate
466
ssb  rsa4096/F303978FEBB6E995
467
     created: 2016-10-19  expires: never       usage: E   
468
ssb* rsa2048/40A2ADF0FE9E4620
469 1 Elena Grandi
     created: 2016-10-19  expires: 2017-10-19  usage: S   
470 10 Elena Grandi
ssb  rsa2048/ED9BBD7B3BFF900F
471
     created: 2016-10-19  expires: 2017-10-19  usage: E   
472
ssb  rsa2048/5F89B668295AE797
473
     created: 2016-10-19  expires: 2017-10-19  usage: A   
474
[ultimate] (1). Random User <random@example.org>
475
476
gpg> keytocard
477
Please select where to store the key:
478
   (1) Signature key
479
   (3) Authentication key
480
Your selection? 1
481 22 Simone Piccardi
</pre>
482 10 Elena Grandi
483 22 Simone Piccardi
qui occorre selezionare il tipo di chiave e poi verrà chiesta la passphrase della chiave e poi proseguirà con:
484 10 Elena Grandi
485 22 Simone Piccardi
<pre>
486 10 Elena Grandi
sec  rsa4096/3E0EE5BAC50DF7C1
487
     created: 2016-10-19  expires: never       usage: SC  
488
     trust: ultimate      validity: ultimate
489
ssb  rsa4096/F303978FEBB6E995
490
     created: 2016-10-19  expires: never       usage: E   
491
ssb* rsa2048/40A2ADF0FE9E4620
492
     created: 2016-10-19  expires: 2017-10-19  usage: S   
493
ssb  rsa2048/ED9BBD7B3BFF900F
494
     created: 2016-10-19  expires: 2017-10-19  usage: E   
495
ssb  rsa2048/5F89B668295AE797
496
     created: 2016-10-19  expires: 2017-10-19  usage: A   
497
[ultimate] (1). Random User <random@example.org>
498
</pre>
499
500 22 Simone Piccardi
per trasferire quella di crittografia occorrerà deselezionare la chiave di firma e selezionare quella di autenticazione, e ripetere il comando @keytocard@:
501 10 Elena Grandi
502
<pre>
503
gpg> key 2
504
505
sec  rsa4096/3E0EE5BAC50DF7C1
506
     created: 2016-10-19  expires: never       usage: SC  
507
     trust: ultimate      validity: ultimate
508
ssb  rsa4096/F303978FEBB6E995
509
     created: 2016-10-19  expires: never       usage: E   
510
ssb  rsa2048/40A2ADF0FE9E4620
511
     created: 2016-10-19  expires: 2017-10-19  usage: S   
512
ssb  rsa2048/ED9BBD7B3BFF900F
513
     created: 2016-10-19  expires: 2017-10-19  usage: E   
514
ssb  rsa2048/5F89B668295AE797
515
     created: 2016-10-19  expires: 2017-10-19  usage: A   
516
[ultimate] (1). Random User <random@example.org>
517
518
gpg> key 3
519 1 Elena Grandi
520 10 Elena Grandi
sec  rsa4096/3E0EE5BAC50DF7C1
521 1 Elena Grandi
     created: 2016-10-19  expires: never       usage: SC  
522
     trust: ultimate      validity: ultimate
523
ssb  rsa4096/F303978FEBB6E995
524 10 Elena Grandi
     created: 2016-10-19  expires: never       usage: E   
525
ssb  rsa2048/40A2ADF0FE9E4620
526
     created: 2016-10-19  expires: 2017-10-19  usage: S   
527
ssb* rsa2048/ED9BBD7B3BFF900F
528
     created: 2016-10-19  expires: 2017-10-19  usage: E   
529
ssb  rsa2048/5F89B668295AE797
530
     created: 2016-10-19  expires: 2017-10-19  usage: A   
531
[ultimate] (1). Random User <random@example.org>
532
533
gpg> keytocard
534
Please select where to store the key:
535
   (2) Encryption key
536
Your selection? 2
537 22 Simone Piccardi
</pre>
538 10 Elena Grandi
539 22 Simone Piccardi
di nuovo si sceglie (stavolta solo chiave di cifratura) e verrà chiesta la passphrase della chiave scelta:
540
541
<pre>
542 10 Elena Grandi
sec  rsa4096/3E0EE5BAC50DF7C1
543
     created: 2016-10-19  expires: never       usage: SC  
544
     trust: ultimate      validity: ultimate
545
ssb  rsa4096/F303978FEBB6E995
546
     created: 2016-10-19  expires: never       usage: E   
547
ssb  rsa2048/40A2ADF0FE9E4620
548
     created: 2016-10-19  expires: 2017-10-19  usage: S   
549
ssb* rsa2048/ED9BBD7B3BFF900F
550
     created: 2016-10-19  expires: 2017-10-19  usage: E   
551
ssb  rsa2048/5F89B668295AE797
552
     created: 2016-10-19  expires: 2017-10-19  usage: A   
553
[ultimate] (1). Random User <random@example.org>
554
</pre>
555
556 22 Simone Piccardi
infine si ripeterà la procedura con la chiave di autenticazione:
557 10 Elena Grandi
558
<pre>
559
gpg> key 3
560
561
sec  rsa4096/3E0EE5BAC50DF7C1
562
     created: 2016-10-19  expires: never       usage: SC  
563
     trust: ultimate      validity: ultimate
564
ssb  rsa4096/F303978FEBB6E995
565
     created: 2016-10-19  expires: never       usage: E   
566
ssb  rsa2048/40A2ADF0FE9E4620
567
     created: 2016-10-19  expires: 2017-10-19  usage: S   
568
ssb  rsa2048/ED9BBD7B3BFF900F
569
     created: 2016-10-19  expires: 2017-10-19  usage: E   
570
ssb  rsa2048/5F89B668295AE797
571
     created: 2016-10-19  expires: 2017-10-19  usage: A   
572
[ultimate] (1). Random User <random@example.org>
573
574
gpg> key 4
575
576
sec  rsa4096/3E0EE5BAC50DF7C1
577
     created: 2016-10-19  expires: never       usage: SC  
578
     trust: ultimate      validity: ultimate
579
ssb  rsa4096/F303978FEBB6E995
580
     created: 2016-10-19  expires: never       usage: E   
581
ssb  rsa2048/40A2ADF0FE9E4620
582
     created: 2016-10-19  expires: 2017-10-19  usage: S   
583
ssb  rsa2048/ED9BBD7B3BFF900F
584
     created: 2016-10-19  expires: 2017-10-19  usage: E   
585
ssb* rsa2048/5F89B668295AE797
586
     created: 2016-10-19  expires: 2017-10-19  usage: A   
587
[ultimate] (1). Random User <random@example.org>
588
589
gpg> keytocard
590
Please select where to store the key:
591
   (3) Authentication key
592
Your selection? 3
593
594
sec  rsa4096/3E0EE5BAC50DF7C1
595
     created: 2016-10-19  expires: never       usage: SC  
596
     trust: ultimate      validity: ultimate
597
ssb  rsa4096/F303978FEBB6E995
598
     created: 2016-10-19  expires: never       usage: E   
599
ssb  rsa2048/40A2ADF0FE9E4620
600
     created: 2016-10-19  expires: 2017-10-19  usage: S   
601
ssb  rsa2048/ED9BBD7B3BFF900F
602
     created: 2016-10-19  expires: 2017-10-19  usage: E   
603
ssb* rsa2048/5F89B668295AE797
604
     created: 2016-10-19  expires: 2017-10-19  usage: A   
605
[ultimate] (1). Random User <random@example.org>
606
</pre>
607
608 11 Elena Grandi
Uscire salvando:
609
610
<pre>
611
gpg> save
612
</pre>
613
614
e a questo punto si può controllare che le sottochiavi sono sulla Card:
615
616
<pre>
617
$ gpg --card-status 
618
619
Reader ...........: ####
620
Application ID ...: ####
621
Version ..........: 2.0
622
Manufacturer .....: ####
623
Serial number ....: ####
624
Name of cardholder: [not set]
625
Language prefs ...: [not set]
626
Sex ..............: unspecified
627
URL of public key : [not set]
628
Login data .......: [not set]
629
Signature PIN ....: forced
630
Key attributes ...: rsa2048 rsa2048 rsa2048
631
Max. PIN lengths .: 127 127 127
632
PIN retry counter : 3 3 3
633
Signature counter : 0
634
Signature key ....: 2128 412C BC75 34F5 6305  9447 40A2 ADF0 FE9E 4620
635
      created ....: 2016-10-19 10:15:26
636
Encryption key....: 0B24 9C62 4A7D 19FE 7AB9  DCB3 ED9B BD7B 3BFF 900F
637
      created ....: 2016-10-19 10:17:57
638
Authentication key: 40E1 AE4A 7C13 FD8C C6EA  2C56 5F89 B668 295A E797
639
      created ....: 2016-10-19 10:24:14
640
General key info..: sub  rsa2048/40A2ADF0FE9E4620 2016-10-19 Random User <random@example.org>
641
sec   rsa4096/3E0EE5BAC50DF7C1  created: 2016-10-19  expires: never     
642
ssb   rsa4096/F303978FEBB6E995  created: 2016-10-19  expires: never     
643
ssb>  rsa2048/40A2ADF0FE9E4620  created: 2016-10-19  expires: 2017-10-19
644
                                card-no: ####
645
ssb>  rsa2048/ED9BBD7B3BFF900F  created: 2016-10-19  expires: 2017-10-19
646
                                card-no: ####
647
ssb>  rsa2048/5F89B668295AE797  created: 2016-10-19  expires: 2017-10-19
648 1 Elena Grandi
                                card-no: ####
649 11 Elena Grandi
</pre>
650
651
e non sono più presenti sul disco
652
653
<pre>
654
$ gpg --list-secret-keys 
655
/home/random/.gnupg/pubring.gpg
656
---------------------------------
657
sec   rsa4096 2016-10-19 [SC]
658
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
659
uid           [ultimate] Random User <random@example.org>
660
ssb   rsa4096 2016-10-19 [E]
661
ssb>  rsa2048 2016-10-19 [S] [expires: 2017-10-19]
662
ssb>  rsa2048 2016-10-19 [E] [expires: 2017-10-19]
663
ssb>  rsa2048 2016-10-19 [A] [expires: 2017-10-19]
664
</pre>
665
666
è però ancora presente la chiave principale.
667 10 Elena Grandi
668 22 Simone Piccardi
h2. Rimozione della chiave principale
669 13 Elena Grandi
670 14 Elena Grandi
Usando gpg 2.1 si possono rimuovere sottochiavi semplicemente cancellando file in @~/.gnupg/private-keys-v1.d/@; per scoprire quale file cancellare bisogna scoprire il _keygrip_ della chiave in questione:
671
672
<pre>
673
$ gpg --with-keygrip --list-key 3E0EE5BAC50DF7C1
674
pub   rsa4096 2016-10-19 [SC]
675
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
676
      Keygrip = 3BC042D5749A498AA2F904CF548C6B5DEDDF0600
677
uid           [ultimate] Random User <random@example.org>
678
sub   rsa4096 2016-10-19 [E]
679
      Keygrip = 0B2A484CBE52875A07F377A1A87F229C60277642
680
sub   rsa2048 2016-10-19 [S] [expires: 2017-10-19]
681
      Keygrip = AD155C5349ECE4D3725AD77269EC9E696A8191E9
682
sub   rsa2048 2016-10-19 [E] [expires: 2017-10-19]
683
      Keygrip = BFADD9EEDA2E38A77DCF925E58FFD4FFA2F50B7C
684
sub   rsa2048 2016-10-19 [A] [expires: 2017-10-19]
685
      Keygrip = D9F3249B5F583B7B4099B80DCAB343A9BA440BA8
686
</pre>
687
688 1 Elena Grandi
A questo punto è sufficiente rimuovere il file corrispondente alla chiave principale:
689 14 Elena Grandi
690
<pre>
691
$ rm ~/.gnupg/private-keys-v1.d/3BC042D5749A498AA2F904CF548C6B5DEDDF0600.key
692
</pre>
693
694
E si può verificare che la chiave sia stata effettivamente rimossa:
695 1 Elena Grandi
696
<pre>
697
$ gpg --list-secret-keys 3E0EE5BAC50DF7C1
698 14 Elena Grandi
sec#  rsa4096 2016-10-19 [SC]
699
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
700
uid           [ultimate] Random User <random@example.org>
701
ssb   rsa4096 2016-10-19 [E]
702
ssb>  rsa2048 2016-10-19 [S] [expires: 2017-10-19]
703
ssb>  rsa2048 2016-10-19 [E] [expires: 2017-10-19]
704
ssb>  rsa2048 2016-10-19 [A] [expires: 2017-10-19]
705
</pre>
706
707
dove @#@ dopo @sec@ indica che la chiave segreta non è presente sulla macchina in questione.
708
709 22 Simone Piccardi
h2. Configurazione di ssh
710 6 Elena Grandi
711 15 Elena Grandi
Per abilitare l'autenticazione ssh tramite chiave, aggiungere la seguente riga al file @~/.gnupg/gpg-agent.conf@:
712
713
<pre>
714
enable-ssh-support
715
</pre>
716
717 22 Simone Piccardi
Questo dovrebbe essere sufficiente per far sì che le connessioni SSH usino la chiave gpg per l'autenticazione.
718 15 Elena Grandi
719 22 Simone Piccardi
Il caso di non funzionamento più comune è che il @gpg-agent@ non stia effettivamente girando: dato che generalmente è lanciato alla bisogna da GnuPG, è sufficiente usare un comando @gpg@, ad esempio @gpg --card-status@ e da quel momento in poi l'agent sarà disponibile per @ssh@.
720 15 Elena Grandi
721 22 Simone Piccardi
Un secondo caso di non funzionamento potrebbe essere dovuto alla presenza di un altro agent per @ssh@: da Debian stretch in poi questo non dovrebbe essere presente, ma vecchie versioni o altre distribuzioni potrebbero lanciarlo ad esempio tramite degli script in @/etc/X11/Xsession.d@, da disattivare.
722 15 Elena Grandi
723 16 Elena Grandi
h2. Esportazione della chiave pubblica
724
725 17 Elena Grandi
Adesso che tutto è funzionante, si può inviare la propria chiave pubblica sui keyserver:
726
727
<pre>
728 1 Elena Grandi
$ gpg --send-keys 3E0EE5BAC50DF7C1
729 17 Elena Grandi
gpg: sending key 3E0EE5BAC50DF7C1 to [server]
730
</pre>
731
732
Nel caso non abbiate configurato un server in @~/.gnupg/dirmngr.conf@ (o in @~/.gnupg/gpg.conf@ ) lo si può specificare sulla riga di comando:
733 1 Elena Grandi
734 17 Elena Grandi
<pre>
735
$ gpg --keyserver keys.gnupg.net --send-keys 3E0EE5BAC50DF7C1
736
gpg: sending key 3E0EE5BAC50DF7C1 to hkp://keys.gnupg.net
737
</pre>
738
739
Se la chiave non deve essere pubblica, è comunque necessario estrarne la parte pubblica da importare su altre macchine dove si vuole usare la Card:
740
741
<pre>
742
gpg --armour --export 3E0EE5BAC50DF7C1 > 3E0EE5BAC50DF7C1.asc
743
</pre>
744
745 16 Elena Grandi
h2. Configurazione su una nuova macchina
746 6 Elena Grandi
747 18 Elena Grandi
Per poter usare la Card si una macchina diversa è necessario far conoscere a GnuPG la chiave: innanzitutto importando la chiave pubblica:
748
749
<pre>
750
gpg --recv-key 3E0EE5BAC50DF7C1
751
</pre>
752
753 22 Simone Piccardi
oppure:
754 18 Elena Grandi
755
<pre>
756
gpg --import 3E0EE5BAC50DF7C1.asc
757
</pre>
758
759 22 Simone Piccardi
e quindi far ricreare gli stub di chiavi dalle chiavi presenti sulla card, semplicemente con:
760 18 Elena Grandi
761
<pre>
762
$ gpg --card-status 
763
764
Reader ...........: ####
765
Application ID ...: ####
766
Version ..........: 2.0
767
Manufacturer .....: ####
768
Serial number ....: ####
769 1 Elena Grandi
Name of cardholder: [not set]
770
Language prefs ...: [not set]
771
Sex ..............: unspecified
772 18 Elena Grandi
URL of public key : [not set]
773
Login data .......: [not set]
774
Signature PIN ....: forced
775
Key attributes ...: rsa2048 rsa2048 rsa2048
776
Max. PIN lengths .: 127 127 127
777
PIN retry counter : 3 3 3
778
Signature counter : 0
779
Signature key ....: 2128 412C BC75 34F5 6305  9447 40A2 ADF0 FE9E 4620
780
      created ....: 2016-10-19 10:15:26
781
Encryption key....: 0B24 9C62 4A7D 19FE 7AB9  DCB3 ED9B BD7B 3BFF 900F
782
      created ....: 2016-10-19 10:17:57
783
Authentication key: 40E1 AE4A 7C13 FD8C C6EA  2C56 5F89 B668 295A E797
784
      created ....: 2016-10-19 10:24:14
785
General key info..: sub  rsa2048/40A2ADF0FE9E4620 2016-10-19 Random User <random@example.org>
786
sec   rsa4096/3E0EE5BAC50DF7C1  created: 2016-10-19  expires: never     
787
ssb   rsa4096/F303978FEBB6E995  created: 2016-10-19  expires: never     
788
ssb>  rsa2048/40A2ADF0FE9E4620  created: 2016-10-19  expires: 2017-10-19
789
                                card-no: ####
790
ssb>  rsa2048/ED9BBD7B3BFF900F  created: 2016-10-19  expires: 2017-10-19
791
                                card-no: ####
792
ssb>  rsa2048/5F89B668295AE797  created: 2016-10-19  expires: 2017-10-19
793
                                card-no: ####
794
</pre>
795
796 22 Simone Piccardi
h2. Configurazione su una nuova macchina, con versioni precedenti di gpg
797
798
da fare