Usare una chiavetta YubiKey NFC con uno smartphone è un’operazione quasi banale: il sistema richiede l’autenticazione, si avvicina la chiave al telefono e WebAuthn completa lo scambio crittografico. Su un desktop Linux, invece, la stessa operazione può fermarsi prima ancora di iniziare.
Quando una YubiKey viene inserita direttamente nella porta USB, il browser la riconosce come un dispositivo di autenticazione FIDO e può avviare la comunicazione. Con un lettore NFC USB, invece, Linux gestisce la YubiKey come una smart card: il lettore passa attraverso PC/SC, il sottosistema usato normalmente per smart card e token crittografici. Firefox e Chromium su Linux non collegano automaticamente questo canale PC/SC al proprio supporto WebAuthn.
Il sistema operativo vede perfettamente sia il lettore che la YubiKey appoggiata, ma il browser non la considera una chiave FIDO utilizzabile per l’autenticazione.
Perché una YubiKey NFC non funziona direttamente nel browser Linux
L’anomalia descritta in precedenza scaturisce da una separazione tecnica che risale all’implementazione iniziale delle chiavi FIDO sui desktop.
Le YubiKey fisicamente collegate alla porta USB espongono un’interfaccia HID riconosciuta dal sistema e dai browser; i dispositivi NFC esterni, invece, passano tipicamente attraverso lo stack delle smart card. Sullo smartphone le piattaforme hanno integrato da tempo il trasporto NFC nel flusso FIDO; Linux desktop, invece, non offre ancora, in modo generalizzato, un livello equivalente che faccia da intermediario per WebAuthn.
Una soluzione interessante arriva da Token2 con token2-fido-bridge, progetto open source scritto in C++ e distribuito con licenza MIT.
Il programma non modifica Firefox o Chromium e non richiede estensioni: crea invece un dispositivo HID virtuale che il browser interpreta come una normale chiave FIDO2 collegata via USB, mentre dall’altra parte comunica con il token NFC attraverso PC/SC.
Installazione su Arch Linux, Debian, Ubuntu e Fedora
L’autore di questo intervento tecnico ha preparato un pacchetto per Arch Linux pubblicato su AUR. Con un helper come yay l’installazione passa da yay -S token2-fido-bridge; il servizio può poi essere abilitato e avviato con sudo systemctl enable --now token2-fido-bridge.service.
Token2 mette a disposizione anche pacchetti .deb e .rpm, nell’ambito di un progetto che resta volutamente leggero.
Il binario C++ occupa circa 250 KB e richiede essenzialmente la libreria PC/SC di sistema. Token2 contrappone l’innovativa impostazione alle precedenti implementazioni realizzate in Python, che richiedono interprete, dipendenze e un ambiente software più ampio.
Uno degli aspetti più interessanti riguarda Firefox Snap, configurazione comune su Ubuntu. La sandbox deve consentire al browser di accedere al dispositivo U2F virtuale creato dal bridge: il pacchetto Token2 installa quindi una regola udev apposita, ma Firefox stabilisce quali dispositivi risultano disponibili all’avvio.
Se il bridge viene installato mentre Firefox è già aperto, chiudere semplicemente la finestra potrebbe non essere sufficiente perché Snap può mantenere processi in background. Gli sviluppatori suggeriscono un arresto completo dell’applicazione e, se necessario, la verifica della connessione dell’interfaccia u2f-devices con snap connect firefox:u2f-devices. Chromium e Chrome, secondo le prove riportate dal progetto, riconoscono invece immediatamente il dispositivo virtuale.
Yubico Authenticator può usare l’NFC anche senza il bridge
C’è una distinzione curiosa che aiuta a comprendere ancora meglio il problema. Yubico Authenticator per Linux può accedere alle credenziali OATH memorizzate sulla chiave tramite PC/SC: in quel caso token2-fido-bridge non serve affatto.
Una YubiKey appoggiata sul lettore può quindi mostrare i codici TOTP nell’applicazione Yubico pur risultando invisibile al browser durante una richiesta WebAuthn.
Le due applicazioni, infatti, usano percorsi differenti: Yubico Authenticator sa comunicare direttamente con la smart card attraverso PC/SC; il browser, invece, cerca l’autenticatore attraverso l’interfaccia FIDO che conosce.
La differenza spiega anche perché la vecchia YubiKey NEO riesca a fornire via NFC i codici OATH ma non a completare l’autenticazione FIDO2 attraverso il bridge. L’hardware NFC è perfettamente operativo; cambia il protocollo richiesto dall’applicazione.
Una soluzione ingegnosa, ma sarebbe meglio non averne bisogno
token2-fido-bridge risolve un problema reale con un’idea piuttosto elegante: invece di convincere ogni browser Linux a supportare direttamente PC/SC e NFC, presenta loro un’interfaccia che già comprendono. Il browser continua a vedere un dispositivo FIDO HID; il daemon si occupa della traduzione verso il lettore.
Dal punto di vista dell’utente il vantaggio è concreto, soprattutto sulle workstation dove la YubiKey viene utilizzata molte volte al giorno.
Lasciare un lettore NFC sulla scrivania ed effettuare un tap può risultare più comodo che inserire e rimuovere continuamente una chiave USB-C, con il vantaggio aggiuntivo di ridurre le sollecitazioni meccaniche sulla porta.
Un supporto NFC integrato direttamente nello stack WebAuthn della piattaforma o dei browser eliminerebbe un processo privilegiato aggiuntivo e semplificherebbe configurazione, aggiornamenti e diagnostica. La richiesta Mozilla ancora aperta mostra quanto il problema sia noto da tempo.
Per chi usa oggi Linux desktop, una YubiKey FIDO2 con NFC e un lettore PC/SC compatibile, il bridge offre comunque una strada concreta: un progetto di poche centinaia di kilobyte colma una lacuna che sembrava insormontabile.