Ho visto un certo numero di metodi di autenticazione del sito web in due passaggi là fuori. Alcuni includono due password, HOTP / TOTP, Yubikey, SMS a un numero di telefono, ecc. Tuttavia, sembra che tutti questi sistemi si affidino al computer o al dispositivo principale per non essere compromessi.
Per essere precisi, mi permetta di riferire specificamente a TOTP. Ecco un tipico flusso del sito web TOTP per un sito:
- Digiti la tua password sul tuo computer
- Apri l'app 2FA (ad es., autenticazione FreeOTP, autorizzazione Google)
- Digiti il token TOTP corrente sul tuo computer
Se un utente malintenzionato ha un keylogger o un logger della CPU sul tuo computer, non può accedere al tuo account? Al punto 3, supponendo che il tuo computer sia compromesso, hanno sia la tua password che il token TOTP corrente. Comprendo che l'autore dell'attacco può accedere al tuo account una sola volta perché il token TOTP scadrà dopo 30 secondi.
Tuttavia, se il flusso del sito Web TOTP tipico fosse il seguente:
- Digiti la tua password sul tuo computer
- Apri l'app 2FA (ad es., autenticazione FreeOTP, autorizzazione Google)
- Invia il token TOTP corrente direttamente dal tuo telefono al server del sito che stavi cercando di accedere dal tuo computer
Non vedo come sarebbe molto più sforzo da parte del server del sito. Presumo che avrebbe solo bisogno di un endpoint che ascolta i token TOTP in entrata che vengono inviati con un nome utente per identificare a quale accesso è destinato il token TOTP in entrata. Ora un utente malintenzionato dovrebbe installare un keylogger sul computer (o sul dispositivo principale) e sul telefono (o sul secondo dispositivo) per accedere al proprio account.
A mio avviso, con questa configurazione proposta un meccanismo di sicurezza definitivo sarebbe un computer + un dispositivo hardware specifico che è in grado di inviare chiavi TOTP a un server (forse come un Bitcoin Trezor ma invece di mostrare un indirizzo bitcoin, sarebbe mostra un nome di dominio o un indirizzo IP per conferma). Ma per quanto ne so, non vedo una spinta per l'utilizzo di due entità separate per fare l'autenticazione del sito web. C'è una ragione per questo?