Le password rubate via phishing restano una delle cause più comuni di violazione degli account, anche quando è attiva la verifica in due passaggi via SMS o app authenticator. Le chiavi di sicurezza hardware basate su FIDO2/WebAuthn, come le YubiKey, chiudono questa falla: la chiave verifica crittograficamente il dominio a cui ti stai autenticando, quindi un sito clone non riceve mai una risposta valida. In questa guida configuriamo una YubiKey per tre usi concreti: login SSH senza password sul server, firma e cifratura con GPG in modalità smartcard, e secondo fattore FIDO2/WebAuthn per i servizi online. Il percorso è pensato per chi lavora da terminale su Linux o macOS, con note per Windows dove serve.
Perché una chiave hardware e non solo un’app authenticator
Un’app authenticator genera un codice numerico che l’utente copia manualmente nel form di login. Il problema è che quel codice, una volta digitato, funziona ovunque venga inserito: se l’utente lo incolla su un sito di phishing quasi identico all’originale, l’attaccante lo inoltra in tempo reale al sito vero e ottiene la sessione. Con FIDO2/WebAuthn il flusso è diverso: il browser passa alla chiave l’origin (il dominio esatto) della richiesta, e la chiave firma una risposta legata a quel dominio specifico. Se il dominio non corrisponde a quello registrato, la chiave non firma nulla, e il login fallisce a prescindere da quanto sia convincente la pagina clone.
Questo non rende inutili le app authenticator: restano un’ottima base per servizi minori o come fallback. Ma per gli account ad alto valore, in primis email principale, gestore password e accesso SSH ai server di produzione, una chiave hardware resistente al phishing riduce una intera classe di attacchi. La stessa tecnologia FIDO2 è alla base delle passkey moderne, di cui abbiamo parlato nella nostra guida a configurazione delle passkey FIDO2: una YubiKey è, in sostanza, una passkey che puoi tenere sul portachiavi invece che vincolata a un solo dispositivo.
Prerequisiti: hardware e software necessari
Prima di iniziare, verifica di avere a disposizione quanto segue. La procedura funziona sulla gamma YubiKey 5 (Series 5, 5C, 5C NFC, 5Ci, Bio), che supporta contemporaneamente FIDO2/WebAuthn, PIV/smartcard, OpenPGP e OTP sullo stesso dispositivo. I modelli della linea Security Key (solo FIDO2/FIDO U2F) non supportano la parte GPG/smartcard di questa guida: se il tuo obiettivo è solo il secondo fattore FIDO2, vanno bene comunque.
- Una chiave YubiKey Series 5 (o superiore) con supporto OpenPGP/PIV, oppure due chiavi se vuoi configurare subito un backup
- Un computer Linux (Debian/Ubuntu o Fedora), macOS, o Windows con WSL per i comandi GPG
- GnuPG (GPG) versione 2.2 o successiva – verifica con
gpg --version - YubiKey Manager (ykman), lo strumento ufficiale a riga di comando di Yubico per configurare la chiave
- OpenSSH 8.2 o successivo, la prima versione con supporto nativo alle chiavi di sicurezza FIDO2 (
ssh-keygen -t ecdsa-skoed25519-sk) - Un lettore di smart card funzionante: su Linux serve il pacchetto
pcscdattivo - 15-20 minuti di tempo libero e, se possibile, una connessione di rete separata da quella del PC principale per generare le chiavi offline (facoltativo ma consigliato per GPG)
Se non hai ancora dimestichezza con le chiavi SSH tradizionali, ti conviene ripassare prima la nostra guida a ssh-keygen e la gestione delle chiavi SSH: i comandi in questa guida ne sono un’estensione diretta, con la differenza che la chiave privata non lascia mai il chip della YubiKey.
Quale modello YubiKey scegliere
Yubico vende tre linee di prodotto con capacità molto diverse, e sceglierne una prima di aprire il portafoglio ti evita di comprare un dispositivo che non copre il tuo caso d’uso. La linea Security Key è pensata per chi vuole solo il secondo fattore FIDO2/WebAuthn a un prezzo d’accesso più contenuto, senza le applicazioni PIV e OpenPGP che servono per SSH via smartcard e firma GPG. La linea YubiKey 5, quella usata in questa guida, aggiunge PIV, OpenPGP, OTP statico e Smart Card (CCID) sopra a FIDO2, il che la rende l’unica scelta se vuoi seguire tutti i passi descritti sopra. La linea Bio aggiunge il riconoscimento dell’impronta digitale come fattore locale, comodo per chi vuole evitare di digitare il PIN a ogni utilizzo, ma con superficie di funzionalità PIV/FIDO2 più ristretta rispetto alla serie 5 completa.
| Linea prodotto | FIDO2/WebAuthn | PIV (smart card) | OpenPGP | NFC |
|---|---|---|---|---|
| Security Key series | Sì | No | No | Solo su alcune varianti |
| YubiKey 5 series | Sì | Sì | Sì | Sì (5 NFC, 5C NFC) |
| YubiKey Bio series | Sì | Sì (varianti selezionate) | No | No |
Per i prezzi aggiornati, consulta sempre il listino ufficiale sul sito Yubico prima dell’acquisto: variano per mercato e cambiano nel tempo, e una cifra riportata su un articolo può risultare superata nel giro di pochi mesi. Se il budget lo consente, la scelta più pratica per questa guida resta comunque una coppia di YubiKey 5C NFC (o 5Ci se lavori anche su iPhone con Lightning): una come chiave primaria sempre al seguito, una come backup conservata in un luogo separato, così da coprire da subito lo scenario del Passo 10.
Passo 1: installare i pacchetti di sistema
Su Debian o Ubuntu installa tutto il necessario con un solo comando. Il pacchetto scdaemon è il demone che GPG usa per parlare con la smart card, mentre pcscd gestisce la comunicazione a basso livello con il lettore USB integrato nella YubiKey.
sudo apt update
sudo apt install -y yubikey-manager gnupg2 scdaemon pcscd libpcsclite1 openssh-client
# Su Fedora / RHEL il pacchetto ykman si chiama diversamente
sudo dnf install -y yubikey-manager gnupg2 pcsc-lite pcsc-lite-ccid openssh-clients
# Su macOS con Homebrew
brew install ykman gnupg pinentry-mac
Dopo l’installazione, avvia e abilita pcscd se non parte automaticamente, poi collega la YubiKey e verifica che il sistema la riconosca.
sudo systemctl enable --now pcscd
ykman info
Un output tipico mostra il numero di serie, la versione del firmware e le applicazioni abilitate (FIDO2, PIV, OpenPGP, OTP). Se il comando non trova la chiave, prova una porta USB diversa: alcuni hub USB-C economici filtrano il traffico delle smart card e la chiave risulta invisibile a ykman pur venendo riconosciuta come dispositivo HID.
Passo 2: cambiare i PIN e i codici di default
Ogni YubiKey esce dalla confezione con PIN e PUK di fabbrica noti a chiunque abbia letto la documentazione Yubico: PIN utente 123456, PIN admin 12345678. Lasciarli invariati vanifica gran parte della sicurezza della chiave, quindi è il primo passo obbligato, prima ancora di generare qualunque coppia di chiavi.
# Entra nel menu interattivo di gpg per l'applet a carta
gpg --card-edit
gpg/card> admin
gpg/card> passwd
Il menu passwd propone quattro opzioni: cambiare il PIN utente (usato per firmare e decifrare), cambiare il PIN admin (usato per operazioni di gestione come il caricamento delle chiavi), sbloccare il PIN con il PUK, e impostare un nuovo PUK. Scegli un PIN utente di almeno 6 cifre e un PIN admin di almeno 8, diversi tra loro, e annotali in un gestore password separato dal dispositivo stesso: dopo un certo numero di tentativi falliti (di norma 3) la chiave blocca l’applet e serve il PUK per sbloccarla.
Approfitta di questo stesso passo per impostare un PIN anche sull’applicazione FIDO2, separata da quella OpenPGP appena configurata.
ykman fido access change-pin
Passo 3: generare l’identità GPG principale
La pratica raccomandata è separare la chiave master (certification, usata solo per firmare le sottochiavi e revocare) dalle tre sottochiavi operative che vivono sulla YubiKey: firma (Sign), cifratura (Encrypt) e autenticazione (Auth). In questo modo, se la chiave USB viene persa o rubata, puoi revocare e rigenerare le sottochiavi senza perdere l’identità digitale costruita nel tempo attorno alla chiave master. Per la generazione iniziale, lavora idealmente su un sistema offline o comunque scollegato da rete.
gpg --expert --full-generate-key
# Scegli: (11) ECC (set your own capabilities)
# Capacità: solo Certify (togli Sign)
# Curva: Curve 25519
# Scadenza: 2y (2 anni, poi rinnovi)
# Nome, email, commento facoltativo
# Recupera il Key ID appena creato
gpg --list-secret-keys --keyid-format=long
Con la chiave master pronta, genera le tre sottochiavi con lo stesso comando in modalità expert, questa volta scegliendo rispettivamente le capacità Sign, Encrypt e Authenticate, sempre su curva Curve 25519 (o su RSA 4096 se la tua organizzazione richiede compatibilità con sistemi più datati che non supportano ancora le curve ellittiche).
Passo 4: caricare le sottochiavi sulla YubiKey
Con gpg --edit-key TUO_KEY_ID entri nel menu interattivo, selezioni ogni sottochiave con key 1, key 2, key 3 e la trasferisci sulla carta con keytocard, scegliendo lo slot corrispondente (Signature, Encryption, Authentication). L’operazione è irreversibile nel senso che la chiave privata viene cancellata dal disco e resta solo sul chip sicuro della YubiKey: da quel momento, ogni firma o decifratura richiede fisicamente la chiave inserita e il PIN corretto.
gpg --edit-key TUO_KEY_ID
gpg> key 1
gpg> keytocard
# Seleziona slot: Signature key
gpg> key 1
gpg> key 2
gpg> keytocard
# Seleziona slot: Encryption key
gpg> key 2
gpg> key 3
gpg> keytocard
# Seleziona slot: Authentication key
gpg> save
Prima di chiudere il terminale, esporta e conserva al sicuro (su una chiavetta USB cifrata, offline) sia la chiave pubblica sia un certificato di revoca: quest’ultimo ti permette di invalidare l’identità in caso di smarrimento totale della chiave e di tutti i backup.
gpg --export --armor TUO_KEY_ID > chiave-pubblica.asc
gpg --output revoca.asc --gen-revoke TUO_KEY_ID
Passo 5: configurare l’autenticazione SSH tramite GPG
Uno dei vantaggi pratici di questo schema è che la sottochiave Authenticate può sostituire integralmente una normale chiave SSH: niente più file id_ed25519 sul disco, la firma delle sessioni SSH avviene sul chip della YubiKey. Serve dire a gpg-agent di comportarsi anche da SSH agent.
# In ~/.gnupg/gpg-agent.conf
echo "enable-ssh-support" >> ~/.gnupg/gpg-agent.conf
# Nel file di shell (~/.bashrc o ~/.zshrc)
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
# Recupera la impronta della sottochiave di autenticazione
gpg --list-keys --with-keygrip TUO_KEY_ID
ssh-add -L
Il comando ssh-add -L deve mostrare la chiave pubblica SSH derivata dalla sottochiave Authenticate. Copiala nel file ~/.ssh/authorized_keys del server remoto esattamente come faresti con una chiave SSH tradizionale generata da ssh-keygen: il server non nota alcuna differenza, vede solo una chiave pubblica Ed25519 o RSA valida. Da questo momento ogni connessione SSH richiede la YubiKey inserita e, a seconda della policy configurata, un tocco fisico sul sensore capacitivo della chiave.
Passo 6: (alternativa più semplice) SSH con chiavi FIDO2 resident
Se il flusso GPG ti sembra troppo articolato per un caso d’uso puramente SSH, OpenSSH offre dalla versione 8.2 un percorso più diretto: generare direttamente sulla chiave una coppia FIDO2 senza passare da GPG. Le chiavi “resident” (-O resident) vengono memorizzate sul chip della YubiKey stessa, non solo derivate da essa, e possono essere recuperate su un nuovo computer con ssh-keygen -K.
# Verifica la versione di OpenSSH (serve 8.2+)
ssh -V
# Genera una chiave FIDO2 resident con richiesta di tocco fisico
ssh-keygen -t ed25519-sk -O resident -O verify-required -f ~/.ssh/id_ed25519_sk
# Copia la chiave pubblica sul server come sempre
ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub utente@server
# Su un nuovo computer, recupera la chiave privata dalla YubiKey
ssh-keygen -K
La differenza pratica: con il metodo GPG del Passo 5 ottieni anche firma e cifratura email/file, con il metodo FIDO2 resident ottieni solo SSH ma con una configurazione più rapida e meno soggetta a errori nella prima messa a punto. Molti utenti finiscono per usare entrambi: FIDO2 resident per l’accesso rapido ai server personali, GPG smartcard per firma del codice e crittografia della posta.
Passo 7: firmare i commit Git con la YubiKey
Con la sottochiave Sign già sulla carta, abilitare la firma dei commit richiede solo tre righe di configurazione Git. Da questo momento ogni git commit chiede il PIN GPG (o il tocco, se richiesto) e il repository mostra il badge “Verified” su GitHub o GitLab una volta caricata la chiave pubblica sul profilo.
git config --global user.signingkey TUO_KEY_ID
git config --global commit.gpgsign true
git config --global tag.gpgsign true
# Esporta la chiave pubblica in formato ASCII armor per caricarla su GitHub/GitLab
gpg --armor --export TUO_KEY_ID
Passo 8: registrare la YubiKey come 2FA sui servizi principali
La parte più immediata per la maggior parte degli utenti è il secondo fattore FIDO2/WebAuthn sui servizi che lo supportano: Google, Microsoft, GitHub, GitLab, Cloudflare, il gestore password e, dove disponibile, la banca. Il flusso è identico ovunque: nelle impostazioni di sicurezza dell’account cerchi la voce “Chiave di sicurezza” o “Security key”, scegli “Aggiungi”, inserisci la YubiKey quando richiesto dal browser e la tocchi per confermare la presenza fisica.
Registra sempre almeno due chiavi per ogni servizio: una che tieni con te ogni giorno e una di backup conservata in un luogo diverso (cassaforte, ufficio). Se un servizio permette una sola chiave registrata alla volta più i codici di recupero, stampa i codici e conservali offline: sono l’unico modo di rientrare nell’account se perdi entrambe le chiavi.
Passo 9: impostare il PIV per certificati e smart card aziendali
Nelle organizzazioni che usano autenticazione a certificato (VPN aziendali, accesso a workstation Windows con smart card, firma di documenti PAdES), l’applet PIV della YubiKey genera una coppia di chiavi RSA o ECC direttamente sul chip e la associa a un certificato X.509. La generazione avviene con ykman piv.
# Genera una coppia di chiavi nello slot di autenticazione (9a)
ykman piv keys generate 9a pubkey.pem
# Crea una richiesta di certificato (CSR) da inviare alla tua CA aziendale
ykman piv certificates request 9a pubkey.pem richiesta.csr
# Dopo aver ricevuto il certificato firmato, importalo sulla chiave
ykman piv certificates import 9a certificato.pem
Se non hai una CA aziendale a disposizione e vuoi solo testare il flusso, puoi generare un certificato autofirmato con ykman piv certificates generate, utile per capire il meccanismo prima di portarlo in produzione con una PKI reale.
Passo 10: configurare una seconda chiave come backup
Il punto debole di ogni schema basato su hardware è il singolo punto di guasto: se hai una sola chiave e la perdi, resti fuori da tutto. La soluzione è duplicare le sottochiavi GPG su una seconda YubiKey (ripetendo il Passo 4 con la stessa chiave master ancora presente sul sistema offline) e registrare entrambe le chiavi come FIDO2/WebAuthn separatamente su ogni servizio, dato che FIDO2 non permette la clonazione della credenziale tra due chiavi: ogni chiave genera una coppia distinta per ogni sito.
Vale la pena pianificare anche dove tenere fisicamente le due chiavi. Un errore diffuso è conservarle nello stesso zaino o nello stesso cassetto: un furto o un incendio le perde entrambe insieme. Meglio separare gli ambienti, per esempio una chiave sul portachiavi personale e una in un cassetto chiuso a chiave in un altro edificio, o in una cassaforte se la protezione riguarda l’accesso a infrastrutture aziendali critiche. Lo stesso principio vale per la master key GPG: il backup cifrato va conservato lontano dal computer che usi ogni giorno, altrimenti un singolo evento (furto del laptop, guasto del disco) rischia di portarsi via sia le chiavi operative sia il backup nello stesso momento.
| Scenario | Cosa serve fare | Tempo di recupero |
|---|---|---|
| Perdita chiave primaria FIDO2 | Usa chiave di backup già registrata sul servizio | Immediato |
| Perdita chiave primaria, nessun backup registrato | Codici di recupero del servizio, poi ri-registrazione | Ore-giorni, dipende dal servizio |
| Chiave GPG smarrita, master key salva offline | Rigenera sottochiavi da master key e ricarica su nuova chiave | 30-60 minuti |
| Master key GPG persa senza backup | Nessun recupero possibile: serve nuova identità | Non recuperabile |
| PIN bloccato dopo tentativi falliti | Sblocco con PUK, poi reset PIN | 5 minuti |
Passo 11: verificare tutto con un checklist finale
Prima di considerare la configurazione conclusa, esegui questi controlli in sequenza. ykman info mostra le applicazioni FIDO2, PIV e OpenPGP tutte abilitate. gpg --card-status mostra la chiave con i tre slot Signature, Encryption, Authentication popolati. ssh-add -L restituisce la chiave pubblica derivata. Un git commit di prova produce un commit firmato verificabile con git log --show-signature. Infine, il login FIDO2 di prova su un servizio come GitHub completa senza errori al primo tentativo.
Passo 12: pulizia del sistema offline e conservazione del backup
Se hai generato le chiavi su un sistema temporaneo o su una live USB offline, l’ultimo passo è eliminare in modo sicuro ogni traccia della chiave master privata dal disco, dopo aver verificato che il backup cifrato sia integro e leggibile. Un errore comune è cancellare la directory ~/.gnupg con un semplice rm -rf: su un SSD questo non garantisce la cancellazione fisica dei dati, quindi se il livello di rischio lo giustifica conviene cifrare l’intero disco fin dall’inizio (vedi la nostra guida a LUKS su Ubuntu) oppure lavorare esclusivamente su una live USB che non scrive mai su disco persistente.
Output di esempio: cosa aspettarsi ad ogni fase
Un gpg --card-status configurato correttamente restituisce un blocco simile a questo, con i tre slot popolati e le impronte digitali (fingerprint) visibili sotto “Signature key”, “Encryption key” e “Authentication key”:
Reader ...........: Yubico YubiKey OTP+FIDO+CCID
Application ID ...: D2760001240103040006112223330000
Version ..........: 3.4
Vendor specific ..: yes
Name of cardholder: [non impostato]
Language prefs ...: [non impostato]
Signature PIN ....: forced
Key attributes ...: ed25519 cv25519 ed25519
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 4
Signature key ....: 3F2A 9C11 ...
Encryption key ...: 9B14 7E02 ...
Authentication key: 7C55 1A88 ...
General key info..: sub ed25519/7C551A88 2026-09-08 [A]
Quando invece qualcosa non funziona, ssh-add -L restituisce semplicemente The agent has no identities, e questo è quasi sempre il primo sintomo dei problemi che tratta la sezione successiva.
Errori comuni da evitare
- Non fare mai backup della master key su cloud storage non cifrato. Un file
.gnupgsincronizzato su un cloud consumer vanifica il vantaggio dell’hardware: chi accede all’account cloud ottiene la chiave privata completa. - Non registrare una sola chiave FIDO2 per account critici. Senza backup, la perdita fisica della chiave equivale a un lockout totale, spesso risolvibile solo con verifica manuale dell’identità da parte del supporto del servizio, un processo che può richiedere giorni.
- Non confondere PIN utente e PIN admin nel menu
gpg --card-edit. Impostare per errore lo stesso valore per entrambi riduce la sicurezza contro un attaccante che ottiene accesso fisico temporaneo alla chiave. - Non generare le sottochiavi con scadenza infinita. Una scadenza di 1-2 anni forza un rinnovo periodico e limita i danni se la chiave master viene compromessa senza che tu te ne accorga subito.
- Non ignorare l’aggiornamento del firmware. Le versioni di firmware più datate non includono le mitigazioni più recenti contro attacchi fisici avanzati; verifica la versione con
ykman infoe valuta la sostituzione se molto vecchia (il firmware YubiKey non è aggiornabile via software, va sostituita l’unità).
Risoluzione dei problemi più frequenti
- “gpg: selecting card failed: No such device”: il demone
pcscdnon è attivo o un altro processo sta bloccando l’accesso alla carta. Riavvia consudo systemctl restart pcscde riprova. - “gpg: OpenPGP card not available: General error”: spesso causato da
gpg-agentcon una cache di card obsoleta dopo lo scollegamento/ricollegamento della chiave. Eseguigpgconf --kill gpg-agente riprova il comando. ssh-add -Lrestituisce “The agent has no identities”: controlla cheSSH_AUTH_SOCKpunti al socket giusto conecho $SSH_AUTH_SOCKe cheenable-ssh-supportsia effettivamente nel filegpg-agent.conf, poi riavvia l’agent.- Il server SSH rifiuta comunque la chiave con “Permission denied (publickey)”: verifica che la chiave pubblica in
authorized_keyssul server corrisponda esattamente a quella restituita dassh-add -Lin locale, inclusi eventuali spazi finali che alcuni editor introducono per errore. - Il browser non rileva la YubiKey per il login FIDO2: su Linux, controlla che le regole udev per i dispositivi Yubico siano installate (il pacchetto
yubikey-managerdi solito le include) e che l’utente sia nel gruppoplugdev. - “Card error” durante
keytocard: quasi sempre indica che lo slot di destinazione contiene già una chiave. Verifica congpg --card-statusquali slot sono occupati prima di ripetere l’operazione. - PIN bloccato dopo troppi tentativi errati: usa il PUK con
gpg --card-editpoiadminpoiunblock. Se anche il PUK viene esaurito (3 tentativi), l’applet OpenPGP si resetta e perde le chiavi: da qui l’importanza del backup della master key. - Windows non riconosce la chiave in modalità PIV: installa il modulo minidriver Yubico per smart card da Yubico stesso; senza quel driver, Windows tratta la YubiKey come dispositivo HID generico e non espone l’applet PIV a strumenti come
certutil. - Git non firma i commit nonostante
commit.gpgsign true: controlla che la variabileGPG_TTYsia esportata nella shell conexport GPG_TTY=$(tty), altrimentipinentrynon riesce ad aprire il prompt per il PIN in sessioni SSH remote.
Confronto tra i metodi: GPG smartcard, FIDO2 resident e PIV
Non tutti gli scenari richiedono lo stesso approccio, e capire le differenze aiuta a scegliere senza configurare funzionalità che poi non userai mai.
| Metodo | Casi d’uso | Complessità setup | Portabilità tra dispositivi |
|---|---|---|---|
| GPG smartcard (OpenPGP) | SSH, firma commit, firma/cifratura email e file | Alta | Alta, con export della chiave pubblica |
| FIDO2 resident key | Solo SSH, accesso rapido multi-dispositivo | Bassa | Alta, chiave recuperabile con ssh-keygen -K |
| PIV (smart card) | VPN aziendali, login Windows, firma documenti | Media-alta | Media, dipende dall’infrastruttura PKI aziendale |
| FIDO2/WebAuthn (2FA web) | Login su servizi online come secondo fattore | Bassa | Bassa, ogni chiave-sito è una coppia distinta |
Suggerimenti avanzati
Una volta che il flusso base funziona, alcune rifiniture rendono l’uso quotidiano più fluido e la configurazione più robusta contro errori umani. Primo: imposta il touch requirement anche per le operazioni GPG (non solo FIDO2) con ykman openpgp keys set-touch aut on, così ogni autenticazione SSH richiede un tocco fisico e non solo il PIN, difendendoti da malware che tenta operazioni silenziose in background mentre la chiave resta inserita.
Secondo: se gestisci più server, valuta l’inoltro dell’agente GPG via SSH (RemoteForward del socket dell’agent) invece di copiare chiavi private sui bastion host: la firma avviene sempre localmente sulla YubiKey, il server intermedio vede solo il traffico dell’agent forwarding. Terzo: per i team che condividono l’accesso a infrastrutture critiche, imposta soglie di scadenza brevi (90 giorni) sulle sottochiavi Authenticate usate per SSH verso ambienti di produzione, forzando una rotazione regolare senza dover rigenerare l’intera identità GPG. Infine, documenta la procedura di recovery in un runbook separato dal sistema stesso: nel momento in cui serve davvero (chiave persa, PIN bloccato, dipendente che lascia il team) non è il momento ideale per improvvisare i comandi da zero.
Progetto completo: script di verifica post-configurazione
Per chiudere il cerchio, ecco uno script bash che automatizza il checklist del Passo 11, utile da rilanciare dopo ogni modifica alla configurazione o su un nuovo computer dove hai appena importato la chiave pubblica GPG.
#!/usr/bin/env bash
set -euo pipefail
echo "== Verifica YubiKey =="
ykman info || { echo "YubiKey non rilevata"; exit 1; }
echo "== Stato applet OpenPGP =="
gpg --card-status | grep -E "Signature key|Encryption key|Authentication key"
echo "== Identità SSH caricate nell'agent =="
if ssh-add -L | grep -q "ssh-"; then
echo "OK: chiave SSH presente nell'agent"
else
echo "ATTENZIONE: nessuna identità SSH trovata, controlla gpg-agent.conf"
fi
echo "== Ultimo commit firmato =="
git log -1 --show-signature 2>/dev/null | grep -q "Good signature" \
&& echo "OK: firma verificata" \
|| echo "ATTENZIONE: nessuna firma valida sull'ultimo commit"
echo "== Verifica completata =="
Salvalo come verifica-yubikey.sh, rendilo eseguibile con chmod +x verifica-yubikey.sh e lancialo ogni volta che aggiorni la configurazione: in pochi secondi conferma se SSH, GPG e firma dei commit stanno effettivamente passando dalla chiave hardware, invece di scoprirlo a metà di un login urgente su un server di produzione.
Chiavi FIDO2 e SSH: uno sguardo alle alternative sul mercato
YubiKey non è l’unica opzione sul mercato: Google Titan Security Key, Feitian ePass FIDO e SoloKeys offrono lo stesso standard FIDO2/WebAuthn, con differenze nel supporto NFC, nella presenza dell’applet PIV/OpenPGP e nel prezzo. Se il tuo obiettivo è esclusivamente il secondo fattore per login web, qualunque chiave certificata FIDO2 dal FIDO Alliance funziona in modo intercambiabile, perché lo standard garantisce l’interoperabilità tra vendor. La combinazione GPG smartcard più SSH resta invece un punto di forza specifico della gamma YubiKey 5, grazie al supporto nativo dell’applet OpenPGP che non tutti i concorrenti implementano. Per un confronto più ampio tra i diversi fattori di autenticazione disponibili oggi, la nostra guida SMS vs app vs passkey vs chiave hardware mette a confronto sicurezza e comodità di ciascun metodo.
Comprare la chiave giusta ed evitare unità contraffatte
Una chiave di sicurezza hardware protegge bene solo se la catena di fornitura da cui proviene è affidabile. Acquista sempre dallo store ufficiale Yubico o da un rivenditore autorizzato elencato sul sito del produttore, evitando marketplace generalisti dove il venditore terzo non è verificabile: un dispositivo manomesso in fabbrica, anche solo con un firmware modificato prima della vendita, vanifica ogni garanzia offerta dal protocollo FIDO2. Alla prima registrazione su un servizio importante, controlla che il flusso WebAuthn completi senza avvisi del browser relativi ad attestazione non riconosciuta: Chrome e Firefox segnalano quando il certificato di attestazione della chiave non corrisponde a un vendor noto, un segnale da non ignorare.
Un altro controllo utile riguarda la confezione. Yubico sigilla le chiavi vendute tramite i canali ufficiali e pubblica sul proprio sito le indicazioni per riconoscere un pacco manomesso o un dispositivo di seconda mano rivenduto come nuovo. Se acquisti in blocco per un team o un’azienda, conserva le fatture e i numeri di serie in un inventario centralizzato: in caso di richiamo del produttore per un lotto specifico, saprai subito quali dispositivi sostituire senza dover ricontrollare manualmente ogni singola chiave in circolazione.
Domande frequenti
Cosa succede se perdo la YubiKey configurata per SSH e GPG?
Se hai seguito lo schema con master key conservata offline, puoi rigenerare le tre sottochiavi (firma, cifratura, autenticazione) su una nuova YubiKey ripetendo i Passi 3-4 partendo dalla stessa identità. Se invece la master key era solo sulla chiave persa e non hai un backup, l’identità GPG non è recuperabile e serve crearne una nuova, revocando la vecchia con il certificato di revoca se ne avevi generato uno.
Serve per forza una seconda YubiKey di backup?
Non è obbligatorio, ma è fortemente consigliato per qualunque account che non vuoi rischiare di perdere del tutto. Per un uso personale limitato, in alternativa puoi affidarti ai codici di recupero offerti dai singoli servizi, ma la copertura varia molto da piattaforma a piattaforma e alcuni non li offrono affatto per il 2FA hardware.
La YubiKey funziona anche su smartphone?
Sì, i modelli con NFC (5C NFC, 5 NFC, Bio) funzionano su Android e iOS avvicinando la chiave al retro del telefono durante il login, senza bisogno di connettori fisici. I modelli Lightning o USB-C senza NFC richiedono invece il collegamento fisico alla porta del dispositivo.
Posso usare la stessa YubiKey per lavoro e uso personale?
Tecnicamente sì, dato che le applicazioni FIDO2, PIV e OpenPGP sono indipendenti tra loro sulla stessa chiave. In un contesto aziendale però molte policy IT richiedono chiavi separate per limitare il rischio in caso di smarrimento e per motivi di gestione dell’inventario, quindi verifica le policy interne prima di condividere una chiave tra i due ambiti.
Che differenza c’è tra YubiKey e passkey software (es. su iCloud Keychain o Google Password Manager)?
Entrambe usano lo standard FIDO2/WebAuthn e offrono resistenza al phishing. La differenza principale è dove vive la chiave privata. Su una passkey software risiede nel portachiavi cifrato del sistema operativo e si sincronizza tra i tuoi dispositivi tramite l’account cloud del vendor. Su una YubiKey resta esclusivamente sul chip hardware, non lascia mai il dispositivo e non dipende da alcun account cloud, a costo di dover portarla fisicamente con te.
Il PIN della YubiKey è la stessa cosa della password del mio account?
No. Il PIN sblocca localmente l’uso della chiave (dimostra che sei tu a maneggiarla), ma non viene mai trasmesso al servizio remoto. La sicurezza del secondo fattore deriva dal possesso fisico della chiave combinato con la conoscenza del PIN, non dal PIN da solo: un attaccante che conosce il PIN ma non ha la chiave fisica non può autenticarsi.
Devo rifare tutta la procedura se cambio computer?
No. Le chiavi private restano sulla YubiKey, non sul computer. Sul nuovo computer basta installare GPG e ykman, importare la chiave pubblica GPG (gpg --import chiave-pubblica.asc), collegare la YubiKey ed eseguire gpg --card-status perché GPG riconosca automaticamente le sottochiavi presenti sulla carta e le associ all’identità importata.




