Lezioni online Bitcoin-only
This project is maintained by valerio-vaccaro
Officine Bitcoin Lezion Bitcoin-only Sto progetto xe mantegnuo da valerio-vaccaro
🇨🇳 中文 🇬🇧 English 🇪🇸 Español 🇵🇹 Português 🇷🇺 Русский 🇫🇷 Français 🇩🇪 Deutsch 🇮🇹 Italiano 🇭🇺 Magyar 🏳️ Milanés 🏳️ Veneto
Sta lezione te guida attraverso l’uso de Gnu Privacy Guard (GPG):
Xe progettato par 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 eccezione dei filesystem crittografati).
El processo segue le migliori pratiche de sicurezza, come la generazione de le ciavi offline e backup sicuri.
Installa gpg e le utilities necessarie
sudo apt update
sudo apt install gnupg scdaemon pcscd yubikey-manager
Assicurati che la version sia 2.1.17 o successiva (2.4.5 consigliata).
gpg --version
Verifica el funzionamento de la YubiKey
ykman info
Assicurati che l’applet OpenPGP sia abilitata e la modalità CCID attiva.
Usa na macchina air-gapped (senza internet) par generar le ciavi e prevenire perdite.
Ricorda che i PIN YubiKey de default no xe sicuri e xe:
Genera na coppia de ciavi GPG primaria (pubblica e privata) par esclusivamente par certificazione (C), da ste discenderanno tutte le altre ciavi che andremo a costruire.
Avvia la Generazione de la chiave usando –expert par accedere a le opzioni 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) par poter customizzare el comportamento de la chiave.
Imposta donca le 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 quando finito).
Come risultato tra le azioni attualmente consentite rimane solo 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 co O.
Inserisci na passphrase forte (mescola lettere, numeri, simboli; evita parole 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 solo se ne comprendi ben el funzionamento):
sudo apt install rng-tools
sudo rngd -r /dev/urandom
Attendi el completamento de la generazione 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 un certificato par 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 Sottociavi par Firma e Crittografia, verrano donca aggiunte due sottociavi par firma (S) e crittografia (E).
La chiave primaria resta solo par certificazione.
Modifichiamo la chiave:
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Inserisci la passphrase se richiesto.
Aggiungi sottochiave par 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 (solo firma).
Imposta dimensione: 4096.
Imposta scadenza: 2y (2 anni, le sottociavi possono essere ruotate più frequentemente).
Conferma e inserisci la passphrase.
Aggiungi sottochiave par Crittografia:
gpg> addkey
Scegli (6) RSA (solo crittografia).
Imposta dimensione: 4096.
Imposta scadenza: 2y.
Conferma e inserisci la passphrase.
Salva le Modifiche:
gpg> save
Verifica le sottociavi:
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 le impronte de le sottociavi par firma (S) e crittografia (E).
Backup de Tutte le ChiaviEsegui el backup de la chiave primaria, de le sottociavi e de la chiave pubblica su due unità USB crittografate par sicurezza.
Prepara le Unità USB:Inserisci due unità USB (es. /dev/sdb e /dev/sdc).
Crea partizioni crittografate (es. co 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 par /dev/sdc1 (es. monta su /mnt/backup2).
Esporta le Chiavi Private:Esporta la chiave primaria e le sottociavi:
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 le 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 par backup2. Conserva le unità USB in luoghi separati e sicuri (es. cassaforte).
Elimina le Chiavi Locali (Facoltativo):Se usi na macchina air-gapped, elimina la directory GPG:
rm -rf ~/.gnupg
Le ciavi andranno poi importare sulla macchina in cui andrai a usarle.
Se no air-gapped, mantieni le ciavi fino al trasferimento su YubiKey.
Trasferisci le sottociavi 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 un nuovo PIN de 6-8 cifre (es. 654321). PIN Admin: Imposta un nuovo PIN de 8 cifre (es. 87654321).
Modifica la Chiave par el Trasferimento:
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Seleziona e Trasferisci la Sottochiave de Firma:Elenca le ciavi par identificare i indici de le sottociavi:
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à un 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 portaciavi.
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 le Modifiche:
gpg> save
Le sottociavi private xe ora sul YubiKey, co stub locali.
Verifica YubiKey:
gpg --card-status
Controlla che i slot Signature key e Encryption key mostrino le impronte digitali de le sottociavi.
Esporta le sottociavi private (par 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 no xe più sul computer.
Usa YubiKey par crittografare e firmare un file par un destinatario.
Prepara un 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
Opure importa da un file:
gpg --import bob_public.asc
Crittografa e Firma:Crittografa par bob@example.com e firma co Yubikey:
gpg --encrypt --sign --recipient bob@example.com test.txt
Inserisci el PIN Utente (es. 654321) quando 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 co la sua chiave privata e verificar la tua firma:
gpg --decrypt test.txt.gpg
Se invece vuoi solo firmare el file te poi doprar i seguenti comandi.
gpg --detach-sign test.txt
Verrà generato un file de output chiamato test.txt.sig
Par verificarlo:
gpg --verify test.txt.sig test.txt
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
gpg> addkey
Trasferisci le nuove sottociavi sul YubiKey e aggiorna la chiave pubblica sui server:
gpg --keyserver hkps://keys.openpgp.org --send-keys C2033656849FC82BA3C365E33C9BF8B9CB86875D
Usa un secondo YubiKey par ridondanza:
gpg --import secret.asc
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Ripeti i passaggi keytocard par el secondo YubiKey.
Se fosse necessario resettare Yubikey:
ykman openpgp reset
Mentre par ripristina le sottociavi dal backup:
gpg --import secret.asc
“Chiave Pubblica No Utilizzabile”:Assicurati che la chiave pubblica del destinatario sia importata e fidata:
gpg --edit-key bob@example.com
gpg> trust
Imposta a 5 = Fiducia massima.