Project

General

Profile

UsoDiOpenPGPCard » History » Version 31

Elena Grandi, 07/15/2018 05:23 PM

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