Lezioni online Bitcoin-only
This project is maintained by valerio-vaccaro
Officine Bitcoin Lezion Bitcoin-only Quest progett l'e mantegnuu da valerio-vaccaro
🇨🇳 中文 🇬🇧 English 🇪🇸 Español 🇵🇹 Português 🇷🇺 Русский 🇫🇷 Français 🇩🇪 Deutsch 🇮🇹 Italiano 🇭🇺 Magyar 🏳️ Milanés 🏳️ Veneto
Questa lezion te guida attraverso l’uso de Gnu Privacy Guard (GPG):
L’è progettato per Linux on comandi testati su GPG 2.2.40/Debian 12. I stessi comandi possono funzionare similmente su altre versioni de Linux e anca su MacOsX e Windows (ad eccezion di filesystem crittografati).
El processo segue i migliori pratiche de sicurezza, come la generazion di ciav offline e backup sicuri.
Installa gpg e i utilities necessarie
sudo apt update
sudo apt install gnupg scdaemon pcscd yubikey-manager
Assegurati che la version sia 2.1.17 o successiva (2.4.5 consigliata).
gpg --version
Verifica el funzionamento de la YubiKey
ykman info
Assegurati che l’applet OpenPGP sia abilitata e la modalità CCID attiva.
Usa ona macchina air-gapped (senza internet) per generà i ciav e prevenire perdite.
Ricorda che i PIN YubiKey de default minga hinn sicuri e hinn:
Genera ona coppia de ciav GPG primaria (pubblica e privata) per esclusivamente per certificazion (C), da queste discenderanno tutte i altre ciav che andremo a costruire.
Avvia la Generazion de la chiave usando –expert per accedere a le opzion avanzate.
gpg --expert --full-gen-key
Seleziona el Tipo de Chiave:
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 poter customizzare el comportamento de la chiave.
Imposta donca i funzionalità:
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
Disattiva Sign e Encrypt (premi S, E).
Mantieni Certify (premi Q quand finito).
Come risultato tra i azion attualmente consentite rimane domà Certify
Imposta la Dimensione de la Chiave:
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Inserisci 4096 (massimo supportato 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)
Inserisci 3y (3 anni) o la tua preferenza. Conferma la data.
Inserisci l’ID Utente:
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
Fornisci nome ed email. Lascia el commento vuoto. Conferma con O.
Inserisci ona passphrase forte (mescola lettere, numeri, simboli; evita paroll comuni).
Esempio: Tr0ub4dor&3xplor3r!2025
La passphrase consente de protegge la tua chiave privata.
Genera entropia muovendo el mouse, digita casualmente o usa rng-tools (Linux e domà se ne comprendi ben el funzionamento):
sudo apt install rng-tools
sudo rngd -r /dev/urandom
Attendi el completamento de la generazion de la chiave. Annota l’ID de la chiave (es. C2033656849FC82BA3C365E33C9BF8B9CB86875D) dall’output:
gpublic and secret key created and signed.
pub rsa2048 2025-07-20 [C]
C2033656849FC82BA3C365E33C9BF8B9CB86875D
uid Satoshi Spritz <info@satoshispritz.it>
Crea on certificato per revocare la chiave se compromessa (anca se el tuo client potrebbe già averla creata):
gpg --output revoke_master_satoshispritz.asc --gen-revoke C2033656849FC82BA3C365E33C9BF8B9CB86875D
Scegli el motivo (es. 1 = chiave compromessa) e salva.
Creare Sottociav per Firma e Crittografia, verrano donca aggiunte due sottociav per firma (S) e crittografia (E).
La chiave primaria resta domà per certificazion.
Modifichiamo la chiave:
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Inserisci la passphrase se richiesto.
Aggiungi sottochiave per Firma:
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 (domà firma).
Imposta dimensione: 4096.
Imposta scadenza: 2y (2 anni, i sottociav possono essere ruotate più frequentemente).
Conferma e inserisci la passphrase.
Aggiungi sottochiave per Crittografia:
gpg> addkey
Scegli (6) RSA (domà crittografia).
Imposta dimensione: 4096.
Imposta scadenza: 2y.
Conferma e inserisci la passphrase.
Salva i Modifiche:
gpg> save
Verifica i sottociav:
gpg --list-keys --with-subkey-fingerprints C2033656849FC82BA3C365E33C9BF8B9CB86875D
Esempio 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
Annota i impronte di sottociav per firma (S) e crittografia (E).
Backup de Tutte i ChiaviEsegui el backup de la chiave primaria, di sottociav e de la chiave pubblica su due unità USB crittografate per sicurezza.
Prepara i Unità USB:Inserisci due unità USB (es. /dev/sdb e /dev/sdc).
Crea partizion crittografate (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 i Chiavi Private:Esporta la chiave primaria e i sottociav:
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 i chiave 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 Certificato 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 in Modo Sicuro:
sudo umount /mnt/backup1
sudo cryptsetup luksClose backup1
Ripeti per backup2. Conserva i unità USB in luoghi separati e sicuri (es. cassaforte).
Elimina i Chiavi Locali (Facoltativo):Se usi ona macchina air-gapped, elimina la directory GPG:
rm -rf ~/.gnupg
I ciav andranno poi importare sulla macchina in cui andrai a usarle.
Se minga air-gapped, mantieni i ciav fino al trasferimento su YubiKey.
Trasferisci i sottociav de firma e crittografia sul YubiKey, mantenendo la chiave primaria offline.
Inserisci Yubikey e verifica:
gpg --card-status
L’output dovrebbe mostrare l’applet OpenPGP (es. Version: 2.0).
Cambia i PIN predefiniti:
gpg --change-pin
PIN Utente: Imposta on nuovo PIN de 6-8 cifre (es. 654321). PIN Admin: Imposta on nuovo PIN de 8 cifre (es. 87654321).
Modifica la Chiave per el Trasferimento:
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Seleziona e Trasferisci la Sottochiave de Firma:Elenca i ciav per identificare i indici di sottociav:
gpg> list
Esempio:
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 sottochiave de firma:
gpg> key 1
La sottochiave de firma avrà on asterisco (*).
Trasferisci su YubiKey:
gpg> keytocard
Please select where to store the key:
(1) Signature key
(3) Authentication key
Your selection?
Inserisci el PIN Admin (es. 87654321). La sottochiave privata de firma viene trasferita sul YubiKey e sostituita da uno stub nel portaciav.
Seleziona e Trasferisci la Sottochiave de Crittografia:Deseleziona la sottochiave de firma:
gpg> key 1
Seleziona la sottochiave de crittografia:
gpg> key 2
Trasferisci su YubiKey:
gpg> keytocard
Please select where to store the key:
(2) Encryption key
Your selection? 2
Inserisci de nuovo el PIN Admin.
Salva i Modifiche:
gpg> save
I sottociav private hinn ora sul YubiKey, con stub locali.
Verifica YubiKey:
gpg --card-status
Controlla che i slot Signature key e Encryption key mostrino i impronte digitali di sottociav.
Esporta i sottociav private (per verifica del backup):
gpg --armor --export-secret-subkeys C2033656849FC82BA3C365E33C9BF8B9CB86875D > secret-subkeys-satoshispritz.asc
Elimina la directory GPG locale:
rm -rf ~/.gnupg
Reimporta la chiave pubblica e i stub:
gpg --import public.asc
gpg --import secret-subkeys-satoshispritz.asc
La chiave primaria privata minga l’è più sul computer.
Usa YubiKey per crittografare e firmare on file per on destinatario.
Prepara on File de Prova:
echo "Questo è un messaggio segreto." > test.txt
Ottieni la chiave pubblica del destinatario (es. bob@example.com):
gpg --keyserver hkps://keys.openpgp.org --search-keys bob@example.com
Oppur importa da on file:
gpg --import bob_public.asc
Crittografa e Firma:Crittografa per bob@example.com e firma con Yubikey:
gpg --encrypt --sign --recipient bob@example.com test.txt
Inserisci el PIN Utente (es. 654321) quand richiesto.
Se YubiKey richiede la conferma tattile (opzionale, impostata tramite ykman openpgp keys set-touch), tocca YubiKey.
L’output generato sarà test.txt.gpg
Decrittografa el file (richiede YubiKey):
gpg --decrypt test.txt.gpg > test_decrypted.txt
Inserisci el PIN Utente e tocca Yubikey se necessario.
Verifica che test_decrypted.txt corrisponda a test.txt.
Bob può decriptare con la sua chiave privata e verificà la tua firma:
gpg --decrypt test.txt.gpg
Se invece vuoi domà firmare el file te pödet doprà i seguenti comandi.
gpg --detach-sign test.txt
Verrà generato on file de output chiamato test.txt.sig
Per verificarlo:
gpg --verify test.txt.sig test.txt
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
gpg> addkey
Trasferisci i nuove sottociav sul YubiKey e aggiorna la chiave pubblica sui server:
gpg --keyserver hkps://keys.openpgp.org --send-keys C2033656849FC82BA3C365E33C9BF8B9CB86875D
Usa on secondo YubiKey per ridondanza:
gpg --import secret.asc
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Ripeti i passaggi keytocard per el secondo YubiKey.
Se fosse necessario resettare Yubikey:
ykman openpgp reset
Mentre per ripristina i sottociav dal backup:
gpg --import secret.asc
“Chiave Pubblica Minga Utilizzabile”:Assegurati che la chiave pubblica del destinatario sia importata e fidata:
gpg --edit-key bob@example.com
gpg> trust
Imposta a 5 = Fiducia massima.