Toolypet
Volver al Blog
Security

Guia Completa de 2FA - Comparacion e Implementacion de TOTP, SMS y Llaves de Hardware

Tipos y niveles de seguridad de la autenticacion de dos factores (2FA). Ventajas y desventajas de aplicaciones TOTP, SMS y llaves de hardware con guia de implementacion para desarrolladores.

Toolypet Team

Toolypet Team

Development Team

7 min de lectura

Guia Completa de 2FA: Que, Por Que y Como

Una vez que tu contrasena se filtra, se acabo.

Hasta 2024, se han filtrado mas de 10 mil millones de contrasenas. No importa cuan fuerte sea tu contrasena, es impotente ante las brechas de bases de datos.

2FA (Autenticacion de Dos Factores) protege tu cuenta incluso si tu contrasena esta comprometida.


Que es 2FA?

2FA (Two-Factor Authentication) es la autenticacion usando dos factores.

Los Tres Factores de Autenticacion

FactorSignificadoEjemplos
ConocimientoAlgo que sabesContrasena, PIN
PosesionAlgo que tienesTelefono, llave de hardware
InherenciaAlgo que eresHuella digital, rostro

2FA combina dos de estos factores.

Contrasena (conocimiento) + App TOTP (posesion) = 2FA
PIN (conocimiento) + Huella digital (inherencia) = 2FA

Por Que es Necesario

Tipo de AtaqueSolo ContrasenaCon 2FA
PhishingVioladoRetrasado o bloqueado
Fuerza brutaPotencialmente violadoBloqueado
Filtracion de BDVioladoBloqueado
Shoulder surfingVioladoBloqueado

Comparando Tipos de 2FA

1. Autenticacion por SMS

Intento de inicio de sesion → Recibir codigo de 6 digitos en telefono → Ingresar codigo
VentajasDesventajas
No requiere app adicionalVulnerable a SIM swapping
Usuarios familiarizadosVulnerable a phishing
Rapido de implementarRequiere conexion celular

Calificacion de Seguridad: 2/5 (Bajo)

SMS es vulnerable a ataques de SIM swapping. Si los atacantes enganan al operador para clonar tu SIM, pueden interceptar mensajes SMS.

2. Apps TOTP (Recomendado)

Contrasena de Un Solo Uso Basada en Tiempo
Nuevo codigo generado cada 30 segundos

Ejemplos de apps: Google Authenticator, Authy, 1Password

VentajasDesventajas
Funciona sin conexionRequiere instalar app
Inmune a SIM swappingRiesgo de perder claves de recuperacion
GratisProblemas si pierdes el dispositivo

Calificacion de Seguridad: 4/5 (Alto)

3. Llaves de Seguridad de Hardware

Autenticacion fisica via USB o NFC
Ejemplos: YubiKey, Google Titan Key
VentajasDesventajas
Proteccion completa contra phishingCosto ($30-70)
Seguridad mas fuerteRiesgo de perdida fisica
Facil de usarNo soportado por todos los servicios

Calificacion de Seguridad: 5/5 (Maximo)

4. Autenticacion por Push en App

Intento de inicio de sesion → Notificacion push a la app → Aprobar/Rechazar
Ejemplos: Microsoft Authenticator, Duo
VentajasDesventajas
ConvenienteRequiere internet
Resistente a phishingDependiente de la app

Calificacion de Seguridad: 4/5 (Alto)


Como Funciona TOTP

Concepto

TOTP = HMAC-SHA1(clave secreta, tiempo) → numero de 6 digitos
  1. Servidor y app comparten una clave secreta
  2. El tiempo actual se divide en intervalos de 30 segundos
  3. Se genera hash a partir de clave secreta + tiempo
  4. Se extrae numero de 6 digitos del hash

Como servidor y app usan el mismo tiempo y la misma clave, generan el mismo codigo.

Que Contiene el Codigo QR

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

Al escanear el codigo QR, la app guarda esta informacion.


Implementacion de TOTP para Desarrolladores

Ejemplo Node.js (otplib)

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

// 1. Generar secreto (durante registro de usuario)
const secret = authenticator.generateSecret();
// "JBSWY3DPEHPK3PXP"

// 2. Generar URL del codigo QR
const otpauthUrl = authenticator.keyuri(
  'user@example.com',
  'MyApp',
  secret
);
// Generar imagen con libreria QR

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

if (isValid) {
  console.log("Autenticacion exitosa");
} else {
  console.log("Codigo invalido");
}

Ejemplo Python (pyotp)

import pyotp

# 1. Generar secreto
secret = pyotp.random_base32()

# 2. URL del 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)

Consideraciones de Seguridad

// Permitir desviacion de tiempo (30 segundos antes y despues)
authenticator.options = {
  window: 1  // Permitir de -30seg a +30seg
};

// Prevenir reutilizacion
// Almacenar codigos usados y bloquear reutilizacion
const usedCodes = new Set();

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

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

Gestion de Codigos de Recuperacion

Si pierdes 2FA, no puedes acceder a tu cuenta. Siempre proporciona codigos de recuperacion.

Generacion

const crypto = require('crypto');

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

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

Almacenamiento

// Hashear codigos de recuperacion antes de almacenar (bcrypt recomendado)
const bcrypt = require('bcrypt');

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

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

Consejos de Experiencia de Usuario (UX)

1. Fomentar la Configuracion de 2FA

Despues del primer inicio de sesion: "Configura 2FA para asegurar tu cuenta"
Antes de acciones sensibles: "Se requiere 2FA para esta accion"

2. Guia Paso a Paso

Paso 1: Instalar app de autenticacion (proporcionar enlace a Google Authenticator)
Paso 2: Escanear codigo QR
Paso 3: Confirmar con codigo de 6 digitos
Paso 4: Guardar codigos de recuperacion (enfatizar!)

3. Enfatizar Codigos de Recuperacion

Advertencia: Guarda estos codigos en un lugar seguro.
La recuperacion de cuenta sera imposible si se pierden.

[ Descargar Codigos ] [ Copiar Codigos ]

Preguntas Frecuentes

P: Debo evitar completamente el 2FA por SMS?

R: Es mas debil que TOTP, pero mucho mejor que nada. Usa TOTP o llaves de hardware cuando sea posible, pero si un servicio solo soporta SMS, definitivamente activalo.

P: Que pasa si pierdo mi telefono con la app 2FA?

R: Inicia sesion con un codigo de recuperacion y restablece 2FA. Por eso debes guardar los codigos de recuperacion de forma separada y segura.

P: Puedo registrar 2FA de respaldo?

R: Si, registra multiples dispositivos en la misma cuenta (si el servicio lo soporta), o escanea el codigo QR en multiples dispositivos simultaneamente durante la configuracion inicial.


Resumen

Tipo de 2FASeguridadConvenienciaRecomendacion
SMS2/55/5Ultimo recurso
App TOTP4/54/5Generalmente recomendado
Llave de Hardware5/53/5Alta seguridad
Push en App4/55/5Uso empresarial

Usa al menos TOTP. Las contrasenas solas no son suficientes.


Herramientas Relacionadas

HerramientaProposito
Generador TOTPProbar codigos 2FA
Generador de ContrasenasContrasenas fuertes
Generador de HashPruebas de hashing
2FAMFATOTPautenticacionseguridaddesarrollo

Sobre el 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