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
Development Team
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
| Fator | Significado | Exemplos |
|---|---|---|
| Conhecimento | Algo que voce sabe | Senha, PIN |
| Posse | Algo que voce tem | Telefone, chave de hardware |
| Inerencia | Algo que voce e | Impressao 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 Ataque | Apenas Senha | Com 2FA |
|---|---|---|
| Phishing | Violado | Atrasado ou bloqueado |
| Forca bruta | Potencialmente violado | Bloqueado |
| Vazamento de BD | Violado | Bloqueado |
| Shoulder surfing | Violado | Bloqueado |
Comparando Tipos de 2FA
1. Autenticacao por SMS
Tentativa de login → Receber codigo de 6 digitos no telefone → Inserir codigo
| Vantagens | Desvantagens |
|---|---|
| Nao requer app adicional | Vulneravel a SIM swapping |
| Usuarios familiarizados | Vulneravel a phishing |
| Rapido de implementar | Requer 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
| Vantagens | Desvantagens |
|---|---|
| Funciona offline | Requer instalacao de app |
| Imune a SIM swapping | Risco de perder chaves de recuperacao |
| Gratis | Problemas 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
| Vantagens | Desvantagens |
|---|---|
| Protecao completa contra phishing | Custo ($30-70) |
| Seguranca mais forte | Risco de perda fisica |
| Facil de usar | Nao 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
| Vantagens | Desvantagens |
|---|---|
| Conveniente | Requer internet |
| Resistente a phishing | Dependente do app |
Classificacao de Seguranca: 4/5 (Alto)
Como o TOTP Funciona
Conceito
TOTP = HMAC-SHA1(chave secreta, tempo) → numero de 6 digitos
- Servidor e app compartilham uma chave secreta
- O tempo atual e dividido em intervalos de 30 segundos
- Hash e gerado a partir de chave secreta + tempo
- 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 2FA | Seguranca | Conveniencia | Recomendacao |
|---|---|---|---|
| SMS | 2/5 | 5/5 | Ultimo recurso |
| App TOTP | 4/5 | 4/5 | Geralmente recomendado |
| Chave de Hardware | 5/5 | 3/5 | Alta seguranca |
| Push em App | 4/5 | 5/5 | Uso empresarial |
Use pelo menos TOTP. Senhas sozinhas nao sao suficientes.
Ferramentas Relacionadas
| Ferramenta | Proposito |
|---|---|
| Gerador TOTP | Testar codigos 2FA |
| Gerador de Senhas | Senhas fortes |
| Gerador de Hash | Testes de hashing |
Sobre o Autor
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.