Skip to main contentSkip to footer
Guías de complementos

Autenticación de dos factores en WordPress con aplicación, Passkey o YubiKey

Updated Patrick Schlesinger
ReportedIP Hive plugin guide cover — four-method WordPress two-factor authentication

La autenticación de dos factores en WordPress suele ofrecerse como complemento o como parte de un plan premium. ReportedIP Hive incluye de serie cuatro métodos de autenticación de dos factores —Authenticator App, Passkey o Hardware Security Key, código por correo electrónico y SMS—, siendo los métodos TOTP, Passkey y código por correo electrónico gratuitos en todos los planes.

Desde la versión 2.1.36 de Hive (5 de agosto de 2026), se admite oficialmente el uso de una Hardware Security Key, como una YubiKey, que funciona en las tres superficies de autenticación: la página intersticial de wp-login, la tienda de WooCommerce y la página de recuperación de contraseña.

Esta guía aborda los cuatro métodos: cómo registrar una YubiKey paso a paso, cómo la escalera de Rate Limiting impide la adivinación de códigos y la brecha en el proceso de restablecimiento que la mayoría de los complementos de 2FA dejan sin cubrir.

¿Qué es ReportedIP Hive?

ReportedIP Hive es un completo plugin de seguridad para WordPress: 16 Attack Sensors, el conjunto completo de autenticación de dos factores (2FA) que se describe aquí, bloqueo progresivo y Threat Intelligence de la comunidad con participación voluntaria. El núcleo de detección e identificación está bajo licencia GPL-2.0 y funciona sin conexión. El conjunto completo de funciones de ReportedIP Hive se encuentra en la página del producto.

Los cuatro métodos del núcleo

  • Authenticator App (TOTP): códigos RFC 6238, compatible con Google Authenticator, Authy, 1Password y Microsoft Authenticator. Las claves secretas se cifran en reposo. Gratuita en todos los planes.
  • Passkey y clave de seguridad (WebAuthn / FIDO2): Face ID, Touch ID, Windows Hello y claves de hardware como la serie YubiKey 5. Resistente al Phishing, con una implementación propia y sin dependencia de Composer. Se ofrece una clave gratuita por cuenta en todos los planes.
  • Código por correo electrónico: un código de 6 dígitos válido durante 10 minutos, con un límite de 3 envíos cada 15 minutos, un tiempo de espera de 60 segundos antes de poder reenviarlo y 5 intentos de verificación por código. La pantalla de Login ya no lo envía automáticamente; el usuario debe pulsar primero «Enviar código». Gratuito en todos los planes.
  • Código SMS: se envía a través del relay gestionado de reportedip.com en los planes Professional y superiores. Los números se validan según la norma E.164 y se envían a todo el mundo; el servidor de retransmisión responde con un country_not_supported para los pocos destinos a los que no presta servicio. Los números de teléfono se cifran en reposo.

Los cuatro métodos se apoyan en: 10 Recovery Codes de un solo uso (con hash en reposo, con una advertencia de «quedan pocos códigos» cuando quedan 3), Trusted Devices con una caducidad configurable (por defecto, 30 días) y aplicación basada en roles con un periodo de gracia (por defecto, 7 días) y un contador de omisiones. Los usuarios eligen qué método solicita primero el desafío de Login con la opción «Establecer como predeterminado» en cualquier método activo.

Cómo configurar una Hardware Security Key

Una clave de hardware es el segundo factor de autenticación que no puede ser objeto de Phishing, ni retransmitido, ni leído en una pantalla: WebAuthn vincula la credencial al origen del sitio, por lo que la clave se niega a autenticar un dominio similar. Hive 2.1.36 hizo oficial esa vía en hardware real, en lugar de limitarse al autenticador virtual de un navegador.

¿Qué llaves funcionan?

  • Serie YubiKey 5: USB-A, USB-C y Lightning, incluidos los modelos con NFC que se acercan al móvil.
  • Clave de seguridad de Yubico y otros autenticadores FIDO2/CTAP2.
  • Passkeys de la plataforma: Face ID, Touch ID y Windows Hello, que se configuran siguiendo el mismo procedimiento.
  • No compatible: llaves antiguas que solo admiten U2F y que utilizan el protocolo CTAP1, pero no versiones más recientes.

Ed25519 (EdDSA, algoritmo COSE -8) figura en la lista de algoritmos disponibles, pero solo si libsodium está presente en el lado del servidor para verificarlo; una clave registrada hoy sería un lastre mañana si el servidor no pudiera comprobar sus firmas. Esto es importante porque Ed25519 es el algoritmo preferido por el firmware 5.2.3 y posteriores de YubiKey. ES256 (-7) sobre P-256 y RS256 (-257) siguen siendo las opciones de reserva, y la curva se comprueba explícitamente en la ruta COSE EC2.

El verificador está desarrollado internamente: se trata de una implementación autónoma de WebAuthn Nivel 2 con su propio decodificador CBOR y conversión de COSE a PEM, que verifica las firmas mediante OpenSSL y, en el caso de Ed25519, mediante libsodium. La única dependencia de Composer en tiempo de ejecución del complemento es su verificador de actualizaciones, por lo que el código que gestiona tu Login se encuentra en el código fuente que puedes consultar en GitHub, en lugar de en una biblioteca de terceros.

El registro de la llave consta de cuatro pasos

  1. Sirve el sitio a través de HTTPS. WebAuthn solo funciona en un contexto seguro, por lo que un sitio de pruebas con HTTP sin cifrar no mostrará el cuadro de diálogo en absoluto.
  2. Abre tu perfil de WordPress en wp-admin y busca la sección de autenticación de dos factores: el gestor de claves de seguridad se encuentra ahí, no en el Dashboard. El Setup Wizard sigue el mismo proceso durante la configuración inicial.
  3. Elige «Clave de seguridad (USB / NFC)» en lugar de «Este dispositivo». La primera opción envía authenticatorAttachment: cross-platform, mientras que la segunda envía platform, de modo que Chrome y Edge abran directamente el cuadro de diálogo correcto en lugar de ofrecer primero Windows Hello.
  4. Asigna un nombre a la clave —«YubiKey office», «clave de respaldo en la caja fuerte», hasta 64 caracteres— y, a continuación, tócala o acércala al teléfono. El plazo de la ceremonia es de 120 segundos, en lugar de los 60 segundos predeterminados por WebAuthn, lo que da tiempo a realizar un contacto NFC.

Una clave nueva no solicitará un PIN FIDO2. El registro solicita userVerification: discouraged, de acuerdo con las directrices para desarrolladores de Yubico para una clave utilizada como segundo factor de autenticación junto con una contraseña; el valor también se aplica en el lado del servidor y puede aumentarse a preferred o required mediante el filtro reportedip_hive_webauthn_user_verification. El registro también solicita residentKey: discouraged, por lo que registrar una YubiKey no agota una de sus limitadas ranuras de credenciales detectables —el flujo de Login siempre proporciona allowCredentials, por lo que una credencial detectable no aportaría nada en este caso. Las credenciales creadas antes de ese cambio siguen funcionando.

El navegador rechaza el registro de la misma clave dos veces a través de excludeCredentials, y el Endpoint de opciones tiene un límite de 10 solicitudes por usuario cada 10 minutos.

Dónde funciona la llave tras su registro

Las tres superficies de autenticación muestran el mismo panel compartido de WebAuthn y pueden completar un proceso completo: la pantalla intersticial de wp-login, la superficie de autenticación de la tienda de WooCommerce (Professional) y la pantalla de restablecimiento de contraseña. Las dos últimas presentaban fallos antes de la versión 2.1.36: la tienda mostraba una pestaña de Passkey cuyo panel no existía, y la página de restablecimiento ofrecía WebAuthn pero no cargaba ningún script de autenticación.

La detección de clones está activada por defecto

Cada assertion lleva un contador de firmas. Si el contador no avanza, Hive rechaza el inicio de sesión, registra un evento 2fa_webauthn_counter_regression de gravedad alta y envía un correo electrónico al titular de la cuenta: un contador que se queda estancado es indicio de que las credenciales se han copiado fuera de su dispositivo. Las Passkeys de la plataforma sin contador, que indican legítimamente el valor cero, siguen funcionando. Ese correo de advertencia se envía a todos los planes, no solo al plan Business.

A su alrededor se encuentran los controles habituales de la ceremonia: los retos consisten en 32 bytes aleatorios, de un solo uso y válidos durante 300 segundos; las assertions y los registros sin el indicador de presencia del usuario se rechazan, tal y como exige la sección 7.2 de WebAuthn; y los Endpoints de Login de WebAuthn están sujetos a la misma escala de bloqueo por IP que el formulario de código, por lo que no pueden utilizarse para eludir el Rate Limit.

Una clave es gratuita; una clave de respaldo es una función de Business.

En todos los planes se incluye de forma gratuita una clave de seguridad o Passkey por cuenta, lo que incluye la inscripción, el Login en las tres plataformas, el cambio de nombre, la eliminación y el correo electrónico de aviso sobre claves clonadas. El plan Business añade llaves de seguridad avanzadas: varias llaves por cuenta, de modo que una pueda guardarse en una caja fuerte como copia de seguridad, detección automática de modelos y correos electrónicos sobre los eventos del ciclo de vida de las llaves. La detección de modelos requiere una certificación directa: lee el AAGUID y lo compara con un registro integrado de 90 modelos de autenticadores extraídos del Servicio de Metadatos de la Alianza FIDO, de modo que el gestor de claves etiqueta una entrada como «YubiKey Serie 5 con NFC» o «Windows Hello» debajo de su nombre.

Esa etiqueta es meramente informativa y funciona en modo «fallo abierto»: una certificación que falte o que no se pueda verificar nunca bloquea un registro, y no se valida ninguna cadena de CA de certificación. En el caso de un segundo factor registrado tras un Login correcto, la certificación no aporta ninguna garantía significativa; su función es distinguir dos claves en una lista. Los registros del plan Free solicitan attestation: 'none', por lo que el navegador no muestra ningún mensaje de consentimiento para una función que el plan no incluye.

Si sigues en el plan Free con una sola clave, tus Recovery Codes son tu copia de seguridad. Imprímelos o utiliza una Authenticator App como segundo método. Hive no te permitirá eliminar tu última clave mientras WebAuthn sea tu único método activo y la autenticación de dos factores (2FA) sea obligatoria para tu rol.

La escalera de Rate Limiting frena la adivinación de códigos

Los códigos de autenticación de dos factores (2FA) incorrectos siguen la misma escala de etapas que los intentos fallidos de Login: 3 códigos incorrectos → 30 s, 5 → 5 min, 10 → 30 min, 15 → 1 h. El decimoquinto intento fallido a nivel de IP hace que la IP pase a un bloqueo progresivo real, por lo que quien utilice un ataque de fuerza bruta ya no podrá simplemente esperar a que se agote el tiempo de espera y volver a intentarlo cada hora.

La función de restablecimiento de contraseña que la mayoría de los complementos pasan por alto

El proceso de «contraseña olvidada» de WordPress es un clásico ejemplo de cómo eludir la autenticación de dos factores (2FA): si tu único segundo factor es el correo electrónico, cualquier persona con acceso a tu buzón recibe tanto el enlace de restablecimiento como el código a través del mismo canal. El proceso de restablecimiento de Hive exige un segundo factor que no sea el correo electrónico —una Authenticator App, un SMS, una llave de seguridad o un código de recuperación— antes de aceptar una nueva contraseña. El correo electrónico queda excluido por diseño. Este comportamiento se ajusta a lo establecido en la norma NIST SP 800-63B, apartado 6.1.2.3, y en la guía OWASP ASVS V6.3.

La puerta de acceso comprueba la viabilidad de cada método válido antes de mostrarlo: si un secreto TOTP no se puede descifrar, falta un número de teléfono o no hay ningún proveedor de WebAuthn disponible, ese método se elimina del selector. Si ninguno es válido, el proceso se detiene de forma definitiva con un correo al administrador en el que se detalla el problema, en lugar de dejar al usuario atrapado en un bucle de «código no válido». Las cuentas cuyo único factor de autenticación sea el correo electrónico y que no dispongan de Recovery Codes quedan excluidas del proceso de restablecimiento con una alerta al administrador; un administrador puede resolverlo con wp user reset-password <id> --skip-email. Durante un restablecimiento con clave de seguridad, el navegador se vincula a la identidad que se va a restablecer mediante un token de corta duración generado por el servidor, en lugar de un parámetro de URL.

Cómo activarlo

En el paso de 2FA del Setup Wizard (o en Ajustes → Autenticación de dos factores), activa los métodos que quieras ofrecer, selecciona qué roles deben registrarse y configura el periodo de gracia y el contador de omisiones. Las instalaciones nuevas permiten los cuatro métodos de forma predeterminada, y el SMS estará disponible una vez que se conecte un plan con capacidad de retransmisión.

En el caso de flujos sin interfaz o personalizados, el espacio de nombres REST reportedip-hive/v1 expone /2fa/challenge, /2fa/verify y /2fa/methods para los métodos basados en código. WebAuthn está deliberadamente ausente allí: un proceso del navegador necesita la interfaz admin-ajax en la que ya se ejecuta, y duplicarla en REST significaría tener que mantener sincronizadas dos rutas de código en un flujo crítico para la seguridad.

Los administradores de Shell pueden ejecutar wp reportedip 2fa reset <user> para desbloquear una cuenta bloqueada. wp reportedip 2fa enable <user> --method=webauthn se niega a marcar el método para alguien que no tenga ninguna clave registrada —lo que le bloquearía el acceso— a menos que se pase --force. Las claves solo se registran en el navegador; no existe ninguna opción de la interfaz de línea de comandos para registrarlas. En un Multisite con subdominios, los filtros reportedip_hive_webauthn_rp_id y reportedip_hive_webauthn_allowed_origins establecen el ID de la parte de confianza y los orígenes aceptados.

Preguntas sobre las claves de hardware

¿Sigo necesitando una Authenticator App si utilizo un YubiKey?

No, una llave de seguridad por sí sola es suficiente para todas las superficies de desafío y la puerta de restablecimiento. De todos modos, es recomendable disponer de un segundo método o de tus Recovery Codes, ya que una sola llave supone un único punto de fallo.

¿Qué ocurre si se pierde la llave?

Inicia sesión con uno de los 10 Recovery Codes o con una segunda clave si tienes la versión Business. Un administrador también puede borrar el registro con wp reportedip 2fa reset <user>. A continuación, elimina la clave perdida del gestor de claves del perfil.

¿Funciona una llave de hardware en un teléfono?

Sí, basta con acercar una llave compatible con NFC a la parte trasera del móvil; el plazo de 120 segundos está pensado precisamente para eso. Las llaves USB-C funcionan en el puerto del móvil, y las Passkeys de plataforma (Face ID, Touch ID) son la alternativa si prefieres no llevar una llave encima.

¿Puedo iniciar sesión solo con la clave, sin contraseña?

No. En Hive, la clave es estrictamente un segundo factor: primero se comprueba la contraseña y, a continuación, la clave. Por eso, además, durante el registro no se solicita una credencial que pueda ser descubierta. El inicio de sesión sin contraseña es un modelo de seguridad diferente, y dar a entender que un segundo factor lo es también sería engañoso.

¿Por qué mi YubiKey ha introducido letras aleatorias en un campo?

Al tocar un YubiKey fuera de una ceremonia activa, este introduce su OTP de Yubico como si se tratara de un teclado. Hive reconoce esa cadena, borra el campo y explica lo que ha ocurrido, en lugar de mostrar un error confuso.

Guías relacionadas

Consulta la documentación sobre autenticación para obtener más detalles sobre la configuración, echa un vistazo a las guías completas del complemento ReportedIP Hive o lee el estándar WebAuthn en el W3C.

Explora ReportedIP Hive →

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Rellena este campo
Rellena este campo
Por favor, introduce una dirección de correo electrónico válida.
Tienes que aprobar los términos para continuar