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.
Estándares · FIDO CTAP 2.2 híbrido (passkey QR)
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».
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:
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.
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:
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.
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.
0 = make-credential (registro de una nueva passkey), 1 = get-assertion (inicio de sesión), 2 = discoverable-credential.
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).
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.
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 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.
Cuando introduces un QR FIDO en nuestro escáner, el veredicto muestra:
cable.ua5v.com de Google, el servidor de túnel de Apple, etc.)?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."
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.
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.