Merge tag 'regulator-fix-v5.4-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / Documentation / translations / it_IT / process / maintainer-pgp-guide.rst
1 .. include:: ../disclaimer-ita.rst
2
3 :Original: :ref:`Documentation/process/maintainer-pgp-guide.rst <pgpguide>`
4 :Translator: Alessia Mantegazza <amantegazza@vaga.pv.it>
5
6 .. _it_pgpguide:
7
8 =========================================
9 La guida a PGP per manutentori del kernel
10 =========================================
11
12 :Author: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
13
14 Questo documento è destinato agli sviluppatori del kernel Linux, in particolar
15 modo ai manutentori. Contiene degli approfondimenti riguardo informazioni che
16 sono state affrontate in maniera più generale nella sezione
17 "`Protecting Code Integrity`_" pubblicata dalla Linux Foundation.
18 Per approfondire alcuni argomenti trattati in questo documento è consigliato
19 leggere il documento sopraindicato
20
21 .. _`Protecting Code Integrity`: https://github.com/lfit/itpol/blob/master/protecting-code-integrity.md
22
23 Il ruolo di PGP nello sviluppo del kernel Linux
24 ===============================================
25
26 PGP aiuta ad assicurare l'integrità del codice prodotto dalla comunità
27 di sviluppo del kernel e, in secondo luogo, stabilisce canali di comunicazione
28 affidabili tra sviluppatori attraverso lo scambio di email firmate con PGP.
29
30 Il codice sorgente del kernel Linux è disponibile principalmente in due
31 formati:
32
33 - repositori distribuiti di sorgenti (git)
34 - rilasci periodici di istantanee (archivi tar)
35
36 Sia i repositori git che gli archivi tar portano le firme PGP degli
37 sviluppatori che hanno creato i rilasci ufficiali del kernel. Queste firme
38 offrono una garanzia crittografica che le versioni scaricabili rese disponibili
39 via kernel.org, o altri portali, siano identiche a quelle che gli sviluppatori
40 hanno sul loro posto di lavoro. A tal scopo:
41
42 - i repositori git forniscono firme PGP per ogni tag
43 - gli archivi tar hanno firme separate per ogni archivio
44
45 .. _it_devs_not_infra:
46
47 Fidatevi degli sviluppatori e non dell'infrastruttura
48 -----------------------------------------------------
49
50 Fin dal 2011, quando i sistemi di kernel.org furono compromessi, il principio
51 generale del progetto Kernel Archives è stato quello di assumere che qualsiasi
52 parte dell'infrastruttura possa essere compromessa in ogni momento. Per questa
53 ragione, gli amministratori hanno intrapreso deliberatemene dei passi per
54 enfatizzare che la fiducia debba risiedere sempre negli sviluppatori e mai nel
55 codice che gestisce l'infrastruttura, indipendentemente da quali che siano le
56 pratiche di sicurezza messe in atto.
57
58 Il principio sopra indicato è la ragione per la quale è necessaria questa
59 guida. Vogliamo essere sicuri che il riporre la fiducia negli sviluppatori
60 non sia fatto semplicemente per incolpare qualcun'altro per future falle di
61 sicurezza. L'obiettivo è quello di fornire una serie di linee guida che gli
62 sviluppatori possano seguire per creare un ambiente di lavoro sicuro e
63 salvaguardare le chiavi PGP usate nello stabilire l'integrità del kernel Linux
64 stesso.
65
66 .. _it_pgp_tools:
67
68 Strumenti PGP
69 =============
70
71 Usare GnuPG v2
72 --------------
73
74 La vostra distribuzione potrebbe avere già installato GnuPG, dovete solo
75 verificare che stia utilizzando la versione 2.x e non la serie 1.4 --
76 molte distribuzioni forniscono entrambe, di base il comando ''gpg''
77 invoca GnuPG v.1. Per controllate usate::
78
79     $ gpg --version | head -n1
80
81 Se visualizzate ``gpg (GnuPG) 1.4.x``, allora state usando GnuPG v.1.
82 Provate il comando ``gpg2`` (se non lo avete, potreste aver bisogno
83 di installare il pacchetto gnupg2)::
84
85     $ gpg2 --version | head -n1
86
87 Se visualizzate  ``gpg (GnuPG) 2.x.x``, allora siete pronti a partire.
88 Questa guida assume che abbiate la versione 2.2.(o successiva) di GnuPG.
89 Se state usando la versione 2.0, alcuni dei comandi indicati qui non
90 funzioneranno, in questo caso considerate un aggiornamento all'ultima versione,
91 la 2.2. Versioni di gnupg-2.1.11 e successive dovrebbero essere compatibili
92 per gli obiettivi di questa guida.
93
94 Se avete entrambi i comandi: ``gpg`` e ``gpg2``, assicuratevi di utilizzare
95 sempre la versione V2, e non quella vecchia. Per evitare errori potreste creare
96 un alias::
97
98     $ alias gpg=gpg2
99
100 Potete mettere questa opzione nel vostro  ``.bashrc`` in modo da essere sicuri.
101
102 Configurare le opzioni di gpg-agent
103 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
104
105 L'agente GnuPG è uno strumento di aiuto che partirà automaticamente ogni volta
106 che userete il comando ``gpg`` e funzionerà in background con l'obiettivo di
107 individuare la passphrase. Ci sono due opzioni che dovreste conoscere
108 per personalizzare la scadenza della passphrase nella cache:
109
110 - ``default-cache-ttl`` (secondi): Se usate ancora la stessa chiave prima
111   che il time-to-live termini, il conto alla rovescia si resetterà per un
112   altro periodo. Di base è di 600 (10 minuti).
113
114 - ``max-cache-ttl`` (secondi): indipendentemente da quanto sia recente l'ultimo
115   uso della chiave da quando avete inserito la passphrase, se il massimo
116   time-to-live è scaduto, dovrete reinserire nuovamente la passphrase.
117   Di base è di 30 minuti.
118
119 Se ritenete entrambe questi valori di base troppo corti (o troppo lunghi),
120 potete creare il vostro file ``~/.gnupg/gpg-agent.conf`` ed impostare i vostri
121 valori::
122
123     # set to 30 minutes for regular ttl, and 2 hours for max ttl
124     default-cache-ttl 1800
125     max-cache-ttl 7200
126
127 .. note::
128
129     Non è più necessario far partire l'agente gpg manualmente all'inizio della
130     vostra sessione. Dovreste controllare i file rc per rimuovere tutto ciò che
131     riguarda vecchie le versioni di GnuPG, poiché potrebbero non svolgere più
132     bene il loro compito.
133
134 Impostare un *refresh* con cronjob
135 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
136
137 Potreste aver bisogno di rinfrescare regolarmente il vostro portachiavi in
138 modo aggiornare le chiavi pubbliche di altre persone, lavoro che è svolto
139 al meglio con un cronjob giornaliero::
140
141     @daily /usr/bin/gpg2 --refresh >/dev/null 2>&1
142
143 Controllate il percorso assoluto del vostro comando ``gpg`` o ``gpg2`` e usate
144 il comando ``gpg2`` se per voi ``gpg`` corrisponde alla versione GnuPG v.1.
145
146 .. _it_master_key:
147
148 Proteggere la vostra chiave PGP primaria
149 ========================================
150
151 Questa guida parte dal presupposto che abbiate già una chiave PGP che usate
152 per lo sviluppo del kernel Linux. Se non ne avete ancora una, date uno sguardo
153 al documento "`Protecting Code Integrity`_" che abbiamo menzionato prima.
154
155 Dovreste inoltre creare una nuova chiave se quella attuale è inferiore a 2048
156 bit (RSA).
157
158 Chiave principale o sottochiavi
159 -------------------------------
160
161 Le sottochiavi sono chiavi PGP totalmente indipendenti, e sono collegate alla
162 chiave principale attraverso firme certificate. È quindi importante
163 comprendere i seguenti punti:
164
165 1. Non ci sono differenze tecniche tra la chiave principale e la sottochiave.
166 2. In fesa di creazione, assegniamo limitazioni funzionali ad ogni chiave
167    assegnando capacità specifiche.
168 3. Una chiave PGP può avere 4 capacità:
169
170    - **[S]** può essere usata per firmare
171    - **[E]** può essere usata per criptare
172    - **[A]** può essere usata per autenticare
173    - **[C]** può essere usata per certificare altre chiavi
174
175 4. Una singola chiave può avere più capacità
176 5. Una sottochiave è completamente indipendente dalla chiave principale.
177    Un messaggio criptato con la sottochiave non può essere decrittato con
178    quella principale. Se perdete la vostra sottochiave privata, non può
179    essere rigenerata in nessun modo da quella principale.
180
181 La chiave con capacità **[C]** (certify) è identificata come la chiave
182 principale perché è l'unica che può essere usata per indicare la relazione
183 con altre chiavi. Solo la chiave **[C]** può essere usata per:
184
185 - Aggiungere o revocare altre chiavi (sottochiavi) che hanno capacità S/E/A
186 - Aggiungere, modificare o eliminare le identità (unids) associate alla chiave
187 - Aggiungere o modificare la data di termine di sé stessa o di ogni sottochiave
188 - Firmare le chiavi di altre persone a scopo di creare una rete di fiducia
189
190 Di base, alla creazione di nuove chiavi, GnuPG genera quanto segue:
191
192 - Una chiave madre che porta sia la capacità di certificazione che quella
193   di firma (**[SC]**)
194 - Una sottochiave separata con capacità di criptaggio (**[E]**)
195
196 Se avete usato i parametri di base per generare la vostra chiave, quello
197 sarà il risultato. Potete verificarlo utilizzando ``gpg --list-secret-keys``,
198 per esempio::
199
200     sec   rsa2048 2018-01-23 [SC] [expires: 2020-01-23]
201           000000000000000000000000AAAABBBBCCCCDDDD
202     uid           [ultimate] Alice Dev <adev@kernel.org>
203     ssb   rsa2048 2018-01-23 [E] [expires: 2020-01-23]
204
205 Qualsiasi chiave che abbia la capacità **[C]** è la vostra chiave madre,
206 indipendentemente da quali altre capacità potreste averle assegnato.
207
208 La lunga riga sotto la voce ``sec`` è la vostra impronta digitale --
209 negli esempi che seguono, quando vedere ``[fpr]`` ci si riferisce a questa
210 stringa di 40 caratteri.
211
212 Assicuratevi che la vostra passphrase sia forte
213 -----------------------------------------------
214
215 GnuPG utilizza le passphrases per criptare la vostra chiave privata prima
216 di salvarla sul disco. In questo modo, anche se il contenuto della vostra
217 cartella ``.gnupg`` venisse letto o trafugato nella sia interezza, gli
218 attaccanti non potrebbero comunque utilizzare le vostre chiavi private senza
219 aver prima ottenuto la passphrase per decriptarle.
220
221 È assolutamente essenziale che le vostre chiavi private siano protette da
222 una passphrase forte. Per impostarla o cambiarla, usate::
223
224     $ gpg --change-passphrase [fpr]
225
226 Create una sottochiave di firma separata
227 ----------------------------------------
228
229 Il nostro obiettivo è di proteggere la chiave primaria spostandola su un
230 dispositivo sconnesso dalla rete, dunque se avete solo una chiave combinata
231 **[SC]** allora dovreste creare una sottochiave di firma separata::
232
233     $ gpg --quick-add-key [fpr] ed25519 sign
234
235 Ricordate di informare il keyserver del vostro cambiamento, cosicché altri
236 possano ricevere la vostra nuova sottochiave::
237
238     $ gpg --send-key [fpr]
239
240 .. note:: Supporto ECC in GnuPG
241     GnuPG 2.1 e successivi supportano pienamente *Elliptic Curve Cryptography*,
242     con la possibilità di combinare sottochiavi ECC con le tradizionali chiavi
243     primarie RSA. Il principale vantaggio della crittografia ECC è che è molto
244     più veloce da calcolare e crea firme più piccole se confrontate byte per
245     byte con le chiavi RSA a più di 2048 bit. A meno che non pensiate di
246     utilizzare un dispositivo smartcard che non supporta le operazioni ECC, vi
247     raccomandiamo ti creare sottochiavi di firma ECC per il vostro lavoro col
248     kernel.
249
250     Se per qualche ragione preferite rimanere con sottochiavi RSA, nel comando
251     precedente, sostituite "ed25519" con "rsa2048". In aggiunta, se avete
252     intenzione di usare un dispositivo hardware che non supporta le chiavi
253     ED25519 ECC, come la Nitrokey Pro o la Yubikey, allora dovreste usare
254     "nistp256" al posto di "ed25519".
255
256 Copia di riserva della chiave primaria per gestire il recupero da disastro
257 --------------------------------------------------------------------------
258
259 Maggiori sono le firme di altri sviluppatori che vengono applicate alla vostra,
260 maggiori saranno i motivi per avere una copia di riserva che non sia digitale,
261 al fine di effettuare un recupero da disastro.
262
263 Il modo migliore per creare una copia fisica della vostra chiave privata è
264 l'uso del programma ``paperkey``. Consultate ``man paperkey`` per maggiori
265 dettagli sul formato dell'output ed i suoi punti di forza rispetto ad altre
266 soluzioni. Paperkey dovrebbe essere già pacchettizzato per la maggior parte
267 delle distribuzioni.
268
269 Eseguite il seguente comando per creare una copia fisica di riserva della
270 vostra chiave privata::
271
272     $ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txt
273
274 Stampate il file (o fate un pipe direttamente verso lpr), poi prendete
275 una penna e scrivete la passphare sul margine del foglio.  **Questo è
276 caldamente consigliato** perché la copia cartacea è comunque criptata con
277 la passphrase, e se mai doveste cambiarla non vi ricorderete qual'era al
278 momento della creazione di quella copia -- *garantito*.
279
280 Mettete la copia cartacea e la passphrase scritta a mano in una busta e
281 mettetela in un posto sicuro e ben protetto, preferibilmente fuori casa,
282 magari in una cassetta di sicurezza in banca.
283
284 .. note::
285
286     Probabilmente la vostra stampante non è più quello stupido dispositivo
287     connesso alla porta parallela, ma dato che il suo output è comunque
288     criptato con la passphrase, eseguire la stampa in un sistema "cloud"
289     moderno dovrebbe essere comunque relativamente sicuro. Un'opzione potrebbe
290     essere quella di cambiare la passphrase della vostra chiave primaria
291     subito dopo aver finito con paperkey.
292
293 Copia di riserva di tutta la cartella GnuPG
294 -------------------------------------------
295
296 .. warning::
297
298     **!!!Non saltate questo passo!!!**
299
300 Quando avete bisogno di recuperare le vostre chiavi PGP è importante avere
301 una copia di riserva pronta all'uso. Questo sta su un diverso piano di
302 prontezza rispetto al recupero da disastro che abbiamo risolto con
303 ``paperkey``. Vi affiderete a queste copie esterne quando dovreste usare la
304 vostra chiave Certify -- ovvero quando fate modifiche alle vostre chiavi o
305 firmate le chiavi di altre persone ad una conferenza o ad un gruppo d'incontro.
306
307 Incominciate con una piccola chiavetta di memoria USB (preferibilmente due)
308 che userete per le copie di riserva. Dovrete criptarle usando LUKS -- fate
309 riferimento alla documentazione della vostra distribuzione per capire come
310 fare.
311
312 Per la passphrase di criptazione, potete usare la stessa della vostra chiave
313 primaria.
314
315 Una volta che il processo di criptazione è finito, reinserite il disco USB ed
316 assicurativi che venga montato correttamente. Copiate interamente la cartella
317 ``.gnugp`` nel disco criptato::
318
319     $ cp -a ~/.gnupg /media/disk/foo/gnupg-backup
320
321 Ora dovreste verificare che tutto continui a funzionare::
322
323     $ gpg --homedir=/media/disk/foo/gnupg-backup --list-key [fpr]
324
325 Se non vedete errori, allora dovreste avere fatto tutto con successo.
326 Smontate il disco USB, etichettatelo per bene di modo da evitare di
327 distruggerne il contenuto non appena vi serve una chiavetta USB a caso, ed
328 infine mettetelo in un posto sicuro -- ma non troppo lontano, perché vi servirà
329 di tanto in tanto per modificare le identità, aggiungere o revocare
330 sottochiavi, o firmare le chiavi di altre persone.
331
332 Togliete la chiave primaria dalla vostra home
333 ---------------------------------------------
334
335 I file che si trovano nella vostra cartella home non sono poi così ben protetti
336 come potreste pensare. Potrebbero essere letti o trafugati in diversi modi:
337
338 - accidentalmente quando fate una rapida copia della cartella home per
339   configurare una nuova postazione
340 - da un amministratore di sistema negligente o malintenzionato
341 - attraverso copie di riserva insicure
342 - attraverso malware installato in alcune applicazioni (browser, lettori PDF,
343   eccetera)
344 - attraverso coercizione quando attraversate confini internazionali
345
346 Proteggere la vostra chiave con una buona passphare aiuta notevolmente a
347 ridurre i rischi elencati qui sopra, ma le passphrase possono essere scoperte
348 attraverso i keylogger, il shoulder-surfing, o altri modi. Per questi motivi,
349 nella configurazione si raccomanda di rimuove la chiave primaria dalla vostra
350 cartella home e la si archivia su un dispositivo disconnesso.
351
352 .. warning::
353
354     Per favore, fate riferimento alla sezione precedente e assicuratevi
355     di aver fatto una copia di riserva totale della cartella GnuPG. Quello
356     che stiamo per fare renderà la vostra chiave inutile se non avete delle
357     copie di riserva utilizzabili!
358
359 Per prima cosa, identificate il keygrip della vostra chiave primaria::
360
361     $ gpg --with-keygrip --list-key [fpr]
362
363 L'output assomiglierà a questo::
364
365     pub   rsa2048 2018-01-24 [SC] [expires: 2020-01-24]
366           000000000000000000000000AAAABBBBCCCCDDDD
367           Keygrip = 1111000000000000000000000000000000000000
368     uid           [ultimate] Alice Dev <adev@kernel.org>
369     sub   rsa2048 2018-01-24 [E] [expires: 2020-01-24]
370           Keygrip = 2222000000000000000000000000000000000000
371     sub   ed25519 2018-01-24 [S]
372           Keygrip = 3333000000000000000000000000000000000000
373
374 Trovate la voce keygrid che si trova sotto alla riga ``pub`` (appena sotto
375 all'impronta digitale della chiave primaria). Questo corrisponderà direttamente
376 ad un file nella cartella ``~/.gnupg``::
377
378     $ cd ~/.gnupg/private-keys-v1.d
379     $ ls
380     1111000000000000000000000000000000000000.key
381     2222000000000000000000000000000000000000.key
382     3333000000000000000000000000000000000000.key
383
384 Quello che dovrete fare è rimuovere il file .key che corrisponde al keygrip
385 della chiave primaria::
386
387     $ cd ~/.gnupg/private-keys-v1.d
388     $ rm 1111000000000000000000000000000000000000.key
389
390 Ora, se eseguite il comando ``--list-secret-keys``, vedrete che la chiave
391 primaria non compare più (il simbolo ``#`` indica che non è disponibile)::
392
393     $ gpg --list-secret-keys
394     sec#  rsa2048 2018-01-24 [SC] [expires: 2020-01-24]
395           000000000000000000000000AAAABBBBCCCCDDDD
396     uid           [ultimate] Alice Dev <adev@kernel.org>
397     ssb   rsa2048 2018-01-24 [E] [expires: 2020-01-24]
398     ssb   ed25519 2018-01-24 [S]
399
400 Dovreste rimuovere anche i file ``secring.gpg`` che si trovano nella cartella
401 ``~/.gnupg``, in quanto rimasugli delle versioni precedenti di GnuPG.
402
403 Se non avete la cartella "private-keys-v1.d"
404 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
405
406 Se non avete la cartella ``~/.gnupg/private-keys-v1.d``, allora le vostre
407 chiavi segrete sono ancora salvate nel vecchio file ``secring.gpg`` usato
408 da GnuPG v1. Effettuare una qualsiasi modifica alla vostra chiave, come
409 cambiare la passphare o aggiungere una sottochiave, dovrebbe convertire
410 automaticamente il vecchio formato ``secring.gpg``nel nuovo
411 ``private-keys-v1.d``.
412
413 Una volta che l'avete fatto, assicuratevi di rimuovere il file ``secring.gpg``,
414 che continua a contenere la vostra chiave privata.
415
416 .. _it_smartcards:
417
418 Spostare le sottochiavi in un apposito dispositivo criptato
419 ===========================================================
420
421 Nonostante la chiave primaria sia ora al riparo da occhi e mani indiscrete,
422 le sottochiavi si trovano ancora nella vostra cartella home. Chiunque riesca
423 a mettere le sue mani su quelle chiavi riuscirà a decriptare le vostre
424 comunicazioni o a falsificare le vostre firme (se conoscono la passphrase).
425 Inoltre, ogni volta che viene fatta un'operazione con GnuPG, le chiavi vengono
426 caricate nella memoria di sistema e potrebbero essere rubate con l'uso di
427 malware sofisticati (pensate a Meltdown e a Spectre).
428
429 Il miglior modo per proteggere le proprie chiave è di spostarle su un
430 dispositivo specializzato in grado di effettuare operazioni smartcard.
431
432 I benefici di una smartcard
433 ---------------------------
434
435 Una smartcard contiene un chip crittografico che è capace di immagazzinare
436 le chiavi private ed effettuare operazioni crittografiche direttamente sulla
437 carta stessa. Dato che la chiave non lascia mai la smartcard, il sistema
438 operativo usato sul computer non sarà in grado di accedere alle chiavi.
439 Questo è molto diverso dai dischi USB criptati che abbiamo usato allo scopo di
440 avere una copia di riserva sicura -- quando il dispositivo USB è connesso e
441 montato, il sistema operativo potrà accedere al contenuto delle chiavi private.
442
443 L'uso di un disco USB criptato non può sostituire le funzioni di un dispositivo
444 capace di operazioni di tipo smartcard.
445
446 Dispositivi smartcard disponibili
447 ---------------------------------
448
449 A meno che tutti i vostri computer dispongano di lettori smartcard, il modo
450 più semplice è equipaggiarsi di un dispositivo USB specializzato che
451 implementi le funzionalità delle smartcard.  Sul mercato ci sono diverse
452 soluzioni disponibili:
453
454 - `Nitrokey Start`_: è Open hardware e Free Software, è basata sul progetto
455   `GnuK`_ della FSIJ. Questo è uno dei pochi dispositivi a supportare le chiavi
456   ECC ED25519, ma offre meno funzionalità di sicurezza (come la resistenza
457   alla manomissione o alcuni attacchi ad un canale laterale).
458 - `Nitrokey Pro`_: è simile alla Nitrokey Start, ma è più resistente alla
459   manomissione e offre più funzionalità di sicurezza. La Pro 2 supporta la
460   crittografia ECC (NISTP).
461 - `Yubikey 5`_: l'hardware e il software sono proprietari, ma è più economica
462   della  Nitrokey Pro ed è venduta anche con porta USB-C il che è utile con i
463   computer portatili più recenti. In aggiunta, offre altre funzionalità di
464   sicurezza come FIDO, U2F, e ora supporta anche le chiavi ECC (NISTP)
465
466 `Su LWN c'è una buona recensione`_ dei modelli elencati qui sopra e altri.
467 La scelta dipenderà dal costo, dalla disponibilità nella vostra area
468 geografica e vostre considerazioni sull'hardware aperto/proprietario.
469
470 Se volete usare chiavi ECC, la vostra migliore scelta sul mercato è la
471 Nitrokey Start.
472
473 .. _`Nitrokey Start`: https://shop.nitrokey.com/shop/product/nitrokey-start-6
474 .. _`Nitrokey Pro 2`: https://shop.nitrokey.com/shop/product/nitrokey-pro-2-3
475 .. _`Yubikey 5`: https://www.yubico.com/product/yubikey-5-overview/
476 .. _Gnuk: http://www.fsij.org/doc-gnuk/
477 .. _`Su LWN c'è una buona recensione`: https://lwn.net/Articles/736231/
478
479 Configurare il vostro dispositivo smartcard
480 -------------------------------------------
481
482 Il vostro dispositivo smartcard dovrebbe iniziare a funzionare non appena
483 lo collegate ad un qualsiasi computer Linux moderno. Potete verificarlo
484 eseguendo::
485
486     $ gpg --card-status
487
488 Se vedete tutti i dettagli della smartcard, allora ci siamo. Sfortunatamente,
489 affrontare tutti i possibili motivi per cui le cose potrebbero non funzionare
490 non è lo scopo di questa guida. Se avete problemi nel far funzionare la carta
491 con GnuPG, cercate aiuto attraverso i soliti canali di supporto.
492
493 Per configurare la vostra smartcard, dato che non c'è una via facile dalla
494 riga di comando, dovrete usate il menu di GnuPG::
495
496     $ gpg --card-edit
497     [...omitted...]
498     gpg/card> admin
499     Admin commands are allowed
500     gpg/card> passwd
501
502 Dovreste impostare il PIN dell'utente (1), quello dell'amministratore (3) e il
503 codice di reset (4). Assicuratevi di annotare e salvare questi codici in un
504 posto sicuro -- specialmente il PIN dell'amministratore e il codice di reset
505 (che vi permetterà di azzerare completamente la smartcard).  Il PIN
506 dell'amministratore viene usato così raramente che è inevitabile dimenticarselo
507 se non lo si annota.
508
509 Tornando al nostro menu, potete impostare anche altri valori (come il nome,
510 il sesso, informazioni d'accesso, eccetera), ma non sono necessari e aggiunge
511 altre informazioni sulla carta che potrebbero trapelare in caso di smarrimento.
512
513 .. note::
514
515     A dispetto del nome "PIN", né il PIN utente né quello dell'amministratore
516     devono essere esclusivamente numerici.
517
518 Spostare le sottochiavi sulla smartcard
519 ---------------------------------------
520
521 Uscite dal menu (usando "q") e salverete tutte le modifiche. Poi, spostiamo
522 tutte le sottochiavi sulla smartcard. Per la maggior parte delle operazioni
523 vi serviranno sia la passphrase della chiave PGP che il PIN
524 dell'amministratore::
525
526     $ gpg --edit-key [fpr]
527
528     Secret subkeys are available.
529
530     pub  rsa2048/AAAABBBBCCCCDDDD
531          created: 2018-01-23  expires: 2020-01-23  usage: SC
532          trust: ultimate      validity: ultimate
533     ssb  rsa2048/1111222233334444
534          created: 2018-01-23  expires: never       usage: E
535     ssb  ed25519/5555666677778888
536          created: 2017-12-07  expires: never       usage: S
537     [ultimate] (1). Alice Dev <adev@kernel.org>
538
539     gpg>
540
541 Usando ``--edit-key`` si tornerà alla modalità menu e noterete che
542 la lista delle chiavi è leggermente diversa. Da questo momento in poi,
543 tutti i comandi saranno eseguiti nella modalità menu, come indicato
544 da ``gpg>``.
545
546 Per prima cosa, selezioniamo la chiave che verrà messa sulla carta --
547 potete farlo digitando ``key 1`` (è la prima della lista, la sottochiave
548 **[E]**)::
549
550     gpg> key 1
551
552 Nel'output dovreste vedere ``ssb*`` associato alla chiave **[E]**. Il simbolo
553 ``*`` indica che la chiave è stata "selezionata". Funziona come un
554 interruttore, ovvero se scrivete nuovamente ``key 1``, il simbolo ``*`` sparirà
555 e la chiave non sarà più selezionata.
556
557 Ora, spostiamo la chiave sulla smartcard::
558
559     gpg> keytocard
560     Please select where to store the key:
561        (2) Encryption key
562     Your selection? 2
563
564 Dato che è la nostra chiave  **[E]**, ha senso metterla nella sezione criptata.
565 Quando confermerete la selezione, vi verrà chiesta la passphrase della vostra
566 chiave PGP, e poi il PIN dell'amministratore. Se il comando ritorna senza
567 errori, allora la vostra chiave è stata spostata con successo.
568
569 **Importante**: digitate nuovamente ``key 1`` per deselezionare la prima chiave
570 e selezionate la seconda chiave **[S]** con ``key 2``::
571
572     gpg> key 1
573     gpg> key 2
574     gpg> keytocard
575     Please select where to store the key:
576        (1) Signature key
577        (3) Authentication key
578     Your selection? 1
579
580 Potete usare la chiave **[S]** sia per firmare che per autenticare, ma vogliamo
581 che sia nella sezione di firma, quindi scegliete (1). Ancora una volta, se il
582 comando ritorna senza errori, allora l'operazione è avvenuta con successo::
583
584     gpg> q
585     Save changes? (y/N) y
586
587 Salvando le modifiche cancellerete dalla vostra cartella home tutte le chiavi
588 che avete spostato sulla carta (ma questo non è un problema, perché abbiamo
589 fatto delle copie di sicurezza nel caso in cui dovessimo configurare una
590 nuova smartcard).
591
592 Verificare che le chiavi siano state spostate
593 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
594
595 Ora, se doveste usare l'opzione ``--list-secret-keys``, vedrete una
596 sottile differenza nell'output::
597
598     $ gpg --list-secret-keys
599     sec#  rsa2048 2018-01-24 [SC] [expires: 2020-01-24]
600           000000000000000000000000AAAABBBBCCCCDDDD
601     uid           [ultimate] Alice Dev <adev@kernel.org>
602     ssb>  rsa2048 2018-01-24 [E] [expires: 2020-01-24]
603     ssb>  ed25519 2018-01-24 [S]
604
605 Il simbolo ``>`` in ``ssb>`` indica che la sottochiave è disponibile solo
606 nella smartcard. Se tornate nella vostra cartella delle chiavi segrete e
607 guardate al suo contenuto, noterete che i file ``.key`` sono stati sostituiti
608 con degli stub::
609
610     $ cd ~/.gnupg/private-keys-v1.d
611     $ strings *.key | grep 'private-key'
612
613 Per indicare che i file sono solo degli stub e che in realtà il contenuto è
614 sulla smartcard, l'output dovrebbe mostrarvi ``shadowed-private-key``.
615
616 Verificare che la smartcard funzioni
617 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
618
619 Per verificare che la smartcard funzioni come dovuto, potete creare
620 una firma::
621
622     $ echo "Hello world" | gpg --clearsign > /tmp/test.asc
623     $ gpg --verify /tmp/test.asc
624
625 Col primo comando dovrebbe chiedervi il PIN della smartcard, e poi dovrebbe
626 mostrare "Good signature" dopo l'esecuzione di ``gpg --verify``.
627
628 Complimenti, siete riusciti a rendere estremamente difficile il furto della
629 vostra identità digitale di sviluppatore.
630
631 Altre operazioni possibili con GnuPG
632 ------------------------------------
633
634 Segue un breve accenno ad alcune delle operazioni più comuni che dovrete
635 fare con le vostre chiavi PGP.
636
637 Montare il disco con la chiave primaria
638 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
639
640 Vi servirà la vostra chiave principale per tutte le operazioni che seguiranno,
641 per cui per prima cosa dovrete accedere ai vostri backup e dire a GnuPG di
642 usarli::
643
644     $ export GNUPGHOME=/media/disk/foo/gnupg-backup
645     $ gpg --list-secret-keys
646
647 Dovete assicurarvi di vedere ``sec`` e non ``sec#`` nell'output del programma
648 (il simbolo ``#`` significa che la chiave non è disponibile e che state ancora
649 utilizzando la vostra solita cartella di lavoro).
650
651 Estendere la data di scadenza di una chiave
652 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
653
654 La chiave principale ha una data di scadenza di 2 anni dal momento della sua
655 creazione. Questo per motivi di sicurezza e per rendere obsolete le chiavi
656 che, eventualmente, dovessero sparire dai keyserver.
657
658 Per estendere di un anno, dalla data odierna, la scadenza di una vostra chiave,
659 eseguite::
660
661     $ gpg --quick-set-expire [fpr] 1y
662
663 Se per voi è più facile da memorizzare, potete anche utilizzare una data
664 specifica (per esempio, il vostro compleanno o capodanno)::
665
666     $ gpg --quick-set-expire [fpr] 2020-07-01
667
668 Ricordatevi di inviare l'aggiornamento ai keyserver::
669
670     $ gpg --send-key [fpr]
671
672 Aggiornare la vostra cartella di lavoro dopo ogni modifica
673 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
674
675 Dopo aver fatto delle modifiche alle vostre chiavi usando uno spazio a parte,
676 dovreste importarle nella vostra cartella di lavoro abituale::
677
678     $ gpg --export | gpg --homedir ~/.gnupg --import
679     $ unset GNUPGHOME
680
681
682 Usare PGP con Git
683 =================
684
685 Una delle caratteristiche fondanti di Git è la sua natura decentralizzata --
686 una volta che il repositorio è stato clonato sul vostro sistema, avete la
687 storia completa del progetto, inclusi i suoi tag, i commit ed i rami. Tuttavia,
688 con i centinaia di repositori clonati che ci sono in giro, come si fa a
689 verificare che la loro copia di linux.git non è stata manomessa da qualcuno?
690
691 Oppure, cosa succede se viene scoperta una backdoor nel codice e la riga
692 "Autore" dice che sei stato tu, mentre tu sei abbastanza sicuro di
693 `non averci niente a che fare`_?
694
695 Per risolvere entrambi i problemi, Git ha introdotto l'integrazione con PGP.
696 I tag firmati dimostrano che il repositorio è integro assicurando che il suo
697 contenuto è lo stesso che si trova sulle macchine degli sviluppatori che hanno
698 creato il tag; mentre i commit firmati rendono praticamente impossibile
699 ad un malintenzionato di impersonarvi senza avere accesso alle vostre chiavi
700 PGP.
701
702 .. _`non averci niente a che fare`: https://github.com/jayphelps/git-blame-someone-else
703
704 Configurare git per usare la vostra chiave PGP
705 ----------------------------------------------
706
707 Se avete solo una chiave segreta nel vostro portachiavi, allora non avete nulla
708 da fare in più dato che sarà la vostra chiave di base. Tuttavia, se doveste
709 avere più chiavi segrete, potete dire a git quale dovrebbe usare (``[fpg]``
710 è la vostra impronta digitale)::
711
712     $ git config --global user.signingKey [fpr]
713
714 **IMPORTANTE**: se avete una comando dedicato per ``gpg2``, allora dovreste
715 dire a git di usare sempre quello piuttosto che il vecchio comando ``gpg``::
716
717     $ git config --global gpg.program gpg2
718
719 Come firmare i tag
720 ------------------
721
722 Per creare un tag firmato, passate l'opzione ``-s`` al comando tag::
723
724     $ git tag -s [tagname]
725
726 La nostra raccomandazione è quella di firmare sempre i tag git, perché
727 questo permette agli altri sviluppatori di verificare che il repositorio
728 git dal quale stanno prendendo il codice non è stato alterato intenzionalmente.
729
730 Come verificare i tag firmati
731 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
732
733 Per verificare un tag firmato, potete usare il comando ``verify-tag``::
734
735     $ git verify-tag [tagname]
736
737 Se state prendendo un tag da un fork del repositorio del progetto, git
738 dovrebbe verificare automaticamente la firma di quello che state prendendo
739 e vi mostrerà il risultato durante l'operazione di merge::
740
741     $ git pull [url] tags/sometag
742
743 Il merge conterrà qualcosa di simile::
744
745     Merge tag 'sometag' of [url]
746
747     [Tag message]
748
749     # gpg: Signature made [...]
750     # gpg: Good signature from [...]
751
752 Se state verificando il tag di qualcun altro, allora dovrete importare
753 la loro chiave PGP. Fate riferimento alla sezione ":ref:`it_verify_identities`"
754 che troverete più avanti.
755
756 Configurare git per firmare sempre i tag con annotazione
757 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
758
759 Se state creando un tag con annotazione è molto probabile che vogliate
760 firmarlo. Per imporre a git di firmare sempre un tag con annotazione,
761 dovete impostare la seguente opzione globale::
762
763     $ git config --global tag.forceSignAnnotated true
764
765 Come usare commit firmati
766 -------------------------
767
768 Creare dei commit firmati è facile, ma è molto più difficile utilizzarli
769 nello sviluppo del kernel linux per via del fatto che ci si affida alle
770 liste di discussione e questo modo di procedere non mantiene le firme PGP
771 nei commit. In aggiunta, quando si usa *rebase* nel proprio repositorio
772 locale per allinearsi al kernel anche le proprie firme PGP verranno scartate.
773 Per questo motivo, la maggior parte degli sviluppatori del kernel non si
774 preoccupano troppo di firmare i propri commit ed ignoreranno quelli firmati
775 che si trovano in altri repositori usati per il proprio lavoro.
776
777 Tuttavia, se avete il vostro repositorio di lavoro disponibile al pubblico
778 su un qualche servizio di hosting git (kernel.org, infradead.org, ozlabs.org,
779 o altri), allora la raccomandazione è di firmare tutti i vostri commit
780 anche se gli sviluppatori non ne beneficeranno direttamente.
781
782 Vi raccomandiamo di farlo per i seguenti motivi:
783
784 1. Se dovesse mai esserci la necessità di fare delle analisi forensi o
785    tracciare la provenienza di un codice, anche sorgenti mantenuti
786    esternamente che hanno firme PGP sui commit avranno un certo valore a
787    questo scopo.
788 2. Se dovesse mai capitarvi di clonare il vostro repositorio locale (per
789    esempio dopo un danneggiamento del disco), la firma vi permetterà di
790    verificare l'integrità del repositorio prima di riprendere il lavoro.
791 3. Se qualcuno volesse usare *cherry-pick* sui vostri commit, allora la firma
792    permetterà di verificare l'integrità dei commit prima di applicarli.
793
794 Creare commit firmati
795 ~~~~~~~~~~~~~~~~~~~~~
796
797 Per creare un commit firmato, dovete solamente aggiungere l'opzione ``-S``
798 al comando ``git commit`` (si usa la lettera maiuscola per evitare
799 conflitti con un'altra opzione)::
800
801     $ git commit -S
802
803 Configurare git per firmare sempre i commit
804 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
805
806 Potete dire a git di firmare sempre i commit::
807
808     git config --global commit.gpgSign true
809
810 .. note::
811
812     Assicuratevi di aver configurato ``gpg-agent`` prima di abilitare
813     questa opzione.
814
815 .. _it_verify_identities:
816
817 Come verificare l'identità degli sviluppatori del kernel
818 ========================================================
819
820 Firmare i tag e i commit è facile, ma come si fa a verificare che la chiave
821 usata per firmare qualcosa appartenga davvero allo sviluppatore e non ad un
822 impostore?
823
824 Configurare l'auto-key-retrieval usando WKD e DANE
825 --------------------------------------------------
826
827 Se non siete ancora in possesso di una vasta collezione di chiavi pubbliche
828 di altri sviluppatori, allora potreste iniziare il vostro portachiavi
829 affidandovi ai servizi di auto-scoperta e auto-recupero. GnuPG può affidarsi
830 ad altre tecnologie di delega della fiducia, come DNSSEC e TLS, per sostenervi
831 nel caso in cui iniziare una propria rete di fiducia da zero sia troppo
832 scoraggiante.
833
834 Aggiungete il seguente testo al vostro file ``~/.gnupg/gpg.conf``::
835
836     auto-key-locate wkd,dane,local
837     auto-key-retrieve
838
839 La *DNS-Based Authentication of Named Entities* ("DANE") è un metodo
840 per la pubblicazione di chiavi pubbliche su DNS e per renderle sicure usando
841 zone firmate con DNSSEC. Il *Web Key Directory* ("WKD") è un metodo
842 alternativo che usa https a scopo di ricerca. Quando si usano DANE o WKD
843 per la ricerca di chiavi pubbliche, GnuPG validerà i certificati DNSSEC o TLS
844 prima di aggiungere al vostro portachiavi locale le eventuali chiavi trovate.
845
846 Kernel.org pubblica la WKD per tutti gli sviluppatori che hanno un account
847 kernel.org. Una volta che avete applicato le modifiche al file ``gpg.conf``,
848 potrete auto-recuperare le chiavi di Linus Torvalds e Greg Kroah-Hartman
849 (se non le avete già)::
850
851     $ gpg --locate-keys torvalds@kernel.org gregkh@kernel.org
852
853 Se avete un account kernel.org, al fine di rendere più utile l'uso di WKD
854 da parte di altri sviluppatori del kernel, dovreste `aggiungere alla vostra
855 chiave lo UID di kernel.org`_.
856
857 .. _`aggiungere alla vostra chiave lo UID di kernel.org`: https://korg.wiki.kernel.org/userdoc/mail#adding_a_kernelorg_uid_to_your_pgp_key
858
859 Web of Trust (WOT) o Trust on First Use (TOFU)
860 ----------------------------------------------
861
862 PGP incorpora un meccanismo di delega della fiducia conosciuto come
863 "Web of Trust". Di base, questo è un tentativo di sostituire la necessità
864 di un'autorità certificativa centralizzata tipica del mondo HTTPS/TLS.
865 Invece di avere svariati produttori software che decidono chi dovrebbero
866 essere le entità di certificazione di cui dovreste fidarvi, PGP lascia
867 la responsabilità ad ogni singolo utente.
868
869 Sfortunatamente, solo poche persone capiscono come funziona la rete di fiducia.
870 Nonostante sia un importante aspetto della specifica OpenPGP, recentemente
871 le versioni di GnuPG (2.2 e successive) hanno implementato un meccanisco
872 alternativo chiamato "Trust on First Use" (TOFU). Potete pensare a TOFU come
873 "ad un approccio all fidicia simile ad SSH". In SSH, la prima volta che vi
874 connettete ad un sistema remoto, l'impronta digitale della chiave viene
875 registrata e ricordata. Se la chiave dovesse cambiare in futuro, il programma
876 SSH vi avviserà e si rifiuterà di connettersi, obbligandovi a prendere una
877 decisione circa la fiducia che riponete nella nuova chiave. In modo simile,
878 la prima volta che importate la chiave PGP di qualcuno, si assume sia valida.
879 Se ad un certo punto GnuPG trova un'altra chiave con la stessa identità,
880 entrambe, la vecchia e la nuova, verranno segnate come invalide e dovrete
881 verificare manualmente quale tenere.
882
883 Vi raccomandiamo di usare il meccanisco TOFU+PGP (che è la nuova configurazione
884 di base di GnuPG v2). Per farlo, aggiungete (o modificate) l'impostazione
885 ``trust-model`` in ``~/.gnupg/gpg.conf``::
886
887     trust-model tofu+pgp
888
889 Come usare i keyserver in sicurezza
890 -----------------------------------
891 Se ottenete l'errore "No public key" quando cercate di validate il tag di
892 qualcuno, allora dovreste cercare quella chiave usando un keyserver. È
893 importante tenere bene a mente che non c'è alcuna garanzia che la chiave
894 che avete recuperato da un keyserver PGP appartenga davvero alla persona
895 reale -- è progettato così. Dovreste usare il Web of Trust per assicurarvi
896 che la chiave sia valida.
897
898 Come mantenere il Web of Trust va oltre gli scopi di questo documento,
899 semplicemente perché farlo come si deve richiede sia sforzi che perseveranza
900 che tendono ad andare oltre al livello di interesse della maggior parte degli
901 esseri umani. Qui di seguito alcuni rapidi suggerimenti per aiutarvi a ridurre
902 il rischio di importare chiavi maligne.
903
904 Primo, diciamo che avete provato ad eseguire ``git verify-tag`` ma restituisce
905 un errore dicendo che la chiave non è stata trovata::
906
907     $ git verify-tag sunxi-fixes-for-4.15-2
908     gpg: Signature made Sun 07 Jan 2018 10:51:55 PM EST
909     gpg:                using RSA key DA73759BF8619E484E5A3B47389A54219C0F2430
910     gpg:                issuer "wens@...org"
911     gpg: Can't check signature: No public key
912
913 Cerchiamo nel keyserver per maggiori informazioni sull'impronta digitale
914 della chiave (l'impronta digitale, probabilmente, appartiene ad una
915 sottochiave, dunque non possiamo usarla direttamente senza trovare prima
916 l'ID della chiave primaria associata ad essa)::
917
918     $ gpg --search DA73759BF8619E484E5A3B47389A54219C0F2430
919     gpg: data source: hkp://keys.gnupg.net
920     (1) Chen-Yu Tsai <wens@...org>
921           4096 bit RSA key C94035C21B4F2AEB, created: 2017-03-14, expires: 2019-03-15
922     Keys 1-1 of 1 for "DA73759BF8619E484E5A3B47389A54219C0F2430".  Enter number(s), N)ext, or Q)uit > q
923
924 Localizzate l'ID della chiave primaria, nel nostro esempio
925 ``C94035C21B4F2AEB``. Ora visualizzate le chiavi di Linus Torvalds
926 che avete nel vostro portachiavi::
927
928     $ gpg --list-key torvalds@kernel.org
929     pub   rsa2048 2011-09-20 [SC]
930           ABAF11C65A2970B130ABE3C479BE3E4300411886
931     uid           [ unknown] Linus Torvalds <torvalds@kernel.org>
932     sub   rsa2048 2011-09-20 [E]
933
934 Poi, aprite il `PGP pathfinder`_. Nel campo "From", incollate l'impronta
935 digitale della chiave di Linus Torvalds che si vede nell'output qui sopra.
936 Nel campo "to", incollate il key-id della chiave sconosciuta che avete
937 trovato con ``gpg --search``, e poi verificare il risultato:
938
939 - `Finding paths to Linus`_
940
941 Se trovate un paio di percorsi affidabili è un buon segno circa la validità
942 della chiave. Ora, potete aggiungerla al vostro portachiavi dal keyserver::
943
944     $ gpg --recv-key C94035C21B4F2AEB
945
946 Questa procedura non è perfetta, e ovviamente state riponendo la vostra
947 fiducia nell'amministratore del servizio *PGP Pathfinder* sperando che non
948 sia malintenzionato (infatti, questo va contro :ref:`it_devs_not_infra`).
949 Tuttavia, se mantenete con cura la vostra rete di fiducia sarà un deciso
950 miglioramento rispetto alla cieca fiducia nei keyserver.
951
952 .. _`PGP pathfinder`: https://pgp.cs.uu.nl/
953 .. _`Finding paths to Linus`: https://pgp.cs.uu.nl/paths/79BE3E4300411886/to/C94035C21B4F2AEB.html