DevGuideTK
← Trilha Backend

Autenticação em múltiplos fatores

TOTP, chaves de acesso e SMS, e o que cada fator protege de fato.

As decisões de MFA são cinco: quais fatores oferecer, quando exigir o segundo fator, como guardar os segredos, como recuperar o acesso e se o MFA é obrigatório.

Quais fatores oferecer

Chave de acessoTOTPPush no aplicativoSMSE-mail
Resiste a phishingSimNãoNão, e sofre com "aprovações por cansaço"NãoNão
Resiste a SIM swapSimSimSimNãoDepende do e-mail
Funciona sem rede no celularSimSimNãoPrecisa de sinalPrecisa de internet
Atrito para o usuárioBaixo, depois de configuradoMédio: abrir o aplicativo e digitarBaixoBaixoMédio
Custo para quem ofereceBiblioteca WebAuthnBiblioteca TOTPAplicativo próprio ou serviçoPor mensagem enviadaQuase nenhum
Pode substituir a senhaSimNãoNãoNãoNão

A ordem de preferência para a maioria dos sistemas: chave de acesso, depois TOTP, e SMS como último recurso para quem não tem outra opção. O push em aplicativo próprio faz sentido para bancos e serviços que já têm aplicativo, com um cuidado: mostrar um número na tela do login que o usuário precisa escolher no celular, para ele não aprovar por reflexo um pedido que não fez.

Chave de acesso como senha, ou como segundo fator

UsoComo funcionaQuando
No lugar da senhaLogin só com a chave; o dispositivo pede digital ou PINSistemas novos, ou como opção principal para quem já tem a chave
Como segundo fatorSenha e depois a chaveMigração gradual, a partir de um sistema com senha

A primeira forma elimina a senha, e com ela os vazamentos e a reutilização. A segunda é a porta de entrada mais simples num sistema que já existe.

Quando exigir o segundo fator

MomentoRecomendação
Login num dispositivo novoSempre
Login num dispositivo conhecidoPode pular por alguns dias, com um cookie de "dispositivo confiável"
Ações sensíveisPedir de novo: trocar e-mail, senha ou fatores, ver chaves de API, transferir dinheiro
Login com sinais de riscoPedir mesmo em dispositivo conhecido: país novo, muitos erros de senha recentes

Pedir o segundo fator de novo antes das ações sensíveis (step-up) fecha a brecha da sessão roubada: o cookie capturado entra na conta, mas não consegue trocar o e-mail nem desativar o MFA.

Como guardar os segredos

DadoComo guardarPor quê
Segredo TOTPCriptografado com uma chave fora do bancoO servidor precisa do segredo original para calcular os códigos; hash não serve
Último passo TOTP usadoUm número por usuárioRecusar o mesmo código duas vezes
Chave pública WebAuthnComo estáÉ pública por definição
Contador de assinaturas WebAuthnUm número por chaveAlguns autenticadores o usam para detectar cópias da chave
Códigos de recuperaçãoHash, um por linha, marcado ao usarCada código só pode ser usado uma vez

Os códigos de recuperação são aleatórios e longos, então um hash rápido como o SHA-256 basta. Diferente das senhas, eles não podem ser adivinhados com um dicionário.

Como recuperar o acesso

SaídaVantagemRisco
Códigos de recuperaçãoO usuário resolve sozinhoEle não guarda, ou guarda num lugar que também perde
Mais de um fator cadastradoPerder um não trava a contaExige que o usuário cadastre o segundo
Suporte humanoResolve qualquer casoVira alvo de engenharia social, se a conferência for fraca
Espera com avisoRemove o fator depois de alguns dias, avisando todos os contatosLento; o usuário legítimo espera

Uma combinação comum: códigos de recuperação no cadastro, incentivo a cadastrar um segundo fator, e o suporte como última saída, com espera e aviso. Remover o MFA por e-mail, sem mais nada, desfaz a proteção: quem invadiu o e-mail invade a conta.

Obrigatório ou opcional

PúblicoRecomendação
Administradores, suporte, quem tem acesso a dados de outrosObrigatório, e de preferência resistente a phishing
Contas com dinheiro ou dados sensíveisObrigatório, ou fortemente incentivado
Usuários comunsOpcional, oferecido no cadastro e lembrado periodicamente

O MFA opcional costuma ter adesão baixa. Chaves de acesso ajudam porque substituem a senha com menos atrito, e o usuário as adota pela conveniência, e não pela segurança.

Resumo da decisão

  1. Chaves de acesso como opção principal, TOTP como alternativa, SMS só como último recurso.
  2. Limite de tentativas por conta na conferência do código.
  3. Uso único de cada código TOTP, guardando o último passo aceito.
  4. Segundo fator de novo antes de ações sensíveis.
  5. Segredos TOTP criptografados, códigos de recuperação com hash.
  6. Recuperação com códigos e um segundo fator cadastrado, e um suporte tão rigoroso quanto o login.
  7. Obrigatório para administradores e contas sensíveis.

O próximo nível mostra o TOTP nas cinco linguagens, conferido com os vetores do RFC 6238, e o fluxo de chave de acesso testado no Chrome.

Prompts para aprofundar

Ao abrir no ChatGPT ou no Claude, o prompt é enviado ao serviço escolhido pela URL e também fica copiado na sua área de transferência.

  • Escolher os fatores do meu sistema

    Quero decidir quais fatores de autenticação oferecer no meu sistema.
    
    Pergunte quem são os usuários, o que uma conta invadida expõe, se já existe um aplicativo próprio e qual é a infraestrutura de autenticação hoje.
    
    Compare para o meu caso chaves de acesso, TOTP, push no aplicativo, SMS e e-mail quanto a phishing, SIM swap, atrito, custo e recuperação. Recomende quais oferecer, em que ordem, e se o MFA deve ser obrigatório para algum grupo de usuários.
  • Quando pedir o segundo fator

    Quero definir em que momentos o meu sistema pede o segundo fator.
    
    Pergunte quais ações existem no sistema, quais são sensíveis e como as sessões funcionam hoje.
    
    Proponha uma política para:
    1. Login em dispositivo novo e em dispositivo conhecido.
    2. Dispositivos confiáveis, e por quanto tempo.
    3. Ações sensíveis que pedem o segundo fator de novo.
    4. Sinais de risco que exigem o segundo fator mesmo em dispositivo conhecido.
    5. O que acontece com as outras sessões quando um fator muda.
  • Migrar para chaves de acesso

    Meu sistema usa senha, e talvez TOTP, e quero oferecer chaves de acesso.
    
    Pergunte qual linguagem e framework eu uso, se uso um provedor de identidade e quais navegadores e dispositivos os usuários têm.
    
    Monte um plano de migração:
    1. Chave de acesso como segundo fator ou no lugar da senha.
    2. Como convidar os usuários a criar a chave.
    3. Como lidar com vários dispositivos e a sincronização das chaves.
    4. A recuperação de quem perde todos os dispositivos.
    5. Como medir a adoção.