KeeChallenge per YubiKey, e perché dovresti evitarlo
KeeChallenge è un plugin che aggiunge il supporto per YubiKey a KeePass 2. Tuttavia, presenta diversi problemi. Questo articolo illustra tali problemi e le soluzioni alternative.
Come funziona KeeChallenge
KeeChallenge cifra il database con la chiave segreta HMAC (S). Questa chiave è memorizzata nella YubiKey e viene usata per generare le risposte. Inoltre, KeeChallenge cifra la S con la coppia challenge-response precalcolata e memorizza il segreto cifrato e la challenge in un file XML ausiliario.
Quando sblocchi il database:
- KeeChallenge carica la challenge C dal file XML e la invia alla YubiKey
- La YubiKey trasforma la challenge (usando il segreto S memorizzato nella chiave) e restituisce una risposta R
- La risposta R viene usata per decifrare il segreto Senc memorizzato nel file XML.
- Il segreto decifrato S viene usato per decifrare il database. È importante notare che si tratta dello stesso segreto memorizzato nella YubiKey.
- KeeChallenge rigenera il file XML (genera una nuova challenge casuale C, calcola la nuova risposta R, cifra S usando R' e memorizza le versioni aggiornate di C e Senc nel file XML)
Per maggiori dettagli, consulta il diagramma completo del flusso di lavoro.
Problemi di KeeChallenge
L'approccio di KeeChallenge presenta diversi problemi di sicurezza:
- La chiave segreta non cambia mai, viene solo ricifrata. Dal punto di vista di KeePass, KeeChallenge non è diverso da un file chiave statico che fornisce sempre gli stessi byte.
- Di conseguenza, KeeChallenge è completamente esposto agli attacchi di tipo replay. Uno qualsiasi dei file XML precedenti può essere usato per decifrare il database. In altre parole, randomizzare la challenge e ricifrare il segreto non serve a nulla: è solo security theater.
- Il segreto non dovrebbe mai lasciare la YubiKey: è questo lo scopo di una chiave fisica in sola scrittura. KeeChallenge viola questo principio portando il segreto sul computer. In teoria, un malintenzionato può copiare S dalla memoria del processo, clonare la YubiKey del proprietario a sua insaputa e decifrare qualsiasi versione futura del database (dato che il segreto è statico).
Inoltre, ci sono alcuni problemi correlati:
- Uno sviluppatore di Yubico ha sollevato un problema di sicurezza nel 2016. Nel 2024 il problema è ancora aperto.
- KeeChallenge sembra abbandonato: non ci sono stati aggiornamenti significativi dal 2016.
- Il manutentore non risponde alle segnalazioni.
Un'alternativa migliore
Un approccio alternativo è stato introdotto in KeePassXC ed è supportato da tutte le app compatibili:
In KeePassXC non è necessaria alcuna conoscenza del segreto HMAC. Usiamo il master seed del database (una stringa di byte casuale che fa parte del database) come challenge e poi usiamo la risposta per cifrare il database. In questo modo non serve un file aggiuntivo e si ottiene inoltre il vantaggio che la risposta richiesta cambia ogni volta che salvi il database, il che assomiglia più da vicino a una vera autenticazione a due fattori.
Questo approccio presenta diversi vantaggi importanti rispetto a KeeChallenge:
- La chiave derivata dalla YubiKey è dinamica: cambia a ogni salvataggio del database. (In KeeChallenge, la chiave di cifratura rimane la stessa, simulando di fatto un file chiave statico.)
- Il segreto HMAC non lascia mai la chiave fisica, quindi la YubiKey non può essere clonata di nascosto.
- Non c'è alcun file XML ausiliario, solo il database stesso.
- Ci sono diversi team di sviluppo attivi che supportano questo approccio.
Per i motivi descritti sopra, KeePassium implementa l'approccio di KeePassXC. Non ci sono piani per supportare i database cifrati con KeeChallenge.
Se hai un database protetto con KeeChallenge, valuta di passare a KeePassXC e KeePassium. Questa combinazione ti offrirà una soluzione più sicura, compatibile e mantenuta.