¿Qué es la autenticación de dos factores (2FA)?

2FA o autenticación de dos factores es un mecanismo de autenticación.
Es cuando utilizas un segundo método (además de la contraseña) para confirmar que un usuario es el propietario de dicha cuenta.

Esto mejora enormemente la seguridad.
Es mucho más difícil para los posibles atacantes acceder a la vez a tu contraseña y a tu teléfono/correo electrónico/otro método de autenticación.
Mientras que si la contraseña es la única garantía de seguridad, la cuenta sigue siendo vulnerable: Las contraseñas se filtran fácilmente, y a menudo la filtración ni siquiera es culpa del usuario.

Autenticación de dos factores (2FA)

Tipos de 2FA

La mayoría de las aplicaciones y servicios ofrecen al usuario las siguientes opciones para la autenticación de dos factores:

  • Introducir el código que el usuario recibe por mensaje de texto o correo electrónico después de haber introducido su nombre de usuario y contraseña.
    Ésta es la forma más habitual y sencilla, pero tiene sus inconvenientes: por ejemplo, el mensaje de texto puede ser interceptado a través de una vulnerabilidad en el protocolo por el que se transmiten.
    O puede que no tengas acceso a tu teléfono/tarjeta SIM o simplemente que no tengas cobertura en un momento crítico.
  • Introducir el código que se genera en una aplicación autenticadora independiente.
    Los expertos consideran que este método es más fiable.
    El usuario debe instalar primero una de estas aplicaciones (por ejemplo, Google Authenticator, Twilio Authy, Duo Mobile), y luego seleccionar la opción de doble autenticación a través de la aplicación en el menú del servicio deseado (por ejemplo, Facebook).
    Aparecerá un código QR en la pantalla, que deberás escanear a través de dicha aplicación y utilizarla inmediatamente.
    Este método tiene algunas ventajas claras.
    La más importante es que no requiere ni conexión a Internet ni sincronización con un servidor.
  • Muchos servicios (por ejemplo, Facebook) también generan una serie de códigos de reserva para el usuario, que éste puede utilizar si, por ejemplo, se encuentra sin conexión móvil.
    Para ello, debes imprimir estos códigos con antelación y guardarlos en un lugar seguro.

Hay otros tipos de confirmación de inicio de sesión que se utilizan con menos frecuencia:

  • Llaves de seguridad físicas: este dispositivo tiene la forma de una unidad flash USB (a veces está equipada con interfaces NFC y Bluetooth).
    Este tipo de llave puede utilizarse para entrar en las mismas redes sociales, pero un enfoque tan serio tiene más sentido para almacenar datos muy importantes.
  • Verificación de identidad mediante biometría.
    Este método aún no está muy extendido.

Aplicación técnica

Hay dos algoritmos principales utilizados para la 2FA: Contraseña de un solo uso basada en el tiempo (TOTP) y Contraseña de un solo uso basada en HMAC (HOTP).

HOTP

HOTP es algo más sencillo.
Funciona así: En primer lugar, activas la 2FA escaneando un código QR o pulsando un enlace en una aplicación correspondiente, como Google Authenticator.
Luego, cuando quieras iniciar sesión, generas un código y lo introduces.

Pero, ¿qué ocurre bajo el capó?

El código QR que escaneas codifica un secreto aleatorio y algunos metadatos.
Tanto tu teléfono como el servidor hacen un seguimiento de este secreto y de un valor de contador que empieza en 0.
Cada vez que obtienes un nuevo código, el valor del contador aumenta.
Cuando envías el código al servidor, éste comprueba cuál es el siguiente código.
Si coincide, te registra y actualiza el valor de su contador.
Si generas un código pero no lo envías al servidor, el valor de tu contador acaba siendo superior al recuento del servidor.
Así que cuando el servidor lo compruebe con el siguiente valor del contador, lo encontrará inválido.
Ten en cuenta que el servidor también lo compara con los siguientes 4-5 valores del contador (la ventana de espera).
Si coincide, el servidor salta su valor de contador para que coincida con el tuyo y te conecta.
Los servidores no aceptan códigos con un valor de secuencia inferior al que ya han aceptado.

Ahora bien, ¿cómo se generan los códigos?
La función HMAC-SHA-1 es esencial en este proceso.
Las funciones HMAC se suelen utilizar para verificar la autenticidad de un mensaje firmado.

TOTP

TOTP es muy similar a HOTP, excepto que se basa en el tiempo.
El código se basa en la hora actual, no en un valor de secuencia.

El valor de secuencia se obtiene a partir de la hora Unix actual (número de segundos transcurridos desde el 1 de enero de 1970) y el intervalo entre códigos (normalmente 30 segundos).
Dividiendo el tiempo Unix por el intervalo y redondeándolo a la baja, obtienes el valor de secuencia actual.
Pasándolo a la misma función de generación de códigos que utiliza HOTP, obtienes el código.
Durante el proceso de autenticación, se genera un nuevo código TOTP cada 30 segundos.

Los códigos TOTP se validan de forma ligeramente diferente a los códigos HOTP.
El servidor comprueba si el código proporcionado está dentro de una ventana determinada de la hora actual -normalmente unos minutos- y si está dentro de esa ventana, está permitido.
Para evitar la reutilización del código, el servidor almacena la hora del último código válido y exige que cualquier intento de inicio de sesión posterior utilice un código posterior a esa hora.

TOTP es mejor que HOTP para casi todos los casos de uso.
HOTP se utiliza ahora principalmente para sistemas antiguos que no admiten TOTP y para dispositivos integrados sin reloj.

Veamos ahora cómo se envían los secretos desde el servidor a la aplicación de autenticación.
La forma más sencilla es que el usuario introduzca el código directamente en un campo.
Sin embargo, Google Authenticar también tiene una opción de enlace QR que contiene todos los parámetros OTP necesarios.

Usar 2FA con WordPress

Si gestionas un sitio WordPress para ti o para un cliente, tendrás que asegurarte de que está debidamente protegido de los hackers y otras amenazas potenciales.
Así que tiene sentido tener una capa adicional de protección para tus cuentas de administrador.

El mecanismo de autenticación de dos factores te permite proteger tu cuenta de WordPress mediante un plugin de autenticación dedicado.
Esto te permitirá utilizar tu teléfono móvil para iniciar sesión en tu panel de administración de WP, y aunque tu nombre de usuario y tus contraseñas queden expuestos, nadie podrá piratear tu sitio.
Estos son algunos de los plugins de autenticación de dos factores de WP que puedes utilizar:

  • Autenticador de Google,
  • Autenticación Duo de dos factores,
  • miniOrange Autenticación de dos factores.

Ver los más populares aquí. Ten en cuenta también que es aconsejable generar y almacenar códigos de copia de seguridad por si pierdes el acceso a tu dispositivo.