Verify

O que significa OTP? Senhas de uso único explicadas

OTP significa one-time password (às vezes one-time passcode), ou senha de uso único. É um código curto, geralmente de quatro a oito dígitos, válido para um único login ou uma única transação e que expira em seguida. Como cada código funciona apenas uma vez e apenas por uma janela curta, um código que vaze depois de usado não tem valor para um invasor. Essa qualidade descartável é a razão de os OTPs existirem.

Você quase certamente já digitou um: os seis dígitos que o banco envia por mensagem antes de uma transferência, o código que um app autenticador exibe quando você faz login, o número que um site envia por e-mail para confirmar que é realmente você. Todos esses são OTPs, diferindo principalmente em como o código é gerado e como ele chega até você.

Como um OTP funciona?

O serviço e o usuário precisam de uma forma de concordar sobre qual é o código válido naquele momento, sem enviar a senha em si de maneira previsível. Existem dois métodos padrão, e a diferença está no que faz o código mudar.

  • HOTP (senha de uso único baseada em HMAC). O código é derivado de um segredo compartilhado e um contador. O token do usuário avança um contador ao gerar um código. O verificador do serviço avança seu estado correspondente após aceitar o código esperado. Um código HOTP não expira apenas porque o tempo passou.
  • TOTP (senha de uso único baseada em tempo). O código é derivado de um segredo compartilhado e do horário atual, arredondado para uma janela (normalmente 30 segundos). O código muda sozinho conforme o tempo passa, independentemente de alguém tê-lo usado. É isso que os apps autenticadores geram.

TOTP é o mais comum dos dois porque a expiração automática limita por quanto tempo um código roubado é útil. HOTP ainda aparece em tokens de hardware e em fluxos onde é difícil garantir um relógio sincronizado.

Como um OTP é entregue?

O método de geração e o canal de entrega são escolhas separadas. Um código pode ser calculado no próprio dispositivo do usuário ou gerado no servidor e enviado a ele.

  • SMS. O servidor gera um código e o envia por mensagem de texto para o número de telefone do usuário. Alcance universal, sem necessidade de app. Também é o canal mais suscetível a interceptação, via SIM-swap ou ataques à rede.
  • E-mail. O código chega na caixa de entrada do usuário. Conveniente e sem necessidade de app, mas tão seguro quanto a própria conta de e-mail.
  • Chamada de voz. Uma chamada automatizada lê o código em voz alta, o que ajuda usuários que não conseguem receber SMS ou que precisam de uma opção acessível.
  • App autenticador. O código é calculado localmente com TOTP. Nada é enviado pela rede, então não há nada em trânsito para interceptar.

Cada canal troca alcance por dificuldade de ataque. SMS e e-mail alcançam quase todo mundo; códigos baseados em app são mais difíceis de roubar, mas exigem que o usuário tenha configurado um app previamente.

Onde os OTPs são usados?

O uso mais conhecido é como segundo fator na autenticação de dois fatores, onde o OTP comprova a posse de um telefone ou dispositivo além da senha. Mas os OTPs aparecem muito além do login.

  • Verificação de login: confirmação de um acesso, especialmente a partir de um novo dispositivo ou local.
  • Confirmação de transação: aprovação de um pagamento, uma transferência ou uma alteração nos dados de pagamento.
  • Recuperação de conta: confirmação do controle de um número de telefone ou e-mail antes de redefinir uma senha.
  • Verificações adicionais: solicitação de um novo código antes de uma ação sensível, mesmo no meio de uma sessão.

Se você está avaliando se um OTP torna um login genuinamente "two-factor", isso depende do restante do fluxo. A distinção é abordada em autenticação de dois fatores vs. verificação em duas etapas.

Considerações de segurança e boas práticas

OTPs são simples, e é exatamente por isso que os detalhes importam. Alguns hábitos os mantêm eficazes.

  • Expiração curta. Limite o tempo dos códigos ao mínimo. Alguns minutos para SMS e e-mail, a janela padrão de 30 segundos para TOTP. Quanto menor a janela, menor a chance de um código ser reutilizado.
  • Limitação de requisições. Limite tanto a quantidade de códigos que um usuário pode solicitar quanto a quantidade de tentativas de acerto. Um código de seis dígitos tem um milhão de possibilidades, que um invasor sem restrição pode testar por força bruta; algumas tentativas por código fecham essa porta.
  • Uso único, aplicado no servidor. Invalide um código no momento em que ele for aceito, e também após muitas falhas. Não dependa do cliente para impedir a reutilização.
  • Nunca registre o código em logs. Mantenha os OTPs fora de logs de aplicação, analytics e relatórios de erro. Um código em um arquivo de log é um código que um colaborador interno ou um vazamento de logs pode ler.
  • Vincule o código ao contexto. Associe um código ao usuário e à ação específicos para os quais ele foi emitido, de modo que um código destinado a um propósito não possa ser reaproveitado para outro.

Uma observação sobre phishing: um usuário pode ser induzido a informar um código de SMS ou de app a um invasor em um site falso, então OTPs não são à prova de phishing como as chaves de hardware. Eles ainda bloqueiam o ataque muito mais comum, que é alguém fazendo login apenas com uma senha roubada.

Envio e verificação de OTPs

Você pode executar um fluxo de OTP por conta própria: gere um código, armazene-o com uma expiração, envie-o e confira a entrada do usuário dentro da janela. Se você quer que a entrega e a verificação sejam feitas para você (incluindo a limitação de requisições e a expiração), o produto Verifications da Bird envia e valida códigos por SMS, voz e e-mail. Se você precisa apenas do transporte e quer controlar a lógica de verificação, o produto SMS cobre a entrega de códigos para telefones.

FAQ

Qual é a diferença entre HOTP e TOTP?

HOTP avança o contador do token do usuário ao gerar um código. O verificador do serviço avança seu estado após aceitar o código esperado. TOTP deriva seu código do horário atual, então ele muda em um intervalo fixo (geralmente a cada 30 segundos). TOTP é mais comum porque a expiração automática limita a utilidade de um código roubado.

OTPs por SMS são seguros?

São seguros o suficiente para a maioria das contas e bloqueiam a maior parte dos ataques baseados apenas em senha, mas SMS pode ser interceptado por fraude de SIM-swap ou ataques à rede. Para contas de alto valor, prefira um app autenticador ou uma chave de hardware.

Por quanto tempo um OTP deve permanecer válido?

Tempo suficiente para o usuário ler e digitar, e nada além disso. Alguns minutos para SMS ou e-mail, e a janela padrão de 30 segundos para TOTP. Janelas mais curtas reduzem a chance de um código vazado ainda ser utilizável.

O mesmo OTP pode ser usado duas vezes?

Não deveria. Um sistema implementado corretamente invalida um código no momento em que ele é aceito, e também após muitas tentativas falhadas. Aplique o uso único no servidor, nunca no cliente.

Senhas de uso único são uma ideia simples que tem muito peso na segurança de contas. Para ver como elas se encaixam em uma defesa de login completa, leia o que é autenticação de dois fatores, ou veja como Bird gera, entrega e verifica códigos no produto Verifications.

Construa na mesma rede.

Uma chave de API de teste é sua imediatamente. A produção é desbloqueada quando adicionar um método de pagamento e verificar um remetente.

Sua próxima ideia.
Pronta para conectar.