Estándares · FIDO CTAP 2.2 híbrido (passkey QR)

¿Debo escanear este QR de inicio de sesión con passkey?

Solo si TÚ acabas de iniciar un inicio de sesión con passkey en el dispositivo que muestra el QR. Si alguien más generó el QR, un desconocido, un agente de «soporte técnico», una llamada de asistencia, escanearlo desde tu teléfono les da acceso a tu cuenta, no a ti. El estándar abierto del protocolo (FIDO CTAP 2.2 híbrido) es sólido; la amenaza es la ingeniería social en torno a quién presionó primero el botón «Iniciar sesión con passkey».

Verificar un QR de passkey → Todos los estándares →

Cómo funciona el inicio de sesión con passkey entre dispositivos

Una passkey es una credencial, un par de claves pública/privada, vinculada a uno de tus dispositivos. Si registraste una passkey para example.com en tu teléfono, solo tu teléfono puede firmar el desafío de inicio de sesión para example.com.

Eso funciona bien cuando inicias sesión EN tu teléfono. Pero ¿qué ocurre cuando inicias sesión en un portátil que no tiene passkey para ese sitio? Puedes:

  1. Escribir tu contraseña, lo que anula por completo el propósito de las passkeys.
  2. Registrar una nueva passkey en el portátil, válido, pero solo si confías en ese portátil a largo plazo.
  3. Usar la passkey del teléfono mediante transporte entre dispositivos: el portátil muestra un QR, tu teléfono lo escanea, el teléfono firma el desafío, el navegador del portátil recibe el resultado y la sesión queda iniciada.

La opción 3 es lo que define FIDO CTAP 2.2 «híbrido». El QR es el arranque: contiene información suficiente para que tu teléfono localice el portátil mediante Bluetooth Low Energy, establezca un túnel seguro de un solo uso y actúe como intermediario en la ceremonia WebAuthn.

Qué contiene el QR

El URI tiene este aspecto:

FIDO:/0123456789012345678901234567890123456789...

Los dígitos decimales son una codificación en base10 de un mapa CBOR. Tras decodificar en base10 y analizar el CBOR, el mapa contiene claves enteras:

Clave 0, clave pública del par

Bytes de clave pública X9.62 sin comprimir (33 bytes para P-256). El teléfono los usa para establecer el túnel cifrado.

Clave 1, secreto del QR / nonce del túnel

10 bytes de datos aleatorios. Identifica este QR específico; el anuncio BLE difunde un hash de estos datos para que el teléfono encuentre el portátil correcto.

Clave 2, indicación de operación

0 = make-credential (registro de una nueva passkey), 1 = get-assertion (inicio de sesión), 2 = discoverable-credential.

Clave 3, dominio del servidor de túnel

El host HTTPS que actúa como intermediario del túnel entre los dos dispositivos cuando BLE directo no está disponible (por ejemplo, a través de NAT). Generalmente es un servidor operado por el proveedor, como cable.ua5v.com (Google) o cable.auth.com (Apple/MS).

Clave 4, marca de tiempo

Segundos desde el epoch en que se generó el QR. Se usa para protección contra repetición: el teléfono rechaza un QR con más de unos pocos minutos de antigüedad.

Clave 5, indicador asistido por el estado

Booleano. Indica si el portátil solicita que el teléfono participe en el mantenimiento pasivo de estado (principalmente relevante para flujos de enumeración de credenciales).

El modelo de amenaza: ¿quién presionó "Iniciar sesión con passkey" primero?

El protocolo es criptográficamente sólido. La verificación de proximidad Bluetooth es real y limita el ataque a quien esté físicamente cerca de ti. Entonces, ¿cómo puede salir mal esto?

Mediante ingeniería social en la iniciación. El atacante inicia un inicio de sesión con passkey en TU cuenta desde SU portátil. Su portátil muestra un QR FIDO. De alguna manera logra que ese QR llegue ante tus ojos:

Si escaneas, tu teléfono envía tu firma de passkey directamente al navegador del portátil del atacante. El sitio donde tienes el passkey cree que iniciaste sesión tú. El atacante ahora tiene acceso a tu cuenta.

Ten en cuenta que la verificación de proximidad no ayuda, el atacante está físicamente presente. El contenido del QR no ayuda, es criptográficamente válido. El destino de inicio de sesión no ayuda, es el sitio correcto en el que tienes una passkey. Lo único que ayuda es reconocer la situación: nunca deberías escanear un QR de FIDO que no hayas generado tú mismo al hacer clic en "Iniciar sesión" en tu propio dispositivo.

Lo que detecta nuestro escáner

Cuando introduces un QR FIDO en nuestro escáner, el veredicto muestra:

La clase de amenaza es siempre sospechoso, no porque el protocolo esté roto, sino porque la evaluación de seguridad depende del contexto y el escáner no puede saber quién presionó "Iniciar sesión." La divulgación del veredicto lo indica con precisión: "escanear completa un inicio de sesión que alguien INICIÓ EN OTRO DISPOSITIVO. Si tú no acabas de iniciar una sesión, rechaza."

Cuándo es seguro (y cuándo no lo es)

Seguro: te sentaste frente a tu laptop, abriste tu banco o correo electrónico, hiciste clic en "Iniciar sesión con una passkey" y tu laptop mostró el QR. Tomas tu teléfono, escaneas el QR, apruebas el aviso de proximidad. Listo.

No es seguro: alguien que no eres tú inició el inicio de sesión. Esto incluye a cualquier persona por teléfono, cualquier persona en una llamada de soporte remoto, cualquier persona que te envió un QR por correo electrónico, cualquier persona que te mostró un "QR para verificar tu identidad", y cualquier QR en un lugar que no sea tu propio dispositivo recién mostrado.

Si no estás seguro de si un QR proviene de un inicio de sesión que TÚ iniciaste, cancela el inicio de sesión en el dispositivo original (cierra la pestaña del navegador) y vuelve a empezar desde cero en el dispositivo que tenías intención de usar. Los QR de FIDO reales son válidos solo durante unos ~10 minutos; reiniciar elimina cualquier sesión en curso y hace que la amenaza sea imposible.

Relacionado

Inspeccionar un QR FIDO

Arrastra la imagen o pega el URI FIDO:. El veredicto muestra la operación, el servidor de túnel, la marca de tiempo y una advertencia clara para rechazar el QR si no fuiste tú quien inició el proceso.

Abrir el escáner →