Toolypet
Voltar ao Blog
Security

Guia Completo de 2FA - Comparacao e Implementacao de TOTP, SMS e Chaves de Hardware

Tipos e niveis de seguranca da autenticacao de dois fatores (2FA). Vantagens e desvantagens de aplicativos TOTP, SMS e chaves de hardware com guia de implementacao para desenvolvedores.

Toolypet Team

Toolypet Team

Development Team

7 min de leitura

Guia Completo de 2FA: O Que, Por Que e Como

Uma vez que sua senha e vazada, acabou.

Ate 2024, mais de 10 bilhoes de senhas foram vazadas. Nao importa quao forte seja sua senha, ela e impotente contra violacoes de banco de dados.

2FA (Autenticacao de Dois Fatores) protege sua conta mesmo se sua senha for comprometida.


O que e 2FA?

2FA (Two-Factor Authentication) e autenticacao usando dois fatores.

Os Tres Fatores de Autenticacao

FatorSignificadoExemplos
ConhecimentoAlgo que voce sabeSenha, PIN
PosseAlgo que voce temTelefone, chave de hardware
InerenciaAlgo que voce eImpressao digital, rosto

2FA combina dois desses fatores.

Senha (conhecimento) + App TOTP (posse) = 2FA
PIN (conhecimento) + Impressao digital (inerencia) = 2FA

Por Que e Necessario

Tipo de AtaqueApenas SenhaCom 2FA
PhishingVioladoAtrasado ou bloqueado
Forca brutaPotencialmente violadoBloqueado
Vazamento de BDVioladoBloqueado
Shoulder surfingVioladoBloqueado

Comparando Tipos de 2FA

1. Autenticacao por SMS

Tentativa de login → Receber codigo de 6 digitos no telefone → Inserir codigo
VantagensDesvantagens
Nao requer app adicionalVulneravel a SIM swapping
Usuarios familiarizadosVulneravel a phishing
Rapido de implementarRequer conexao celular

Classificacao de Seguranca: 2/5 (Baixo)

SMS e vulneravel a ataques de SIM swapping. Se os atacantes enganarem a operadora para clonar seu SIM, podem interceptar mensagens SMS.

2. Apps TOTP (Recomendado)

Senha de Uso Unico Baseada em Tempo
Novo codigo gerado a cada 30 segundos

Exemplos de apps: Google Authenticator, Authy, 1Password

VantagensDesvantagens
Funciona offlineRequer instalacao de app
Imune a SIM swappingRisco de perder chaves de recuperacao
GratisProblemas se perder o dispositivo

Classificacao de Seguranca: 4/5 (Alto)

3. Chaves de Seguranca de Hardware

Autenticacao fisica via USB ou NFC
Exemplos: YubiKey, Google Titan Key
VantagensDesvantagens
Protecao completa contra phishingCusto ($30-70)
Seguranca mais forteRisco de perda fisica
Facil de usarNao suportado por todos os servicos

Classificacao de Seguranca: 5/5 (Maximo)

4. Autenticacao por Push em App

Tentativa de login → Notificacao push no app → Aprovar/Rejeitar
Exemplos: Microsoft Authenticator, Duo
VantagensDesvantagens
ConvenienteRequer internet
Resistente a phishingDependente do app

Classificacao de Seguranca: 4/5 (Alto)


Como o TOTP Funciona

Conceito

TOTP = HMAC-SHA1(chave secreta, tempo) → numero de 6 digitos
  1. Servidor e app compartilham uma chave secreta
  2. O tempo atual e dividido em intervalos de 30 segundos
  3. Hash e gerado a partir de chave secreta + tempo
  4. Numero de 6 digitos e extraido do hash

Como servidor e app usam o mesmo tempo e a mesma chave, geram o mesmo codigo.

O Que Contem o Codigo QR

otpauth://totp/Servico:Conta?secret=SECRETOBASE32&issuer=Servico
otpauth://totp/GitHub:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=GitHub

Ao escanear o codigo QR, o app salva essas informacoes.


Implementacao de TOTP para Desenvolvedores

Exemplo Node.js (otplib)

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

// 1. Gerar segredo (durante registro do usuario)
const secret = authenticator.generateSecret();
// "JBSWY3DPEHPK3PXP"

// 2. Gerar URL do codigo QR
const otpauthUrl = authenticator.keyuri(
  'user@example.com',
  'MyApp',
  secret
);
// Gerar imagem com biblioteca QR

// 3. Verificar codigo (durante login)
const userToken = "123456";  // Entrada do usuario
const isValid = authenticator.verify({ token: userToken, secret });

if (isValid) {
  console.log("Autenticacao bem-sucedida");
} else {
  console.log("Codigo invalido");
}

Exemplo Python (pyotp)

import pyotp

# 1. Gerar segredo
secret = pyotp.random_base32()

# 2. URL do codigo QR
totp = pyotp.TOTP(secret)
url = totp.provisioning_uri(name='user@example.com', issuer_name='MyApp')

# 3. Verificar codigo
user_token = "123456"
is_valid = totp.verify(user_token)

Consideracoes de Seguranca

// Permitir desvio de tempo (30 segundos antes e depois)
authenticator.options = {
  window: 1  // Permitir de -30seg a +30seg
};

// Prevenir reutilizacao
// Armazenar codigos usados e bloquear reutilizacao
const usedCodes = new Set();

function verifyOnce(token, secret) {
  if (usedCodes.has(token)) return false;

  if (authenticator.verify({ token, secret })) {
    usedCodes.add(token);
    // Excluir apos 60 segundos (gerenciamento de memoria)
    setTimeout(() => usedCodes.delete(token), 60000);
    return true;
  }
  return false;
}

Gerenciamento de Codigos de Recuperacao

Se voce perder o 2FA, nao pode acessar sua conta. Sempre forneca codigos de recuperacao.

Geracao

const crypto = require('crypto');

function generateRecoveryCodes(count = 10) {
  const codes = [];
  for (let i = 0; i < count; i++) {
    // 8 caracteres maiusculos + numeros
    const code = crypto.randomBytes(4).toString('hex').toUpperCase();
    codes.push(`${code.slice(0,4)}-${code.slice(4)}`);
  }
  return codes;
}

// ["A3F8-B2C1", "D4E5-F6G7", ...]

Armazenamento

// Fazer hash dos codigos de recuperacao antes de armazenar (bcrypt recomendado)
const bcrypt = require('bcrypt');

async function storeRecoveryCodes(codes) {
  const hashedCodes = await Promise.all(
    codes.map(code => bcrypt.hash(code, 10))
  );
  // Armazenar hashedCodes no BD
}

// Verificar quando usado
async function useRecoveryCode(inputCode, hashedCodes) {
  for (const hashed of hashedCodes) {
    if (await bcrypt.compare(inputCode, hashed)) {
      // Excluir codigo (uso unico)
      return true;
    }
  }
  return false;
}

Dicas de Experiencia do Usuario (UX)

1. Incentivar a Configuracao do 2FA

Apos primeiro login: "Configure o 2FA para proteger sua conta"
Antes de acoes sensiveis: "2FA e necessario para esta acao"

2. Guia Passo a Passo

Passo 1: Instalar app de autenticacao (fornecer link do Google Authenticator)
Passo 2: Escanear codigo QR
Passo 3: Confirmar com codigo de 6 digitos
Passo 4: Salvar codigos de recuperacao (enfatizar!)

3. Enfatizar Codigos de Recuperacao

Aviso: Guarde estes codigos em um local seguro.
A recuperacao da conta sera impossivel se forem perdidos.

[ Baixar Codigos ] [ Copiar Codigos ]

Perguntas Frequentes

P: Devo evitar completamente o 2FA por SMS?

R: E mais fraco que TOTP, mas muito melhor que nada. Use TOTP ou chaves de hardware quando possivel, mas se um servico so suportar SMS, definitivamente ative-o.

P: E se eu perder meu telefone com o app 2FA?

R: Faca login com um codigo de recuperacao e reconfigure o 2FA. Por isso voce deve guardar os codigos de recuperacao separadamente e com seguranca.

P: Posso registrar 2FA de backup?

R: Sim, registre multiplos dispositivos na mesma conta (se o servico suportar), ou escaneie o codigo QR em multiplos dispositivos simultaneamente durante a configuracao inicial.


Resumo

Tipo de 2FASegurancaConvenienciaRecomendacao
SMS2/55/5Ultimo recurso
App TOTP4/54/5Geralmente recomendado
Chave de Hardware5/53/5Alta seguranca
Push em App4/55/5Uso empresarial

Use pelo menos TOTP. Senhas sozinhas nao sao suficientes.


Ferramentas Relacionadas

FerramentaProposito
Gerador TOTPTestar codigos 2FA
Gerador de SenhasSenhas fortes
Gerador de HashTestes de hashing
2FAMFATOTPautenticacaosegurancadesenvolvimento

Sobre o Autor

Toolypet Team

Toolypet Team

Development Team

The Toolypet Team creates free, privacy-focused web tools for developers and designers. All tools run entirely in your browser with no data sent to servers.

Web DevelopmentCSS ToolsDeveloper ToolsSEOSecurity