FIDO/WebAuthn - Estándares de autenticación sin contraseña
Lectura de 2 min aprox.
FIDO (Fast IDentity Online) y WebAuthn son estándares internacionales para lograr una autenticación que no dependa de contraseñas. Al combinar las especificaciones técnicas desarrolladas por la FIDO Alliance con la API WebAuthn recomendada como estándar web por el W3C, es posible utilizar la autenticación basada en criptografía de clave pública desde navegadores y aplicaciones. La resistencia al phishing está integrada en su diseño y, al no confiar ninguna contraseña al servidor, reduce las vías por las que una filtración de contraseñas se convierte en daños.
La fundación de la FIDO Alliance y la evolución de los estándares
La FIDO Alliance se formó en julio de 2012 con PayPal, Lenovo, Nok Nok Labs, Validity, Infineon y Agnitio, y su presentación pública llegó en febrero de 2013. La Alianza indica que se formó para resolver la falta de interoperabilidad entre las tecnologías de autenticación fuerte y aliviar la carga que supone para los usuarios crear y recordar múltiples nombres de usuario y contraseñas. El 9 de diciembre de 2014 se publicaron como versión final dos especificaciones bajo el nombre FIDO 1.0. UAF (Universal Authentication Framework) abarca el inicio de sesión sin contraseña mediante biometría y métodos similares, mientras que U2F (Universal 2nd Factor) abarca la autenticación de dos factores con un autenticador (llave de seguridad) conectado por USB o NFC.
Después avanzó el trabajo sobre FIDO2, que combina la API WebAuthn del W3C con el CTAP (Client to Authenticator Protocol) de la FIDO Alliance, y WebAuthn se convirtió en Recomendación del W3C - un estándar web oficial - el 4 de marzo de 2019. WebAuthn es la especificación de la API del lado del navegador, mientras que CTAP es el protocolo de comunicación con el autenticador (llaves de seguridad y dispositivos biométricos). Al combinar ambos, se hizo posible usar autenticadores de hardware directamente desde un navegador web. Y desde 2022, el mecanismo de sincronizar en la nube las credenciales FIDO2 como passkeys se ha implementado en los principales sistemas operativos y gestores de credenciales, de modo que puede usarlo incluso quien no tiene una llave física dedicada.
El flujo de autenticación basado en criptografía de clave pública
La autenticación FIDO/WebAuthn funciona mediante un esquema de desafío-respuesta. En la autenticación tradicional por contraseña se envía una «cadena secreta» al servidor, mientras que con FIDO lo que va al servidor no es la clave privada en sí, sino una firma sobre el desafío. El diseño de base mantiene la clave privada dentro del autenticador y, en las formas que se sincronizan en varios dispositivos, como las passkeys, se sincroniza cifrada según la implementación del gestor de credenciales.
En este esquema, lo que el servidor almacena es la clave pública e identificadores de la credencial, no el secreto de autenticación en sí. Aunque el servidor se vea comprometido, obtener la clave privada a partir de la clave pública no puede calcularse en un tiempo realista con los métodos conocidos hoy, por lo que una filtración de datos no conduce por sí sola al uso indebido de las credenciales.
Cómo funciona la resistencia al phishing - verificación de origen
La razón principal por la que FIDO/WebAuthn resiste el phishing es que la verificación del origen (dominio) está integrada en la autenticación. El navegador registra en clientData el origen que emitió la solicitud de autenticación, y el autenticador firma un valor que incluye el hash de esos datos junto con el hash del RP ID (el dominio del servicio). Como el servidor comprueba que el origen recibido coincide con el que espera, aunque un atacante pida al usuario autenticarse en un sitio falso (por ejemplo, examp1e.com), las credenciales registradas para el sitio legítimo (example.com) no pueden reutilizarse allí sin más. Aunque el usuario sea engañado y acceda al sitio falso, la autenticación no se completa y el margen para que el phishing funcione se estrecha considerablemente. No obstante, si sigue disponible una alternativa como la contraseña, esa vía puede seguir siendo el objetivo. Esto también es una perspectiva importante al considerar los desafíos de la migración a passkeys.
La relación con las passkeys
Una passkey es una de las formas de implementación de FIDO2/WebAuthn. Técnicamente es la misma autenticación basada en criptografía de clave pública, pero una passkey se diferencia del FIDO2 convencional en que las credenciales pueden sincronizarse en varios dispositivos a través de la nube. Como las llaves de seguridad FIDO2 convencionales están vinculadas a un dispositivo físico, la recuperación en caso de pérdida era un problema. Las passkeys sincronizadas abordan esta cuestión permitiendo usar la misma passkey en varios dispositivos a través de gestores de credenciales como iCloud Keychain y Google Password Manager. Por otro lado, el alcance de la sincronización lo fija cada proveedor del gestor de credenciales, y confiarle a ese proveedor la custodia de la clave sigue siendo una diferencia respecto a una llave física. Combinadas con la autenticación biométrica, se puede iniciar sesión con el mismo gesto que se usa para desbloquear el dispositivo.
Estado de compatibilidad y consideraciones prácticas
Los navegadores principales - Chrome, Safari, Firefox y Edge - admiten todos la API WebAuthn (los detalles concretos de la compatibilidad difieren según la versión y el sistema operativo, así que conviene consultar la documentación de cada navegador antes de implementarla). A nivel de sistema operativo, Windows Hello, Touch ID / Face ID en macOS / iOS y la autenticación biométrica de Android funcionan como autenticadores FIDO2. En las implementaciones empresariales, también se adoptan configuraciones que usan llaves de seguridad de hardware como YubiKey como medio de autenticación multifactor.
Como consideración práctica, implementar WebAuthn también requiere soporte del lado del servidor. Es necesario implementar la lógica para generar desafíos, almacenar claves públicas y verificar firmas; existen bibliotecas públicas que se encargan de esos pasos (como SimpleWebAuthn y py_webauthn) y pueden usarse en lugar de escribir uno mismo el código de verificación. Además, contar con conocimientos básicos sobre el cifrado, en especial comprender cómo funciona la criptografía de clave pública, resulta útil a la hora de solucionar problemas. Conocer también los riesgos de la autenticación biométrica y los fundamentos de la autenticación de dos factores te dará una visión completa del diseño de la autenticación.
¿Te resultó útil este artículo?