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.
- 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.
- 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.
- 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.