<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>gnupg &amp;mdash; Cyberdyne Systems</title>
    <link>https://noblogo.org/aytin/tag:gnupg</link>
    <description>&#34;Fare o non fare. Non c&#39;è provare!&#34;</description>
    <pubDate>Thu, 30 Apr 2026 10:05:08 +0000</pubDate>
    <item>
      <title>Gestire la tua chiave GPG</title>
      <link>https://noblogo.org/aytin/gestire-la-tua-chiave-gpg</link>
      <description>&lt;![CDATA[gpg tools&#xA;&#xA;Esistono numerose gui che semplificano la gestione di una chiave gpg.&#xA;&#xA;Questo articolo ha lo scopo di semplificare la creazione di una chiave gpg attraverso la cli di GnuPG, senza entrare nel suo mare magnum di opzioni.&#xA;!--more--&#xA;&#xA;Indice&#xA;&#xA;a href=&#34;#premessa&#34;Premessa/a&#xA;a href=&#34;#gestione-della-chiave&#34;Gestione della chiave/a&#xA;a href=&#34;#come-proteggere-il-nostro-keyring&#34;Come proteggere il nostro keyring/a&#xA;a href=&#34;#cos-e-un-keyserver&#34;Cos&#39;è un keyerver/a&#xA;&#xA;----&#xA;&#xA;a id=premessa&#34;Premessa/a&#xA;Cosa NON è una chiave gpg?&#xA;Una coppia di chiavi, una pubblica e una privata basate sulla crittografia asimmetrica.&#xA;&#xA;Cos&#39;è una chiave gpg?&#xA;Non è solo una coppia di chiavi asimmetriche ma è un certificato.&#xA;Dal punto di vista delle informazioni, una chiave gpg contiene:&#xA;&#xA;informazioni identificative (nome, commento, email, foto, ecc)&#xA;informazioni non identificative (dati tecnici che fanno parte delle chiavi: scadenza, keyserver, algoritmi di hash e cifratura, revoker ecc.)&#xA;&#xA;Una chiave gpg, in definitiva, è costituita da: &#xA;&#xA;una chiave primaria (detta anche secret key o master key)&#xA;da una o più sottochiavi&#xA;da una serie di informazioni personali.&#xA;&#xA;Ognuna di queste &#34;chiavi&#34; è in realtà una coppia di chiavi asimmetriche dotate delle seguenti autorizzazioni: &#xA;&#xA;Certificazione: capacità della chiave di firmare, e quindi validare, le chiavi gpg di altri utenti.&#xA;Firma: capacità di firmare documenti.&#xA;Cifratura: capacità di cifrare documenti.&#xA;Autenticazione: capacità di autenticare l&#39;utente su alcuni protocolli come TLS o SSH.&#xA;&#xA;La certificazione, ossia la capacità di validare altre chiavi oltre la propria, è esclusiva della master key.&#xA;Le altre autorizzazioni possono essere delegate alle sottochiavi.&#xA;&#xA;Certificazioni e firma, garantiscono autenticazione, integrità e non ripudio del mittente.&#xA;La cifratura garantisce confidenzialità.&#xA;Le prime due sono da considerarsi più critiche e normalmente assegnate alla master key.&#xA;&#xA;Una chiave può avere una o più proprietà. Di default, gpg crea una master key con autorizzazioni per firma e certificazione e una sottochiave con autorizzazioni per cifratura.&#xA;a id=&#34;gestione-della-chiave&#34;Gestione della chiave/a&#xA;Per la creazione e la gestione della chiave nei suoi elementi principali, vedremo:&#xA;&#xA;come creare la chiave primaria&#xA;come aggiungere sottochiavi, uid&#xA;come modificare password o scadenza&#xA;come si certifica un&#39;altra chiave con la nostra (firma di chiave)&#xA;come si cancellano localmente uid, sottochiavi e firme&#xA;come si revoca un certificato, una sottochiave, un uid o una certificazione&#xA;come si usa un keyserver per la pubblicazione e la ricerca delle chiavi&#xA;&#xA;Creazione della chiave primaria&#xA;gpg --quick-gen-key uid algo auth expire, dove&#xA;- uid: &#34;uidname (comment) e-mail&#34;&#xA;- algo: uno fra &#39;gpg --with-colons --list-config&#39;&#xA;- auth: cert|encr|sign&#xA;- expire: 0 =  illimitato, ny|nm|nd =  n anni|mesi|giorni&#xA;gpg --quick-gen-key gandalf ed25519 cert 0&#xA;Crea una chiave gpg la cui secret key può solo certificare, l&#39;uid è composto dal solo nome gandalf e ha scadenza illimitata.&#xA;gpg -K&#xA;/home/gandalf/.gnupg/pubring.kbx&#xA;--------------------------------&#xA;sec   ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C]&#xA;&#x9;  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B&#xA;uid                   [ultimate] gandalf&#xA;Ecco la chiave appena creata, nella prima riga distinguiamo: &#xA;&#xA;&#34;sec&#34;, sta per secret key&#xA;algoritmo/KeyID&#xA;data di creazione&#xA;capability ([C]=certify). &#xA;&#xA;Nella riga successiva è visibile il fingerprint e nella terza, l&#39;uid (gandalf). Questi elementi, come il KeyID, servono per indirizzare la chiave.&#xA;&#xA;Una sintassi più completa sarebbe:&#xA;gpg --quick-gen-key &#34;nome (commento) e-mail&#34; algo cert|sign|encr scadenza&#xA;Per avere una lista degli algo:&#xA;gpg --with-colons --list-config&#xA;Aggiungere una sottochiave&#xA;Aggiungiamo le chiavi di firma e di cifratura con scadenza 5 anni e 1 anno rispettivamente&#xA;gpg --quick-addgen-key fpr algo auth expire&#xA;gpg --quick-add-key 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B ed25519 sign 5y&#xA;gpg --quick-add-key 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B cv25519 encr 1y&#xA;Come prima, oltre alla secret key, ora sono visibili le sottochiavi (ssb, Secret SubKey) di firma e cifratura con le evidenze per:&#xA;algoritmo, KeyID, creazione, capability ([S] per sign e [E] per encrypt) e scadenza.&#xA;gpg -K&#xA;/home/gandalf/.gnupg/pubring.kbx&#xA;--------------------------------&#xA;sec   ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C]&#xA;&#x9;  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B&#xA;uid                   [ultimo] gandalf&#xA;ssb   ed25519/0xA391F0548FB542DB 2024-11-05 [S] [scadenza: 2029-11-04]&#xA;ssb   cv25519/0xAAEF649D51D832E8 2024-11-05 [E] [scadenza: 2025-11-05]&#xA;Meccanismi di indirizzamento per una chiave&#xA;Una chiave può essere riferita attraverso l&#39;uid, il key ID o il fingerprint. Il riferimento è importante nelle operazioni di manipolazione della chiave.&#xA;gpg --with-subkey-fingerprint -K&#xA;/home/gandalf/.gnupg/pubring.kbx&#xA;--------------------------------&#xA;sec   ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C]&#xA;&#x9;  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B&#xA;uid                   [ultimate] gandalf&#xA;uid                   [ultimate] Gandalf Il Bianco (Questa è la chiave di Gandalf Il Bianco) gandalf@lotr.org&#xA;ssb   ed25519/0xA391F0548FB542DB 2024-11-05 [S] [expires: 2029-11-04]&#xA;&#x9;  87EF9CF3D5A4D78ADA80E364A391F0548FB542DB&#xA;ssb   cv25519/0xAAEF649D51D832E8 2024-11-05 [E] [expires: 2025-11-04]&#xA;&#x9;  4DD33D36C54E2247486C9DC7AAEF649D51D832E8&#xA;&#xA;0xE01BDCB6A3C6778B è il key ID della master key&#xA;8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B è il fingerprint della master key&#xA;gandalf è uno degli uid&#xA;&#xA;Aggiungere un uid&#xA;Aggiunge un nuovo uid in termini di nome-commento-email e lo battezza come primario.&#xA;gpg --quick-add-uid primaryuid newuid&#xA;gpg --quick-add-uid gandalf &#34;Gandalf Il Bianco (Questa è la chiave di Gandalf Il Bianco) gandalf@lotr.org&#34;&#xA;&#xA;gpg --quick-set-primary-uid primaryuid newuid&#xA;gpg --quick-set-primary-uid &#34;gandalf&#34; &#34;Gandalf Il Bianco (Questa è la chiave di Gandalf Il Bianco) gandalf@lotr.org&#34;&#xA;Firmare una chiave&#xA;&#xA;Ossia riconoscere una chiave gpg come valida attraverso la certificazione.&#xA;Pubblicare questa chiave sul keyserver, comunica al mondo che riconosciamo quella chiave come valida.&#xA;&#xA;Convalida tutti gli uid della chiave identificata da fpr&#xA;gpg --quick-sign-key fpr&#xA;gpg --quick-sign-key AD59879E1CB5D63E98F05FB9204621DACB1296E0&#xA;Convalida un uid specifico della chiave identificata da fpr&#xA;gpg --quick-sign-key fpr uid&#xA;gpg --quick-sign-key AD59879E1CB5D63E98F05FB9204621DACB1296E0 frodo&#xA;Modificare la password&#xA;Inserisce la password con cui tutte le chiavi private (master key e subkey) relative all&#39;uid indicato, vengono cifrate. Se la password viene lasciata vuota, la chiave non viene cifrata.&#xA;gpg --passwd uid|KeyID|fpr&#xA;gpg --passwd gandalf&#xA;Modificare la scadenza&#xA;Modifico le scadenze delle chiavi come segue:&#xA;&#xA;la master key da illimitata a 10 anni&#xA;la sottochiave di firma da 5 anni a 4 anni&#xA;la sottochiave di cifratura da 1 anno a 2 anni&#xA;&#xA;gpg --quick-set-expire fpr expire&#xA;gpg --quick-set-expire 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B 10y&#xA;gpg --quick-set-expire 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B 4y 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB&#xA;gpg --quick-set-expire 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B 2y 4DD33D36C54E2247486C9DC7AAEF649D51D832E8&#xA;gpg --with-subkey-fingerprint -K&#xA;/home/gandalf/.gnupg/pubring.kbx&#xA;--------------------------------&#xA;sec   ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C] [expires: 2034-11-04]&#xA;&#x9;  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B&#xA;uid                   [ultimate] gandalf&#xA;uid                   [ultimate] Gandalf Il Bianco (Questa è la chiave di Gandalf Il Bianco) gandalf@lotr.org&#xA;ssb   ed25519/0xA391F0548FB542DB 2024-11-05 [S] [expires: 2028-11-04]&#xA;&#x9;  87EF9CF3D5A4D78ADA80E364A391F0548FB542DB&#xA;ssb   cv25519/0xAAEF649D51D832E8 2024-11-05 [E] [expires: 2026-11-04]&#xA;&#x9;  4DD33D36C54E2247486C9DC7AAEF649D51D832E8&#xA;Cancellazione di elementi dal keyring&#xA;La cancellazione di elementi come uid, firme o sottochiavi ha effetto solo sul keyring locale.&#xA;Se la chiave è stata pubblicata su un repository, le cancellazioni non avranno alcun effetto.&#xA;Se si vuole inibire uno di questi elementi, si deve ricorrere alla revoca che è esportabile sui keyserver.&#xA;Cancellare una sottochiave&#xA;Cancella la sottochiave di firma&#xA;gpg --delete-secret-and-public-keys KeyID|fpr&#xA;gpg --delete-secret-and-public-keys 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB!&#xA;o, equivalentemente&#xA;gpg --delete-secret-and-public-keys 0xA391F0548FB542DB!&#xA;Cancellare un uid&#xA;Cancella la seconda identità della chiave gandalf (0xA391F0548FB542DB)&#xA;gpg --edit-key [KeyID|fpr|uid]&#xA;gpg --edit-key gandalf&#xA;    uid 2&#xA;    deluid&#xA;    save&#xA;Cancellare una firma&#xA;Cancella tutte le firme del 2° uid che non siano self-signature.&#xA;gpg --edit-key [KeyID|fpr|uid]&#xA;gpg --edit-key gandalf&#xA;    uid 2&#xA;    delsig&#xA;    save&#xA;Operazioni di revoca&#xA;Per quel che riguarda le chiavi gpg (i certificati) di cui si possiede la chiave privata, l&#39;operazione di revoca può avvenire su uno degli elementi della chiave o sull&#39;intero certificato.&#xA;Revocare un uid&#xA;Revoco l&#39;uid (gandalf il grigio),&#xA;gpg --quick-revuid primaryuid uid &#xA;gpg --quick-revuid gandalf &#34;gandalf il grigio&#34;&#xA;Revocare una sottochiave&#xA;gpg --edit-key [KeyID|fpr|uid]&#xA;gpg --edit-key 0xA391F0548FB542DB&#xA;    key 1&#xA;    revkey&#xA;    save&#xA;Revocare una nostra certificazione&#xA;Così come validiamo le chiavi altrui con la nostra firma di certificazione, allo stesso modo possiamo revocarla.&#xA;&#xA;Revoco la mia firma su tutti gli uid di una chiave pubblica&#xA;gpg --quick-revoke-sig KeyID|fpr del firmato KeyID|fpr del firmante &#xA;gpg --quick-revoke-sig 0x204621DACB1296E0 0xE01BDCB6A3C6778B&#xA;Posso anche revocare la mia firma su un uid specifico&#xA;gpg --quick-revoke-sig KeyID|fpr del firmato KeyID|fpr del firmante uidi&#xA;gpg --quick-revoke-sig 0x204621DACB1296E0 0xE01BDCB6A3C6778B frodouid2&#xA;Revocare l&#39;intero certificato&#xA;Va a revocare non solo tutti gli uid e tutte le sottochiavi, ma anche la masterkey.&#xA;gpg --import 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB.rev&#xA;Il certificato di revoca viene generato all&#39;atto della creazione della chiave.&#xA;Se non ci fosse, conviene sempre crearlo così che, se la master key venisse compromessa, saremmo almeno in grado di revocare l&#39;intero certificato.&#xA;gpg -o file --gen-rev fpr&#xA;gpg -o 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB.rev --gen-rev 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB&#xA;Le operazioni di revoca, nel mondo gpg, corrispondono alle maledizioni senza perdono, nel mondo di Harry Potter.&#xA;Non si torna indietro a meno di un backup, e se le revoche vengono pubblicate su un keyserver, diventano irreversibili.&#xA;Operazioni sul keyserver&#xA;Il caricamento delle chiavi su un keyserver costituisce la finalizzazione delle operazioni svolte finora.&#xA;&#xA;Il keyserver pubblica al mondo le nostre chiavi, la configurazione avviene nel file dirmngr.conf aggiungendo una riga (ad es. per keys.openpgp.org):&#xA;vi dirmngr.conf&#xA;&#xA;...&#xA;keyserver hkps://keys.openpgp.org&#xA;...&#xA;e ricaricando la configurazione:&#xA;gpgconf --reload dirmngr&#xA;Cerca&#xA;Cerca nel keyserver le chiavi con uid specificato. In caso di successo, chiede se possono essere aggiunte al keyring.&#xA;gpg --search-keys uid&#xA;gpg --search-keys 0xE01BDCB6A3C6778B 0x204621DACB1296E0&#xA;Per gli utilizzatori di keys.openpgp.org:&#xA;gpg --auto-key-locate keyserver --locate-keys uid&#xA;Invia&#xA;Invia una lista di chiavi al keyserver&#xA;gpg --send-keys KeyIDs|fpr&#xA;gpg --send-keys 0xE01BDCB6A3C6778B 0x204621DACB1296E0&#xA;Per gli utilizzatori di keys.openpgp.org:&#xA;Il classico send non è sufficiente perché non sarebbe possibile validare la mail di conferma. Si consiglia, non volendo usare l&#39;interfaccia web, di usare il seguente comando:&#xA;gpg --export KeyID|fpr|uid | curl -T - https://keys.openpgp.org&#xA;gpg --export 0xE01BDCB6A3C6778B | curl -T - https://keys.openpgp.org&#xA;che restituisce un link diretto alla pagina di verifica.&#xA;Ricevi&#xA;Scarica dal keyserver le chiavi&#xA;gpg --keyserver-options honor-keyserver-url --receive-keys KeyIDs|fpr&#xA;gpg --keyserver-options honor-keyserver-url --receive-keys 0xE01BDCB6A3C6778B 0x204621DACB1296E0&#xA;Scarica dal keyserver la chiave indicata dall&#39;uri&#xA;gpg --fetch-keys uri&#xA;gpg --fetch-keys https://keyserver.ubuntu.com/pks/lookup?search=0xE01BDCB6A3C6778B&amp;fingerprint=on&amp;op=index&#xA;Aggiorna&#xA;Per rinnovare tutte le chiavi pubbliche del keyring.&#xA;gpg --keyserver-options honor-keyserver-url --refresh-keys&#xA;a id=&#34;come-proteggere-il-nostro-keyring&#34;Come proteggere il nostro keyring/a&#xA;Come visto in precedenza, suggerisco di creare la master key per la sola certificazione e le due sottochiavi per firma e cifratura (anche quando la chiave primaria dovesse contenere altre autorizzazioni).&#xA;&#xA;Questo permetterebbe, volendo ma non è necessario, di ruotare più agevolmente le chiavi di firma e cifratura svincolandole dalla certificazione.&#xA;&#xA;Inoltre, così è più semplice rendere le chiavi gpg &#34;partially stripped&#34;, chiavi la cui sola secret key sia mancante della chiave privata, cosicché, se queste venissero smarrite o trafugate, la secret key in nostro possesso ci permetterebbe immediatamente di generare un certificato di revoca per le sottochiavi compromesse, generare delle nuove sottochiavi di firma e cifratura e di distribuire il tutto ad un keyserver.&#xA;&#xA;Chiavi gpg siffatte permetterebbero di svolgere le consuete operazioni di firma e cifratura documentale (quello che potremmo definire &#34;utilizzo giornaliero&#34;) ma impedirebbero qualunque operazione critica sulla propria chiave gpg (impossibilità di aggiungere, revocare sottochiavi o uid, di alterare scadenza o password ecc.) e su quelle altrui (certificare e quindi validare altre chiavi) upoichè è la chiave privata della master key a sigillare self-signed le informazioni della chiave gpg/u.&#xA;&#xA;In generale, posso estrarre la chiave privata da qualunque coppia di chiavi, siano esse sottochiavi o master key, ma non è uno scenario molto comune. Per estensione, eliminandole tutte otterremo un insieme di chiavi pubbliche (quella che otterrei anche con gpg --export uid|KeyID|fpr).&#xA;&#xA;Quello che invece ci interessa è eliminare la chiave privata della sola master key.&#xA;L&#39;eliminazione della chiave privata dalla master key, di per sè, non è un&#39;operazione particolarmente onerosa.&#xA;&#xA;La vera &#34;difficoltà&#34; risiede nel cambio di paradigma per l&#39;utente che l&#39;utilizzo di master key stripped comporta, perché avremo a che fare con un keyring da proteggere accuratamente e dei keyring da &#34;trincea&#34; da usare liberamente sui nostri device.&#xA;Realizzare un keyring per l&#39;uso quotidiano&#xA;Per farlo dobbiamo eliminare le chiavi private di tutte le master key del nostro keyring e per farlo dobbiamo fare un po&#39; di assunzioni.&#xA;&#xA;Come primo passo, bisogna spostare, se non è stato già fatto, il keryring dal pc/laptop/device ad un luogo sicuro (ad es. pendrive cifrata)&#xA;quindi si devono estrarre le chiavi private dalle master key e distribuirle dove possano servire &#xA;in caso di emergenza o se vi è necessità di modificare le chiavi, importare le chiavi gpg dal dispositivo sicuro, effettuare le modifiche, rigenerare e ridistribuire le nuove chiavi stripped&#xA;&#xA;Eliminazione della chiave privata dalla master key&#xA;La cancellazione della chiave privata impedisce alla master key o alla sottochiave  di esercitare pienamente le funzioni indicate dalle proprie autorizzazioni ossia certificazione, firma o decifratura.&#xA;&#xA;Per intervenire sulla singola chiave privata, occorre individuare il suo fingerprint o il suo keyid e usarlo per cancellare postponendo il carattere &#34;!&#34;. &#xA;&#xA;Ad es. sulla master key di gandalf:&#xA;gpg --delete-secret-keys 0x055D271BD85313D0!&#xA;Il carattere &#34;#&#34; (accanto a sec) vuol dire che la chiave privata è stata eliminata&#xA;gpg -K&#xA;/home/gandalf/ramfsgpg/pubring.kbx&#xA;-----------------------------------&#xA;sec#  ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C]&#xA;&#x9;  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B&#xA;uid                   [ultimo] gandalf&#xA;ssb   ed25519/0xA391F0548FB542DB 2024-11-05 [S] [scadenza: 2029-11-04]&#xA;ssb   cv25519/0xAAEF649D51D832E8 2024-11-05 [E] [scadenza: 2025-11-05]&#xA;Generalizzando, per realizzare il nostro keyring di lavoro si può agire, una tantum, in questo modo:&#xA;&#xA;1\. spostiamo il keyring di lavoro sul dispositivo sicuro&#xA;KEYRINGRAMFS=pathramfs&#xA;KEYRINGVAULT=pathpendrivecifrata&#xA;KEYRINGWORK=pathgpgdaily&#xA;export GNUPGHOME=${KEYRINGWORK}; cd $GNUPGHOME&#xA;&#xA;rsync -avp ${KEYRINGWORK}/ ${KEYRINGVAULT}/&#xA;2\. rendiamo il keyring stripped cancellando le chiavi private di tutte le master key.&#xA;for FPR in $(gpg --with-colons -K|grep sec -A 1|grep fpr|cut -d &#34;:&#34; -f 10); do &#xA;    gpg --batch --yes --delete-secret-keys &#34;${FPR}!&#34;&#xA;done&#xA;In seguito, come detto in precedenza, per lavorare sul keyring occorrerà ripristinarlo dal dispositivo sicuro, ad es. una pendrive cifrata.&#xA;&#xA;Per non lasciare tracce su altri device che non sia la pendrive cifrata, si possono seguire due strade.&#xA;&#xA;usare una distribuzione live (più sicura)&#xA;montare una partizione in ram su ramfs (non usa lo swap) su cui caricare il keyring.&#xA;&#xA;La prima via è certamente preferibile. Non c&#39;è alcun uso dei dispositivi di storage fisici della macchine, solo quelli volatili, ma presuppone che si possa avviare un SO da pendrive.&#xA;La seconda è più accessibile per certi versi ma presuppone che si possiedano i privilegi per montare una partizione su ram.&#xA;&#xA;Mostrerò la seconda via che è più articolata.&#xA;Lavorare con un keyring effimero&#xA;La strategia è quella di avere un keyring effimero montato su ramfs che farà da tramite fra il keyring master (su pendrive cifrata) e il keyring di lavoro.&#xA;&#xA;L&#39;obiettivo finale è quello di rendere strutturale il fatto di riuscire a compiere operazioni sul keyring usando il meno possibile i dispositivi di storage.&#xA;&#xA;0\. Init&#xA;KEYRINGRAMFS=pathramfs&#xA;KEYRINGVAULT=pathpendrivecifrata&#xA;KEYRINGWORK=pathgpgdaily&#xA;1\. Monto la partizione effimera&#xA;mkdir -p ${KEYRINGRAMFS}&#xA;sudo mount -t ramfs -o size=10M ramfs ${KEYRINGRAMFS}&#xA;sudo chown $(logname):$(logname) ${KEYRINGRAMFS}&#xA;2\. Esporto chiavi pubbliche e trust dal keyring di lavoro&#xA;gpg -o ${KEYRINGRAMFS}/keyringpubkeys.gpg --export&#xA;gpg --export-ownertrust   ${KEYRINGRAMFS}/keyringownertrust.txt&#xA;3\. Copio il keyring master sulla partizione effimera, modifico GNUPGHOME in modo che gpg lavori direttamente sulla partizione effimera. Su questo keyring effimero, completo l&#39;allineamento importando le chiavi pubbliche e il trust provenienti dal keyring di lavoro.&#xA;rsync -avp ${KEYRINGVAULT}/ ${KEYRINGRAMFS}/&#xA;export GNUPGHOME=${KEYRINGRAMFS}; cd $GNUPGHOME&#xA;gpg --import keyringpubkeys.gpg&#xA;gpg --import-ownertrust keyringownertrust.txt&#xA;4\. Eseguo le mie manipolazioni sul keyring effimero: uid, key, passwd, firme, revoche ecc.&#xA;...&#xA;[operazioni gpg]&#xA;...&#xA;5\. Copio il keyring master dalla partizione effimera alla pendrive cifrata &#xA;rsync -avp ${KEYRINGRAMFS}/ ${KEYRINGVAULT}/&#xA;6\. Rendo il keyring effimero di nuovo stripped&#xA;for FPR in $(gpg --with-colons -K|grep sec -A 1|grep fpr|cut -d &#34;:&#34; -f 10); do &#xA;    gpg --batch --yes --delete-secret-keys &#34;${FPR}!&#34;&#xA;done&#xA;7\. Ripristino il keyring di lavoro escludendo i certificati di revoca e cancellando la partizione effimera&#xA;rsync -avp --exclude openpgp-revocs.d ${KEYRINGRAMFS}/ ${KEYRINGWORK}/&#xA;export GNUPGHOME=${KEYRINGWORK}/&#xA;sudo umount ${KEYRINGRAMFS}; rmdir ${KEYRINGRAMFS}&#xA;La complessità di questa gestione può essere ridotta rendendo scriptabili i due blocchi (1,2,3) e (5,6,7), ad es. immaginando di avere a disposizione delle funzioni come gpg-vault [open|close|status], avendo la consapevolezza che, se usate male, possono essere delle operazioni distruttive.&#xA;a id=&#34;cos-e-un-keyserver&#34;Cos&#39;è un keyerver/a&#xA;Il keyserver è il luogo in cui pubblichiamo le nostre chiavi per renderle disponibili agli altri utenti.&#xA;&#xA;Inizialmente i keyserver avevano una logica p2p, distribuita e decentralizzata ottenuta con un&#39;implementazione chiamata SKS (Synchronizing Key Server) basata sulla rapida diffusione delle chiavi fra keyserver.&#xA;&#xA;I keyserver inizialmente servivano anche a realizzare il WOT (Web Of Trust) per la convalida delle chiavi.&#xA;&#xA;Col tempo, la mancanza di aggiornamenti del protocollo sks e la suscettibilità ad attacchi di tipo &#34;key poisoning&#34;, che possono rendere indisponibili interi certificati (ad es. riempiendo la chiave con innumerevoli firme contenenti tonnellate di dati tali da far crashare i client) o gli stessi keyserver (pubblicando quantitivi enormi di certificati non validi), amplificata dalle caratteristiche di sincronizzazione dei server, ne hanno decretato la fine.&#xA;&#xA;La realizzazione del WOT, tra l&#39;altro, offriva pubblicamente una tale quantità di chiavi che permetteva, da un lato, di tracciare interi social network basati sulle firme che vi venivano apposte, dall&#39;altro, di essere un formidabile serbatoio di email e altri dati sensibili a disposizione di attori malevoli, spammer e altro.&#xA;&#xA;Inoltre leggi recenti sulla privacy come GDPR, cozzavano contro la natura immutabile dei keyserver che, by design, aggiungono chiavi e non permettono la cancellazione.&#xA;Modelli recenti&#xA;I modelli di keyserver successivi mitigano (ma non risolvono completamente) queste debolezze:&#xA;&#xA;rinunciando alla federazione e alla distribuzione&#xA;sposando un modello basato sul controllo dell&#39;email prima dell&#39;accettazione della chiave&#xA;ricorrendo a limitazioni, filtri e valutazioni sulla bontà delle chiavi prima che queste vengano accettate.&#xA;&#xA;I principali modelli di keyserver sono:&#xA;&#xA;Hagrid&#xA;Mailvelope&#xA;HockeyPuck&#xA;&#xA;Sono stati tutti creati per sopperire ai limiti dei server SKS.&#xA;Hagrid&#xA;Il primo, basato su SequoiaPGP, ha una natura centralizzata (non sarà mai federato), è GDPR compliant ed ha dato luogo a keys.openpgp.org.&#xA;&#xA;I keyserver di questo tipo non aderiscono al modello WOT per ragioni di privacy e di efficienza. Sono quindi rifiutate le chiavi di terze parti, essenziali nel modello WOT, l&#39;accettazione della chiave pubblica è vincolata dalla verifica dell&#39;email, è possibile rimuovere le chiavi. Sono più resistenti agli attacchi di key poisoning.&#xA;Mailvelope&#xA;Ha dato luogo al keyserver keys.mailvelope.com, molto simile al primo e ne condivide la politica: no federazione, niente firme di terze parti e verifica dell&#39;email vincolante per l&#39;accettazione della chiave.&#xA;&#xA;A differenza di altri keyserver, il focus di Mailvelope è la semplificazione dell&#39;utilizzo della crittografia sull&#39;e-mail, che sia webmail, con i provider e i browser che supportano Mailvelope, o client, quando si integrino con le sue api.&#xA;Hockeypuck&#xA;È un ritorno alle origini, ha una natura federata ed è considerato l&#39;alternativa robusta ai server SKS. Uno fra i più noti server hockeypuck è certamente:&#xA;&#xA;keyserver.ubuntu.com&#xA;&#xA;il keyserver gestito dalla comunità Ubuntu che contiene le chiavi per i suoi pacchetti ma è anche aperto al pubblico.&#xA;&#xA;Un altro keyserver hockeypuck più di nicchia perché legato ad una specifica realtà tecnologica olandese è:&#xA;&#xA;pgp.surf.nl&#xA;&#xA;Sebbene possa essere meno aggiornato del primo, può essere usato liberamente per pubblicare le proprie chiavi.&#xA;&#xA;I keyserver di questo tipo, come il pool di server sks, anche se con un filtraggio più stringente, abbracciano il modello WOT con tutto quello che ne consegue.&#xA;Altri keyserver&#xA;Infine, per dovere di cronaca, bisogna citare due decani dei keyserver apparsi all&#39;alba di pgp e ormai non più utilizzabili per motivi di obsolescenza e di abbandono.&#xA;&#xA;pgp.mit.edu: uno dei primi repository a permettere la pubblicazione e la distribuzione di chiavi pubbliche, facente anche parte della rete SKS.&#xA;&#xA;global.pgp.com: l&#39;alternativa proprietaria, appartenente a PGP Corporation prima e Symantec dopo, era il repository centralizzato per la distribuzione di chiavi usato dall&#39;applicazione pgp.&#xA;&#xA;In conclusione, se la necessità è di utilizzare il WOT, allora la scelta è senza dubbio Hockeypuck quindi keyserver.ubuntu.com.&#xA;Se invece la privacy è prioritaria, Hagrid quindi keys.openpgp.org diventa la scelta obbligatoria, tanto che è il default sia di GPG che di OpenKeyChain&#xA;&#xA;#gpg #gnupg #crittografia #keyserver #hagrid #hockeypuck #mailvelope]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://pixelfed.uno/storage/m/_v2/489827599091373610/0bb057b62-db9a0d/RPB3ST0CtANw/6HDoBJ1kvx62x1IB9N7jfgzjG2JcWJ5eRPNRPOF6.png" alt="gpg tools"></p>

<p>Esistono numerose gui che semplificano la gestione di una chiave gpg.</p>

<p>Questo articolo ha lo scopo di semplificare la creazione di una chiave gpg attraverso la cli di GnuPG, senza entrare nel suo mare magnum di opzioni.
</p>

<h2 id="indice">Indice</h2>
<ol><li><a href="#premessa" rel="nofollow">Premessa</a></li>
<li><a href="#gestione-della-chiave" rel="nofollow">Gestione della chiave</a></li>
<li><a href="#come-proteggere-il-nostro-keyring" rel="nofollow">Come proteggere il nostro keyring</a></li>
<li><a href="#cos-e-un-keyserver" rel="nofollow">Cos&#39;è un keyerver</a></li></ol>

<hr>

<h2 id="a-id-premessa-premessa-a"><a id="premessa&#34;">Premessa</a></h2>

<p>Cosa <strong>NON</strong> è una chiave gpg?
Una coppia di chiavi, una pubblica e una privata basate sulla crittografia asimmetrica.</p>

<p>Cos&#39;è una chiave gpg?
Non è solo una coppia di chiavi asimmetriche ma è un <strong>certificato</strong>.
Dal punto di vista delle informazioni, una chiave gpg contiene:</p>
<ul><li>informazioni <strong>identificative</strong> (nome, commento, email, foto, ecc)</li>
<li>informazioni <strong>non identificative</strong> (dati tecnici che fanno parte delle chiavi: scadenza, keyserver, algoritmi di hash e cifratura, revoker ecc.)</li></ul>

<p>Una <strong>chiave gpg</strong>, in definitiva, è costituita da:</p>
<ul><li>una <strong>chiave primaria</strong> (detta anche <strong>secret key</strong> o <strong>master key</strong>)</li>
<li>da una o più sottochiavi</li>
<li>da una serie di informazioni personali.</li></ul>

<p>Ognuna di queste “chiavi” è in realtà una coppia di chiavi asimmetriche dotate delle seguenti autorizzazioni:</p>
<ul><li><strong>Certificazione</strong>: capacità della chiave di <strong>firmare</strong>, e quindi <strong>validare</strong>, le chiavi gpg di altri utenti.</li>
<li><strong>Firma</strong>: capacità di <strong>firmare documenti</strong>.</li>
<li><strong>Cifratura</strong>: capacità di <strong>cifrare documenti</strong>.</li>
<li><strong>Autenticazione</strong>: capacità di <strong>autenticare l&#39;utente</strong> su alcuni protocolli come <strong>TLS</strong> o <strong>SSH</strong>.</li></ul>

<p>La certificazione, ossia la capacità di validare altre chiavi oltre la propria, è esclusiva della master key.
Le altre autorizzazioni possono essere delegate alle sottochiavi.</p>

<p>Certificazioni e firma, garantiscono <strong>autenticazione</strong>, <strong>integrità</strong> e <strong>non ripudio</strong> del mittente.
La cifratura garantisce <strong>confidenzialità</strong>.
Le prime due sono da considerarsi più critiche e normalmente assegnate alla master key.</p>

<p>Una chiave può avere una o più proprietà. Di default, gpg crea una master key con autorizzazioni per firma e certificazione e una sottochiave con autorizzazioni per cifratura.</p>

<h2 id="a-id-gestione-della-chiave-gestione-della-chiave-a"><a id="gestione-della-chiave">Gestione della chiave</a></h2>

<p>Per la creazione e la gestione della chiave nei suoi elementi principali, vedremo:</p>
<ul><li>come creare la chiave primaria</li>
<li>come aggiungere sottochiavi, uid</li>
<li>come modificare password o scadenza</li>
<li>come si certifica un&#39;altra chiave con la nostra (firma di chiave)</li>
<li>come si cancellano localmente uid, sottochiavi e firme</li>
<li>come si revoca un certificato, una sottochiave, un uid o una certificazione</li>
<li>come si usa un keyserver per la pubblicazione e la ricerca delle chiavi</li></ul>

<h3 id="creazione-della-chiave-primaria">Creazione della chiave primaria</h3>

<pre><code class="language-bash"># gpg --quick-gen-key &lt;uid&gt; &lt;algo&gt; &lt;auth&gt; &lt;expire&gt;, dove
# - &lt;uid&gt;: &#34;uid_name (comment) &lt;e-mail&gt;&#34;
# - &lt;algo&gt;: uno fra &#39;gpg --with-colons --list-config&#39;
# - &lt;auth&gt;: cert|encr|sign
# - &lt;expire&gt;: 0 =&gt; illimitato, ny|nm|nd =&gt; n anni|mesi|giorni
gpg --quick-gen-key gandalf ed25519 cert 0
</code></pre>

<p>Crea una chiave gpg la cui secret key può solo certificare, l&#39;uid è composto dal solo nome <code>gandalf</code> e ha scadenza illimitata.</p>

<pre><code class="language-bash">gpg -K
/home/gandalf/.gnupg/pubring.kbx
--------------------------------
sec   ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C]
	  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B
uid                   [ultimate] gandalf
</code></pre>

<p>Ecco la chiave appena creata, nella prima riga distinguiamo:</p>
<ul><li>“sec”, sta per <strong>sec</strong>ret key</li>
<li>algoritmo/KeyID</li>
<li>data di creazione</li>
<li>capability (<strong>[C]</strong>=certify).</li></ul>

<p>Nella riga successiva è visibile il <strong>fingerprint</strong> e nella terza, l&#39;uid (gandalf). Questi elementi, come il KeyID, servono per indirizzare la chiave.</p>

<p>Una sintassi più completa sarebbe:</p>

<pre><code class="language-bash">gpg --quick-gen-key &#34;nome (commento) &lt;e-mail&gt;&#34; algo cert|sign|encr &lt;scadenza&gt;
</code></pre>

<p>Per avere una lista degli algo:</p>

<pre><code class="language-bash">gpg --with-colons --list-config
</code></pre>

<h3 id="aggiungere-una-sottochiave">Aggiungere una sottochiave</h3>

<p>Aggiungiamo le chiavi di firma e di cifratura con scadenza 5 anni e 1 anno rispettivamente</p>

<pre><code class="language-bash"># gpg --quick-addgen-key &lt;fpr&gt; &lt;algo&gt; &lt;auth&gt; &lt;expire&gt;
gpg --quick-add-key 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B ed25519 sign 5y
gpg --quick-add-key 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B cv25519 encr 1y
</code></pre>

<p>Come prima, oltre alla secret key, ora sono visibili le sottochiavi (ssb, <strong>S</strong>ecret <strong>S</strong>ub<strong>K</strong>ey) di firma e cifratura con le evidenze per:
algoritmo, KeyID, creazione, capability ([S] per sign e [E] per encrypt) e scadenza.</p>

<pre><code class="language-bash">gpg -K
/home/gandalf/.gnupg/pubring.kbx
--------------------------------
sec   ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C]
	  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B
uid                   [ultimo] gandalf
ssb   ed25519/0xA391F0548FB542DB 2024-11-05 [S] [scadenza: 2029-11-04]
ssb   cv25519/0xAAEF649D51D832E8 2024-11-05 [E] [scadenza: 2025-11-05]
</code></pre>

<h3 id="meccanismi-di-indirizzamento-per-una-chiave">Meccanismi di indirizzamento per una chiave</h3>

<p>Una chiave può essere riferita attraverso l&#39;uid, il key ID o il fingerprint. Il riferimento è importante nelle operazioni di manipolazione della chiave.</p>

<pre><code class="language-bash">gpg --with-subkey-fingerprint -K
/home/gandalf/.gnupg/pubring.kbx
--------------------------------
sec   ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C]
	  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B
uid                   [ultimate] gandalf
uid                   [ultimate] Gandalf Il Bianco (Questa è la chiave di Gandalf Il Bianco) &lt;gandalf@lotr.org&gt;
ssb   ed25519/0xA391F0548FB542DB 2024-11-05 [S] [expires: 2029-11-04]
	  87EF9CF3D5A4D78ADA80E364A391F0548FB542DB
ssb   cv25519/0xAAEF649D51D832E8 2024-11-05 [E] [expires: 2025-11-04]
	  4DD33D36C54E2247486C9DC7AAEF649D51D832E8
</code></pre>
<ul><li><code>0xE01BDCB6A3C6778B</code> è il key ID della master key</li>
<li><code>8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B</code> è il fingerprint della master key</li>
<li><code>gandalf</code> è uno degli uid</li></ul>

<h3 id="aggiungere-un-uid">Aggiungere un uid</h3>

<p>Aggiunge un nuovo uid in termini di nome-commento-email e lo battezza come primario.</p>

<pre><code class="language-bash"># gpg --quick-add-uid &lt;primary_uid&gt; &lt;new_uid&gt;
gpg --quick-add-uid gandalf &#34;Gandalf Il Bianco (Questa è la chiave di Gandalf Il Bianco) &lt;gandalf@lotr.org&gt;&#34;

# gpg --quick-set-primary-uid &lt;primary_uid&gt; &lt;new_uid&gt;
gpg --quick-set-primary-uid &#34;gandalf&#34; &#34;Gandalf Il Bianco (Questa è la chiave di Gandalf Il Bianco) &lt;gandalf@lotr.org&gt;&#34;
</code></pre>

<h3 id="firmare-una-chiave">Firmare una chiave</h3>

<p>Ossia riconoscere una chiave gpg come valida attraverso la certificazione.
Pubblicare questa chiave sul keyserver, comunica al mondo che riconosciamo quella chiave come valida.</p>

<p>Convalida tutti gli uid della chiave identificata da <code>&lt;fpr&gt;</code></p>

<pre><code class="language-bash"># gpg --quick-sign-key &lt;fpr&gt;
gpg --quick-sign-key AD59879E1CB5D63E98F05FB9204621DACB1296E0
</code></pre>

<p>Convalida un uid specifico della chiave identificata da <code>&lt;fpr&gt;</code></p>

<pre><code class="language-bash"># gpg --quick-sign-key &lt;fpr&gt; &lt;uid&gt;
gpg --quick-sign-key AD59879E1CB5D63E98F05FB9204621DACB1296E0 frodo
</code></pre>

<h3 id="modificare-la-password">Modificare la password</h3>

<p>Inserisce la password con cui tutte le chiavi private (master key e subkey) relative all&#39;uid indicato, vengono cifrate. Se la password viene lasciata vuota, la chiave non viene cifrata.</p>

<pre><code class="language-bash"># gpg --passwd &lt;uid|KeyID|fpr&gt;
gpg --passwd gandalf
</code></pre>

<h3 id="modificare-la-scadenza">Modificare la scadenza</h3>

<p>Modifico le scadenze delle chiavi come segue:</p>
<ul><li>la master key da illimitata a 10 anni</li>
<li>la sottochiave di firma da 5 anni a 4 anni</li>
<li>la sottochiave di cifratura da 1 anno a 2 anni</li></ul>

<pre><code class="language-bash"># gpg --quick-set-expire &lt;fpr&gt; &lt;expire&gt;
gpg --quick-set-expire 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B 10y
gpg --quick-set-expire 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B 4y 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB
gpg --quick-set-expire 8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B 2y 4DD33D36C54E2247486C9DC7AAEF649D51D832E8
</code></pre>

<pre><code class="language-bash">gpg --with-subkey-fingerprint -K
/home/gandalf/.gnupg/pubring.kbx
--------------------------------
sec   ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C] [expires: 2034-11-04]
	  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B
uid                   [ultimate] gandalf
uid                   [ultimate] Gandalf Il Bianco (Questa è la chiave di Gandalf Il Bianco) &lt;gandalf@lotr.org&gt;
ssb   ed25519/0xA391F0548FB542DB 2024-11-05 [S] [expires: 2028-11-04]
	  87EF9CF3D5A4D78ADA80E364A391F0548FB542DB
ssb   cv25519/0xAAEF649D51D832E8 2024-11-05 [E] [expires: 2026-11-04]
	  4DD33D36C54E2247486C9DC7AAEF649D51D832E8
</code></pre>

<h3 id="cancellazione-di-elementi-dal-keyring">Cancellazione di elementi dal keyring</h3>

<p>La cancellazione di elementi come uid, firme o sottochiavi ha effetto solo sul keyring locale.
Se la chiave è stata pubblicata su un repository, le cancellazioni non avranno alcun effetto.
Se si vuole inibire uno di questi elementi, si deve ricorrere alla <strong>revoca</strong> che è esportabile sui keyserver.</p>

<h4 id="cancellare-una-sottochiave">Cancellare una sottochiave</h4>

<p>Cancella la sottochiave di firma</p>

<pre><code class="language-bash"># gpg --delete-secret-and-public-keys &lt;KeyID|fpr&gt;
gpg --delete-secret-and-public-keys 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB!
# o, equivalentemente
gpg --delete-secret-and-public-keys 0xA391F0548FB542DB!
</code></pre>

<h4 id="cancellare-un-uid">Cancellare un uid</h4>

<p>Cancella la seconda identità della chiave <code>gandalf</code> (<code>0xA391F0548FB542DB</code>)</p>

<pre><code class="language-bash"># gpg --edit-key [KeyID|fpr|uid]
gpg --edit-key gandalf
    uid 2
    deluid
    save
</code></pre>

<h4 id="cancellare-una-firma">Cancellare una firma</h4>

<p>Cancella tutte le firme del 2° uid che non siano self-signature.</p>

<pre><code class="language-bash"># gpg --edit-key [KeyID|fpr|uid]
gpg --edit-key gandalf
    uid 2
    delsig
    save
</code></pre>

<h3 id="operazioni-di-revoca">Operazioni di revoca</h3>

<p>Per quel che riguarda le chiavi gpg (i certificati) di cui si possiede la chiave privata, l&#39;operazione di revoca può avvenire su uno degli elementi della chiave o sull&#39;intero certificato.</p>

<h4 id="revocare-un-uid">Revocare un uid</h4>

<p>Revoco l&#39;uid (<code>gandalf il grigio</code>),</p>

<pre><code class="language-bash"># gpg --quick-revuid &lt;primary_uid&gt; &lt;uid&gt; 
gpg --quick-revuid gandalf &#34;gandalf il grigio&#34;
</code></pre>

<h4 id="revocare-una-sottochiave">Revocare una sottochiave</h4>

<pre><code class="language-bash"># gpg --edit-key [KeyID|fpr|uid]
gpg --edit-key 0xA391F0548FB542DB
    key 1
    revkey
    save
</code></pre>

<h4 id="revocare-una-nostra-certificazione">Revocare una nostra certificazione</h4>

<p>Così come validiamo le chiavi altrui con la nostra firma di certificazione, allo stesso modo possiamo revocarla.</p>

<p>Revoco la mia firma su tutti gli uid di una chiave pubblica</p>

<pre><code class="language-bash"># gpg --quick-revoke-sig &lt;KeyID|fpr del firmato&gt; &lt;KeyID|fpr del firmante&gt; 
gpg --quick-revoke-sig 0x204621DACB1296E0 0xE01BDCB6A3C6778B
</code></pre>

<p>Posso anche revocare la mia firma su un uid specifico</p>

<pre><code class="language-bash"># gpg --quick-revoke-sig &lt;KeyID|fpr del firmato&gt; &lt;KeyID|fpr del firmante&gt; &lt;uid_i&gt;
gpg --quick-revoke-sig 0x204621DACB1296E0 0xE01BDCB6A3C6778B frodo_uid2
</code></pre>

<h4 id="revocare-l-intero-certificato">Revocare l&#39;intero certificato</h4>

<p>Va a revocare non solo tutti gli uid e tutte le sottochiavi, ma anche la masterkey.</p>

<pre><code class="language-bash">gpg --import 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB.rev
</code></pre>

<p>Il certificato di revoca viene generato all&#39;atto della creazione della chiave.
Se non ci fosse, conviene sempre crearlo così che, se la master key venisse compromessa, saremmo almeno in grado di revocare l&#39;intero certificato.</p>

<pre><code class="language-bash"># gpg -o &lt;file&gt; --gen-rev &lt;fpr&gt;
gpg -o 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB.rev --gen-rev 87EF9CF3D5A4D78ADA80E364A391F0548FB542DB
</code></pre>

<p>Le operazioni di revoca, nel mondo gpg, corrispondono alle maledizioni senza perdono, nel mondo di Harry Potter.
Non si torna indietro a meno di un backup, e se le revoche vengono pubblicate su un keyserver, diventano irreversibili.</p>

<h3 id="operazioni-sul-keyserver">Operazioni sul keyserver</h3>

<p>Il caricamento delle chiavi su un keyserver costituisce la finalizzazione delle operazioni svolte finora.</p>

<p>Il keyserver pubblica al mondo le nostre chiavi, la configurazione avviene nel file <strong>dirmngr.conf</strong> aggiungendo una riga (ad es. per keys.openpgp.org):</p>

<pre><code class="language-bash">vi dirmngr.conf

...
keyserver hkps://keys.openpgp.org
...
</code></pre>

<p>e ricaricando la configurazione:</p>

<pre><code class="language-bash">gpgconf --reload dirmngr
</code></pre>

<h4 id="cerca">Cerca</h4>

<p>Cerca nel keyserver le chiavi con uid specificato. In caso di successo, chiede se possono essere aggiunte al keyring.</p>

<pre><code class="language-bash"># gpg --search-keys &lt;uid&gt;
gpg --search-keys 0xE01BDCB6A3C6778B 0x204621DACB1296E0
</code></pre>

<p><strong>Per gli utilizzatori di keys.openpgp.org:</strong></p>

<pre><code class="language-bash">gpg --auto-key-locate keyserver --locate-keys &lt;uid&gt;
</code></pre>

<h4 id="invia">Invia</h4>

<p>Invia una lista di chiavi al keyserver</p>

<pre><code class="language-bash"># gpg --send-keys &lt;KeyIDs|fpr&gt;
gpg --send-keys 0xE01BDCB6A3C6778B 0x204621DACB1296E0
</code></pre>

<p><strong>Per gli utilizzatori di keys.openpgp.org:</strong>
Il classico send non è sufficiente perché non sarebbe possibile validare la mail di conferma. Si consiglia, non volendo usare l&#39;interfaccia web, di usare il seguente comando:</p>

<pre><code class="language-bash"># gpg --export &lt;KeyID|fpr|uid&gt; | curl -T - https://keys.openpgp.org
gpg --export 0xE01BDCB6A3C6778B | curl -T - https://keys.openpgp.org
</code></pre>

<p>che restituisce un link diretto alla pagina di verifica.</p>

<h4 id="ricevi">Ricevi</h4>

<p>Scarica dal keyserver le chiavi</p>

<pre><code class="language-bash"># gpg --keyserver-options honor-keyserver-url --receive-keys &lt;KeyIDs|fpr&gt;
gpg --keyserver-options honor-keyserver-url --receive-keys 0xE01BDCB6A3C6778B 0x204621DACB1296E0
</code></pre>

<p>Scarica dal keyserver la chiave indicata dall&#39;uri</p>

<pre><code class="language-bash"># gpg --fetch-keys &lt;uri&gt;
gpg --fetch-keys https://keyserver.ubuntu.com/pks/lookup?search=0xE01BDCB6A3C6778B&amp;fingerprint=on&amp;op=index
</code></pre>

<h4 id="aggiorna">Aggiorna</h4>

<p>Per rinnovare tutte le chiavi pubbliche del keyring.</p>

<pre><code class="language-bash">gpg --keyserver-options honor-keyserver-url --refresh-keys
</code></pre>

<h2 id="a-id-come-proteggere-il-nostro-keyring-come-proteggere-il-nostro-keyring-a"><a id="come-proteggere-il-nostro-keyring">Come proteggere il nostro keyring</a></h2>

<p>Come visto in precedenza, suggerisco di creare la master key <strong>per la sola certificazione</strong> e le due sottochiavi per firma e cifratura (anche quando la chiave primaria dovesse contenere altre autorizzazioni).</p>

<p>Questo permetterebbe, volendo ma non è necessario, di ruotare più agevolmente le chiavi di firma e cifratura svincolandole dalla certificazione.</p>

<p>Inoltre, così è più semplice rendere le chiavi gpg “partially stripped”, chiavi la cui sola secret key sia mancante della chiave privata, cosicché, se queste venissero smarrite o trafugate, la secret key in nostro possesso ci permetterebbe immediatamente di generare un certificato di revoca per le sottochiavi compromesse, generare delle nuove sottochiavi di firma e cifratura e di distribuire il tutto ad un keyserver.</p>

<p>Chiavi gpg siffatte permetterebbero di svolgere le consuete operazioni di firma e cifratura documentale (quello che potremmo definire “utilizzo giornaliero”) ma impedirebbero qualunque operazione critica sulla propria chiave gpg (impossibilità di aggiungere, revocare sottochiavi o uid, di alterare scadenza o password ecc.) e su quelle altrui (certificare e quindi validare altre chiavi) <u><strong>poichè è la chiave privata della master key a sigillare self-signed le informazioni della chiave gpg</strong></u>.</p>

<p>In generale, posso estrarre la chiave privata da qualunque coppia di chiavi, siano esse sottochiavi o master key, ma non è uno scenario molto comune. Per estensione, eliminandole tutte otterremo un insieme di chiavi pubbliche (quella che otterrei anche con gpg —export ).</p>

<p>Quello che invece ci interessa è <strong>eliminare la chiave privata della sola master key</strong>.
L&#39;eliminazione della chiave privata dalla master key, di per sè, non è un&#39;operazione particolarmente onerosa.</p>

<p>La vera “difficoltà” risiede nel cambio di paradigma per l&#39;utente che l&#39;utilizzo di master key stripped comporta, perché avremo a che fare con un keyring da proteggere accuratamente e dei keyring da “trincea” da usare liberamente sui nostri device.</p>

<h3 id="realizzare-un-keyring-per-l-uso-quotidiano">Realizzare un keyring per l&#39;uso quotidiano</h3>

<p>Per farlo dobbiamo eliminare le chiavi private di tutte le master key del nostro keyring e per farlo dobbiamo fare un po&#39; di assunzioni.</p>
<ol><li>Come primo passo, bisogna spostare, se non è stato già fatto, il keryring dal pc/laptop/device ad un luogo sicuro (ad es. pendrive cifrata)</li>
<li>quindi si devono estrarre le chiavi private dalle master key e distribuirle dove possano servire</li>
<li>in caso di emergenza o se vi è necessità di modificare le chiavi, importare le chiavi gpg dal dispositivo sicuro, effettuare le modifiche, rigenerare e ridistribuire le nuove chiavi stripped</li></ol>

<h4 id="eliminazione-della-chiave-privata-dalla-master-key">Eliminazione della chiave privata dalla master key</h4>

<p>La cancellazione della chiave privata impedisce alla master key o alla sottochiave  di esercitare pienamente le funzioni indicate dalle proprie autorizzazioni ossia certificazione, firma o decifratura.</p>

<p>Per intervenire sulla singola chiave privata, occorre individuare il suo fingerprint o il suo keyid e usarlo per cancellare postponendo il carattere “!”.</p>

<p>Ad es. sulla master key di gandalf:</p>

<pre><code class="language-bash">gpg --delete-secret-keys 0x055D271BD85313D0!
</code></pre>

<p>Il carattere “#” (accanto a sec) vuol dire che la chiave privata è stata eliminata</p>

<pre><code class="language-bash">gpg -K
/home/gandalf/ramfs_gpg/pubring.kbx
-----------------------------------
sec#  ed25519/0xE01BDCB6A3C6778B 2024-11-05 [C]
	  8C8EC405954D4ABB32CFA431E01BDCB6A3C6778B
uid                   [ultimo] gandalf
ssb   ed25519/0xA391F0548FB542DB 2024-11-05 [S] [scadenza: 2029-11-04]
ssb   cv25519/0xAAEF649D51D832E8 2024-11-05 [E] [scadenza: 2025-11-05]
</code></pre>

<p>Generalizzando, per realizzare il nostro keyring di lavoro si può agire, una tantum, in questo modo:</p>

<p>1. spostiamo il keyring di lavoro sul dispositivo sicuro</p>

<pre><code class="language-bash">KEYRING_RAMFS=&lt;path_ramfs&gt;
KEYRING_VAULT=&lt;path_pendrive_cifrata&gt;
KEYRING_WORK=&lt;path_gpg_daily&gt;
export GNUPGHOME=${KEYRING_WORK}; cd $GNUPGHOME

rsync -avp ${KEYRING_WORK}/ ${KEYRING_VAULT}/
</code></pre>

<p>2. rendiamo il keyring stripped cancellando le chiavi private di tutte le master key.</p>

<pre><code class="language-bash">for FPR in $(gpg --with-colons -K|grep sec -A 1|grep fpr|cut -d &#34;:&#34; -f 10); do 
    gpg --batch --yes --delete-secret-keys &#34;${FPR}!&#34;
done
</code></pre>

<p>In seguito, come detto in precedenza, per lavorare sul keyring occorrerà ripristinarlo dal dispositivo sicuro, ad es. una pendrive cifrata.</p>

<p>Per non lasciare tracce su altri device che non sia la pendrive cifrata, si possono seguire due strade.</p>
<ol><li>usare una distribuzione live (più sicura)</li>
<li>montare una partizione in ram su ramfs (non usa lo swap) su cui caricare il keyring.</li></ol>

<p>La prima via è certamente preferibile. Non c&#39;è alcun uso dei dispositivi di storage fisici della macchine, solo quelli volatili, ma presuppone che si possa avviare un SO da pendrive.
La seconda è più accessibile per certi versi ma presuppone che si possiedano i privilegi per montare una partizione su ram.</p>

<p>Mostrerò la seconda via che è più articolata.</p>

<h4 id="lavorare-con-un-keyring-effimero">Lavorare con un keyring effimero</h4>

<p>La strategia è quella di avere un keyring effimero montato su ramfs che farà da tramite fra il keyring master (su pendrive cifrata) e il keyring di lavoro.</p>

<p>L&#39;obiettivo finale è quello di rendere strutturale il fatto di riuscire a compiere operazioni sul keyring usando il meno possibile i dispositivi di storage.</p>

<p>0. Init</p>

<pre><code class="language-bash">KEYRING_RAMFS=&lt;path_ramfs&gt;
KEYRING_VAULT=&lt;path_pendrive_cifrata&gt;
KEYRING_WORK=&lt;path_gpg_daily&gt;
</code></pre>

<p>1. Monto la partizione effimera</p>

<pre><code class="language-bash">mkdir -p ${KEYRING_RAMFS}
sudo mount -t ramfs -o size=10M ramfs ${KEYRING_RAMFS}
sudo chown $(logname):$(logname) ${KEYRING_RAMFS}
</code></pre>

<p>2. Esporto chiavi pubbliche e trust dal keyring di lavoro</p>

<pre><code class="language-bash">gpg -o ${KEYRING_RAMFS}/keyring_pubkeys.gpg --export
gpg --export-ownertrust &gt; ${KEYRING_RAMFS}/keyring_ownertrust.txt
</code></pre>

<p>3. Copio il keyring master sulla partizione effimera, modifico <code>GNUPGHOME</code> in modo che gpg lavori direttamente sulla partizione effimera. Su questo keyring effimero, completo l&#39;allineamento importando le chiavi pubbliche e il trust provenienti dal keyring di lavoro.</p>

<pre><code class="language-bash">rsync -avp ${KEYRING_VAULT}/ ${KEYRING_RAMFS}/
export GNUPGHOME=${KEYRING_RAMFS}; cd $GNUPGHOME
gpg --import keyring_pubkeys.gpg
gpg --import-ownertrust keyring_ownertrust.txt
</code></pre>

<p>4. Eseguo le mie manipolazioni sul keyring effimero: uid, key, passwd, firme, revoche ecc.</p>

<pre><code class="language-bash">...
[operazioni gpg]
...
</code></pre>

<p>5. Copio il keyring master dalla partizione effimera alla pendrive cifrata</p>

<pre><code class="language-bash">rsync -avp ${KEYRING_RAMFS}/ ${KEYRING_VAULT}/
</code></pre>

<p>6. Rendo il keyring effimero di nuovo stripped</p>

<pre><code class="language-bash">for FPR in $(gpg --with-colons -K|grep sec -A 1|grep fpr|cut -d &#34;:&#34; -f 10); do 
    gpg --batch --yes --delete-secret-keys &#34;${FPR}!&#34;
done
</code></pre>

<p>7. Ripristino il keyring di lavoro escludendo i certificati di revoca e cancellando la partizione effimera</p>

<pre><code class="language-bash">rsync -avp --exclude openpgp-revocs.d ${KEYRING_RAMFS}/ ${KEYRING_WORK}/
export GNUPGHOME=${KEYRING_WORK}/
sudo umount ${KEYRING_RAMFS}; rmdir ${KEYRING_RAMFS}
</code></pre>

<p>La complessità di questa gestione può essere ridotta rendendo scriptabili i due blocchi (1,2,3) e (5,6,7), ad es. immaginando di avere a disposizione delle funzioni come <strong>gpg-vault [open|close|status]</strong>, avendo la consapevolezza che, se usate male, possono essere delle operazioni distruttive.</p>

<h2 id="a-id-cos-e-un-keyserver-cos-è-un-keyerver-a"><a id="cos-e-un-keyserver">Cos&#39;è un keyerver</a></h2>

<p>Il keyserver è il luogo in cui pubblichiamo le nostre chiavi per renderle disponibili agli altri utenti.</p>

<p>Inizialmente i keyserver avevano una logica p2p, distribuita e decentralizzata ottenuta con un&#39;implementazione chiamata <strong>SKS</strong> (<strong>S</strong>ynchronizing <strong>K</strong>ey <strong>S</strong>erver) basata sulla rapida diffusione delle chiavi fra keyserver.</p>

<p>I keyserver inizialmente servivano anche a realizzare il <strong>WOT</strong> (<strong>W</strong>eb <strong>O</strong>f <strong>T</strong>rust) per la convalida delle chiavi.</p>

<p>Col tempo, la mancanza di aggiornamenti del protocollo sks e la suscettibilità ad attacchi di tipo “key poisoning”, che possono rendere indisponibili interi certificati (ad es. riempiendo la chiave con innumerevoli firme contenenti tonnellate di dati tali da far crashare i client) o gli stessi keyserver (pubblicando quantitivi enormi di certificati non validi), amplificata dalle caratteristiche di sincronizzazione dei server, ne hanno decretato la fine.</p>

<p>La realizzazione del WOT, tra l&#39;altro, offriva pubblicamente una tale quantità di chiavi che permetteva, da un lato, di tracciare interi social network basati sulle firme che vi venivano apposte, dall&#39;altro, di essere un formidabile serbatoio di email e altri dati sensibili a disposizione di attori malevoli, spammer e altro.</p>

<p>Inoltre leggi recenti sulla privacy come GDPR, cozzavano contro la natura immutabile dei keyserver che, by design, aggiungono chiavi e non permettono la cancellazione.</p>

<h3 id="modelli-recenti">Modelli recenti</h3>

<p>I modelli di keyserver successivi mitigano (ma non risolvono completamente) queste debolezze:</p>
<ul><li>rinunciando alla federazione e alla distribuzione</li>
<li>sposando un modello basato sul controllo dell&#39;email prima dell&#39;accettazione della chiave</li>
<li>ricorrendo a limitazioni, filtri e valutazioni sulla bontà delle chiavi prima che queste vengano accettate.</li></ul>

<p>I principali modelli di keyserver sono:</p>
<ul><li><strong>Hagrid</strong></li>
<li><strong>Mailvelope</strong></li>
<li><strong>HockeyPuck</strong></li></ul>

<p>Sono stati tutti creati per sopperire ai limiti dei server SKS.</p>

<h4 id="hagrid">Hagrid</h4>

<p>Il primo, basato su <strong>SequoiaPGP</strong>, ha una natura centralizzata (non sarà mai federato), è GDPR compliant ed ha dato luogo a <strong>keys.openpgp.org</strong>.</p>

<p>I keyserver di questo tipo non aderiscono al modello WOT per ragioni di privacy e di efficienza. Sono quindi rifiutate le chiavi di terze parti, essenziali nel modello WOT, l&#39;accettazione della chiave pubblica è vincolata dalla verifica dell&#39;email, è possibile rimuovere le chiavi. Sono più resistenti agli attacchi di key poisoning.</p>

<h4 id="mailvelope">Mailvelope</h4>

<p>Ha dato luogo al keyserver <strong>keys.mailvelope.com</strong>, molto simile al primo e ne condivide la politica: no federazione, niente firme di terze parti e verifica dell&#39;email vincolante per l&#39;accettazione della chiave.</p>

<p>A differenza di altri keyserver, il focus di Mailvelope è la semplificazione dell&#39;utilizzo della crittografia sull&#39;e-mail, che sia webmail, con i provider e i browser che supportano Mailvelope, o client, quando si integrino con le sue api.</p>

<h4 id="hockeypuck">Hockeypuck</h4>

<p>È un ritorno alle origini, ha una natura federata ed è considerato l&#39;alternativa robusta ai server SKS. Uno fra i più noti server hockeypuck è certamente:</p>
<ul><li><strong>keyserver.ubuntu.com</strong></li></ul>

<p>il keyserver gestito dalla comunità Ubuntu che contiene le chiavi per i suoi pacchetti ma è anche aperto al pubblico.</p>

<p>Un altro keyserver hockeypuck più di nicchia perché legato ad una specifica realtà tecnologica olandese è:</p>
<ul><li><strong>pgp.surf.nl</strong></li></ul>

<p>Sebbene possa essere meno aggiornato del primo, può essere usato liberamente per pubblicare le proprie chiavi.</p>

<p>I keyserver di questo tipo, come il pool di server sks, anche se con un filtraggio più stringente, abbracciano il modello WOT con tutto quello che ne consegue.</p>

<h4 id="altri-keyserver">Altri keyserver</h4>

<p>Infine, per dovere di cronaca, bisogna citare due decani dei keyserver apparsi all&#39;alba di pgp e ormai non più utilizzabili per motivi di obsolescenza e di abbandono.</p>

<p><strong>pgp.mit.edu</strong>: uno dei primi repository a permettere la pubblicazione e la distribuzione di chiavi pubbliche, facente anche parte della rete SKS.</p>

<p><strong>global.pgp.com</strong>: l&#39;alternativa proprietaria, appartenente a PGP Corporation prima e Symantec dopo, era il repository centralizzato per la distribuzione di chiavi usato dall&#39;applicazione pgp.</p>

<p>In conclusione, se la necessità è di utilizzare il WOT, allora la scelta è senza dubbio <strong>Hockeypuck</strong> quindi <strong>keyserver.ubuntu.com</strong>.
Se invece la privacy è prioritaria, <strong>Hagrid</strong> quindi <strong>keys.openpgp.org</strong> diventa la scelta obbligatoria, tanto che è il default sia di GPG che di OpenKeyChain</p>

<p><a href="/aytin/tag:gpg" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">gpg</span></a> <a href="/aytin/tag:gnupg" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">gnupg</span></a> <a href="/aytin/tag:crittografia" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">crittografia</span></a> <a href="/aytin/tag:keyserver" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">keyserver</span></a> <a href="/aytin/tag:hagrid" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">hagrid</span></a> <a href="/aytin/tag:hockeypuck" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">hockeypuck</span></a> <a href="/aytin/tag:mailvelope" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">mailvelope</span></a></p>
]]></content:encoded>
      <guid>https://noblogo.org/aytin/gestire-la-tua-chiave-gpg</guid>
      <pubDate>Mon, 25 Nov 2024 15:00:37 +0000</pubDate>
    </item>
  </channel>
</rss>