Project

General

Profile

UsoDiOpenPGPCard » History » Version 24

Elena Grandi, 04/10/2017 11:30 AM

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 1 Elena Grandi
10 23 Simone Piccardi
h2.Prerequisiti
11
12 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.
13 1 Elena Grandi
14 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.
15
16 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).
17
18
Per il supporto della Card è poi necessario installare "PC/SC Lite":http://pcsclite.alioth.debian.org/.
19
20 21 Simone Piccardi
Sotto distribuzioni Debian o derivate (che già preinstallano @gnupg@ e @openssh-client@) i pacchetti da installare sono quindi:
21 3 Elena Grandi
22 1 Elena Grandi
<pre>
23 20 Elena Grandi
apt install pcscd gnupg-agent scdaemon
24 1 Elena Grandi
</pre>
25
26 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).
27
28 2 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".
29 1 Elena Grandi
30
31 23 Simone Piccardi
h2. Creazione della chiave
32
33 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.
34
35
Ovviamente, se si ha già una chiave gpg da 4096 bit si può saltare questo passaggio ed usare quella.
36
37
Innanzitutto, configurare gpg per l'uso di SHA2 aggiungendo le seguenti righe a @~/.gnupg/gpg.conf@:
38
39
<pre>
40
personal-digest-preferences SHA256
41
cert-digest-algo SHA256
42
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
43
</pre>
44
45
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).
46
47
<pre>
48
$ gpg --full-gen-key 
49
gpg (GnuPG) 2.1.15; Copyright (C) 2016 Free Software Foundation, Inc.
50
This is free software: you are free to change and redistribute it.
51
There is NO WARRANTY, to the extent permitted by law.
52
53
Please select what kind of key you want:
54
   (1) RSA and RSA (default)
55
   (2) DSA and Elgamal
56
   (3) DSA (sign only)
57
   (4) RSA (sign only)
58
Your selection? 1
59
RSA keys may be between 1024 and 4096 bits long.
60
What keysize do you want? (2048) 4096
61
Requested keysize is 4096 bits
62
Please specify how long the key should be valid.
63
         0 = key does not expire
64
      <n>  = key expires in n days
65
      <n>w = key expires in n weeks
66
      <n>m = key expires in n months
67
      <n>y = key expires in n years
68
Key is valid for? (0) 
69
Key does not expire at all
70
Is this correct? (y/N) y
71
72
GnuPG needs to construct a user ID to identify your key.
73
74
Real name: Random User
75
Email address: random@example.org
76
Comment: 
77
You selected this USER-ID:
78
    "Random User <random@example.org>"
79
80
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
81
We need to generate a lot of random bytes. It is a good idea to perform
82
some other action (type on the keyboard, move the mouse, utilize the
83
disks) during the prime generation; this gives the random number
84
generator a better chance to gain enough entropy.
85
gpg: key 3E0EE5BAC50DF7C1 marked as ultimately trusted
86
gpg: directory '/home/random/.gnupg/openpgp-revocs.d' created
87
gpg: revocation certificate stored as '/home/valhalla/.gnupg/openpgp-revocs.d/19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1.rev'
88
public and secret key created and signed.
89
90
pub   rsa4096 2016-10-19 [SC]
91
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
92
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
93
uid                      Random User <random@example.org>
94
sub   rsa4096 2016-10-19 [E]
95 1 Elena Grandi
</pre>
96
97 4 Elena Grandi
98 23 Simone Piccardi
h2. Creazione delle sottochiavi
99
100 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.
101
102
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).
103
104
Per generare le sottochiavi necessarie, si entra in modalità di modifica con l'opzione @--expert@ che abilita la creazione di chiavi di autenticazione.
105
106
<pre>
107
$ gpg --expert --edit-key 3E0EE5BAC50DF7C1
108
gpg (GnuPG) 2.1.15; Copyright (C) 2016 Free Software Foundation, Inc.
109
This is free software: you are free to change and redistribute it.
110
There is NO WARRANTY, to the extent permitted by law.
111
112
Secret key is available.
113
114
sec  rsa4096/3E0EE5BAC50DF7C1
115
     created: 2016-10-19  expires: never       usage: SC  
116
     trust: ultimate      validity: ultimate
117
ssb  rsa4096/F303978FEBB6E995
118
     created: 2016-10-19  expires: never       usage: E   
119
[ultimate] (1). Random User <random@example.org>
120
</pre>
121
122 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:
123 5 Elena Grandi
124
<pre>
125
gpg> addkey 
126
Please select what kind of key you want:
127
   (3) DSA (sign only)
128
   (4) RSA (sign only)
129
   (5) Elgamal (encrypt only)
130
   (6) RSA (encrypt only)
131
   (7) DSA (set your own capabilities)
132
   (8) RSA (set your own capabilities)
133
  (10) ECC (sign only)
134
  (11) ECC (set your own capabilities)
135
  (12) ECC (encrypt only)
136
  (13) Existing key
137
Your selection? 4
138
RSA keys may be between 1024 and 4096 bits long.
139
What keysize do you want? (2048) 
140
Requested keysize is 2048 bits
141
Please specify how long the key should be valid.
142
         0 = key does not expire
143
      <n>  = key expires in n days
144
      <n>w = key expires in n weeks
145
      <n>m = key expires in n months
146
      <n>y = key expires in n years
147
Key is valid for? (0) 1y
148
Key expires at Thu 19 Oct 2017 12:15:49 CEST
149
Is this correct? (y/N) y
150
Really create? (y/N) y
151
We need to generate a lot of random bytes. It is a good idea to perform
152
some other action (type on the keyboard, move the mouse, utilize the
153
disks) during the prime generation; this gives the random number
154
generator a better chance to gain enough entropy.
155
156
sec  rsa4096/3E0EE5BAC50DF7C1
157
     created: 2016-10-19  expires: never       usage: SC  
158
     trust: ultimate      validity: ultimate
159
ssb  rsa4096/F303978FEBB6E995
160
     created: 2016-10-19  expires: never       usage: E   
161
ssb  rsa2048/40A2ADF0FE9E4620
162
     created: 2016-10-19  expires: 2017-10-19  usage: S   
163
[ultimate] (1). Random User <random@example.org>
164
165
</pre>
166
167 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:
168 5 Elena Grandi
169
<pre>
170
gpg> addkey 
171
Please select what kind of key you want:
172
   (3) DSA (sign only)
173
   (4) RSA (sign only)
174
   (5) Elgamal (encrypt only)
175
   (6) RSA (encrypt only)
176
   (7) DSA (set your own capabilities)
177
   (8) RSA (set your own capabilities)
178
  (10) ECC (sign only)
179
  (11) ECC (set your own capabilities)
180
  (12) ECC (encrypt only)
181
  (13) Existing key
182
Your selection? 6
183
RSA keys may be between 1024 and 4096 bits long.
184
What keysize do you want? (2048) 
185
Requested keysize is 2048 bits
186
Please specify how long the key should be valid.
187
         0 = key does not expire
188
      <n>  = key expires in n days
189
      <n>w = key expires in n weeks
190
      <n>m = key expires in n months
191
      <n>y = key expires in n years
192
Key is valid for? (0) 1y
193
Key expires at Thu 19 Oct 2017 12:18:16 CEST
194
Is this correct? (y/N) y
195
Really create? (y/N) y
196
We need to generate a lot of random bytes. It is a good idea to perform
197
some other action (type on the keyboard, move the mouse, utilize the
198
disks) during the prime generation; this gives the random number
199
generator a better chance to gain enough entropy.
200
201
sec  rsa4096/3E0EE5BAC50DF7C1
202
     created: 2016-10-19  expires: never       usage: SC  
203
     trust: ultimate      validity: ultimate
204
ssb  rsa4096/F303978FEBB6E995
205
     created: 2016-10-19  expires: never       usage: E   
206
ssb  rsa2048/40A2ADF0FE9E4620
207
     created: 2016-10-19  expires: 2017-10-19  usage: S   
208
ssb  rsa2048/ED9BBD7B3BFF900F
209
     created: 2016-10-19  expires: 2017-10-19  usage: E   
210
[ultimate] (1). Random User <random@example.org>
211
</pre>
212
213 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).
214 5 Elena Grandi
215
<pre>
216
gpg> addkey 
217
Please select what kind of key you want:
218
   (3) DSA (sign only)
219
   (4) RSA (sign only)
220
   (5) Elgamal (encrypt only)
221
   (6) RSA (encrypt only)
222
   (7) DSA (set your own capabilities)
223
   (8) RSA (set your own capabilities)
224
  (10) ECC (sign only)
225
  (11) ECC (set your own capabilities)
226
  (12) ECC (encrypt only)
227
  (13) Existing key
228
Your selection? 8
229
230
Possible actions for a RSA key: Sign Encrypt Authenticate 
231
Current allowed actions: Sign Encrypt 
232
233
   (S) Toggle the sign capability
234
   (E) Toggle the encrypt capability
235
   (A) Toggle the authenticate capability
236
   (Q) Finished
237
238
Your selection? s
239
240
Possible actions for a RSA key: Sign Encrypt Authenticate 
241
Current allowed actions: Encrypt 
242
243
   (S) Toggle the sign capability
244
   (E) Toggle the encrypt capability
245
   (A) Toggle the authenticate capability
246
   (Q) Finished
247
248
Your selection? e
249
250
Possible actions for a RSA key: Sign Encrypt Authenticate 
251
Current allowed actions: 
252
253
   (S) Toggle the sign capability
254
   (E) Toggle the encrypt capability
255
   (A) Toggle the authenticate capability
256
   (Q) Finished
257
258
Your selection? a
259
260
Possible actions for a RSA key: Sign Encrypt Authenticate 
261
Current allowed actions: Authenticate 
262
263
   (S) Toggle the sign capability
264
   (E) Toggle the encrypt capability
265
   (A) Toggle the authenticate capability
266
   (Q) Finished
267
268
Your selection? q
269
RSA keys may be between 1024 and 4096 bits long.
270
What keysize do you want? (2048) 
271
Requested keysize is 2048 bits
272
Please specify how long the key should be valid.
273
         0 = key does not expire
274
      <n>  = key expires in n days
275
      <n>w = key expires in n weeks
276
      <n>m = key expires in n months
277
      <n>y = key expires in n years
278
Key is valid for? (0) 1y
279
Key expires at Thu 19 Oct 2017 12:24:56 CEST
280
Is this correct? (y/N) y
281
Really create? (y/N) y
282
We need to generate a lot of random bytes. It is a good idea to perform
283
some other action (type on the keyboard, move the mouse, utilize the
284
disks) during the prime generation; this gives the random number
285
generator a better chance to gain enough entropy.
286
287
sec  rsa4096/3E0EE5BAC50DF7C1
288
     created: 2016-10-19  expires: never       usage: SC  
289
     trust: ultimate      validity: ultimate
290
ssb  rsa4096/F303978FEBB6E995
291
     created: 2016-10-19  expires: never       usage: E   
292
ssb  rsa2048/40A2ADF0FE9E4620
293
     created: 2016-10-19  expires: 2017-10-19  usage: S   
294
ssb  rsa2048/ED9BBD7B3BFF900F
295
     created: 2016-10-19  expires: 2017-10-19  usage: E   
296
ssb  rsa2048/5F89B668295AE797
297
     created: 2016-10-19  expires: 2017-10-19  usage: A   
298
[ultimate] (1). Random User <random@example.org>
299
</pre>
300
301
Si può quindi uscire dalla modalità di modifica chiave, salvando le modifiche.
302
303
<pre>
304 1 Elena Grandi
gpg> save
305
</pre>
306 5 Elena Grandi
307
308 23 Simone Piccardi
h2. Salvataggio su supporto esterno
309
310 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.
311
312 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).
313 8 Elena Grandi
314 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:
315 9 Elena Grandi
316
<pre>
317
$ gpg --homedir indirizzo/della/chiavetta/gnupg --list-secret-keys
318
indirizzo/della/chiavetta/gnupg
319
pubring.gpg
320
---------------------------------
321
sec   rsa4096 2016-10-19 [SC]
322
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
323
uid           [ultimate] Random User <random@example.org>
324
ssb   rsa4096 2016-10-19 [E]
325
ssb   rsa2048 2016-10-19 [S] [expires: 2017-10-19]
326
ssb   rsa2048 2016-10-19 [E] [expires: 2017-10-19]
327
ssb   rsa2048 2016-10-19 [A] [expires: 2017-10-19]
328 1 Elena Grandi
</pre>
329 9 Elena Grandi
330
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.
331
332 23 Simone Piccardi
333 22 Simone Piccardi
h2. Spostamento delle chiavi sulla Card
334 2 Elena Grandi
335 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.
336
337
Collegare il lettore al computer, inserire la Card e controllare che venga correttamente riconosciuta:
338
339
<pre>
340
$ gpg --card-status 
341
Reader ...........: ####
342
Application ID ...: ####
343
Version ..........: 2.0
344
Manufacturer .....: ####
345
Serial number ....: ####
346
Name of cardholder: [not set]
347
Language prefs ...: [not set]
348
Sex ..............: unspecified
349
URL of public key : [not set]
350
Login data .......: [not set]
351
Signature PIN ....: forced
352
Key attributes ...: rsa2048 rsa2048 rsa2048
353
Max. PIN lengths .: 127 127 127
354
PIN retry counter : 3 3 3
355
Signature counter : 0
356
Signature key ....: [none]
357
Encryption key....: [none]
358
Authentication key: [none]
359
General key info..: [none]
360
</pre>
361
362 22 Simone Piccardi
Se la Card è nuova occorre cambiare poi i PIN della chiave rispetto ai default:
363 12 Elena Grandi
364
<pre>
365
$ gpg --card-edit
366
Reader ...........: ####
367
Application ID ...: ####
368
Version ..........: 2.0
369
Manufacturer .....: ####
370
Serial number ....: ####
371
Name of cardholder: [not set]
372
Language prefs ...: [not set]
373
Sex ..............: unspecified
374
URL of public key : [not set]
375
Login data .......: [not set]
376
Signature PIN ....: forced
377
Key attributes ...: rsa2048 rsa2048 rsa2048
378
Max. PIN lengths .: 127 127 127
379
PIN retry counter : 3 3 3
380
Signature counter : 0
381
Signature key ....: [none]
382
Encryption key....: [none]
383
Authentication key: [none]
384
General key info..: [none]
385
386
gpg/card> admin
387
Admin commands are allowed
388
389
gpg/card> passwd
390
gpg: OpenPGP card no. #### detected
391
392
1 - change PIN
393
2 - unblock PIN
394
3 - change Admin PIN
395
4 - set the Reset Code
396 1 Elena Grandi
Q - quit
397 21 Simone Piccardi
398
Your selection? 1
399 1 Elena Grandi
</pre>
400 21 Simone Piccardi
401 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:
402 21 Simone Piccardi
403
<pre>
404
PIN changed.
405
406
1 - change PIN
407
2 - unblock PIN
408 1 Elena Grandi
3 - change Admin PIN
409
4 - set the Reset Code
410
Q - quit
411 21 Simone Piccardi
412
Selezione? 3
413
PIN changed.
414
</pre>
415
416 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.
417 21 Simone Piccardi
418 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. 
419
420 10 Elena Grandi
Si può quindi passare a spostare le varie sottochiavi sulla Card, aprendo la modalità di editing della chiave:
421
422
<pre>
423
$ gpg --edit-key 3E0EE5BAC50DF7C1
424
gpg (GnuPG) 2.1.15; Copyright (C) 2016 Free Software Foundation, Inc.
425
This is free software: you are free to change and redistribute it.
426
There is NO WARRANTY, to the extent permitted by law.
427
428
Secret key is available.
429
430
sec  rsa4096/3E0EE5BAC50DF7C1
431
     created: 2016-10-19  expires: never       usage: SC  
432
     trust: ultimate      validity: ultimate
433
ssb  rsa4096/F303978FEBB6E995
434 1 Elena Grandi
     created: 2016-10-19  expires: never       usage: E   
435 10 Elena Grandi
ssb  rsa2048/40A2ADF0FE9E4620
436
     created: 2016-10-19  expires: 2017-10-19  usage: S   
437
ssb  rsa2048/ED9BBD7B3BFF900F
438
     created: 2016-10-19  expires: 2017-10-19  usage: E   
439
ssb  rsa2048/5F89B668295AE797
440
     created: 2016-10-19  expires: 2017-10-19  usage: A   
441
[ultimate] (1). Random User <random@example.org>
442
</pre>
443
444 22 Simone Piccardi
passando alla modalità di modifica delle chiavi private, con il comando @toggle@ che consente di selezionare le chiavi:
445 10 Elena Grandi
446
<pre>
447
gpg> toggle
448
449
sec  rsa4096/3E0EE5BAC50DF7C1
450
     created: 2016-10-19  expires: never       usage: SC  
451
     trust: ultimate      validity: ultimate
452 1 Elena Grandi
ssb  rsa4096/F303978FEBB6E995
453 10 Elena Grandi
     created: 2016-10-19  expires: never       usage: E   
454
ssb  rsa2048/40A2ADF0FE9E4620
455
     created: 2016-10-19  expires: 2017-10-19  usage: S   
456
ssb  rsa2048/ED9BBD7B3BFF900F
457
     created: 2016-10-19  expires: 2017-10-19  usage: E   
458
ssb  rsa2048/5F89B668295AE797
459
     created: 2016-10-19  expires: 2017-10-19  usage: A   
460
[ultimate] (1). Random User <random@example.org>
461
</pre>
462
463 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:
464 10 Elena Grandi
465
<pre>
466
gpg> key 2
467
468
sec  rsa4096/3E0EE5BAC50DF7C1
469
     created: 2016-10-19  expires: never       usage: SC  
470
     trust: ultimate      validity: ultimate
471
ssb  rsa4096/F303978FEBB6E995
472
     created: 2016-10-19  expires: never       usage: E   
473
ssb* rsa2048/40A2ADF0FE9E4620
474 1 Elena Grandi
     created: 2016-10-19  expires: 2017-10-19  usage: S   
475 10 Elena Grandi
ssb  rsa2048/ED9BBD7B3BFF900F
476
     created: 2016-10-19  expires: 2017-10-19  usage: E   
477
ssb  rsa2048/5F89B668295AE797
478
     created: 2016-10-19  expires: 2017-10-19  usage: A   
479
[ultimate] (1). Random User <random@example.org>
480
481
gpg> keytocard
482
Please select where to store the key:
483
   (1) Signature key
484
   (3) Authentication key
485
Your selection? 1
486 22 Simone Piccardi
</pre>
487 10 Elena Grandi
488 22 Simone Piccardi
qui occorre selezionare il tipo di chiave e poi verrà chiesta la passphrase della chiave e poi proseguirà con:
489 10 Elena Grandi
490 22 Simone Piccardi
<pre>
491 10 Elena Grandi
sec  rsa4096/3E0EE5BAC50DF7C1
492
     created: 2016-10-19  expires: never       usage: SC  
493
     trust: ultimate      validity: ultimate
494
ssb  rsa4096/F303978FEBB6E995
495
     created: 2016-10-19  expires: never       usage: E   
496
ssb* rsa2048/40A2ADF0FE9E4620
497
     created: 2016-10-19  expires: 2017-10-19  usage: S   
498
ssb  rsa2048/ED9BBD7B3BFF900F
499
     created: 2016-10-19  expires: 2017-10-19  usage: E   
500
ssb  rsa2048/5F89B668295AE797
501
     created: 2016-10-19  expires: 2017-10-19  usage: A   
502
[ultimate] (1). Random User <random@example.org>
503
</pre>
504
505 22 Simone Piccardi
per trasferire quella di crittografia occorrerà deselezionare la chiave di firma e selezionare quella di autenticazione, e ripetere il comando @keytocard@:
506 10 Elena Grandi
507
<pre>
508
gpg> key 2
509
510
sec  rsa4096/3E0EE5BAC50DF7C1
511
     created: 2016-10-19  expires: never       usage: SC  
512
     trust: ultimate      validity: ultimate
513
ssb  rsa4096/F303978FEBB6E995
514
     created: 2016-10-19  expires: never       usage: E   
515
ssb  rsa2048/40A2ADF0FE9E4620
516
     created: 2016-10-19  expires: 2017-10-19  usage: S   
517
ssb  rsa2048/ED9BBD7B3BFF900F
518
     created: 2016-10-19  expires: 2017-10-19  usage: E   
519
ssb  rsa2048/5F89B668295AE797
520
     created: 2016-10-19  expires: 2017-10-19  usage: A   
521
[ultimate] (1). Random User <random@example.org>
522
523
gpg> key 3
524 1 Elena Grandi
525 10 Elena Grandi
sec  rsa4096/3E0EE5BAC50DF7C1
526 1 Elena Grandi
     created: 2016-10-19  expires: never       usage: SC  
527
     trust: ultimate      validity: ultimate
528
ssb  rsa4096/F303978FEBB6E995
529 10 Elena Grandi
     created: 2016-10-19  expires: never       usage: E   
530
ssb  rsa2048/40A2ADF0FE9E4620
531
     created: 2016-10-19  expires: 2017-10-19  usage: S   
532
ssb* rsa2048/ED9BBD7B3BFF900F
533
     created: 2016-10-19  expires: 2017-10-19  usage: E   
534
ssb  rsa2048/5F89B668295AE797
535
     created: 2016-10-19  expires: 2017-10-19  usage: A   
536
[ultimate] (1). Random User <random@example.org>
537
538
gpg> keytocard
539
Please select where to store the key:
540
   (2) Encryption key
541
Your selection? 2
542 22 Simone Piccardi
</pre>
543 10 Elena Grandi
544 22 Simone Piccardi
di nuovo si sceglie (stavolta solo chiave di cifratura) e verrà chiesta la passphrase della chiave scelta:
545
546
<pre>
547 10 Elena Grandi
sec  rsa4096/3E0EE5BAC50DF7C1
548
     created: 2016-10-19  expires: never       usage: SC  
549
     trust: ultimate      validity: ultimate
550
ssb  rsa4096/F303978FEBB6E995
551
     created: 2016-10-19  expires: never       usage: E   
552
ssb  rsa2048/40A2ADF0FE9E4620
553
     created: 2016-10-19  expires: 2017-10-19  usage: S   
554
ssb* rsa2048/ED9BBD7B3BFF900F
555
     created: 2016-10-19  expires: 2017-10-19  usage: E   
556
ssb  rsa2048/5F89B668295AE797
557
     created: 2016-10-19  expires: 2017-10-19  usage: A   
558
[ultimate] (1). Random User <random@example.org>
559
</pre>
560
561 22 Simone Piccardi
infine si ripeterà la procedura con la chiave di autenticazione:
562 10 Elena Grandi
563
<pre>
564
gpg> key 3
565
566
sec  rsa4096/3E0EE5BAC50DF7C1
567
     created: 2016-10-19  expires: never       usage: SC  
568
     trust: ultimate      validity: ultimate
569
ssb  rsa4096/F303978FEBB6E995
570
     created: 2016-10-19  expires: never       usage: E   
571
ssb  rsa2048/40A2ADF0FE9E4620
572
     created: 2016-10-19  expires: 2017-10-19  usage: S   
573
ssb  rsa2048/ED9BBD7B3BFF900F
574
     created: 2016-10-19  expires: 2017-10-19  usage: E   
575
ssb  rsa2048/5F89B668295AE797
576
     created: 2016-10-19  expires: 2017-10-19  usage: A   
577
[ultimate] (1). Random User <random@example.org>
578
579
gpg> key 4
580
581
sec  rsa4096/3E0EE5BAC50DF7C1
582
     created: 2016-10-19  expires: never       usage: SC  
583
     trust: ultimate      validity: ultimate
584
ssb  rsa4096/F303978FEBB6E995
585
     created: 2016-10-19  expires: never       usage: E   
586
ssb  rsa2048/40A2ADF0FE9E4620
587
     created: 2016-10-19  expires: 2017-10-19  usage: S   
588
ssb  rsa2048/ED9BBD7B3BFF900F
589
     created: 2016-10-19  expires: 2017-10-19  usage: E   
590
ssb* rsa2048/5F89B668295AE797
591
     created: 2016-10-19  expires: 2017-10-19  usage: A   
592
[ultimate] (1). Random User <random@example.org>
593
594
gpg> keytocard
595
Please select where to store the key:
596
   (3) Authentication key
597
Your selection? 3
598
599
sec  rsa4096/3E0EE5BAC50DF7C1
600
     created: 2016-10-19  expires: never       usage: SC  
601
     trust: ultimate      validity: ultimate
602
ssb  rsa4096/F303978FEBB6E995
603
     created: 2016-10-19  expires: never       usage: E   
604
ssb  rsa2048/40A2ADF0FE9E4620
605
     created: 2016-10-19  expires: 2017-10-19  usage: S   
606
ssb  rsa2048/ED9BBD7B3BFF900F
607
     created: 2016-10-19  expires: 2017-10-19  usage: E   
608
ssb* rsa2048/5F89B668295AE797
609
     created: 2016-10-19  expires: 2017-10-19  usage: A   
610
[ultimate] (1). Random User <random@example.org>
611
</pre>
612
613 11 Elena Grandi
Uscire salvando:
614
615
<pre>
616
gpg> save
617
</pre>
618
619
e a questo punto si può controllare che le sottochiavi sono sulla Card:
620
621
<pre>
622
$ gpg --card-status 
623
624
Reader ...........: ####
625
Application ID ...: ####
626
Version ..........: 2.0
627
Manufacturer .....: ####
628
Serial number ....: ####
629
Name of cardholder: [not set]
630
Language prefs ...: [not set]
631
Sex ..............: unspecified
632
URL of public key : [not set]
633
Login data .......: [not set]
634
Signature PIN ....: forced
635
Key attributes ...: rsa2048 rsa2048 rsa2048
636
Max. PIN lengths .: 127 127 127
637
PIN retry counter : 3 3 3
638
Signature counter : 0
639
Signature key ....: 2128 412C BC75 34F5 6305  9447 40A2 ADF0 FE9E 4620
640
      created ....: 2016-10-19 10:15:26
641
Encryption key....: 0B24 9C62 4A7D 19FE 7AB9  DCB3 ED9B BD7B 3BFF 900F
642
      created ....: 2016-10-19 10:17:57
643
Authentication key: 40E1 AE4A 7C13 FD8C C6EA  2C56 5F89 B668 295A E797
644
      created ....: 2016-10-19 10:24:14
645
General key info..: sub  rsa2048/40A2ADF0FE9E4620 2016-10-19 Random User <random@example.org>
646
sec   rsa4096/3E0EE5BAC50DF7C1  created: 2016-10-19  expires: never     
647
ssb   rsa4096/F303978FEBB6E995  created: 2016-10-19  expires: never     
648
ssb>  rsa2048/40A2ADF0FE9E4620  created: 2016-10-19  expires: 2017-10-19
649
                                card-no: ####
650
ssb>  rsa2048/ED9BBD7B3BFF900F  created: 2016-10-19  expires: 2017-10-19
651
                                card-no: ####
652
ssb>  rsa2048/5F89B668295AE797  created: 2016-10-19  expires: 2017-10-19
653 1 Elena Grandi
                                card-no: ####
654 11 Elena Grandi
</pre>
655
656
e non sono più presenti sul disco
657
658
<pre>
659
$ gpg --list-secret-keys 
660
/home/random/.gnupg/pubring.gpg
661
---------------------------------
662
sec   rsa4096 2016-10-19 [SC]
663
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
664
uid           [ultimate] Random User <random@example.org>
665
ssb   rsa4096 2016-10-19 [E]
666
ssb>  rsa2048 2016-10-19 [S] [expires: 2017-10-19]
667
ssb>  rsa2048 2016-10-19 [E] [expires: 2017-10-19]
668
ssb>  rsa2048 2016-10-19 [A] [expires: 2017-10-19]
669 1 Elena Grandi
</pre>
670 11 Elena Grandi
671
è però ancora presente la chiave principale.
672
673 23 Simone Piccardi
674 22 Simone Piccardi
h2. Rimozione della chiave principale
675 13 Elena Grandi
676 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:
677
678
<pre>
679
$ gpg --with-keygrip --list-key 3E0EE5BAC50DF7C1
680
pub   rsa4096 2016-10-19 [SC]
681
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
682
      Keygrip = 3BC042D5749A498AA2F904CF548C6B5DEDDF0600
683
uid           [ultimate] Random User <random@example.org>
684
sub   rsa4096 2016-10-19 [E]
685
      Keygrip = 0B2A484CBE52875A07F377A1A87F229C60277642
686
sub   rsa2048 2016-10-19 [S] [expires: 2017-10-19]
687
      Keygrip = AD155C5349ECE4D3725AD77269EC9E696A8191E9
688
sub   rsa2048 2016-10-19 [E] [expires: 2017-10-19]
689
      Keygrip = BFADD9EEDA2E38A77DCF925E58FFD4FFA2F50B7C
690
sub   rsa2048 2016-10-19 [A] [expires: 2017-10-19]
691
      Keygrip = D9F3249B5F583B7B4099B80DCAB343A9BA440BA8
692
</pre>
693
694 1 Elena Grandi
A questo punto è sufficiente rimuovere il file corrispondente alla chiave principale:
695 14 Elena Grandi
696
<pre>
697
$ rm ~/.gnupg/private-keys-v1.d/3BC042D5749A498AA2F904CF548C6B5DEDDF0600.key
698
</pre>
699
700
E si può verificare che la chiave sia stata effettivamente rimossa:
701 1 Elena Grandi
702
<pre>
703
$ gpg --list-secret-keys 3E0EE5BAC50DF7C1
704 14 Elena Grandi
sec#  rsa4096 2016-10-19 [SC]
705
      19DB75A75734ABBEDB1124163E0EE5BAC50DF7C1
706
uid           [ultimate] Random User <random@example.org>
707
ssb   rsa4096 2016-10-19 [E]
708
ssb>  rsa2048 2016-10-19 [S] [expires: 2017-10-19]
709
ssb>  rsa2048 2016-10-19 [E] [expires: 2017-10-19]
710
ssb>  rsa2048 2016-10-19 [A] [expires: 2017-10-19]
711
</pre>
712
713
dove @#@ dopo @sec@ indica che la chiave segreta non è presente sulla macchina in questione.
714
715 22 Simone Piccardi
h2. Configurazione di ssh
716 6 Elena Grandi
717 15 Elena Grandi
Per abilitare l'autenticazione ssh tramite chiave, aggiungere la seguente riga al file @~/.gnupg/gpg-agent.conf@:
718
719
<pre>
720
enable-ssh-support
721
</pre>
722
723 24 Elena Grandi
Con una versione sufficientemente recente di gpg questo è sufficiente per far sì che le connessioni SSH usino la chiave gpg per l'autenticazione.
724 1 Elena Grandi
725 24 Elena Grandi
Alla prima connessione ssh verso un server sul quale possiamo identificarci tramite chiave verrà lanciato il gpg-agent che a sua volta lancerà un pinentry per chiedere il pin che abbiamo impostato sulla card.
726
727
Da quel momento in poi il pin verrà tenuto in memoria in modo sicuro, e sarà possibile collegarsi ai server senza digitare nuovamente password.
728
729
Per far dimenticare il pin è sufficiente rimuovere la card dal lettore.
730
731
h3. Troubleshooting
732
733
Il funzionamento delle PGPCard per autenticazione è stato reso completamente automatico solo nelle versioni più recenti di gnupg e delle distribuzioni: su versioni precedenti (e.g. Debian jessie) potrebbe essere necessario intervenire manualmente.
734
735 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@.
736 15 Elena Grandi
737 1 Elena Grandi
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.
738 24 Elena Grandi
739
Un'ulteriore causa di problemi possono essere le vecchie versioni di @gnome-keyring-daemon@ che cercano di sostituirsi all'agent, senza però implementarne tutte le funzionalità: in questo caso è necessario disabilitarlo per permettere a @gpg-agent@ di fare il suo lavoro.
740 15 Elena Grandi
741 16 Elena Grandi
h2. Esportazione della chiave pubblica
742
743 17 Elena Grandi
Adesso che tutto è funzionante, si può inviare la propria chiave pubblica sui keyserver:
744
745
<pre>
746 1 Elena Grandi
$ gpg --send-keys 3E0EE5BAC50DF7C1
747 17 Elena Grandi
gpg: sending key 3E0EE5BAC50DF7C1 to [server]
748
</pre>
749
750
Nel caso non abbiate configurato un server in @~/.gnupg/dirmngr.conf@ (o in @~/.gnupg/gpg.conf@ ) lo si può specificare sulla riga di comando:
751 1 Elena Grandi
752 17 Elena Grandi
<pre>
753
$ gpg --keyserver keys.gnupg.net --send-keys 3E0EE5BAC50DF7C1
754
gpg: sending key 3E0EE5BAC50DF7C1 to hkp://keys.gnupg.net
755
</pre>
756
757
Se la chiave non deve essere pubblica, è comunque necessario estrarne la parte pubblica da importare su altre macchine dove si vuole usare la Card:
758 1 Elena Grandi
759 17 Elena Grandi
<pre>
760
gpg --armour --export 3E0EE5BAC50DF7C1 > 3E0EE5BAC50DF7C1.asc
761
</pre>
762 23 Simone Piccardi
763 17 Elena Grandi
764 16 Elena Grandi
h2. Configurazione su una nuova macchina
765 6 Elena Grandi
766 18 Elena Grandi
Per poter usare la Card si una macchina diversa è necessario far conoscere a GnuPG la chiave: innanzitutto importando la chiave pubblica:
767
768
<pre>
769
gpg --recv-key 3E0EE5BAC50DF7C1
770
</pre>
771
772 22 Simone Piccardi
oppure:
773 18 Elena Grandi
774
<pre>
775
gpg --import 3E0EE5BAC50DF7C1.asc
776
</pre>
777
778 22 Simone Piccardi
e quindi far ricreare gli stub di chiavi dalle chiavi presenti sulla card, semplicemente con:
779 18 Elena Grandi
780
<pre>
781
$ gpg --card-status 
782
783
Reader ...........: ####
784
Application ID ...: ####
785
Version ..........: 2.0
786
Manufacturer .....: ####
787
Serial number ....: ####
788 1 Elena Grandi
Name of cardholder: [not set]
789
Language prefs ...: [not set]
790
Sex ..............: unspecified
791 18 Elena Grandi
URL of public key : [not set]
792
Login data .......: [not set]
793
Signature PIN ....: forced
794
Key attributes ...: rsa2048 rsa2048 rsa2048
795
Max. PIN lengths .: 127 127 127
796
PIN retry counter : 3 3 3
797
Signature counter : 0
798
Signature key ....: 2128 412C BC75 34F5 6305  9447 40A2 ADF0 FE9E 4620
799
      created ....: 2016-10-19 10:15:26
800
Encryption key....: 0B24 9C62 4A7D 19FE 7AB9  DCB3 ED9B BD7B 3BFF 900F
801
      created ....: 2016-10-19 10:17:57
802
Authentication key: 40E1 AE4A 7C13 FD8C C6EA  2C56 5F89 B668 295A E797
803
      created ....: 2016-10-19 10:24:14
804
General key info..: sub  rsa2048/40A2ADF0FE9E4620 2016-10-19 Random User <random@example.org>
805
sec   rsa4096/3E0EE5BAC50DF7C1  created: 2016-10-19  expires: never     
806
ssb   rsa4096/F303978FEBB6E995  created: 2016-10-19  expires: never     
807
ssb>  rsa2048/40A2ADF0FE9E4620  created: 2016-10-19  expires: 2017-10-19
808
                                card-no: ####
809
ssb>  rsa2048/ED9BBD7B3BFF900F  created: 2016-10-19  expires: 2017-10-19
810
                                card-no: ####
811
ssb>  rsa2048/5F89B668295AE797  created: 2016-10-19  expires: 2017-10-19
812
                                card-no: ####
813
</pre>
814
815 22 Simone Piccardi
h2. Configurazione su una nuova macchina, con versioni precedenti di gpg
816
817
da fare