Autenticação de Dois Fatores e Segurança de Senhas

Security2026-09-16TryQuickToolBox

Você criou uma aplicação web e os usuários estão se cadastrando. Mas as contas deles estão realmente seguras? Senhas fracas e a ausência de autenticação de dois fatores (2FA) estão entre as formas mais fáceis de invasores acessarem contas. Neste guia, vamos abordar práticas recomendadas, práticas e atemporais, para segurança de senhas e 2FA que você pode implementar hoje mesmo.

Por que a Segurança de Senhas Ainda Importa

Apesar de anos de alertas, as senhas continuam sendo o principal método de autenticação para a maioria das aplicações web. Os invasores sabem disso e atacam senhas por meio de phishing, credential stuffing e força bruta. Uma única senha comprometida pode levar ao roubo de conta, roubo de dados e danos à reputação.

Políticas de senhas fortes e 2FA elevam significativamente a barra para os invasores. Vejamos como fazer ambos corretamente.

Armazenamento de Senhas: Hashing Feito Corretamente

Nunca armazene senhas em texto puro. Sempre faça o hash delas com um algoritmo forte e lento, projetado para senhas. Hashes rápidos como SHA-256 não são adequados porque permitem ataques de força bruta rápidos.

Algoritmos recomendados:

Exemplo usando bcrypt no Node.js:

const bcrypt = require('bcrypt');
const saltRounds = 12;

async function hashPassword(password) {
  return await bcrypt.hash(password, saltRounds);
}

async function verifyPassword(password, hash) {
  return await bcrypt.compare(password, hash);
}

Sempre use um salt único por senha (a maioria das bibliotecas faz isso automaticamente). Ajuste o fator de custo para que o hashing leve ~100-500ms no seu servidor.

Políticas de Senhas Que Realmente Ajudam

Esqueça regras complexas como "deve incluir um símbolo e um número". A orientação moderna (NIST SP 800-63B) recomenda:

Implemente um medidor de força simples que dê feedback sem bloquear senhas legítimas.

Métodos de Autenticação de Dois Fatores (2FA)

O 2FA adiciona um segundo fator: algo que você tem (telefone, chave de hardware) ou algo que você é (biometria). Aqui estão os métodos comuns, classificados por segurança:

MétodoSegurançaUsabilidade
Chaves de segurança de hardware (WebAuthn/FIDO2)AltaMédia
Aplicativos autenticadores (TOTP)AltaAlta
Notificações pushMédiaAlta
Códigos por SMSBaixaAlta

O SMS é vulnerável a SIM swapping e interceptação. Prefira TOTP ou WebAuthn quando possível.

Implementando 2FA Baseado em TOTP

TOTP (Time-based One-Time Password) é um ótimo equilíbrio entre segurança e usabilidade. Aqui está um fluxo de alto nível:

  1. Gere uma chave secreta para o usuário (ex.: 32 bytes aleatórios, codificados em base32).
  2. Crie uma URI otpauth:// e exiba um QR code para o usuário escanear com um aplicativo autenticador.
  3. Verifique se o usuário consegue gerar um código válido antes de ativar o 2FA.
  4. Armazene o segredo com segurança (criptografado em repouso).
  5. Forneça códigos de backup para recuperação de conta.

Durante o login, após verificar a senha, solicite o código TOTP. Verifique-o com uma biblioteca como otplib ou speakeasy.

const { authenticator } = require('otplib');

// Generate secret
const secret = authenticator.generateSecret();

// Verify token
const isValid = authenticator.verify({ token: userToken, secret });

Permita uma pequena janela de tempo (ex.: ±1 intervalo) para compensar o desvio de relógio.

WebAuthn: O Futuro da Autenticação

WebAuthn (parte do FIDO2) permite autenticação sem senha e como segundo fator usando chaves de hardware ou autenticadores de plataforma (Touch ID, Windows Hello). É resistente a phishing porque a credencial é vinculada à origem.

Implementar WebAuthn requer:

Bibliotecas como SimpleWebAuthn facilitam isso. Embora mais complexo que o TOTP, o WebAuthn oferece a proteção mais forte.

Rate Limiting e Bloqueio de Conta

Mesmo com 2FA, você deve prevenir ataques de força bruta em senhas. Implemente:

Cuidado para não bloquear permanentemente usuários legítimos; use bloqueios temporários e notifique o usuário.

Redefinição de Senha Segura

Fluxos de redefinição de senha são um vetor de ataque comum. Siga estas regras:

Educando Usuários Sem Culpá-los

Segurança é uma responsabilidade compartilhada. Forneça orientações claras:

Dicas no aplicativo e uma página dedicada à segurança podem ajudar.

FAQ

O 2FA por SMS é melhor do que nenhum 2FA?

Sim, o 2FA por SMS é melhor do que nada, mas é vulnerável a SIM swapping e interceptação. Prefira TOTP ou WebAuthn para maior segurança.

Com que frequência devo rotacionar algoritmos de hashing de senha?

Você não precisa rotacionar, a menos que uma vulnerabilidade seja encontrada. No entanto, você pode refazer o hash das senhas em logins bem-sucedidos quando atualizar parâmetros (ex.: aumentar o custo do bcrypt).

Posso usar 2FA com OAuth ou login social?

Sim, mas o 2FA normalmente é gerenciado pelo provedor de identidade. Se você usa login social, garanta que seu próprio processo de recuperação de conta seja seguro.

Pronto para melhorar a segurança da sua aplicação? Comece implementando hashing de senhas forte e 2FA baseado em TOTP hoje mesmo. Para mais ferramentas de desenvolvedor, confira nosso JSON Formatter para depurar respostas de API rapidamente.