O que é OTP e como usar SMS para autenticação

This article is currently available in Portuguese.

OTP (One-Time Password) é uma senha de uso único: um código numérico temporário, geralmente de 6 dígitos, enviado ao usuário para confirmar que ele é quem diz ser. Diferente da senha tradicional, o OTP vale para uma única operação e expira em poucos minutos, o que o torna inútil para quem tentar reutilizá-lo. No Brasil, o canal mais usado para entregar esse código é o SMS, porque alcança qualquer celular, sem aplicativo instalado e sem depender de internet.

Neste guia você vai entender como o OTP funciona por dentro, a diferença entre OTP por SMS e TOTP de aplicativo autenticador, as boas práticas que separam um fluxo seguro de um fluxo vulnerável e quando o SMS é, de fato, a escolha certa.

Como o OTP funciona: geração, envio e expiração

Por trás da instrução "digite o código que enviamos" existe um fluxo de três etapas que se repete milhões de vezes por dia em cadastros, logins e confirmações de pagamento.

  1. Geração: o servidor cria um código aleatório com um gerador criptograficamente seguro (nunca funções como Math.random) e armazena apenas o hash dele, junto com o telefone de destino e o horário de expiração.
  2. Envio: o código viaja por um canal separado da sessão atual — tipicamente um SMS disparado por API. É esse segundo canal que dá ao OTP o valor de prova de posse do telefone.
  3. Validação e expiração: o usuário digita o código; o servidor compara com o hash guardado, confere o prazo e invalida o código imediatamente após a tentativa, certa ou errada.

Se o prazo vence ou o usuário pede reenvio, o sistema gera um código novo e descarta o anterior — nunca devem existir dois códigos válidos ao mesmo tempo para o mesmo usuário. O passo a passo de implementação está no guia de como enviar OTP por SMS.

OTP por SMS vs. TOTP: qual a diferença?

É comum confundir os dois, mas são mecanismos distintos. O OTP por SMS é gerado no servidor e entregue por mensagem; o TOTP (Time-based One-Time Password) é gerado no próprio aparelho por um aplicativo autenticador, como Google Authenticator ou Authy, a partir de um segredo compartilhado no momento do cadastro.

Como o TOTP funciona

No TOTP, servidor e aplicativo compartilham uma chave secreta e calculam o mesmo código a cada 30 segundos, usando o relógio como variável. Não há envio: o código nasce no dispositivo, funciona offline e não pode ser interceptado em trânsito.

Por que o SMS continua dominante

O TOTP exige instalar um aplicativo, escanear um QR code e entender o conceito — atrito que derruba conversão em produtos de consumo. O SMS funciona em qualquer aparelho, sem instalação e sem instrução. Para cadastro, recuperação de conta e confirmação de transações, o SMS é a escolha pragmática; para contas administrativas de alto risco, vale oferecer TOTP ou chave física como camada adicional.

O que os números dizem sobre OTP e segurança

A verificação em duas etapas não é teoria. Segundo a pesquisa do Google com a Universidade de Nova York e a UC San Diego, o código por SMS bloqueou 100% dos ataques automatizados de bots, 96% dos ataques de phishing em massa e 76% dos ataques direcionados.

Na mesma direção, a Microsoft concluiu que contas com autenticação multifator ficam mais de 99,9% menos propensas a comprometimento por ataques automatizados. E o problema que o OTP ataca é enorme: de acordo com o Data Breach Investigations Report (DBIR) da Verizon de 2025, o abuso de credenciais roubadas foi o vetor inicial de 22% das violações analisadas.

Em resumo: senha sozinha é o elo fraco, e qualquer segundo fator — inclusive o SMS — elimina a esmagadora maioria dos ataques oportunistas.

Boas práticas para um fluxo de OTP seguro

A segurança do OTP depende menos do canal e mais da implementação. Estas são as regras que separam um fluxo profissional de um fluxo vulnerável:

  • 6 dígitos, no mínimo: 4 dígitos são apenas 10 mil combinações, percorríveis por força bruta. Com 6 dígitos e limite de tentativas, o ataque se torna inviável.
  • Expiração curta: 5 minutos é o padrão de mercado. Códigos que valem por horas ampliam a janela de interceptação sem melhorar a experiência.
  • Rate limit nos dois sentidos: limite as tentativas de validação (por exemplo, 5 erros invalidam o código) e também os pedidos de reenvio, com espera progressiva, para conter abuso e SMS pumping.
  • Uso único de verdade: invalide o código após qualquer tentativa e nunca aceite o código anterior depois de gerar um novo.
  • Armazene o hash, não o código: se o banco de dados vazar, os códigos ativos não podem ser lidos.
  • Mensagem enxuta e sem acentos: caracteres acentuados podem forçar a codificação UCS-2 e encarecer o envio; um texto direto como "Seu codigo: 482913" resolve.

Autofill: o código que se digita sozinho

No Android, a SMS Retriever API permite que seu aplicativo leia o código automaticamente, sem pedir permissão de SMS — basta a mensagem terminar com o hash de 11 caracteres do app. Na web, o padrão WebOTP faz o mesmo quando a última linha da mensagem segue o formato "@seudominio.com.br #482913". Menos digitação significa menos erro e mais conversão no cadastro.

Quando o OTP por SMS é a escolha certa

  • Verificação de cadastro: confirma que o telefone existe e pertence ao usuário — e ainda filtra contas falsas.
  • Login e 2FA: segunda camada além da senha, com o melhor equilíbrio entre segurança e alcance.
  • Confirmação de operações sensíveis: aprovar um pagamento, alterar dados cadastrais, redefinir senha.
  • Recuperação de conta: canal alternativo quando o usuário perdeu o acesso ao e-mail.

Vale lembrar: o OTP é um SMS transacional — decorre de uma ação do usuário e não exige opt-in de marketing. A distinção completa entre as duas categorias está em SMS transacional vs. marketing.

Como enviar um OTP com a SMSGo

Na prática, o envio é uma chamada HTTP. Primeiro, troque sua SMSGo-key por um Bearer token — válido por 48 horas — no endpoint GET /v1/auth/token. Depois, dispare o código:

curl -X POST https://api.smsgo.com.br/v1/sms/send/single \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"to": "5511999990000", "message": "Seu codigo: 482913. Expira em 5 minutos."}'

Para acompanhar a entrega em tempo real, configure o webhook de saída: o evento sms.status chega assinado com HMAC-SHA256 no header X-SMSGo-Signature. Há SDKs oficiais para Node.js (@orynlabs/smsgo), Python, Go e PHP — a mecânica de autenticação e envio está detalhada no guia de como enviar SMS via API. Antes de ir para produção, teste sua lógica de expiração e tentativas no validador de OTP gratuito.

Comece a enviar OTP hoje

O modelo da SMSGo é direto: créditos pré-pagos a partir de R$ 0,07 por SMS, sem mensalidade — e os créditos não expiram. Novas contas ganham R$ 10 em créditos no cadastro, sem cartão de crédito: o suficiente para validar o fluxo de OTP de ponta a ponta. Crie sua conta grátis e envie o primeiro código em minutos.

Equipe Editorial SMSGo
Equipe Editorial SMSGoTime de Conteúdo

O time da SMSGo escreve sobre API de SMS, OTP, webhooks e boas práticas de mensageria para empresas brasileiras.