~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/translations/it_IT/process/maintainer-pgp-guide.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 2.2 o successivo
 72 ----------------------------
 73 
 74 La vostra distribuzione potrebbe avere già installato GnuPG, dovete solo
 75 verificare che stia utilizzando la versione abbastanza recente. Per controllate
 76 usate::
 77 
 78     $ gpg --version | head -n1
 79 
 80 Se state utilizzando la version 2.2 o successiva, allora siete pronti a partire.
 81 Se invece state usando una versione precedente, allora alcuni comandi elencati
 82 in questa guida potrebbero non funzionare.
 83 
 84 Configurare le opzioni di gpg-agent
 85 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 86 
 87 L'agente GnuPG è uno strumento di aiuto che partirà automaticamente ogni volta
 88 che userete il comando ``gpg`` e funzionerà in *background* con l'obiettivo di
 89 individuare la passphrase. Ci sono due opzioni che dovreste conoscere
 90 per personalizzare la scadenza della passphrase nella cache:
 91 
 92 - ``default-cache-ttl`` (secondi): Se usate ancora la stessa chiave prima
 93   che il time-to-live termini, il conto alla rovescia si resetterà per un
 94   altro periodo. Di base è di 600 (10 minuti).
 95 
 96 - ``max-cache-ttl`` (secondi): indipendentemente da quanto sia recente l'ultimo
 97   uso della chiave da quando avete inserito la passphrase, se il massimo
 98   time-to-live è scaduto, dovrete reinserire nuovamente la passphrase.
 99   Di base è di 30 minuti.
100 
101 Se ritenete entrambe questi valori di base troppo corti (o troppo lunghi),
102 potete creare il vostro file ``~/.gnupg/gpg-agent.conf`` ed impostare i vostri
103 valori::
104 
105     # set to 30 minutes for regular ttl, and 2 hours for max ttl
106     default-cache-ttl 1800
107     max-cache-ttl 7200
108 
109 .. note::
110 
111     Non è più necessario far partire l'agente gpg manualmente all'inizio della
112     vostra sessione. Dovreste controllare i file rc per rimuovere tutto ciò che
113     riguarda vecchie le versioni di GnuPG, poiché potrebbero non svolgere più
114     bene il loro compito.
115 
116 .. _it_protect_your_key:
117 
118 Proteggere la vostra chiave PGP primaria
119 ========================================
120 
121 Questa guida parte dal presupposto che abbiate già una chiave PGP che usate
122 per lo sviluppo del kernel Linux. Se non ne avete ancora una, date uno sguardo
123 al documento "`Protecting Code Integrity`_" che abbiamo menzionato prima.
124 
125 Dovreste inoltre creare una nuova chiave se quella attuale è inferiore a 2048
126 bit (RSA).
127 
128 Le sottochiavi PGP
129 ------------------
130 
131 Raramente le chiavi PGP sono composte da una singola coppia -- solitamente, sono
132 una collezione di sottochiavi indipendenti usate per diversi scopi in funzione
133 delle capacità assegnate al momento della creazione. Una chiave PGP può avere
134 quattro capacità:
135 
136 - **[S]** può essere usata per firmare
137 - **[E]** può essere usata per criptare
138 - **[A]** può essere usata per autenticare
139 - **[C]** può essere usata per certificare altre chiavi
140 
141 La chiave con la capacità **[C]** viene spesso chiamata chiave "passepartout"
142 (*master key*), ma è una terminologia fuorviante perché lascia intendere che la
143 chiave di certificato possa essere usate in sostituzione delle altre (proprio
144 come le vere chiavi passpartout in grado di aprire diverse serrature). Dato che
145 questo non è il caso, per evitare fraintendimenti, in questa guida ci riferiremo
146 a questa chiave chiamandola "La chiave di certificazione".
147 
148 I seguenti punti sono molto importanti:
149 
150 1. Tutte le sottochiavi sono indipendenti. Se perdete una sottochiave privata
151    non potrete recuperarla usando le altre.
152 2. Ad eccezione della chiave di certificazione, ci possono essere più
153    sottochiavi con le stesse capacità (per esempio, potete avere 2 sottochiavi
154    per criptare, 3 per firmare, ma solo una per una sola per certificare). Tutte
155    le sottochiavi sono indipendenti -- un messaggio criptato usando una chiave
156    **[E]** non può essere decriptato usano altre sottochiavi **[E]**.
157 3. Una sottochiave può avere più capacità (per esempio, la chiave **[C]** può
158    anche essere una chiave **[S]**).
159 
160 La chiave con capacità **[C]** (certificazione) è la sola che può essere usata
161 per indicare relazioni fra chiavi. Solo la chiave **[C]** può essere usata per:
162 
163 - aggiungere o revocare altre chiavi (sottochiavi) che hanno capacità S/E/A;
164 - aggiungere, modificare o eliminare le identità (unids) associate alla chiave;
165 - aggiungere o modificare la propria data di scadenza o delle sottochiavi;
166 - firmare le chiavi di altre persone a scopo di creare una rete di fiducia.
167 
168 Di base, alla creazione di nuove chiavi, GnuPG genera quanto segue:
169 
170 - Una chiave la capacità di certificazione che quella di firma (**[SC]**)
171 - Una sottochiave separata con capacità di criptare (**[E]**)
172 
173 
174 
175 
176 Se avete usato i parametri predefiniti per generare la vostra chiave, quello
177 sarà il risultato. Potete verificarlo utilizzando ``gpg --list-secret-keys``,
178 per esempio::
179 
180     sec   ed25519 2022-12-20 [SC] [expires: 2024-12-19]
181           000000000000000000000000AAAABBBBCCCCDDDD
182     uid           [ultimate] Alice Dev <adev@kernel.org>
183     ssb   cv25519 2022-12-20 [E] [expires: 2024-12-19]
184 
185 La lunga riga sotto la voce ``sec`` è la vostra impronta digitale --
186 negli esempi che seguono, quando vedere ``[fpr]`` ci si riferisce a questa
187 stringa di 40 caratteri.
188 
189 Assicuratevi che la vostra passphrase sia forte
190 -----------------------------------------------
191 
192 GnuPG utilizza le passphrases per criptare la vostra chiave privata prima
193 di salvarla sul disco. In questo modo, anche se il contenuto della vostra
194 cartella ``.gnupg`` venisse letto o trafugato nella sia interezza, gli
195 attaccanti non potrebbero comunque utilizzare le vostre chiavi private senza
196 aver prima ottenuto la passphrase per decriptarle.
197 
198 È assolutamente essenziale che le vostre chiavi private siano protette da
199 una passphrase forte. Per impostarla o cambiarla, usate::
200 
201     $ gpg --change-passphrase [fpr]
202 
203 Create una sottochiave di firma separata
204 ----------------------------------------
205 
206 Il nostro obiettivo è di proteggere la chiave primaria spostandola su un
207 dispositivo sconnesso dalla rete, dunque se avete solo una chiave combinata
208 **[SC]** allora dovreste creare una sottochiave di firma separata::
209 
210     $ gpg --quick-add-key [fpr] ed25519 sign
211 
212 Ricordate di informare il keyserver del vostro cambiamento, cosicché altri
213 possano ricevere la vostra nuova sottochiave::
214 
215     $ gpg --send-key [fpr]
216 
217 .. note:: Supporto ECC in GnuPG
218 
219    Tenete presente che se avete intenzione di usare un dispositivo che non
220    supporta chiavi ED25519 ECC, allora dovreste usare "nistp256" al posto di
221    "ed25519". Più avanti ci sono alcune raccomandazioni per i dispositivi.
222 
223 Copia di riserva della chiave primaria per gestire il recupero da disastro
224 --------------------------------------------------------------------------
225 
226 Maggiori sono le firme di altri sviluppatori che vengono applicate alla vostra,
227 maggiori saranno i motivi per avere una copia di riserva che non sia digitale,
228 al fine di effettuare un recupero da disastro.
229 
230 Il modo migliore per creare una copia fisica della vostra chiave privata è
231 l'uso del programma ``paperkey``. Consultate ``man paperkey`` per maggiori
232 dettagli sul formato dell'output ed i suoi punti di forza rispetto ad altre
233 soluzioni. Paperkey dovrebbe essere già pacchettizzato per la maggior parte
234 delle distribuzioni.
235 
236 Eseguite il seguente comando per creare una copia fisica di riserva della
237 vostra chiave privata::
238 
239     $ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txt
240 
241 Stampate il file (o fate un pipe direttamente verso lpr), poi prendete
242 una penna e scrivete la passphare sul margine del foglio.  **Questo è
243 caldamente consigliato** perché la copia cartacea è comunque criptata con
244 la passphrase, e se mai doveste cambiarla non vi ricorderete qual'era al
245 momento della creazione di quella copia -- *garantito*.
246 
247 Mettete la copia cartacea e la passphrase scritta a mano in una busta e
248 mettetela in un posto sicuro e ben protetto, preferibilmente fuori casa,
249 magari in una cassetta di sicurezza in banca.
250 
251 .. note::
252 
253     Probabilmente la vostra stampante non è più quello stupido dispositivo
254     connesso alla porta parallela, ma dato che il suo output è comunque
255     criptato con la passphrase, eseguire la stampa in un sistema "cloud"
256     moderno dovrebbe essere comunque relativamente sicuro.
257 
258 Copia di riserva di tutta la cartella GnuPG
259 -------------------------------------------
260 
261 .. warning::
262 
263     **!!!Non saltate questo passo!!!**
264 
265 Quando avete bisogno di recuperare le vostre chiavi PGP è importante avere
266 una copia di riserva pronta all'uso. Questo sta su un diverso piano di
267 prontezza rispetto al recupero da disastro che abbiamo risolto con
268 ``paperkey``. Vi affiderete a queste copie esterne quando dovreste usare la
269 vostra chiave Certify -- ovvero quando fate modifiche alle vostre chiavi o
270 firmate le chiavi di altre persone ad una conferenza o ad un gruppo d'incontro.
271 
272 Incominciate con una piccola chiavetta di memoria USB (preferibilmente due)
273 che userete per le copie di riserva. Dovrete criptarle usando LUKS -- fate
274 riferimento alla documentazione della vostra distribuzione per capire come
275 fare.
276 
277 Per la passphrase di criptazione, potete usare la stessa della vostra chiave
278 primaria.
279 
280 Una volta che il processo di criptazione è finito, reinserite il disco USB ed
281 assicurativi che venga montato correttamente. Copiate interamente la cartella
282 ``.gnugp`` nel disco criptato::
283 
284     $ cp -a ~/.gnupg /media/disk/foo/gnupg-backup
285 
286 Ora dovreste verificare che tutto continui a funzionare::
287 
288     $ gpg --homedir=/media/disk/foo/gnupg-backup --list-key [fpr]
289 
290 Se non vedete errori, allora dovreste avere fatto tutto con successo.
291 Smontate il disco USB, etichettatelo per bene di modo da evitare di
292 distruggerne il contenuto non appena vi serve una chiavetta USB a caso, ed
293 infine mettetelo in un posto sicuro -- ma non troppo lontano, perché vi servirà
294 di tanto in tanto per modificare le identità, aggiungere o revocare
295 sottochiavi, o firmare le chiavi di altre persone.
296 
297 Togliete la chiave primaria dalla vostra home
298 ---------------------------------------------
299 
300 I file che si trovano nella vostra cartella home non sono poi così ben protetti
301 come potreste pensare. Potrebbero essere letti o trafugati in diversi modi:
302 
303 - accidentalmente quando fate una rapida copia della cartella home per
304   configurare una nuova postazione
305 - da un amministratore di sistema negligente o malintenzionato
306 - attraverso copie di riserva insicure
307 - attraverso malware installato in alcune applicazioni (browser, lettori PDF,
308   eccetera)
309 - attraverso coercizione quando attraversate confini internazionali
310 
311 Proteggere la vostra chiave con una buona passphare aiuta notevolmente a
312 ridurre i rischi elencati qui sopra, ma le passphrase possono essere scoperte
313 attraverso i keylogger, il shoulder-surfing, o altri modi. Per questi motivi,
314 nella configurazione si raccomanda di rimuove la chiave primaria dalla vostra
315 cartella home e la si archivia su un dispositivo disconnesso.
316 
317 .. warning::
318 
319     Per favore, fate riferimento alla sezione precedente e assicuratevi
320     di aver fatto una copia di riserva totale della cartella GnuPG. Quello
321     che stiamo per fare renderà la vostra chiave inutile se non avete delle
322     copie di riserva utilizzabili!
323 
324 Per prima cosa, identificate il keygrip della vostra chiave primaria::
325 
326     $ gpg --with-keygrip --list-key [fpr]
327 
328 L'output assomiglierà a questo::
329 
330     pub   ed25519 2022-12-20 [SC] [expires: 2022-12-19]
331           000000000000000000000000AAAABBBBCCCCDDDD
332           Keygrip = 1111000000000000000000000000000000000000
333     uid           [ultimate] Alice Dev <adev@kernel.org>
334     sub   cv25519 2022-12-20 [E] [expires: 2022-12-19]
335           Keygrip = 2222000000000000000000000000000000000000
336     sub   ed25519 2022-12-20 [S]
337           Keygrip = 3333000000000000000000000000000000000000
338 
339 Trovate la voce keygrid che si trova sotto alla riga ``pub`` (appena sotto
340 all'impronta digitale della chiave primaria). Questo corrisponderà direttamente
341 ad un file nella cartella ``~/.gnupg``::
342 
343     $ cd ~/.gnupg/private-keys-v1.d
344     $ ls
345     1111000000000000000000000000000000000000.key
346     2222000000000000000000000000000000000000.key
347     3333000000000000000000000000000000000000.key
348 
349 Quello che dovrete fare è rimuovere il file .key che corrisponde al keygrip
350 della chiave primaria::
351 
352     $ cd ~/.gnupg/private-keys-v1.d
353     $ rm 1111000000000000000000000000000000000000.key
354 
355 Ora, se eseguite il comando ``--list-secret-keys``, vedrete che la chiave
356 primaria non compare più (il simbolo ``#`` indica che non è disponibile)::
357 
358     $ gpg --list-secret-keys
359     sec#  ed25519 2022-12-20 [SC] [expires: 2024-12-19]
360           000000000000000000000000AAAABBBBCCCCDDDD
361     uid           [ultimate] Alice Dev <adev@kernel.org>
362     ssb   cv25519 2022-12-20 [E] [expires: 2024-12-19]
363     ssb   ed25519 2022-12-20 [S]
364 
365 Dovreste rimuovere anche i file ``secring.gpg`` che si trovano nella cartella
366 ``~/.gnupg``, in quanto rimasugli delle versioni precedenti di GnuPG.
367 
368 Se non avete la cartella "private-keys-v1.d"
369 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
370 
371 Se non avete la cartella ``~/.gnupg/private-keys-v1.d``, allora le vostre
372 chiavi segrete sono ancora salvate nel vecchio file ``secring.gpg`` usato
373 da GnuPG v1. Effettuare una qualsiasi modifica alla vostra chiave, come
374 cambiare la passphare o aggiungere una sottochiave, dovrebbe convertire
375 automaticamente il vecchio formato ``secring.gpg``nel nuovo
376 ``private-keys-v1.d``.
377 
378 Una volta che l'avete fatto, assicuratevi di rimuovere il file ``secring.gpg``,
379 che continua a contenere la vostra chiave privata.
380 
381 .. _it_smartcards:
382 
383 Spostare le sottochiavi in un apposito dispositivo criptato
384 ===========================================================
385 
386 Nonostante la chiave primaria sia ora al riparo da occhi e mani indiscrete,
387 le sottochiavi si trovano ancora nella vostra cartella home. Chiunque riesca
388 a mettere le sue mani su quelle chiavi riuscirà a decriptare le vostre
389 comunicazioni o a falsificare le vostre firme (se conoscono la passphrase).
390 Inoltre, ogni volta che viene fatta un'operazione con GnuPG, le chiavi vengono
391 caricate nella memoria di sistema e potrebbero essere rubate con l'uso di
392 malware sofisticati (pensate a Meltdown e a Spectre).
393 
394 Il miglior modo per proteggere le proprie chiave è di spostarle su un
395 dispositivo specializzato in grado di effettuare operazioni smartcard.
396 
397 I benefici di una smartcard
398 ---------------------------
399 
400 Una smartcard contiene un chip crittografico che è capace di immagazzinare
401 le chiavi private ed effettuare operazioni crittografiche direttamente sulla
402 carta stessa. Dato che la chiave non lascia mai la smartcard, il sistema
403 operativo usato sul computer non sarà in grado di accedere alle chiavi.
404 Questo è molto diverso dai dischi USB criptati che abbiamo usato allo scopo di
405 avere una copia di riserva sicura -- quando il dispositivo USB è connesso e
406 montato, il sistema operativo potrà accedere al contenuto delle chiavi private.
407 
408 L'uso di un disco USB criptato non può sostituire le funzioni di un dispositivo
409 capace di operazioni di tipo smartcard.
410 
411 Dispositivi smartcard disponibili
412 ---------------------------------
413 
414 A meno che tutti i vostri computer dispongano di lettori smartcard, il modo
415 più semplice è equipaggiarsi di un dispositivo USB specializzato che
416 implementi le funzionalità delle smartcard.  Sul mercato ci sono diverse
417 soluzioni disponibili:
418 
419 - `Nitrokey Start`_: è Open hardware e Free Software, è basata sul progetto
420   `GnuK`_ della FSIJ. Questo è uno dei pochi dispositivi a supportare le chiavi
421   ECC ED25519, ma offre meno funzionalità di sicurezza (come la resistenza
422   alla manomissione o alcuni attacchi ad un canale laterale).
423 - `Nitrokey Pro 2`_: è simile alla Nitrokey Start, ma è più resistente alla
424   manomissione e offre più funzionalità di sicurezza. La Pro 2 supporta la
425   crittografia ECC (NISTP).
426 - `Yubikey 5`_: l'hardware e il software sono proprietari, ma è più economica
427   della  Nitrokey Pro ed è venduta anche con porta USB-C il che è utile con i
428   computer portatili più recenti. In aggiunta, offre altre funzionalità di
429   sicurezza come FIDO, U2F, e ora supporta anche le chiavi ECC (NISTP)
430 
431 La vostra scelta dipenderà dal costo, la disponibilità nella vostra regione, e
432 sulla scelta fra dispositivi aperti e proprietari.
433 
434 .. note::
435 
436     Se siete nella lista MAINTAINERS o avete un profilo su kernel.org, allora
437     `potrete avere gratuitamente una Nitrokey Start`_ grazie alla fondazione
438     Linux.
439 
440 .. _`Nitrokey Start`: https://shop.nitrokey.com/shop/product/nitrokey-start-6
441 .. _`Nitrokey Pro 2`: https://shop.nitrokey.com/shop/product/nitrokey-pro-2-3
442 .. _`Yubikey 5`: https://www.yubico.com/product/yubikey-5-overview/
443 .. _Gnuk: https://www.fsij.org/doc-gnuk/
444 .. _`potrete avere gratuitamente una Nitrokey Start`: https://www.kernel.org/nitrokey-digital-tokens-for-kernel-developers.html
445 
446 Configurare il vostro dispositivo smartcard
447 -------------------------------------------
448 
449 Il vostro dispositivo smartcard dovrebbe iniziare a funzionare non appena
450 lo collegate ad un qualsiasi computer Linux moderno. Potete verificarlo
451 eseguendo::
452 
453     $ gpg --card-status
454 
455 Se vedete tutti i dettagli della smartcard, allora ci siamo. Sfortunatamente,
456 affrontare tutti i possibili motivi per cui le cose potrebbero non funzionare
457 non è lo scopo di questa guida. Se avete problemi nel far funzionare la carta
458 con GnuPG, cercate aiuto attraverso i soliti canali di supporto.
459 
460 Per configurare la vostra smartcard, dato che non c'è una via facile dalla
461 riga di comando, dovrete usate il menu di GnuPG::
462 
463     $ gpg --card-edit
464     [...omitted...]
465     gpg/card> admin
466     Admin commands are allowed
467     gpg/card> passwd
468 
469 Dovreste impostare il PIN dell'utente (1), quello dell'amministratore (3) e il
470 codice di reset (4). Assicuratevi di annotare e salvare questi codici in un
471 posto sicuro -- specialmente il PIN dell'amministratore e il codice di reset
472 (che vi permetterà di azzerare completamente la smartcard).  Il PIN
473 dell'amministratore viene usato così raramente che è inevitabile dimenticarselo
474 se non lo si annota.
475 
476 Tornando al nostro menu, potete impostare anche altri valori (come il nome,
477 il sesso, informazioni d'accesso, eccetera), ma non sono necessari e aggiunge
478 altre informazioni sulla carta che potrebbero trapelare in caso di smarrimento.
479 
480 .. note::
481 
482     A dispetto del nome "PIN", né il PIN utente né quello dell'amministratore
483     devono essere esclusivamente numerici.
484 
485 .. warning::
486 
487     Alcuni dispositivi richiedono la presenza delle sottochiavi nel dispositivo
488     stesso prima che possiate cambiare la passphare. Verificate la
489     documentazione del produttore.
490 
491 Spostare le sottochiavi sulla smartcard
492 ---------------------------------------
493 
494 Uscite dal menu (usando "q") e salverete tutte le modifiche. Poi, spostiamo
495 tutte le sottochiavi sulla smartcard. Per la maggior parte delle operazioni
496 vi serviranno sia la passphrase della chiave PGP che il PIN
497 dell'amministratore::
498 
499     $ gpg --edit-key [fpr]
500 
501     Secret subkeys are available.
502 
503     pub  ed25519/AAAABBBBCCCCDDDD
504          created: 2022-12-20  expires: 2024-12-19  usage: SC
505          trust: ultimate      validity: ultimate
506     ssb  cv25519/1111222233334444
507          created: 2022-12-20  expires: never       usage: E
508     ssb  ed25519/5555666677778888
509          created: 2017-12-07  expires: never       usage: S
510     [ultimate] (1). Alice Dev <adev@kernel.org>
511 
512     gpg>
513 
514 Usando ``--edit-key`` si tornerà alla modalità menu e noterete che
515 la lista delle chiavi è leggermente diversa. Da questo momento in poi,
516 tutti i comandi saranno eseguiti nella modalità menu, come indicato
517 da ``gpg>``.
518 
519 Per prima cosa, selezioniamo la chiave che verrà messa sulla carta --
520 potete farlo digitando ``key 1`` (è la prima della lista, la sottochiave
521 **[E]**)::
522 
523     gpg> key 1
524 
525 Nel'output dovreste vedere ``ssb*`` associato alla chiave **[E]**. Il simbolo
526 ``*`` indica che la chiave è stata "selezionata". Funziona come un
527 interruttore, ovvero se scrivete nuovamente ``key 1``, il simbolo ``*`` sparirà
528 e la chiave non sarà più selezionata.
529 
530 Ora, spostiamo la chiave sulla smartcard::
531 
532     gpg> keytocard
533     Please select where to store the key:
534        (2) Encryption key
535     Your selection? 2
536 
537 Dato che è la nostra chiave  **[E]**, ha senso metterla nella sezione criptata.
538 Quando confermerete la selezione, vi verrà chiesta la passphrase della vostra
539 chiave PGP, e poi il PIN dell'amministratore. Se il comando ritorna senza
540 errori, allora la vostra chiave è stata spostata con successo.
541 
542 **Importante**: digitate nuovamente ``key 1`` per deselezionare la prima chiave
543 e selezionate la seconda chiave **[S]** con ``key 2``::
544 
545     gpg> key 1
546     gpg> key 2
547     gpg> keytocard
548     Please select where to store the key:
549        (1) Signature key
550        (3) Authentication key
551     Your selection? 1
552 
553 Potete usare la chiave **[S]** sia per firmare che per autenticare, ma vogliamo
554 che sia nella sezione di firma, quindi scegliete (1). Ancora una volta, se il
555 comando ritorna senza errori, allora l'operazione è avvenuta con successo::
556 
557     gpg> q
558     Save changes? (y/N) y
559 
560 Salvando le modifiche cancellerete dalla vostra cartella home tutte le chiavi
561 che avete spostato sulla carta (ma questo non è un problema, perché abbiamo
562 fatto delle copie di sicurezza nel caso in cui dovessimo configurare una
563 nuova smartcard).
564 
565 Verificare che le chiavi siano state spostate
566 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
567 
568 Ora, se doveste usare l'opzione ``--list-secret-keys``, vedrete una
569 sottile differenza nell'output::
570 
571     $ gpg --list-secret-keys
572     sec#  ed25519 2022-12-20 [SC] [expires: 2024-12-19]
573           000000000000000000000000AAAABBBBCCCCDDDD
574     uid           [ultimate] Alice Dev <adev@kernel.org>
575     ssb>  cv25519 2022-12-20 [E] [expires: 2024-12-19]
576     ssb>  ed25519 2022-12-20 [S]
577 
578 Il simbolo ``>`` in ``ssb>`` indica che la sottochiave è disponibile solo
579 nella smartcard. Se tornate nella vostra cartella delle chiavi segrete e
580 guardate al suo contenuto, noterete che i file ``.key`` sono stati sostituiti
581 con degli stub::
582 
583     $ cd ~/.gnupg/private-keys-v1.d
584     $ strings *.key | grep 'private-key'
585 
586 Per indicare che i file sono solo degli stub e che in realtà il contenuto è
587 sulla smartcard, l'output dovrebbe mostrarvi ``shadowed-private-key``.
588 
589 Verificare che la smartcard funzioni
590 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
591 
592 Per verificare che la smartcard funzioni come dovuto, potete creare
593 una firma::
594 
595     $ echo "Hello world" | gpg --clearsign > /tmp/test.asc
596     $ gpg --verify /tmp/test.asc
597 
598 Col primo comando dovrebbe chiedervi il PIN della smartcard, e poi dovrebbe
599 mostrare "Good signature" dopo l'esecuzione di ``gpg --verify``.
600 
601 Complimenti, siete riusciti a rendere estremamente difficile il furto della
602 vostra identità digitale di sviluppatore.
603 
604 Altre operazioni possibili con GnuPG
605 ------------------------------------
606 
607 Segue un breve accenno ad alcune delle operazioni più comuni che dovrete
608 fare con le vostre chiavi PGP.
609 
610 Montare il disco con la chiave primaria
611 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
612 
613 Vi servirà la vostra chiave principale per tutte le operazioni che seguiranno,
614 per cui per prima cosa dovrete accedere ai vostri backup e dire a GnuPG di
615 usarli::
616 
617     $ export GNUPGHOME=/media/disk/foo/gnupg-backup
618     $ gpg --list-secret-keys
619 
620 Dovete assicurarvi di vedere ``sec`` e non ``sec#`` nell'output del programma
621 (il simbolo ``#`` significa che la chiave non è disponibile e che state ancora
622 utilizzando la vostra solita cartella di lavoro).
623 
624 Estendere la data di scadenza di una chiave
625 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
626 
627 La chiave principale ha una data di scadenza di 2 anni dal momento della sua
628 creazione. Questo per motivi di sicurezza e per rendere obsolete le chiavi
629 che, eventualmente, dovessero sparire dai keyserver.
630 
631 Per estendere di un anno, dalla data odierna, la scadenza di una vostra chiave,
632 eseguite::
633 
634     $ gpg --quick-set-expire [fpr] 1y
635 
636 Se per voi è più facile da memorizzare, potete anche utilizzare una data
637 specifica (per esempio, il vostro compleanno o capodanno)::
638 
639     $ gpg --quick-set-expire [fpr] 2025-07-01
640 
641 Ricordatevi di inviare l'aggiornamento ai keyserver::
642 
643     $ gpg --send-key [fpr]
644 
645 Aggiornare la vostra cartella di lavoro dopo ogni modifica
646 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
647 
648 Dopo aver fatto delle modifiche alle vostre chiavi usando uno spazio a parte,
649 dovreste importarle nella vostra cartella di lavoro abituale::
650 
651     $ gpg --export | gpg --homedir ~/.gnupg --import
652     $ unset GNUPGHOME
653 
654 Usare gpg-agent con ssh
655 ~~~~~~~~~~~~~~~~~~~~~~~
656 
657 Se dovete firmare tag o commit su un sistema remoto, potete ridirezionare il
658 vostro gpg-agent attraverso ssh. Consultate le istruzioni disponibili nella wiki
659 GnuPG:
660 
661 - `Agent Forwarding over SSH`_
662 
663 Funziona senza troppi intoppi se avete la possibilità di modificare le
664 impostazioni di sshd sul sistema remoto.
665 
666 .. _`Agent Forwarding over SSH`: https://wiki.gnupg.org/AgentForwarding
667 
668 .. _it_pgp_with_git:
669 
670 Usare PGP con Git
671 =================
672 
673 Una delle caratteristiche fondanti di Git è la sua natura decentralizzata --
674 una volta che il repositorio è stato clonato sul vostro sistema, avete la
675 storia completa del progetto, inclusi i suoi tag, i commit ed i rami. Tuttavia,
676 con i centinaia di repositori clonati che ci sono in giro, come si fa a
677 verificare che la loro copia di linux.git non è stata manomessa da qualcuno?
678 
679 Oppure, cosa succede se viene scoperta una backdoor nel codice e la riga
680 "Autore" dice che sei stato tu, mentre tu sei abbastanza sicuro di
681 `non averci niente a che fare`_?
682 
683 Per risolvere entrambi i problemi, Git ha introdotto l'integrazione con PGP.
684 I tag firmati dimostrano che il repositorio è integro assicurando che il suo
685 contenuto è lo stesso che si trova sulle macchine degli sviluppatori che hanno
686 creato il tag; mentre i commit firmati rendono praticamente impossibile
687 ad un malintenzionato di impersonarvi senza avere accesso alle vostre chiavi
688 PGP.
689 
690 .. _`non averci niente a che fare`: https://github.com/jayphelps/git-blame-someone-else
691 
692 Configurare git per usare la vostra chiave PGP
693 ----------------------------------------------
694 
695 Se avete solo una chiave segreta nel vostro portachiavi, allora non avete nulla
696 da fare in più dato che sarà la vostra chiave di base. Tuttavia, se doveste
697 avere più chiavi segrete, potete dire a git quale dovrebbe usare (``[fpg]``
698 è la vostra impronta digitale)::
699 
700     $ git config --global user.signingKey [fpr]
701 
702 Come firmare i tag
703 ------------------
704 
705 Per creare un tag firmato, passate l'opzione ``-s`` al comando tag::
706 
707     $ git tag -s [tagname]
708 
709 La nostra raccomandazione è quella di firmare sempre i tag git, perché
710 questo permette agli altri sviluppatori di verificare che il repositorio
711 git dal quale stanno prendendo il codice non è stato alterato intenzionalmente.
712 
713 Come verificare i tag firmati
714 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
715 
716 Per verificare un tag firmato, potete usare il comando ``verify-tag``::
717 
718     $ git verify-tag [tagname]
719 
720 Se state prendendo un tag da un fork del repositorio del progetto, git
721 dovrebbe verificare automaticamente la firma di quello che state prendendo
722 e vi mostrerà il risultato durante l'operazione di merge::
723 
724     $ git pull [url] tags/sometag
725 
726 Il merge conterrà qualcosa di simile::
727 
728     Merge tag 'sometag' of [url]
729 
730     [Tag message]
731 
732     # gpg: Signature made [...]
733     # gpg: Good signature from [...]
734 
735 Se state verificando il tag di qualcun altro, allora dovrete importare
736 la loro chiave PGP. Fate riferimento alla sezione ":ref:`it_verify_identities`"
737 che troverete più avanti.
738 
739 Configurare git per firmare sempre i tag con annotazione
740 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
741 
742 Se state creando un tag con annotazione è molto probabile che vogliate
743 firmarlo. Per imporre a git di firmare sempre un tag con annotazione,
744 dovete impostare la seguente opzione globale::
745 
746     $ git config --global tag.forceSignAnnotated true
747 
748 Come usare commit firmati
749 -------------------------
750 
751 Creare dei commit firmati è facile, ma è molto più difficile utilizzarli
752 nello sviluppo del kernel linux per via del fatto che ci si affida alle
753 liste di discussione e questo modo di procedere non mantiene le firme PGP
754 nei commit. In aggiunta, quando si usa *rebase* nel proprio repositorio
755 locale per allinearsi al kernel anche le proprie firme PGP verranno scartate.
756 Per questo motivo, la maggior parte degli sviluppatori del kernel non si
757 preoccupano troppo di firmare i propri commit ed ignoreranno quelli firmati
758 che si trovano in altri repositori usati per il proprio lavoro.
759 
760 Tuttavia, se avete il vostro repositorio di lavoro disponibile al pubblico
761 su un qualche servizio di hosting git (kernel.org, infradead.org, ozlabs.org,
762 o altri), allora la raccomandazione è di firmare tutti i vostri commit
763 anche se gli sviluppatori non ne beneficeranno direttamente.
764 
765 Vi raccomandiamo di farlo per i seguenti motivi:
766 
767 1. Se dovesse mai esserci la necessità di fare delle analisi forensi o
768    tracciare la provenienza di un codice, anche sorgenti mantenuti
769    esternamente che hanno firme PGP sui commit avranno un certo valore a
770    questo scopo.
771 2. Se dovesse mai capitarvi di clonare il vostro repositorio locale (per
772    esempio dopo un danneggiamento del disco), la firma vi permetterà di
773    verificare l'integrità del repositorio prima di riprendere il lavoro.
774 3. Se qualcuno volesse usare *cherry-pick* sui vostri commit, allora la firma
775    permetterà di verificare l'integrità dei commit prima di applicarli.
776 
777 Creare commit firmati
778 ~~~~~~~~~~~~~~~~~~~~~
779 
780 Per creare un commit firmato, dovete solamente aggiungere l'opzione ``-S``
781 al comando ``git commit`` (si usa la lettera maiuscola per evitare
782 conflitti con un'altra opzione)::
783 
784     $ git commit -S
785 
786 Configurare git per firmare sempre i commit
787 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
788 
789 Potete dire a git di firmare sempre i commit::
790 
791     git config --global commit.gpgSign true
792 
793 .. note::
794 
795     Assicuratevi di aver configurato ``gpg-agent`` prima di abilitare
796     questa opzione.
797 
798 .. _it_verify_identities:
799 
800 Come lavorare con patch firmate
801 -------------------------------
802 
803 Esiste la possibilità di usare la vostra chiave PGP per firmare le patch che
804 invierete alla liste di discussione del kernel. I meccanismi esistenti per la
805 firma delle email (PGP-Mime o PGP-inline) tendono a causare problemi
806 nell'attività di revisione del codice. Si suggerisce, invece, di utilizare lo
807 strumento sviluppato da kernel.org che mette nell'intestazione del messaggio
808 un'attestazione delle firme crittografiche (tipo DKIM):
809 
810 - `Patatt Patch Attestation`_
811 
812 .. _`Patatt Patch Attestation`: https://pypi.org/project/patatt/
813 
814 Installare e configurate patatt
815 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
816 
817 Lo strumento patatt è disponibile per diverse distribuzioni, dunque cercatelo
818 prima lì. Oppure potete installarlo usano pypi "``pip install patatt``"
819 
820 Se avete già configurato git con la vostra chiave PGP (usando
821 ``user.signingKey``), allora patatt non ha bisogno di alcuna configurazione
822 aggiuntiva. Potete iniziare a firmare le vostre patch aggiungendo un aggancio a
823 git-send-email nel vostro repositorio::
824 
825     patatt install-hook
826 
827 Ora, qualsiasi patch che invierete con ``git send-email`` verrà automaticamente
828 firmata usando la vostra firma crittografica.
829 
830 Verificare le firme di patatt
831 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
832 
833 Se usate ``b4`` per verificare ed applicare le patch, allora tenterà
834 automaticamente di verificare tutte le firme DKIM e patatt disponibili. Per
835 esempio::
836 
837     $ b4 am 20220720205013.890942-1-broonie@kernel.org
838     [...]
839     Checking attestation on all messages, may take a moment...
840     ---
841       ✓ [PATCH v1 1/3] kselftest/arm64: Correct buffer allocation for SVE Z registers
842       ✓ [PATCH v1 2/3] arm64/sve: Document our actual ABI for clearing registers on syscall
843       ✓ [PATCH v1 3/3] kselftest/arm64: Enforce actual ABI for SVE syscalls
844       ---
845       ✓ Signed: openpgp/broonie@kernel.org
846       ✓ Signed: DKIM/kernel.org
847 
848 .. note::
849 
850    Lo sviluppo di patatt e b4 è piuttosto attivo. Si consiglia di verificare la
851    documentazione più recente.
852 
853 .. _it_kernel_identities:
854 
855 Come verificare l'identità degli sviluppatori del kernel
856 ========================================================
857 
858 Firmare i tag e i commit è facile, ma come si fa a verificare che la chiave
859 usata per firmare qualcosa appartenga davvero allo sviluppatore e non ad un
860 impostore?
861 
862 Configurare l'auto-key-retrieval usando WKD e DANE
863 --------------------------------------------------
864 
865 Se non siete ancora in possesso di una vasta collezione di chiavi pubbliche
866 di altri sviluppatori, allora potreste iniziare il vostro portachiavi
867 affidandovi ai servizi di auto-scoperta e auto-recupero. GnuPG può affidarsi
868 ad altre tecnologie di delega della fiducia, come DNSSEC e TLS, per sostenervi
869 nel caso in cui iniziare una propria rete di fiducia da zero sia troppo
870 scoraggiante.
871 
872 Aggiungete il seguente testo al vostro file ``~/.gnupg/gpg.conf``::
873 
874     auto-key-locate wkd,dane,local
875     auto-key-retrieve
876 
877 La *DNS-Based Authentication of Named Entities* ("DANE") è un metodo
878 per la pubblicazione di chiavi pubbliche su DNS e per renderle sicure usando
879 zone firmate con DNSSEC. Il *Web Key Directory* ("WKD") è un metodo
880 alternativo che usa https a scopo di ricerca. Quando si usano DANE o WKD
881 per la ricerca di chiavi pubbliche, GnuPG validerà i certificati DNSSEC o TLS
882 prima di aggiungere al vostro portachiavi locale le eventuali chiavi trovate.
883 
884 Kernel.org pubblica la WKD per tutti gli sviluppatori che hanno un account
885 kernel.org. Una volta che avete applicato le modifiche al file ``gpg.conf``,
886 potrete auto-recuperare le chiavi di Linus Torvalds e Greg Kroah-Hartman
887 (se non le avete già)::
888 
889     $ gpg --locate-keys torvalds@kernel.org gregkh@kernel.org
890 
891 Se avete un account kernel.org, al fine di rendere più utile l'uso di WKD
892 da parte di altri sviluppatori del kernel, dovreste `aggiungere alla vostra
893 chiave lo UID di kernel.org`_.
894 
895 .. _`aggiungere alla vostra chiave lo UID di kernel.org`: https://korg.wiki.kernel.org/userdoc/mail#adding_a_kernelorg_uid_to_your_pgp_key
896 
897 Web of Trust (WOT) o Trust on First Use (TOFU)
898 ----------------------------------------------
899 
900 PGP incorpora un meccanismo di delega della fiducia conosciuto come
901 "Web of Trust". Di base, questo è un tentativo di sostituire la necessità
902 di un'autorità certificativa centralizzata tipica del mondo HTTPS/TLS.
903 Invece di avere svariati produttori software che decidono chi dovrebbero
904 essere le entità di certificazione di cui dovreste fidarvi, PGP lascia
905 la responsabilità ad ogni singolo utente.
906 
907 Sfortunatamente, solo poche persone capiscono come funziona la rete di fiducia.
908 Nonostante sia un importante aspetto della specifica OpenPGP, recentemente
909 le versioni di GnuPG (2.2 e successive) hanno implementato un meccanisco
910 alternativo chiamato "Trust on First Use" (TOFU). Potete pensare a TOFU come
911 "ad un approccio all fidicia simile ad SSH". In SSH, la prima volta che vi
912 connettete ad un sistema remoto, l'impronta digitale della chiave viene
913 registrata e ricordata. Se la chiave dovesse cambiare in futuro, il programma
914 SSH vi avviserà e si rifiuterà di connettersi, obbligandovi a prendere una
915 decisione circa la fiducia che riponete nella nuova chiave. In modo simile,
916 la prima volta che importate la chiave PGP di qualcuno, si assume sia valida.
917 Se ad un certo punto GnuPG trova un'altra chiave con la stessa identità,
918 entrambe, la vecchia e la nuova, verranno segnate come invalide e dovrete
919 verificare manualmente quale tenere.
920 
921 Vi raccomandiamo di usare il meccanisco TOFU+PGP (che è la nuova configurazione
922 di base di GnuPG v2). Per farlo, aggiungete (o modificate) l'impostazione
923 ``trust-model`` in ``~/.gnupg/gpg.conf``::
924 
925     trust-model tofu+pgp
926 
927 Usare il repositorio kernel.org per il web of trust
928 ---------------------------------------------------
929 
930 Il progetto kernel.org mantiene un repositorio git con le chiavi pubbliche degli sviluppatori in alternativa alla replica dei server di chiavi che negli ultimi anni sono spariti. La documentazione completa su come impostare il repositorio come vostra sorgente di chiavi pubbliche può essere trovato qui:
931 
932 - `Kernel developer PGP Keyring`_
933 
934 Se siete uno sviluppatore del kernel, per favore valutate l'idea di inviare la
935 vostra chiave per l'inclusione in quel portachiavi.
936 
937 
938 If you are a kernel developer, please consider submitting your key for
939 inclusion into that keyring.
940 
941 .. _`Kernel developer PGP Keyring`: https://korg.docs.kernel.org/pgpkeys.html

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php