Google Authenticator supporta TOTP e HOTP algoritmi.
In entrambi gli algoritmi, è necessario condividere un segreto tra il server e il client per generare correttamente le password monouso. Ti suggerisco di leggere i rispettivi RFC degli algoritmi (o la mia risposta qui ) per capirlo meglio.
Sì, se l'attaccante riesce a impossessarsi del segreto condiviso l'algoritmo viene sconfitto. Tuttavia, questo non è molto pratico. Il segreto viene visualizzato solo sotto forma di codice QR una volta durante la configurazione dell'algoritmo. Presumibilmente sarai seduto davanti allo schermo quando questo accadrà e prenderà nota se qualcuno sospetto si avvicina e inizia a scansionare il codice QR con il suo telefono. Ci sono molte misure fisiche che puoi utilizzare se questo è il caso.
Una volta che il segreto è condiviso, viene memorizzato sul server e sul client (in questo caso il tuo telefono). Almeno nel caso di Android, il segreto è memorizzato in modo non criptato in un file di database SQLi. Tuttavia, è possibile accedere a questo file solo tramite l'app Authententicator, a meno che il dispositivo non sia rootato, quindi non è facile averlo a portata di mano. Dovrebbe essere altrettanto difficile se non più difficile su un dispositivo iOS. Hai molte più preoccupazioni se un utente malintenzionato riesce a compromettere il server.
Quindi sì, l'algoritmo è sconfitto se il segreto è trapelato. Ma la perdita segreta non è una cosa facile da accadere. In ogni caso, è TWO -factor authentication. Hai ancora l'altro fattore per proteggerti.