This project is maintained by valerio-vaccaro
Questa lezion te guida nell’usà Gnu Privacy Guard (GPG):
L’è progettada per Linux con comand testaa su GPG 2.2.40/Debian 12. I stess comand poden funzionà similment su alter version de Linux e anca su MacOSX e Windows (eccett per filesystem criptaa).
El process seguiss le miglior pratiche de sicurezza, come la generazion de claav offline e backup sicur.
Installa gpg e i utilità necessari
sudo apt update
sudo apt install gnupg scdaemon pcscd yubikey-manager
Assicurass che la version sia 2.1.17 o pù recent (2.4.5 raccomandada).
gpg --version
Controlla la funzionalità de YubiKey
ykman info
Assicurass che l’applet OpenPGP sia abilità e el mode CCID sia attiv.
Dopra una macchina air-gapped (minga internet) per generà claav e evità fughe.
Ricorda che i PIN predefinii de YubiKey minga hinn sicur e hinn:
Genera una coppia de claav GPG primaria (pubblica e privada) per certificazion (C) domà; tutt le alter claav vegnarann derivada de questa.
Inizia la generazion de claav doprand –expert per opzion avanzaa.
gpg --expert --full-gen-key
Seleziona Tip de Claav:
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(9) ECC and ECC
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(13) Existing key
(14) Existing key from card
Your selection? 8
Scegli (8) RSA (set your own capabilities) per personalizzà el comportament de la claav.
Imposta le capacità:
Possible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Sign Certify Encrypt
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? S
Disabilita Sign e Encrypt (premi S, E).
Mantegn Certify (premi Q quand l’è fata).
Come risultat, domà Certify resta tra le azion permess.
Imposta la Grandezza de la Claav:
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Inseriss 4096 (massima supportada da YubiKey 4/5).
Imposta la Scadenza:
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Inseriss 3y (3 agn) o la tua preferenza. Conferma la data.
Inseriss l’ID Utent:
GnuPG needs to construct a user ID to identify your key.
Real name: Satoshi Spritz
Email address: info@satoshispritz.it
Comment:
You selected this USER-ID:
"Satoshi Spritz <info@satoshispritz.it>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
Forniss nom e email. Lassa el comment vöid. Conferma con O.
Inseriss una passphrase fort (miscia letter, numer, simbol; evità parol comun).
Esempi: Tr0ub4dor&3xplor3r!2025
La passphrase protegg la tua claav privada.
Genera entropia movend el mouse, scrivend a cas, o doprand rng-tools (Linux e domà se te la capiss ben):
sudo apt install rng-tools
sudo rngd -r /dev/urandom
Aspetta che la generazion de claav se completa. Nota l’ID de la claav (es. C2033656849FC82BA3C365E33C9BF8B9CB86875D) de l’output:
gpublic and secret key created and signed.
pub rsa2048 2025-07-20 [C]
C2033656849FC82BA3C365E33C9BF8B9CB86875D
uid Satoshi Spritz <info@satoshispritz.it>
Crea un certificat de revoca in cas che la claav sia compromessa (el tuo client l’ha già creada):
gpg --output revoke_master_satoshispritz.asc --gen-revoke C2033656849FC82BA3C365E33C9BF8B9CB86875D
Scegli el motiv (es. 1 = claav compromessa) e salva.
Crea Subclaav de Firm e Criptazion. Do subclaav vegnarann aggiunt per firmà (S) e criptà (E).
La claav primaria resta per certificazion domà.
Edita la claav:
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Inseriss la passphrase se richiesta.
Aggiung Subclaav de Firm:
gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
(14) Existing key from card
Your selection? 4
Scegli (4) RSA (sign only).
Imposta grandezza: 4096.
Imposta scadenza: 2y (2 agn, le subclaav poden vess rotata pù frequentement).
Conferma e inseriss la passphrase.
Aggiung Subclaav de Criptazion:
gpg> addkey
Scegli (6) RSA (encrypt only).
Imposta grandezza: 4096.
Imposta scadenza: 2y.
Conferma e inseriss la passphrase.
Salva i Cambiament:
gpg> save
Controlla le subclaav:
gpg --list-keys --with-subkey-fingerprints C2033656849FC82BA3C365E33C9BF8B9CB86875D
Esempi de output:
pub rsa4096 2025-07-20 [C] [expires: 2028-07-20]
C2033656849FC82BA3C365E33C9BF8B9CB86875D
uid [ultimate] Satoshi Spritz <info@satoshispritz.it>
sub rsa4096 2025-07-20 [S] [expires: 2027-07-20]
1E3C548D2CA2927D205C1A85426E4AB8E6D72AC3
sub rsa4096 2025-07-20 [E] [expires: 2027-07-20]
94C11C615BE049B97899FA3C8DC3736F499D6C3E
Nota le impront digital de le subclaav de firm (S) e criptazion (E).
Backup de Tutt le Claav. Fà backup de la claav primaria, subclaav, e claav pubblica a do drive USB criptaa per sicurezza.
Prepara Drive USB: Inseriss do drive USB (es. /dev/sdb e /dev/sdc).
Crea partizion criptaa (es. con LUKS):
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup luksOpen /dev/sdb1 backup1
sudo mkfs.ext4 /dev/mapper/backup1
sudo mount /dev/mapper/backup1 /mnt/backup1
Ripeti per /dev/sdc1 (es. monta su /mnt/backup2).
Esporta Claav Privad: Esporta la claav primaria e le subclaav:
gpg --armor --export-secret-keys C2033656849FC82BA3C365E33C9BF8B9CB86875D! > /mnt/backup1/secret_master_satoshispritz.asc
gpg --armor --export-secret-keys 1E3C548D2CA2927D205C1A85426E4AB8E6D72AC3! > /mnt/backup2/secret_sign_satoshispritz.asc
gpg --armor --export-secret-keys 94C11C615BE049B97899FA3C8DC3736F499D6C3E! > /mnt/backup2/secret_encrypt_satoshispritz.asc
Esporta claav pubbliche:
gpg --armor --export C2033656849FC82BA3C365E33C9BF8B9CB86875D! > /mnt/backup1/public_master_satoshispritz.asc
gpg --armor --export 1E3C548D2CA2927D205C1A85426E4AB8E6D72AC3! > /mnt/backup2/public_sign_satoshispritz.asc
gpg --armor --export 94C11C615BE049B97899FA3C8DC3736F499D6C3E! > /mnt/backup2/public_encrypt_satoshispritz.asc
Esporta el Certificat de Revoca:
cp revoke_master_satoshispritz.asc /mnt/backup1/revoke_master_satoshispritz.asc
cp revoke_master_satoshispritz.asc /mnt/backup2/revoke_master_satoshispritz.asc
Smonta Sicurament:
sudo umount /mnt/backup1
sudo cryptsetup luksClose backup1
Ripeti per backup2. Conserva i drive USB in locazion separad e sicur (es. cassafort).
Cancella Claav Local (Opzional): Se dopri una macchina air-gapped, cancella la directory GPG:
rm -rf ~/.gnupg
Le claav vegnarann poi importada sulla macchina dove le doprarass.
Se minga air-gapped, mantegn le claav fin al trasferiment a YubiKey.
Trasferiss subclaav de firm e criptazion al YubiKey, mantegnend la claav primaria offline.
Inseriss Yubikey e controlla:
gpg --card-status
L’output dovria mostrà l’applet OpenPGP (es. Version: 2.0).
Cambia i PIN predefinii:
gpg --change-pin
PIN Utent: Imposta un noeuv PIN de 6-8 cifr (es. 654321). PIN Admin: Imposta un noeuv PIN de 8 cifr (es. 87654321).
Edita la Claav per el Trasferiment:
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Seleziona e Trasferiss Subclaav de Firm: Lista le claav per identificà i indici de le subclaav:
gpg> list
Esempi:
sec rsa4096/3C9BF8B9CB86875D
created: 2025-07-20 expires: 2028-07-20 usage: C
trust: ultimate validity: ultimate
ssb rsa4096/426E4AB8E6D72AC3
created: 2025-07-20 expires: 2027-07-20 usage: S
ssb rsa4096/8DC3736F499D6C3E
created: 2025-07-20 expires: 2027-07-20 usage: E
Seleziona la subclaav de firm:
gpg> key 1
La subclaav de firm gh’avarà un asterisc (*).
Trasferiss al YubiKey:
gpg> keytocard
Please select where to store the key:
(1) Signature key
(3) Authentication key
Your selection?
Inseriss el PIN Admin (es. 87654321). La subclaav privada de firm vegn trasferida al YubiKey e sostituida da un stub nel keyring.
Seleziona e Trasferiss Subclaav de Criptazion: Deseleziona la subclaav de firm:
gpg> key 1
Seleziona la subclaav de criptazion:
gpg> key 2
Trasferiss al YubiKey:
gpg> keytocard
Please select where to store the key:
(2) Encryption key
Your selection? 2
Inseriss el PIN Admin de noeuv.
Salva i Cambiament:
gpg> save
Le subclaav privad hinn ora sul YubiKey, con stub local.
Controlla YubiKey:
gpg --card-status
Controlla che i slot Signature key e Encryption key mostren le impront digital de le subclaav.
Esporta subclaav privad (per verificà el backup):
gpg --armor --export-secret-subkeys C2033656849FC82BA3C365E33C9BF8B9CB86875D > secret-subkeys-satoshispritz.asc
Cancella la directory GPG local:
rm -rf ~/.gnupg
Re-importa la claav pubblica e i stub:
gpg --import public.asc
gpg --import secret-subkeys-satoshispritz.asc
La claav privada primaria minga l’è pù sul computer.
Dopra YubiKey per criptà e firmà un file per un destinatari.
Prepara un File de Test:
echo "This is a secret message." > test.txt
Oten la claav pubblica del destinatari (es. bob@example.com):
gpg --keyserver hkps://keys.openpgp.org --search-keys bob@example.com
O importa de un file:
gpg --import bob_public.asc
Cripta e Firma: Cripta per bob@example.com e firma con Yubikey:
gpg --encrypt --sign --recipient bob@example.com test.txt
Inseriss el PIN Utent (es. 654321) quand richiest.
Se YubiKey richied conferma touch (opzional, impostada via ykman openpgp keys set-touch), tocca el YubiKey.
L’output sarà test.txt.gpg
Decripta el file (richied YubiKey):
gpg --decrypt test.txt.gpg > test_decrypted.txt
Inseriss el PIN Utent e tocca Yubikey se necessari.
Controlla che test_decrypted.txt corrisponda a test.txt.
Bob pö decriptà con la so claav privada e verificà la tua firma:
gpg --decrypt test.txt.gpg
Se te vöret domà firmà el file, te pödet doprà i comand seguent.
gpg --detach-sign test.txt
Quest generarà un file de output ciamaa test.txt.sig
Per verificall:
gpg --verify test.txt.sig test.txt
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
gpg> addkey
Trasferiss noeuv subclaav al YubiKey e aggiorna la claav pubblica sui server:
gpg --keyserver hkps://keys.openpgp.org --send-keys C2033656849FC82BA3C365E33C9BF8B9CB86875D
Dopera un segond YubiKey per ridondanza:
gpg --import secret.asc
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Ripeti i pass de keytocard per el segond YubiKey.
Se te gh’hee besogn de resettà Yubikey:
ykman openpgp reset
Per restaurà subclaav de backup:
gpg --import secret.asc
“Public Key Not Usable”: Assicurass che la claav pubblica del destinatari sia importada e fidada:
gpg --edit-key bob@example.com
gpg> trust
Imposta a 5 = Ultimate trust.