0001 .. include:: ../disclaimer-ita.rst
0002
0003 :Original: :ref:`Documentation/process/maintainer-pgp-guide.rst <pgpguide>`
0004 :Translator: Alessia Mantegazza <amantegazza@vaga.pv.it>
0005
0006 .. _it_pgpguide:
0007
0008 =========================================
0009 La guida a PGP per manutentori del kernel
0010 =========================================
0011
0012 :Author: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
0013
0014 Questo documento è destinato agli sviluppatori del kernel Linux, in particolar
0015 modo ai manutentori. Contiene degli approfondimenti riguardo informazioni che
0016 sono state affrontate in maniera più generale nella sezione
0017 "`Protecting Code Integrity`_" pubblicata dalla Linux Foundation.
0018 Per approfondire alcuni argomenti trattati in questo documento è consigliato
0019 leggere il documento sopraindicato
0020
0021 .. _`Protecting Code Integrity`: https://github.com/lfit/itpol/blob/master/protecting-code-integrity.md
0022
0023 Il ruolo di PGP nello sviluppo del kernel Linux
0024 ===============================================
0025
0026 PGP aiuta ad assicurare l'integrità del codice prodotto dalla comunità
0027 di sviluppo del kernel e, in secondo luogo, stabilisce canali di comunicazione
0028 affidabili tra sviluppatori attraverso lo scambio di email firmate con PGP.
0029
0030 Il codice sorgente del kernel Linux è disponibile principalmente in due
0031 formati:
0032
0033 - repositori distribuiti di sorgenti (git)
0034 - rilasci periodici di istantanee (archivi tar)
0035
0036 Sia i repositori git che gli archivi tar portano le firme PGP degli
0037 sviluppatori che hanno creato i rilasci ufficiali del kernel. Queste firme
0038 offrono una garanzia crittografica che le versioni scaricabili rese disponibili
0039 via kernel.org, o altri portali, siano identiche a quelle che gli sviluppatori
0040 hanno sul loro posto di lavoro. A tal scopo:
0041
0042 - i repositori git forniscono firme PGP per ogni tag
0043 - gli archivi tar hanno firme separate per ogni archivio
0044
0045 .. _it_devs_not_infra:
0046
0047 Fidatevi degli sviluppatori e non dell'infrastruttura
0048 -----------------------------------------------------
0049
0050 Fin dal 2011, quando i sistemi di kernel.org furono compromessi, il principio
0051 generale del progetto Kernel Archives è stato quello di assumere che qualsiasi
0052 parte dell'infrastruttura possa essere compromessa in ogni momento. Per questa
0053 ragione, gli amministratori hanno intrapreso deliberatemene dei passi per
0054 enfatizzare che la fiducia debba risiedere sempre negli sviluppatori e mai nel
0055 codice che gestisce l'infrastruttura, indipendentemente da quali che siano le
0056 pratiche di sicurezza messe in atto.
0057
0058 Il principio sopra indicato è la ragione per la quale è necessaria questa
0059 guida. Vogliamo essere sicuri che il riporre la fiducia negli sviluppatori
0060 non sia fatto semplicemente per incolpare qualcun'altro per future falle di
0061 sicurezza. L'obiettivo è quello di fornire una serie di linee guida che gli
0062 sviluppatori possano seguire per creare un ambiente di lavoro sicuro e
0063 salvaguardare le chiavi PGP usate nello stabilire l'integrità del kernel Linux
0064 stesso.
0065
0066 .. _it_pgp_tools:
0067
0068 Strumenti PGP
0069 =============
0070
0071 Usare GnuPG v2
0072 --------------
0073
0074 La vostra distribuzione potrebbe avere già installato GnuPG, dovete solo
0075 verificare che stia utilizzando la versione 2.x e non la serie 1.4 --
0076 molte distribuzioni forniscono entrambe, di base il comando ''gpg''
0077 invoca GnuPG v.1. Per controllate usate::
0078
0079 $ gpg --version | head -n1
0080
0081 Se visualizzate ``gpg (GnuPG) 1.4.x``, allora state usando GnuPG v.1.
0082 Provate il comando ``gpg2`` (se non lo avete, potreste aver bisogno
0083 di installare il pacchetto gnupg2)::
0084
0085 $ gpg2 --version | head -n1
0086
0087 Se visualizzate ``gpg (GnuPG) 2.x.x``, allora siete pronti a partire.
0088 Questa guida assume che abbiate la versione 2.2.(o successiva) di GnuPG.
0089 Se state usando la versione 2.0, alcuni dei comandi indicati qui non
0090 funzioneranno, in questo caso considerate un aggiornamento all'ultima versione,
0091 la 2.2. Versioni di gnupg-2.1.11 e successive dovrebbero essere compatibili
0092 per gli obiettivi di questa guida.
0093
0094 Se avete entrambi i comandi: ``gpg`` e ``gpg2``, assicuratevi di utilizzare
0095 sempre la versione V2, e non quella vecchia. Per evitare errori potreste creare
0096 un alias::
0097
0098 $ alias gpg=gpg2
0099
0100 Potete mettere questa opzione nel vostro ``.bashrc`` in modo da essere sicuri.
0101
0102 Configurare le opzioni di gpg-agent
0103 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0104
0105 L'agente GnuPG è uno strumento di aiuto che partirà automaticamente ogni volta
0106 che userete il comando ``gpg`` e funzionerà in background con l'obiettivo di
0107 individuare la passphrase. Ci sono due opzioni che dovreste conoscere
0108 per personalizzare la scadenza della passphrase nella cache:
0109
0110 - ``default-cache-ttl`` (secondi): Se usate ancora la stessa chiave prima
0111 che il time-to-live termini, il conto alla rovescia si resetterà per un
0112 altro periodo. Di base è di 600 (10 minuti).
0113
0114 - ``max-cache-ttl`` (secondi): indipendentemente da quanto sia recente l'ultimo
0115 uso della chiave da quando avete inserito la passphrase, se il massimo
0116 time-to-live è scaduto, dovrete reinserire nuovamente la passphrase.
0117 Di base è di 30 minuti.
0118
0119 Se ritenete entrambe questi valori di base troppo corti (o troppo lunghi),
0120 potete creare il vostro file ``~/.gnupg/gpg-agent.conf`` ed impostare i vostri
0121 valori::
0122
0123 # set to 30 minutes for regular ttl, and 2 hours for max ttl
0124 default-cache-ttl 1800
0125 max-cache-ttl 7200
0126
0127 .. note::
0128
0129 Non è più necessario far partire l'agente gpg manualmente all'inizio della
0130 vostra sessione. Dovreste controllare i file rc per rimuovere tutto ciò che
0131 riguarda vecchie le versioni di GnuPG, poiché potrebbero non svolgere più
0132 bene il loro compito.
0133
0134 Impostare un *refresh* con cronjob
0135 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0136
0137 Potreste aver bisogno di rinfrescare regolarmente il vostro portachiavi in
0138 modo aggiornare le chiavi pubbliche di altre persone, lavoro che è svolto
0139 al meglio con un cronjob giornaliero::
0140
0141 @daily /usr/bin/gpg2 --refresh >/dev/null 2>&1
0142
0143 Controllate il percorso assoluto del vostro comando ``gpg`` o ``gpg2`` e usate
0144 il comando ``gpg2`` se per voi ``gpg`` corrisponde alla versione GnuPG v.1.
0145
0146 .. _it_master_key:
0147
0148 Proteggere la vostra chiave PGP primaria
0149 ========================================
0150
0151 Questa guida parte dal presupposto che abbiate già una chiave PGP che usate
0152 per lo sviluppo del kernel Linux. Se non ne avete ancora una, date uno sguardo
0153 al documento "`Protecting Code Integrity`_" che abbiamo menzionato prima.
0154
0155 Dovreste inoltre creare una nuova chiave se quella attuale è inferiore a 2048
0156 bit (RSA).
0157
0158 Chiave principale o sottochiavi
0159 -------------------------------
0160
0161 Le sottochiavi sono chiavi PGP totalmente indipendenti, e sono collegate alla
0162 chiave principale attraverso firme certificate. È quindi importante
0163 comprendere i seguenti punti:
0164
0165 1. Non ci sono differenze tecniche tra la chiave principale e la sottochiave.
0166 2. In fesa di creazione, assegniamo limitazioni funzionali ad ogni chiave
0167 assegnando capacità specifiche.
0168 3. Una chiave PGP può avere 4 capacità:
0169
0170 - **[S]** può essere usata per firmare
0171 - **[E]** può essere usata per criptare
0172 - **[A]** può essere usata per autenticare
0173 - **[C]** può essere usata per certificare altre chiavi
0174
0175 4. Una singola chiave può avere più capacità
0176 5. Una sottochiave è completamente indipendente dalla chiave principale.
0177 Un messaggio criptato con la sottochiave non può essere decrittato con
0178 quella principale. Se perdete la vostra sottochiave privata, non può
0179 essere rigenerata in nessun modo da quella principale.
0180
0181 La chiave con capacità **[C]** (certify) è identificata come la chiave
0182 principale perché è l'unica che può essere usata per indicare la relazione
0183 con altre chiavi. Solo la chiave **[C]** può essere usata per:
0184
0185 - Aggiungere o revocare altre chiavi (sottochiavi) che hanno capacità S/E/A
0186 - Aggiungere, modificare o eliminare le identità (unids) associate alla chiave
0187 - Aggiungere o modificare la data di termine di sé stessa o di ogni sottochiave
0188 - Firmare le chiavi di altre persone a scopo di creare una rete di fiducia
0189
0190 Di base, alla creazione di nuove chiavi, GnuPG genera quanto segue:
0191
0192 - Una chiave madre che porta sia la capacità di certificazione che quella
0193 di firma (**[SC]**)
0194 - Una sottochiave separata con capacità di criptaggio (**[E]**)
0195
0196 Se avete usato i parametri di base per generare la vostra chiave, quello
0197 sarà il risultato. Potete verificarlo utilizzando ``gpg --list-secret-keys``,
0198 per esempio::
0199
0200 sec rsa2048 2018-01-23 [SC] [expires: 2020-01-23]
0201 000000000000000000000000AAAABBBBCCCCDDDD
0202 uid [ultimate] Alice Dev <adev@kernel.org>
0203 ssb rsa2048 2018-01-23 [E] [expires: 2020-01-23]
0204
0205 Qualsiasi chiave che abbia la capacità **[C]** è la vostra chiave madre,
0206 indipendentemente da quali altre capacità potreste averle assegnato.
0207
0208 La lunga riga sotto la voce ``sec`` è la vostra impronta digitale --
0209 negli esempi che seguono, quando vedere ``[fpr]`` ci si riferisce a questa
0210 stringa di 40 caratteri.
0211
0212 Assicuratevi che la vostra passphrase sia forte
0213 -----------------------------------------------
0214
0215 GnuPG utilizza le passphrases per criptare la vostra chiave privata prima
0216 di salvarla sul disco. In questo modo, anche se il contenuto della vostra
0217 cartella ``.gnupg`` venisse letto o trafugato nella sia interezza, gli
0218 attaccanti non potrebbero comunque utilizzare le vostre chiavi private senza
0219 aver prima ottenuto la passphrase per decriptarle.
0220
0221 È assolutamente essenziale che le vostre chiavi private siano protette da
0222 una passphrase forte. Per impostarla o cambiarla, usate::
0223
0224 $ gpg --change-passphrase [fpr]
0225
0226 Create una sottochiave di firma separata
0227 ----------------------------------------
0228
0229 Il nostro obiettivo è di proteggere la chiave primaria spostandola su un
0230 dispositivo sconnesso dalla rete, dunque se avete solo una chiave combinata
0231 **[SC]** allora dovreste creare una sottochiave di firma separata::
0232
0233 $ gpg --quick-add-key [fpr] ed25519 sign
0234
0235 Ricordate di informare il keyserver del vostro cambiamento, cosicché altri
0236 possano ricevere la vostra nuova sottochiave::
0237
0238 $ gpg --send-key [fpr]
0239
0240 .. note:: Supporto ECC in GnuPG
0241 GnuPG 2.1 e successivi supportano pienamente *Elliptic Curve Cryptography*,
0242 con la possibilità di combinare sottochiavi ECC con le tradizionali chiavi
0243 primarie RSA. Il principale vantaggio della crittografia ECC è che è molto
0244 più veloce da calcolare e crea firme più piccole se confrontate byte per
0245 byte con le chiavi RSA a più di 2048 bit. A meno che non pensiate di
0246 utilizzare un dispositivo smartcard che non supporta le operazioni ECC, vi
0247 raccomandiamo ti creare sottochiavi di firma ECC per il vostro lavoro col
0248 kernel.
0249
0250 Se per qualche ragione preferite rimanere con sottochiavi RSA, nel comando
0251 precedente, sostituite "ed25519" con "rsa2048". In aggiunta, se avete
0252 intenzione di usare un dispositivo hardware che non supporta le chiavi
0253 ED25519 ECC, come la Nitrokey Pro o la Yubikey, allora dovreste usare
0254 "nistp256" al posto di "ed25519".
0255
0256 Copia di riserva della chiave primaria per gestire il recupero da disastro
0257 --------------------------------------------------------------------------
0258
0259 Maggiori sono le firme di altri sviluppatori che vengono applicate alla vostra,
0260 maggiori saranno i motivi per avere una copia di riserva che non sia digitale,
0261 al fine di effettuare un recupero da disastro.
0262
0263 Il modo migliore per creare una copia fisica della vostra chiave privata è
0264 l'uso del programma ``paperkey``. Consultate ``man paperkey`` per maggiori
0265 dettagli sul formato dell'output ed i suoi punti di forza rispetto ad altre
0266 soluzioni. Paperkey dovrebbe essere già pacchettizzato per la maggior parte
0267 delle distribuzioni.
0268
0269 Eseguite il seguente comando per creare una copia fisica di riserva della
0270 vostra chiave privata::
0271
0272 $ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txt
0273
0274 Stampate il file (o fate un pipe direttamente verso lpr), poi prendete
0275 una penna e scrivete la passphare sul margine del foglio. **Questo è
0276 caldamente consigliato** perché la copia cartacea è comunque criptata con
0277 la passphrase, e se mai doveste cambiarla non vi ricorderete qual'era al
0278 momento della creazione di quella copia -- *garantito*.
0279
0280 Mettete la copia cartacea e la passphrase scritta a mano in una busta e
0281 mettetela in un posto sicuro e ben protetto, preferibilmente fuori casa,
0282 magari in una cassetta di sicurezza in banca.
0283
0284 .. note::
0285
0286 Probabilmente la vostra stampante non è più quello stupido dispositivo
0287 connesso alla porta parallela, ma dato che il suo output è comunque
0288 criptato con la passphrase, eseguire la stampa in un sistema "cloud"
0289 moderno dovrebbe essere comunque relativamente sicuro. Un'opzione potrebbe
0290 essere quella di cambiare la passphrase della vostra chiave primaria
0291 subito dopo aver finito con paperkey.
0292
0293 Copia di riserva di tutta la cartella GnuPG
0294 -------------------------------------------
0295
0296 .. warning::
0297
0298 **!!!Non saltate questo passo!!!**
0299
0300 Quando avete bisogno di recuperare le vostre chiavi PGP è importante avere
0301 una copia di riserva pronta all'uso. Questo sta su un diverso piano di
0302 prontezza rispetto al recupero da disastro che abbiamo risolto con
0303 ``paperkey``. Vi affiderete a queste copie esterne quando dovreste usare la
0304 vostra chiave Certify -- ovvero quando fate modifiche alle vostre chiavi o
0305 firmate le chiavi di altre persone ad una conferenza o ad un gruppo d'incontro.
0306
0307 Incominciate con una piccola chiavetta di memoria USB (preferibilmente due)
0308 che userete per le copie di riserva. Dovrete criptarle usando LUKS -- fate
0309 riferimento alla documentazione della vostra distribuzione per capire come
0310 fare.
0311
0312 Per la passphrase di criptazione, potete usare la stessa della vostra chiave
0313 primaria.
0314
0315 Una volta che il processo di criptazione è finito, reinserite il disco USB ed
0316 assicurativi che venga montato correttamente. Copiate interamente la cartella
0317 ``.gnugp`` nel disco criptato::
0318
0319 $ cp -a ~/.gnupg /media/disk/foo/gnupg-backup
0320
0321 Ora dovreste verificare che tutto continui a funzionare::
0322
0323 $ gpg --homedir=/media/disk/foo/gnupg-backup --list-key [fpr]
0324
0325 Se non vedete errori, allora dovreste avere fatto tutto con successo.
0326 Smontate il disco USB, etichettatelo per bene di modo da evitare di
0327 distruggerne il contenuto non appena vi serve una chiavetta USB a caso, ed
0328 infine mettetelo in un posto sicuro -- ma non troppo lontano, perché vi servirà
0329 di tanto in tanto per modificare le identità, aggiungere o revocare
0330 sottochiavi, o firmare le chiavi di altre persone.
0331
0332 Togliete la chiave primaria dalla vostra home
0333 ---------------------------------------------
0334
0335 I file che si trovano nella vostra cartella home non sono poi così ben protetti
0336 come potreste pensare. Potrebbero essere letti o trafugati in diversi modi:
0337
0338 - accidentalmente quando fate una rapida copia della cartella home per
0339 configurare una nuova postazione
0340 - da un amministratore di sistema negligente o malintenzionato
0341 - attraverso copie di riserva insicure
0342 - attraverso malware installato in alcune applicazioni (browser, lettori PDF,
0343 eccetera)
0344 - attraverso coercizione quando attraversate confini internazionali
0345
0346 Proteggere la vostra chiave con una buona passphare aiuta notevolmente a
0347 ridurre i rischi elencati qui sopra, ma le passphrase possono essere scoperte
0348 attraverso i keylogger, il shoulder-surfing, o altri modi. Per questi motivi,
0349 nella configurazione si raccomanda di rimuove la chiave primaria dalla vostra
0350 cartella home e la si archivia su un dispositivo disconnesso.
0351
0352 .. warning::
0353
0354 Per favore, fate riferimento alla sezione precedente e assicuratevi
0355 di aver fatto una copia di riserva totale della cartella GnuPG. Quello
0356 che stiamo per fare renderà la vostra chiave inutile se non avete delle
0357 copie di riserva utilizzabili!
0358
0359 Per prima cosa, identificate il keygrip della vostra chiave primaria::
0360
0361 $ gpg --with-keygrip --list-key [fpr]
0362
0363 L'output assomiglierà a questo::
0364
0365 pub rsa2048 2018-01-24 [SC] [expires: 2020-01-24]
0366 000000000000000000000000AAAABBBBCCCCDDDD
0367 Keygrip = 1111000000000000000000000000000000000000
0368 uid [ultimate] Alice Dev <adev@kernel.org>
0369 sub rsa2048 2018-01-24 [E] [expires: 2020-01-24]
0370 Keygrip = 2222000000000000000000000000000000000000
0371 sub ed25519 2018-01-24 [S]
0372 Keygrip = 3333000000000000000000000000000000000000
0373
0374 Trovate la voce keygrid che si trova sotto alla riga ``pub`` (appena sotto
0375 all'impronta digitale della chiave primaria). Questo corrisponderà direttamente
0376 ad un file nella cartella ``~/.gnupg``::
0377
0378 $ cd ~/.gnupg/private-keys-v1.d
0379 $ ls
0380 1111000000000000000000000000000000000000.key
0381 2222000000000000000000000000000000000000.key
0382 3333000000000000000000000000000000000000.key
0383
0384 Quello che dovrete fare è rimuovere il file .key che corrisponde al keygrip
0385 della chiave primaria::
0386
0387 $ cd ~/.gnupg/private-keys-v1.d
0388 $ rm 1111000000000000000000000000000000000000.key
0389
0390 Ora, se eseguite il comando ``--list-secret-keys``, vedrete che la chiave
0391 primaria non compare più (il simbolo ``#`` indica che non è disponibile)::
0392
0393 $ gpg --list-secret-keys
0394 sec# rsa2048 2018-01-24 [SC] [expires: 2020-01-24]
0395 000000000000000000000000AAAABBBBCCCCDDDD
0396 uid [ultimate] Alice Dev <adev@kernel.org>
0397 ssb rsa2048 2018-01-24 [E] [expires: 2020-01-24]
0398 ssb ed25519 2018-01-24 [S]
0399
0400 Dovreste rimuovere anche i file ``secring.gpg`` che si trovano nella cartella
0401 ``~/.gnupg``, in quanto rimasugli delle versioni precedenti di GnuPG.
0402
0403 Se non avete la cartella "private-keys-v1.d"
0404 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0405
0406 Se non avete la cartella ``~/.gnupg/private-keys-v1.d``, allora le vostre
0407 chiavi segrete sono ancora salvate nel vecchio file ``secring.gpg`` usato
0408 da GnuPG v1. Effettuare una qualsiasi modifica alla vostra chiave, come
0409 cambiare la passphare o aggiungere una sottochiave, dovrebbe convertire
0410 automaticamente il vecchio formato ``secring.gpg``nel nuovo
0411 ``private-keys-v1.d``.
0412
0413 Una volta che l'avete fatto, assicuratevi di rimuovere il file ``secring.gpg``,
0414 che continua a contenere la vostra chiave privata.
0415
0416 .. _it_smartcards:
0417
0418 Spostare le sottochiavi in un apposito dispositivo criptato
0419 ===========================================================
0420
0421 Nonostante la chiave primaria sia ora al riparo da occhi e mani indiscrete,
0422 le sottochiavi si trovano ancora nella vostra cartella home. Chiunque riesca
0423 a mettere le sue mani su quelle chiavi riuscirà a decriptare le vostre
0424 comunicazioni o a falsificare le vostre firme (se conoscono la passphrase).
0425 Inoltre, ogni volta che viene fatta un'operazione con GnuPG, le chiavi vengono
0426 caricate nella memoria di sistema e potrebbero essere rubate con l'uso di
0427 malware sofisticati (pensate a Meltdown e a Spectre).
0428
0429 Il miglior modo per proteggere le proprie chiave è di spostarle su un
0430 dispositivo specializzato in grado di effettuare operazioni smartcard.
0431
0432 I benefici di una smartcard
0433 ---------------------------
0434
0435 Una smartcard contiene un chip crittografico che è capace di immagazzinare
0436 le chiavi private ed effettuare operazioni crittografiche direttamente sulla
0437 carta stessa. Dato che la chiave non lascia mai la smartcard, il sistema
0438 operativo usato sul computer non sarà in grado di accedere alle chiavi.
0439 Questo è molto diverso dai dischi USB criptati che abbiamo usato allo scopo di
0440 avere una copia di riserva sicura -- quando il dispositivo USB è connesso e
0441 montato, il sistema operativo potrà accedere al contenuto delle chiavi private.
0442
0443 L'uso di un disco USB criptato non può sostituire le funzioni di un dispositivo
0444 capace di operazioni di tipo smartcard.
0445
0446 Dispositivi smartcard disponibili
0447 ---------------------------------
0448
0449 A meno che tutti i vostri computer dispongano di lettori smartcard, il modo
0450 più semplice è equipaggiarsi di un dispositivo USB specializzato che
0451 implementi le funzionalità delle smartcard. Sul mercato ci sono diverse
0452 soluzioni disponibili:
0453
0454 - `Nitrokey Start`_: è Open hardware e Free Software, è basata sul progetto
0455 `GnuK`_ della FSIJ. Questo è uno dei pochi dispositivi a supportare le chiavi
0456 ECC ED25519, ma offre meno funzionalità di sicurezza (come la resistenza
0457 alla manomissione o alcuni attacchi ad un canale laterale).
0458 - `Nitrokey Pro 2`_: è simile alla Nitrokey Start, ma è più resistente alla
0459 manomissione e offre più funzionalità di sicurezza. La Pro 2 supporta la
0460 crittografia ECC (NISTP).
0461 - `Yubikey 5`_: l'hardware e il software sono proprietari, ma è più economica
0462 della Nitrokey Pro ed è venduta anche con porta USB-C il che è utile con i
0463 computer portatili più recenti. In aggiunta, offre altre funzionalità di
0464 sicurezza come FIDO, U2F, e ora supporta anche le chiavi ECC (NISTP)
0465
0466 `Su LWN c'è una buona recensione`_ dei modelli elencati qui sopra e altri.
0467 La scelta dipenderà dal costo, dalla disponibilità nella vostra area
0468 geografica e vostre considerazioni sull'hardware aperto/proprietario.
0469
0470 Se volete usare chiavi ECC, la vostra migliore scelta sul mercato è la
0471 Nitrokey Start.
0472
0473 .. _`Nitrokey Start`: https://shop.nitrokey.com/shop/product/nitrokey-start-6
0474 .. _`Nitrokey Pro 2`: https://shop.nitrokey.com/shop/product/nitrokey-pro-2-3
0475 .. _`Yubikey 5`: https://www.yubico.com/product/yubikey-5-overview/
0476 .. _Gnuk: http://www.fsij.org/doc-gnuk/
0477 .. _`Su LWN c'è una buona recensione`: https://lwn.net/Articles/736231/
0478
0479 Configurare il vostro dispositivo smartcard
0480 -------------------------------------------
0481
0482 Il vostro dispositivo smartcard dovrebbe iniziare a funzionare non appena
0483 lo collegate ad un qualsiasi computer Linux moderno. Potete verificarlo
0484 eseguendo::
0485
0486 $ gpg --card-status
0487
0488 Se vedete tutti i dettagli della smartcard, allora ci siamo. Sfortunatamente,
0489 affrontare tutti i possibili motivi per cui le cose potrebbero non funzionare
0490 non è lo scopo di questa guida. Se avete problemi nel far funzionare la carta
0491 con GnuPG, cercate aiuto attraverso i soliti canali di supporto.
0492
0493 Per configurare la vostra smartcard, dato che non c'è una via facile dalla
0494 riga di comando, dovrete usate il menu di GnuPG::
0495
0496 $ gpg --card-edit
0497 [...omitted...]
0498 gpg/card> admin
0499 Admin commands are allowed
0500 gpg/card> passwd
0501
0502 Dovreste impostare il PIN dell'utente (1), quello dell'amministratore (3) e il
0503 codice di reset (4). Assicuratevi di annotare e salvare questi codici in un
0504 posto sicuro -- specialmente il PIN dell'amministratore e il codice di reset
0505 (che vi permetterà di azzerare completamente la smartcard). Il PIN
0506 dell'amministratore viene usato così raramente che è inevitabile dimenticarselo
0507 se non lo si annota.
0508
0509 Tornando al nostro menu, potete impostare anche altri valori (come il nome,
0510 il sesso, informazioni d'accesso, eccetera), ma non sono necessari e aggiunge
0511 altre informazioni sulla carta che potrebbero trapelare in caso di smarrimento.
0512
0513 .. note::
0514
0515 A dispetto del nome "PIN", né il PIN utente né quello dell'amministratore
0516 devono essere esclusivamente numerici.
0517
0518 Spostare le sottochiavi sulla smartcard
0519 ---------------------------------------
0520
0521 Uscite dal menu (usando "q") e salverete tutte le modifiche. Poi, spostiamo
0522 tutte le sottochiavi sulla smartcard. Per la maggior parte delle operazioni
0523 vi serviranno sia la passphrase della chiave PGP che il PIN
0524 dell'amministratore::
0525
0526 $ gpg --edit-key [fpr]
0527
0528 Secret subkeys are available.
0529
0530 pub rsa2048/AAAABBBBCCCCDDDD
0531 created: 2018-01-23 expires: 2020-01-23 usage: SC
0532 trust: ultimate validity: ultimate
0533 ssb rsa2048/1111222233334444
0534 created: 2018-01-23 expires: never usage: E
0535 ssb ed25519/5555666677778888
0536 created: 2017-12-07 expires: never usage: S
0537 [ultimate] (1). Alice Dev <adev@kernel.org>
0538
0539 gpg>
0540
0541 Usando ``--edit-key`` si tornerà alla modalità menu e noterete che
0542 la lista delle chiavi è leggermente diversa. Da questo momento in poi,
0543 tutti i comandi saranno eseguiti nella modalità menu, come indicato
0544 da ``gpg>``.
0545
0546 Per prima cosa, selezioniamo la chiave che verrà messa sulla carta --
0547 potete farlo digitando ``key 1`` (è la prima della lista, la sottochiave
0548 **[E]**)::
0549
0550 gpg> key 1
0551
0552 Nel'output dovreste vedere ``ssb*`` associato alla chiave **[E]**. Il simbolo
0553 ``*`` indica che la chiave è stata "selezionata". Funziona come un
0554 interruttore, ovvero se scrivete nuovamente ``key 1``, il simbolo ``*`` sparirà
0555 e la chiave non sarà più selezionata.
0556
0557 Ora, spostiamo la chiave sulla smartcard::
0558
0559 gpg> keytocard
0560 Please select where to store the key:
0561 (2) Encryption key
0562 Your selection? 2
0563
0564 Dato che è la nostra chiave **[E]**, ha senso metterla nella sezione criptata.
0565 Quando confermerete la selezione, vi verrà chiesta la passphrase della vostra
0566 chiave PGP, e poi il PIN dell'amministratore. Se il comando ritorna senza
0567 errori, allora la vostra chiave è stata spostata con successo.
0568
0569 **Importante**: digitate nuovamente ``key 1`` per deselezionare la prima chiave
0570 e selezionate la seconda chiave **[S]** con ``key 2``::
0571
0572 gpg> key 1
0573 gpg> key 2
0574 gpg> keytocard
0575 Please select where to store the key:
0576 (1) Signature key
0577 (3) Authentication key
0578 Your selection? 1
0579
0580 Potete usare la chiave **[S]** sia per firmare che per autenticare, ma vogliamo
0581 che sia nella sezione di firma, quindi scegliete (1). Ancora una volta, se il
0582 comando ritorna senza errori, allora l'operazione è avvenuta con successo::
0583
0584 gpg> q
0585 Save changes? (y/N) y
0586
0587 Salvando le modifiche cancellerete dalla vostra cartella home tutte le chiavi
0588 che avete spostato sulla carta (ma questo non è un problema, perché abbiamo
0589 fatto delle copie di sicurezza nel caso in cui dovessimo configurare una
0590 nuova smartcard).
0591
0592 Verificare che le chiavi siano state spostate
0593 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0594
0595 Ora, se doveste usare l'opzione ``--list-secret-keys``, vedrete una
0596 sottile differenza nell'output::
0597
0598 $ gpg --list-secret-keys
0599 sec# rsa2048 2018-01-24 [SC] [expires: 2020-01-24]
0600 000000000000000000000000AAAABBBBCCCCDDDD
0601 uid [ultimate] Alice Dev <adev@kernel.org>
0602 ssb> rsa2048 2018-01-24 [E] [expires: 2020-01-24]
0603 ssb> ed25519 2018-01-24 [S]
0604
0605 Il simbolo ``>`` in ``ssb>`` indica che la sottochiave è disponibile solo
0606 nella smartcard. Se tornate nella vostra cartella delle chiavi segrete e
0607 guardate al suo contenuto, noterete che i file ``.key`` sono stati sostituiti
0608 con degli stub::
0609
0610 $ cd ~/.gnupg/private-keys-v1.d
0611 $ strings *.key | grep 'private-key'
0612
0613 Per indicare che i file sono solo degli stub e che in realtà il contenuto è
0614 sulla smartcard, l'output dovrebbe mostrarvi ``shadowed-private-key``.
0615
0616 Verificare che la smartcard funzioni
0617 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0618
0619 Per verificare che la smartcard funzioni come dovuto, potete creare
0620 una firma::
0621
0622 $ echo "Hello world" | gpg --clearsign > /tmp/test.asc
0623 $ gpg --verify /tmp/test.asc
0624
0625 Col primo comando dovrebbe chiedervi il PIN della smartcard, e poi dovrebbe
0626 mostrare "Good signature" dopo l'esecuzione di ``gpg --verify``.
0627
0628 Complimenti, siete riusciti a rendere estremamente difficile il furto della
0629 vostra identità digitale di sviluppatore.
0630
0631 Altre operazioni possibili con GnuPG
0632 ------------------------------------
0633
0634 Segue un breve accenno ad alcune delle operazioni più comuni che dovrete
0635 fare con le vostre chiavi PGP.
0636
0637 Montare il disco con la chiave primaria
0638 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0639
0640 Vi servirà la vostra chiave principale per tutte le operazioni che seguiranno,
0641 per cui per prima cosa dovrete accedere ai vostri backup e dire a GnuPG di
0642 usarli::
0643
0644 $ export GNUPGHOME=/media/disk/foo/gnupg-backup
0645 $ gpg --list-secret-keys
0646
0647 Dovete assicurarvi di vedere ``sec`` e non ``sec#`` nell'output del programma
0648 (il simbolo ``#`` significa che la chiave non è disponibile e che state ancora
0649 utilizzando la vostra solita cartella di lavoro).
0650
0651 Estendere la data di scadenza di una chiave
0652 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0653
0654 La chiave principale ha una data di scadenza di 2 anni dal momento della sua
0655 creazione. Questo per motivi di sicurezza e per rendere obsolete le chiavi
0656 che, eventualmente, dovessero sparire dai keyserver.
0657
0658 Per estendere di un anno, dalla data odierna, la scadenza di una vostra chiave,
0659 eseguite::
0660
0661 $ gpg --quick-set-expire [fpr] 1y
0662
0663 Se per voi è più facile da memorizzare, potete anche utilizzare una data
0664 specifica (per esempio, il vostro compleanno o capodanno)::
0665
0666 $ gpg --quick-set-expire [fpr] 2020-07-01
0667
0668 Ricordatevi di inviare l'aggiornamento ai keyserver::
0669
0670 $ gpg --send-key [fpr]
0671
0672 Aggiornare la vostra cartella di lavoro dopo ogni modifica
0673 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0674
0675 Dopo aver fatto delle modifiche alle vostre chiavi usando uno spazio a parte,
0676 dovreste importarle nella vostra cartella di lavoro abituale::
0677
0678 $ gpg --export | gpg --homedir ~/.gnupg --import
0679 $ unset GNUPGHOME
0680
0681
0682 Usare PGP con Git
0683 =================
0684
0685 Una delle caratteristiche fondanti di Git è la sua natura decentralizzata --
0686 una volta che il repositorio è stato clonato sul vostro sistema, avete la
0687 storia completa del progetto, inclusi i suoi tag, i commit ed i rami. Tuttavia,
0688 con i centinaia di repositori clonati che ci sono in giro, come si fa a
0689 verificare che la loro copia di linux.git non è stata manomessa da qualcuno?
0690
0691 Oppure, cosa succede se viene scoperta una backdoor nel codice e la riga
0692 "Autore" dice che sei stato tu, mentre tu sei abbastanza sicuro di
0693 `non averci niente a che fare`_?
0694
0695 Per risolvere entrambi i problemi, Git ha introdotto l'integrazione con PGP.
0696 I tag firmati dimostrano che il repositorio è integro assicurando che il suo
0697 contenuto è lo stesso che si trova sulle macchine degli sviluppatori che hanno
0698 creato il tag; mentre i commit firmati rendono praticamente impossibile
0699 ad un malintenzionato di impersonarvi senza avere accesso alle vostre chiavi
0700 PGP.
0701
0702 .. _`non averci niente a che fare`: https://github.com/jayphelps/git-blame-someone-else
0703
0704 Configurare git per usare la vostra chiave PGP
0705 ----------------------------------------------
0706
0707 Se avete solo una chiave segreta nel vostro portachiavi, allora non avete nulla
0708 da fare in più dato che sarà la vostra chiave di base. Tuttavia, se doveste
0709 avere più chiavi segrete, potete dire a git quale dovrebbe usare (``[fpg]``
0710 è la vostra impronta digitale)::
0711
0712 $ git config --global user.signingKey [fpr]
0713
0714 **IMPORTANTE**: se avete una comando dedicato per ``gpg2``, allora dovreste
0715 dire a git di usare sempre quello piuttosto che il vecchio comando ``gpg``::
0716
0717 $ git config --global gpg.program gpg2
0718
0719 Come firmare i tag
0720 ------------------
0721
0722 Per creare un tag firmato, passate l'opzione ``-s`` al comando tag::
0723
0724 $ git tag -s [tagname]
0725
0726 La nostra raccomandazione è quella di firmare sempre i tag git, perché
0727 questo permette agli altri sviluppatori di verificare che il repositorio
0728 git dal quale stanno prendendo il codice non è stato alterato intenzionalmente.
0729
0730 Come verificare i tag firmati
0731 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0732
0733 Per verificare un tag firmato, potete usare il comando ``verify-tag``::
0734
0735 $ git verify-tag [tagname]
0736
0737 Se state prendendo un tag da un fork del repositorio del progetto, git
0738 dovrebbe verificare automaticamente la firma di quello che state prendendo
0739 e vi mostrerà il risultato durante l'operazione di merge::
0740
0741 $ git pull [url] tags/sometag
0742
0743 Il merge conterrà qualcosa di simile::
0744
0745 Merge tag 'sometag' of [url]
0746
0747 [Tag message]
0748
0749 # gpg: Signature made [...]
0750 # gpg: Good signature from [...]
0751
0752 Se state verificando il tag di qualcun altro, allora dovrete importare
0753 la loro chiave PGP. Fate riferimento alla sezione ":ref:`it_verify_identities`"
0754 che troverete più avanti.
0755
0756 Configurare git per firmare sempre i tag con annotazione
0757 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0758
0759 Se state creando un tag con annotazione è molto probabile che vogliate
0760 firmarlo. Per imporre a git di firmare sempre un tag con annotazione,
0761 dovete impostare la seguente opzione globale::
0762
0763 $ git config --global tag.forceSignAnnotated true
0764
0765 Come usare commit firmati
0766 -------------------------
0767
0768 Creare dei commit firmati è facile, ma è molto più difficile utilizzarli
0769 nello sviluppo del kernel linux per via del fatto che ci si affida alle
0770 liste di discussione e questo modo di procedere non mantiene le firme PGP
0771 nei commit. In aggiunta, quando si usa *rebase* nel proprio repositorio
0772 locale per allinearsi al kernel anche le proprie firme PGP verranno scartate.
0773 Per questo motivo, la maggior parte degli sviluppatori del kernel non si
0774 preoccupano troppo di firmare i propri commit ed ignoreranno quelli firmati
0775 che si trovano in altri repositori usati per il proprio lavoro.
0776
0777 Tuttavia, se avete il vostro repositorio di lavoro disponibile al pubblico
0778 su un qualche servizio di hosting git (kernel.org, infradead.org, ozlabs.org,
0779 o altri), allora la raccomandazione è di firmare tutti i vostri commit
0780 anche se gli sviluppatori non ne beneficeranno direttamente.
0781
0782 Vi raccomandiamo di farlo per i seguenti motivi:
0783
0784 1. Se dovesse mai esserci la necessità di fare delle analisi forensi o
0785 tracciare la provenienza di un codice, anche sorgenti mantenuti
0786 esternamente che hanno firme PGP sui commit avranno un certo valore a
0787 questo scopo.
0788 2. Se dovesse mai capitarvi di clonare il vostro repositorio locale (per
0789 esempio dopo un danneggiamento del disco), la firma vi permetterà di
0790 verificare l'integrità del repositorio prima di riprendere il lavoro.
0791 3. Se qualcuno volesse usare *cherry-pick* sui vostri commit, allora la firma
0792 permetterà di verificare l'integrità dei commit prima di applicarli.
0793
0794 Creare commit firmati
0795 ~~~~~~~~~~~~~~~~~~~~~
0796
0797 Per creare un commit firmato, dovete solamente aggiungere l'opzione ``-S``
0798 al comando ``git commit`` (si usa la lettera maiuscola per evitare
0799 conflitti con un'altra opzione)::
0800
0801 $ git commit -S
0802
0803 Configurare git per firmare sempre i commit
0804 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0805
0806 Potete dire a git di firmare sempre i commit::
0807
0808 git config --global commit.gpgSign true
0809
0810 .. note::
0811
0812 Assicuratevi di aver configurato ``gpg-agent`` prima di abilitare
0813 questa opzione.
0814
0815 .. _it_verify_identities:
0816
0817 Come verificare l'identità degli sviluppatori del kernel
0818 ========================================================
0819
0820 Firmare i tag e i commit è facile, ma come si fa a verificare che la chiave
0821 usata per firmare qualcosa appartenga davvero allo sviluppatore e non ad un
0822 impostore?
0823
0824 Configurare l'auto-key-retrieval usando WKD e DANE
0825 --------------------------------------------------
0826
0827 Se non siete ancora in possesso di una vasta collezione di chiavi pubbliche
0828 di altri sviluppatori, allora potreste iniziare il vostro portachiavi
0829 affidandovi ai servizi di auto-scoperta e auto-recupero. GnuPG può affidarsi
0830 ad altre tecnologie di delega della fiducia, come DNSSEC e TLS, per sostenervi
0831 nel caso in cui iniziare una propria rete di fiducia da zero sia troppo
0832 scoraggiante.
0833
0834 Aggiungete il seguente testo al vostro file ``~/.gnupg/gpg.conf``::
0835
0836 auto-key-locate wkd,dane,local
0837 auto-key-retrieve
0838
0839 La *DNS-Based Authentication of Named Entities* ("DANE") è un metodo
0840 per la pubblicazione di chiavi pubbliche su DNS e per renderle sicure usando
0841 zone firmate con DNSSEC. Il *Web Key Directory* ("WKD") è un metodo
0842 alternativo che usa https a scopo di ricerca. Quando si usano DANE o WKD
0843 per la ricerca di chiavi pubbliche, GnuPG validerà i certificati DNSSEC o TLS
0844 prima di aggiungere al vostro portachiavi locale le eventuali chiavi trovate.
0845
0846 Kernel.org pubblica la WKD per tutti gli sviluppatori che hanno un account
0847 kernel.org. Una volta che avete applicato le modifiche al file ``gpg.conf``,
0848 potrete auto-recuperare le chiavi di Linus Torvalds e Greg Kroah-Hartman
0849 (se non le avete già)::
0850
0851 $ gpg --locate-keys torvalds@kernel.org gregkh@kernel.org
0852
0853 Se avete un account kernel.org, al fine di rendere più utile l'uso di WKD
0854 da parte di altri sviluppatori del kernel, dovreste `aggiungere alla vostra
0855 chiave lo UID di kernel.org`_.
0856
0857 .. _`aggiungere alla vostra chiave lo UID di kernel.org`: https://korg.wiki.kernel.org/userdoc/mail#adding_a_kernelorg_uid_to_your_pgp_key
0858
0859 Web of Trust (WOT) o Trust on First Use (TOFU)
0860 ----------------------------------------------
0861
0862 PGP incorpora un meccanismo di delega della fiducia conosciuto come
0863 "Web of Trust". Di base, questo è un tentativo di sostituire la necessità
0864 di un'autorità certificativa centralizzata tipica del mondo HTTPS/TLS.
0865 Invece di avere svariati produttori software che decidono chi dovrebbero
0866 essere le entità di certificazione di cui dovreste fidarvi, PGP lascia
0867 la responsabilità ad ogni singolo utente.
0868
0869 Sfortunatamente, solo poche persone capiscono come funziona la rete di fiducia.
0870 Nonostante sia un importante aspetto della specifica OpenPGP, recentemente
0871 le versioni di GnuPG (2.2 e successive) hanno implementato un meccanisco
0872 alternativo chiamato "Trust on First Use" (TOFU). Potete pensare a TOFU come
0873 "ad un approccio all fidicia simile ad SSH". In SSH, la prima volta che vi
0874 connettete ad un sistema remoto, l'impronta digitale della chiave viene
0875 registrata e ricordata. Se la chiave dovesse cambiare in futuro, il programma
0876 SSH vi avviserà e si rifiuterà di connettersi, obbligandovi a prendere una
0877 decisione circa la fiducia che riponete nella nuova chiave. In modo simile,
0878 la prima volta che importate la chiave PGP di qualcuno, si assume sia valida.
0879 Se ad un certo punto GnuPG trova un'altra chiave con la stessa identità,
0880 entrambe, la vecchia e la nuova, verranno segnate come invalide e dovrete
0881 verificare manualmente quale tenere.
0882
0883 Vi raccomandiamo di usare il meccanisco TOFU+PGP (che è la nuova configurazione
0884 di base di GnuPG v2). Per farlo, aggiungete (o modificate) l'impostazione
0885 ``trust-model`` in ``~/.gnupg/gpg.conf``::
0886
0887 trust-model tofu+pgp
0888
0889 Come usare i keyserver in sicurezza
0890 -----------------------------------
0891 Se ottenete l'errore "No public key" quando cercate di validate il tag di
0892 qualcuno, allora dovreste cercare quella chiave usando un keyserver. È
0893 importante tenere bene a mente che non c'è alcuna garanzia che la chiave
0894 che avete recuperato da un keyserver PGP appartenga davvero alla persona
0895 reale -- è progettato così. Dovreste usare il Web of Trust per assicurarvi
0896 che la chiave sia valida.
0897
0898 Come mantenere il Web of Trust va oltre gli scopi di questo documento,
0899 semplicemente perché farlo come si deve richiede sia sforzi che perseveranza
0900 che tendono ad andare oltre al livello di interesse della maggior parte degli
0901 esseri umani. Qui di seguito alcuni rapidi suggerimenti per aiutarvi a ridurre
0902 il rischio di importare chiavi maligne.
0903
0904 Primo, diciamo che avete provato ad eseguire ``git verify-tag`` ma restituisce
0905 un errore dicendo che la chiave non è stata trovata::
0906
0907 $ git verify-tag sunxi-fixes-for-4.15-2
0908 gpg: Signature made Sun 07 Jan 2018 10:51:55 PM EST
0909 gpg: using RSA key DA73759BF8619E484E5A3B47389A54219C0F2430
0910 gpg: issuer "wens@...org"
0911 gpg: Can't check signature: No public key
0912
0913 Cerchiamo nel keyserver per maggiori informazioni sull'impronta digitale
0914 della chiave (l'impronta digitale, probabilmente, appartiene ad una
0915 sottochiave, dunque non possiamo usarla direttamente senza trovare prima
0916 l'ID della chiave primaria associata ad essa)::
0917
0918 $ gpg --search DA73759BF8619E484E5A3B47389A54219C0F2430
0919 gpg: data source: hkp://keys.gnupg.net
0920 (1) Chen-Yu Tsai <wens@...org>
0921 4096 bit RSA key C94035C21B4F2AEB, created: 2017-03-14, expires: 2019-03-15
0922 Keys 1-1 of 1 for "DA73759BF8619E484E5A3B47389A54219C0F2430". Enter number(s), N)ext, or Q)uit > q
0923
0924 Localizzate l'ID della chiave primaria, nel nostro esempio
0925 ``C94035C21B4F2AEB``. Ora visualizzate le chiavi di Linus Torvalds
0926 che avete nel vostro portachiavi::
0927
0928 $ gpg --list-key torvalds@kernel.org
0929 pub rsa2048 2011-09-20 [SC]
0930 ABAF11C65A2970B130ABE3C479BE3E4300411886
0931 uid [ unknown] Linus Torvalds <torvalds@kernel.org>
0932 sub rsa2048 2011-09-20 [E]
0933
0934 Poi, cercate un percorso affidabile da Linux Torvalds alla chiave che avete
0935 trovato con ``gpg --search`` usando la chiave sconosciuta.Per farlo potete usare
0936 diversi strumenti come https://github.com/mricon/wotmate,
0937 https://git.kernel.org/pub/scm/docs/kernel/pgpkeys.git/tree/graphs, e
0938 https://the.earth.li/~noodles/pathfind.html.
0939
0940 Se trovate un paio di percorsi affidabili è un buon segno circa la validità
0941 della chiave. Ora, potete aggiungerla al vostro portachiavi dal keyserver::
0942
0943 $ gpg --recv-key C94035C21B4F2AEB
0944
0945 Questa procedura non è perfetta, e ovviamente state riponendo la vostra
0946 fiducia nell'amministratore del servizio *PGP Pathfinder* sperando che non
0947 sia malintenzionato (infatti, questo va contro :ref:`it_devs_not_infra`).
0948 Tuttavia, se mantenete con cura la vostra rete di fiducia sarà un deciso
0949 miglioramento rispetto alla cieca fiducia nei keyserver.