Principais destaques
- O Google Authenticator não recebe um novo código do Google pela internet toda vez que você tenta entrar na conta.
- O aplicativo e o serviço protegido compartilham um segredo criado durante a configuração e usam o horário para calcular o código correto.
- Os números mudam regularmente porque o cálculo depende de uma janela de tempo. Por isso, um código válido hoje rapidamente deixa de funcionar.
Você abre o Google Authenticator, olha para a tela e encontra seis números que parecem completamente aleatórios. Digita aquela sequência no site ou aplicativo em que está tentando entrar e, alguns segundos depois, recebe a confirmação de que o código está correto.
Mas existe uma pergunta bastante curiosa por trás desse processo: como o Google sabe que aqueles seis números são exatamente os números que apareceram no seu celular?
A resposta é mais interessante do que simplesmente dizer que o aplicativo “manda o código para o Google”.
Na realidade, em uma configuração tradicional baseada em TOTP, o celular e o serviço conseguem chegar ao mesmo resultado usando informações que foram combinadas anteriormente. Não é necessário que o Google envie o número para o telefone no momento em que você está fazendo login.
É por isso, inclusive, que o Google Authenticator consegue gerar códigos mesmo quando o aparelho está sem conexão com a internet ou sem serviço móvel.

Tudo começa quando você configura o Authenticator
Para entender o funcionamento, é preciso voltar alguns passos, até o momento em que você adiciona uma conta ao Google Authenticator.
Durante essa configuração, o aplicativo e o serviço que você quer proteger precisam estabelecer uma informação secreta compartilhada. Essa informação funciona como uma espécie de ingrediente secreto usado na geração dos códigos.
É comum que essa configuração seja feita por meio de um QR Code. Você aponta a câmera do celular para o código e o Authenticator passa a ter as informações necessárias para gerar os códigos daquela conta.
A partir daí, o aplicativo não precisa consultar um servidor a cada vez que você abre a tela.
Esse detalhe é fundamental.
Se o Authenticator precisasse entrar em contato com um servidor sempre que mostrasse um código, seria necessário ter conexão com a internet. Mas não é isso que acontece nesse modelo.
O aplicativo já possui as informações necessárias para realizar o cálculo localmente.
Do outro lado, o serviço que protege a conta também possui os dados necessários para verificar se o código apresentado pelo usuário corresponde ao que deveria estar sendo exibido naquele momento.
É como se duas pessoas recebessem a mesma fórmula secreta. Elas não precisam conversar o tempo todo. Se utilizarem os mesmos ingredientes e a mesma referência de tempo, conseguem chegar ao mesmo resultado.
E é justamente aí que entra uma das partes mais interessantes do sistema.
O relógio é uma peça fundamental
O Google Authenticator utiliza um mecanismo conhecido como TOTP, sigla em inglês para “Time-Based One-Time Password”, ou senha de uso único baseada em tempo.
O padrão técnico desse sistema foi documentado pelo IETF na RFC 6238. Ele define um método no qual um segredo compartilhado é combinado com um valor calculado a partir do horário atual.
Na configuração padrão descrita pelo padrão TOTP, o tempo é dividido em intervalos de 30 segundos.
Isso significa que o relógio não está ali apenas para mostrar uma contagem regressiva bonitinha ao lado dos números. Ele participa efetivamente da geração do código.
De forma simplificada, podemos imaginar o processo assim:
segredo compartilhado + intervalo de tempo atual = cálculo criptográfico = código
O processo real é matematicamente mais complexo do que essa representação, mas a ideia central é essa.
O aplicativo olha para o horário atual, identifica em qual intervalo de tempo está e combina essa informação com o segredo associado à conta.
O resultado passa por operações criptográficas e, no final, é convertido em uma sequência curta de números que seja fácil para uma pessoa digitar.
O padrão TOTP define justamente essa relação entre o segredo e um contador derivado do tempo.
É por isso que o código parece aleatório.
Ele não foi escolhido manualmente e também não é simplesmente um número sorteado pelo celular.
Existe um cálculo por trás dele.
Mas como o Google consegue saber o mesmo número?
Essa é a parte que costuma parecer mágica.
Imagine que o Authenticator mostre:
482 731
Você digita esses seis números na tela de login.
O Google não precisa perguntar ao seu celular:
“Você acabou de mostrar 482731?”
Em vez disso, o sistema responsável pela autenticação pode realizar o cálculo correspondente usando o segredo associado à configuração e o intervalo de tempo atual.
Se o resultado esperado for 482731, o código é aceito.
O servidor não está “adivinhando” o número.
Ele está verificando matematicamente se o número que você apresentou corresponde ao resultado esperado.
Essa diferença é importante porque ajuda a entender por que o sistema pode funcionar sem que o código precise ser transmitido pela internet.
O telefone calcula de um lado.
O serviço calcula do outro.
Os dois chegam ao mesmo resultado.
É um pouco parecido com duas calculadoras que recebem exatamente os mesmos dados e executam a mesma operação. Se nada estiver errado, o resultado será igual.
Só que, nesse caso, estamos falando de algoritmos criptográficos projetados para tornar extremamente difícil descobrir o segredo apenas observando os códigos gerados.
Por que o código muda o tempo todo?
Agora fica fácil entender por que aquele número que apareceu no seu celular desaparece pouco depois.
O código depende do intervalo de tempo atual.
Quando o período muda, o valor usado no cálculo também muda. Consequentemente, o resultado final muda.
Isso cria uma característica importante: o código é temporário.
Você pode olhar para o Authenticator e ver um número válido naquele instante. Pouco depois, outro número será apresentado.
O padrão TOTP estabelece 30 segundos como valor padrão para o intervalo de tempo, embora os parâmetros possam variar conforme a implementação.
Na prática, isso significa que alguém que veja um código antigo não poderá simplesmente reutilizá-lo indefinidamente.
Esse é justamente um dos objetivos da autenticação baseada em códigos temporários.
Mesmo que uma sequência seja descoberta, ela perde utilidade depois que sua janela de validade termina.
O próprio Google orienta que, quando um código não funciona, o usuário verifique se ele foi digitado antes de expirar e se o horário do dispositivo está correto e sincronizado.
E se o celular estiver sem internet?
Aqui está outra característica que costuma surpreender.
Você pode colocar o celular no modo avião, abrir o Google Authenticator e, dependendo da configuração, ainda verá os códigos sendo gerados.
Isso acontece porque a geração do código não depende de receber uma mensagem do Google naquele instante.
O aplicativo já tem o segredo necessário e utiliza o relógio do dispositivo para determinar o intervalo atual.
O próprio Google informa que o Authenticator pode gerar códigos sem conexão com a internet ou serviço móvel.
Isso também explica uma diferença importante entre o Authenticator e um código recebido por SMS.
Quando você recebe um código por mensagem de texto, existe uma comunicação com um sistema externo para que aquela mensagem chegue ao seu telefone.
No Authenticator, o código pode ser calculado diretamente no aparelho.
É uma das razões pelas quais o aplicativo é tão útil quando você está em um local sem sinal ou sem acesso à internet.
O que acontece se o relógio do celular estiver errado?
Esse é um detalhe pequeno, mas muito importante.
Se o código depende do tempo, o relógio também precisa estar correto.
Imagine que o servidor esteja trabalhando com determinado intervalo de tempo, enquanto seu celular acredita que está em outro momento. Os dois podem fazer cálculos diferentes.
Resultado: o código que aparece no aparelho pode não ser aceito.
Por isso, o Google recomenda verificar se o horário do dispositivo está sincronizado quando um código do Authenticator não funciona.
Há uma mudança interessante nas versões mais recentes do aplicativo: a opção específica de correção de horário deixou de existir na versão 7.0, e o Authenticator passou a utilizar a configuração de horário do próprio sistema operacional.
Isso torna ainda mais importante manter a data e a hora do aparelho configuradas corretamente.
O QR Code não é o código de acesso
Outro ponto que pode confundir quem está começando a usar o Authenticator é o QR Code.
Ao configurar uma conta, você normalmente escaneia um QR Code. Depois disso, o aplicativo começa a apresentar números que mudam regularmente.
É tentador imaginar que o QR Code contém uma lista de todos os códigos que serão usados no futuro.
Não é essa a melhor forma de pensar sobre o processo.
O QR Code serve para transportar as informações necessárias para configurar o autenticador, incluindo o segredo que será usado na geração dos códigos.
A partir daí, o aplicativo pode calcular os códigos conforme o tempo passa.
Isso também ajuda a explicar por que não existe uma lista simples de “próximos códigos” esperando dentro do aplicativo.
Os números são derivados durante o processo.
E por que são geralmente seis números?
Existe uma enorme quantidade de possibilidades que poderia ser usada para representar o resultado de um cálculo criptográfico.
Mas pedir para alguém digitar uma sequência enorme de caracteres seria extremamente inconveniente.
Por isso, o sistema transforma o resultado em um código numérico curto.
O resultado é um equilíbrio entre segurança e praticidade.
Se fosse longo demais, seria difícil para uma pessoa digitar. Se fosse curto demais, haveria menos combinações possíveis.
No modelo TOTP, o resultado criptográfico passa por um processo de truncamento e é convertido em um valor numérico adequado para autenticação. A especificação permite diferentes quantidades de dígitos, embora códigos de seis dígitos sejam muito comuns.
Assim, aqueles seis números que parecem simples são apenas a parte visível de um processo matemático bem maior.
O código não é sua segunda senha permanente
Também é importante não tratar o código do Authenticator como se fosse uma senha comum.
Uma senha tradicional pode continuar igual durante meses ou anos, até que você decida alterá-la.
O código do Authenticator é diferente.
Ele é temporário e de uso único dentro daquela janela de tempo.
Na verificação em duas etapas, ele funciona como uma segunda prova de que a pessoa tentando entrar possui acesso ao dispositivo ou ao autenticador configurado.
O Google explica que a verificação em duas etapas adiciona uma camada de segurança caso a senha seja roubada.
Assim, mesmo que alguém descubra sua senha, ainda poderá encontrar uma barreira adicional para conseguir entrar na conta.
É justamente a ideia por trás do “dois fatores”: não depender de uma única informação para provar quem você é.
O Google Authenticator também mudou com o tempo
O funcionamento atual do aplicativo tem outro detalhe que vale mencionar.
O Google passou a permitir a sincronização dos códigos do Authenticator entre dispositivos quando o usuário faz login na Conta Google. Segundo a documentação da empresa, os códigos são criptografados em trânsito e em repouso nos sistemas do Google.
Isso resolve um problema bastante comum: trocar de celular e descobrir que os códigos usados para entrar em várias contas ficaram presos no aparelho antigo.
Ainda assim, existem opções para usar o Authenticator sem uma Conta Google, mantendo os códigos apenas no dispositivo.
A escolha depende da forma como cada pessoa prefere administrar seus códigos e do nível de conveniência que deseja.
O Google também recomenda manter formas adicionais de verificação configuradas para evitar perder completamente o acesso à conta.
E se alguém conseguir ver o código?
Aqui está uma das maiores limitações desse sistema.
O fato de o código mudar constantemente não significa que ele seja impossível de roubar.
Se alguém conseguir convencer você a informar o código enquanto ele ainda está válido, poderá tentar utilizá-lo em um ataque.
Por isso, o Google alerta para nunca compartilhar códigos de verificação com outras pessoas e afirma que não liga para pedir esse tipo de informação.
Esse tipo de golpe pode acontecer quando alguém se passa por uma empresa, suporte técnico ou até mesmo por um conhecido.
A pessoa pode dizer algo como: “Vou enviar um código para confirmar sua identidade. Me passe os números que aparecerem.”
O problema é que o código pode estar sendo usado pelo próprio golpista em uma tentativa de login.
Por isso, a regra é simples: código de verificação é informação privada e não deve ser compartilhado.
Então existe uma pequena “mágica” matemática por trás da tela
No fim das contas, o Google Authenticator não precisa saber antecipadamente qual código você vai usar.
Ele calcula.
O serviço que está protegendo a conta também calcula.
Os dois utilizam informações previamente estabelecidas e uma referência de tempo comum. Quando os resultados correspondem, o sistema entende que o código apresentado é válido.
A grande sacada está justamente em fazer isso de uma maneira que seja simples para o usuário, mas muito mais difícil de reproduzir para alguém que não possui o segredo necessário.
Por trás de uma tela extremamente simples, existe uma combinação de criptografia, sincronização de tempo e algoritmos matemáticos.
E talvez essa seja a parte mais curiosa: quando você abre o aplicativo e vê seis números mudando na tela, seu celular não está recebendo uma senha pronta do Google.
Ele está calculando, naquele exato momento, uma resposta que o sistema de autenticação também consegue calcular.
É por isso que o número pode parecer aleatório, mudar constantemente e ainda assim ser exatamente o código que o Google espera.
Uma pequena sequência de seis dígitos, portanto, esconde uma operação muito mais sofisticada do que parece.