La autenticación web ( WebAuthn ) es un estándar web publicado por el World Wide Web Consortium (W3C). [1] [2] [3] WebAuthn es un componente central del Proyecto FIDO2 bajo la dirección de la Alianza FIDO . [4] El objetivo del proyecto es estandarizar una interfaz para autenticar a los usuarios en aplicaciones y servicios basados en la web utilizando criptografía de clave pública .
![Llaves de seguridad biométricas (USB) con pulsador y huella dactilar WebAuthn de KEY-ID](http://wikiimg.tojsiabtv.com/wikipedia/commons/6/6b/FIDO2_push-button_and_fingerprint_biometric_security_keys_USB.png)
![](http://wikiimg.tojsiabtv.com/wikipedia/commons/thumb/5/58/Roaming_Cryptographic_Authenticator.svg/220px-Roaming_Cryptographic_Authenticator.svg.png)
En el lado del cliente, el soporte para WebAuthn se puede implementar de varias formas. Las operaciones criptográficas subyacentes las realiza un autenticador , que es un modelo funcional abstracto que es en su mayoría agnóstico con respecto a cómo se gestiona el material de la clave. Esto hace posible implementar el soporte para WebAuthn puramente en software, haciendo uso del entorno de ejecución confiable de un procesador o un Módulo de plataforma confiable (TPM). Las operaciones criptográficas sensibles también se pueden descargar a un autenticador de hardware de itinerancia al que, a su vez, se puede acceder a través de USB , Bluetooth Low Energy o comunicaciones de campo cercano (NFC). Un autenticador de hardware de itinerancia se ajusta a la FIDOClient to Authenticator Protocol (CTAP), [5] hace que WebAuthn sea efectivamente compatible con versiones anteriores del estándar FIDO Universal 2nd Factor (U2F). [6]
Al igual que el U2F heredado, la autenticación web es resistente a la suplantación del verificador, es decir, es resistente a los ataques de intermediarios activos, [7] pero a diferencia de U2F, WebAuthn no requiere una contraseña tradicional. Además, un autenticador de hardware itinerante es resistente al malware ya que el material de la clave privada no es en ningún momento accesible para el software que se ejecuta en la máquina host.
El estándar WebAuthn Nivel 1 se publicó como Recomendación del W3C el 4 de marzo de 2019. [8] [9] Se está desarrollando una especificación de Nivel 2. [10]
Fondo
FIDO2 es el sucesor del protocolo heredado FIDO Universal 2nd Factor (U2F). La autenticación FIDO2 tiene todas las ventajas de U2F; la principal diferencia es que un autenticador FIDO2 también puede ser un autenticador único de múltiples factores (sin contraseña). El protocolo U2F está diseñado para actuar como un segundo factor para fortalecer los flujos de inicio de sesión existentes basados en nombre de usuario / contraseña.
Se puede utilizar un autenticador FIDO2 en modo de factor único o en modo de factor múltiple. En el modo de factor único, el autenticador se activa mediante una prueba de presencia del usuario, que generalmente consiste en presionar un botón. En el modo multifactor, el autenticador ( algo que tiene ) realiza la verificación del usuario. Dependiendo de las capacidades del autenticador, esto puede ser: [11]
- algo que sabe: un secreto como un PIN , un código de acceso o un patrón de deslizamiento
- algo que eres: un biométrico como huella dactilar, iris o voz
En cualquier caso, el autenticador realiza la verificación del usuario localmente en el dispositivo. Un secreto o datos biométricos almacenados en el autenticador no se comparte con el sitio web. [12] Además, un único secreto o biométrico funciona con todos los sitios web, ya que el autenticador seleccionará el material de clave criptográfico correcto para usar en el servicio que solicita la autenticación después de que la verificación del usuario se haya completado con éxito.
Un secreto y datos biométricos en el autenticador se pueden usar juntos, de manera similar a como se usarían en un teléfono inteligente . Por ejemplo, una huella dactilar se usa para proporcionar un acceso conveniente a su teléfono inteligente, pero ocasionalmente falla el acceso de huellas dactilares, en cuyo caso se puede usar un PIN.
Descripción general
Al igual que su predecesor FIDO U2F, la autenticación web W3C (WebAuthn) implica un sitio web , un navegador web y un autenticador: [1]
- El sitio web es un tercero de confianza de WebAuthn
- El navegador es un cliente WebAuthn conforme
- El autenticador es un autenticador FIDO2, es decir, se asume que es compatible con WebAuthn Client.
WebAuthn especifica cómo un reclamante demuestra la posesión y el control de un autenticador FIDO2 a un verificador llamado WebAuthn Relying Party. El proceso de autenticación está mediado por una entidad llamada WebAuthn Client, que es poco más que un navegador web conforme.
Autenticación
![](http://wikiimg.tojsiabtv.com/wikipedia/commons/thumb/0/04/Passwordless_Web_Authentication.svg/220px-Passwordless_Web_Authentication.svg.png)
A modo de ilustración, asumimos que el autenticador es un autenticador de hardware itinerante (consulte más abajo para conocer otras opciones). En cualquier caso, el autenticador es un autenticador criptográfico de múltiples factores que utiliza criptografía de clave pública para firmar una aserción de autenticación dirigida a la Parte de Confianza de WebAuthn. Suponiendo que el autenticador usa un PIN para la verificación del usuario, el autenticador en sí es algo que usted tiene, mientras que el PIN es algo que conoce .
Para iniciar el flujo de autenticación de WebAuthn, [13] la Parte de Confianza de WebAuthn indica sus intenciones al Cliente WebAuthn (es decir, el navegador) a través de JavaScript . El cliente WebAuthn se comunica con el autenticador mediante una API de JavaScript implementada en el navegador. Un autenticador de itinerancia se ajusta al protocolo FIDO Client to Authenticator .
WebAuthn no requiere estrictamente un autenticador de hardware itinerante. Alternativamente, se puede usar un autenticador de software (implementado en un teléfono inteligente, por ejemplo) o un autenticador de plataforma (es decir, un autenticador implementado directamente en el Dispositivo Cliente WebAuthn). Ejemplos relevantes de autenticadores de plataforma incluyen Windows Hello [14] y el sistema operativo Android . [15]
El flujo ilustrado se basa en la verificación del usuario basada en PIN, que, en términos de usabilidad, es solo una mejora modesta con respecto a la autenticación de contraseña ordinaria. En la práctica, el uso de datos biométricos para la verificación del usuario puede mejorar la usabilidad de WebAuthn. [ cita requerida ] Sin embargo, la logística detrás de la biometría aún no se comprende bien. Existe un malentendido persistente entre los usuarios de que los datos biométricos se transmiten a través de la red de la misma manera que las contraseñas, lo cual no es el caso. [16] [17]
Registro
Cuando la Parte de Confianza de WebAuthn recibe la aserción de autenticación firmada del navegador, la firma digital en la aserción se verifica usando una clave pública confiable para el usuario. ¿Cómo obtiene WebAuthn Relying Party esa clave pública de confianza en primer lugar?
Para obtener una clave pública para el usuario, WebAuthn Relying Party inicia un flujo de registro de WebAuthn [18] que es muy similar al flujo de autenticación ilustrado anteriormente. La principal diferencia es que el autenticador ahora firma una declaración de atestación con su clave privada de atestación. La declaración de atestación firmada contiene una copia de la clave pública que la parte de confianza de WebAuthn utiliza en última instancia para verificar una aserción de autenticación firmada. La declaración de atestación también contiene metadatos que describen el autenticador en sí.
La firma digital en la declaración de atestación se verifica con la clave pública de atestación confiable para ese modelo particular de autenticador. No se especifica cómo la parte de confianza de WebAuthn obtiene su almacén de claves públicas de atestación de confianza. Una opción es utilizar el servicio de metadatos FIDO. [19]
El tipo de atestación especificado en JavaScript determina el modelo de confianza. Por ejemplo, se puede desear un tipo de atestación llamado auto-atestación, para el cual el modelo de confianza es esencialmente confianza en el primer uso .
Apoyo
El estándar WebAuthn Nivel 1 fue publicado como Recomendación del W3C por el Grupo de trabajo de autenticación web el 4 de marzo de 2019. [8] [9] [20] WebAuthn es compatible con los siguientes navegadores web: Google Chrome , Mozilla Firefox , Microsoft Edge , Apple Safari [9] y el navegador web Opera . [21]
La versión de escritorio de Google Chrome ha admitido WebAuthn desde la versión 67. [22] Firefox, que no había admitido completamente el estándar FIDO U2F anterior, incluyó y habilitó WebAuthn en la versión 60 de Firefox, lanzada el 9 de mayo de 2018. [23] Una de las primeras La versión Windows Insider de Microsoft Edge (compilación 17682) implementó una versión de WebAuthn que funciona tanto con Windows Hello como con llaves de seguridad externas. [24]
Las claves de seguridad FIDO U2F existentes son en gran parte compatibles con el estándar WebAuthn, aunque WebAuthn agregó la capacidad de hacer referencia a un identificador único de "identificación de usuario" por cuenta, que los autenticadores más antiguos no pueden almacenar. [1] Uno de los primeros autenticadores compatibles con FIDO2 fue la llave de seguridad de segunda generación de Yubico, anunciada el 10 de abril de 2018. [25]
La primera clave FIDO2 certificada de nivel de seguridad 2, llamada "Goldengate", fue anunciada un año después por eWBM el 8 de abril de 2019. [26] y [27]
Dropbox anunció la compatibilidad con los inicios de sesión de WebAuthn (como segundo factor) el 8 de mayo de 2018. [28]
Apple Safari anunció que Face ID o Touch ID podrían usarse como un autenticador de plataforma WebAuthn el 24 de junio de 2020. [29]
API
WebAuthn implementa una extensión de la API de administración de credenciales más general del W3C , que es un intento de formalizar la interacción entre sitios web y navegadores web al intercambiar credenciales de usuario. La API de autenticación web [30] [31] amplía los métodos de gestión de credenciales y JavaScript para que acepten un parámetro. El método se utiliza para registrar autenticadores de clave pública como parte de su asociación con cuentas de usuario (posiblemente en el momento de la creación de la cuenta inicial, pero más probablemente cuando se agrega un nuevo dispositivo de seguridad a una cuenta existente) mientras que el método se utiliza para autenticar (como al iniciar sesión en).navigator.credentials.create()
navigator.credentials.get()
publicKey
create()
get()
Para verificar si un navegador es compatible con WebAuthn, los scripts deben verificar si la window.PublicKeyCredential
interfaz está definida. Además de PublicKeyCredential
, el estándar también define las AuthenticatorResponse
, AuthenticatorAttestationResponse
y AuthenticatorAssertionResponse
las interfaces además de una variedad de diccionarios y otros tipos de datos.
La API no permite el acceso directo ni la manipulación de claves privadas, más allá de solicitar su creación inicial.
Recepción
En agosto de 2018, Paragon Initiative Enterprises realizó una auditoría de seguridad del estándar WebAuthn. Si bien no pudieron encontrar ningún exploit específico, revelaron algunas debilidades graves en la forma en que la criptografía subyacente se usa y exige el estándar. [32]
Los principales puntos de crítica giran en torno a dos problemas potenciales que fueron problemáticos en otros sistemas criptográficos en el pasado y, por lo tanto, deben evitarse para no ser víctima de la misma clase de ataques:
- Mediante el uso obligatorio de COSE (RFC 8152), WebAuthn también admite RSA con relleno PKCS1v1.5 . Se sabe que este esquema particular de relleno es vulnerable a ataques específicos durante al menos veinte años y ha sido atacado con éxito en otros protocolos e implementaciones del criptosistema RSA en el pasado. Es difícil de explotar en las condiciones dadas en el contexto de WebAuthn, pero dado que existen primitivas criptográficas y esquemas de relleno más seguros, esta sigue siendo una mala elección y ya no se considera la mejor práctica entre los criptógrafos.
- La Alianza FIDO estandarizó el esquema criptográfico asimétrico ECDAA . [33] Esta es una versión de atestación anónima directa basada en curvas elípticas y, en el caso de WebAuthn, está destinada a verificar la integridad de los autenticadores, al mismo tiempo que se preserva la privacidad de los usuarios, ya que no permite la correlación global de manejas. Sin embargo, ECDAA no incorpora algunas de las lecciones aprendidas en las últimas décadas de investigación en el área de la criptografía de curva elíptica , ya que la curva elegida tiene algunos déficits de seguridad inherentes a este tipo de curva, lo que reduce las garantías de seguridad de manera bastante sustancial. Además, el estándar ECDAA implica firmas aleatorias, no deterministas, lo que ya ha sido un problema en el pasado.
Paragon Initiative Enterprises también criticó cómo se desarrolló inicialmente el estándar, ya que la propuesta no se hizo pública con anticipación y no se les pidió sugerencias ni comentarios a los criptógrafos experimentados. Por lo tanto, el estándar no estuvo sujeto a una amplia investigación criptográfica del mundo académico.
A pesar de estas deficiencias, Paragon Initiative Enterprises aún alienta a los usuarios a continuar usando WebAuthn, pero han presentado algunas recomendaciones para posibles implementadores y desarrolladores del estándar que esperan que se puedan implementar antes de que se finalice el estándar. Evitar tales errores lo antes posible evitaría que la industria se enfrentara a los desafíos que presentan los estándares incumplidos y la necesidad de compatibilidad con versiones anteriores .
ECDAA solo se diseñó para usarse en combinación con la certificación del dispositivo. Esta característica particular de WebAuthn no es necesariamente necesaria para que la autenticación funcione. Las implementaciones actuales permiten al usuario decidir si se envía una declaración de atestación durante la ceremonia de registro. Independientemente, las partes que confían pueden optar por solicitar la certificación o no. ECDAA se eliminó del Nivel 2 de WebAuthn porque no fue implementado por navegadores ni por terceros. [34]
Referencias
- ^ a b c Balfanz, Dirk; Czeskis, Alexei; Hodges, Jeff; Jones, JC; Jones, Michael B .; Kumar, Akshay; Liao, Angelo; Lindemann, Rolf; Lundberg, Emil, eds. (4 de marzo de 2019). "Autenticación web: una API para acceder a las credenciales de clave pública de nivel 1" (Recomendación ed.). Consorcio World Wide Web (W3C) . Consultado el 4 de marzo de 2019 .
- ^ "Grupo de Trabajo de Autenticación Web" . Consorcio World Wide Web (W3C) . Consultado el 11 de mayo de 2018 .
- ^ Strickland, Jonathan (18 de marzo de 2019). "Qué es WebAuthn" . TechStuff . iHeartMedia . 20:35 minutos . Consultado el 20 de marzo de 2019 .
- ^ "Proyecto FIDO2" . Alianza FIDO . Consultado el 11 de mayo de 2018 .
- ^ Brand, Christiaan; Czeskis, Alexei; Ehrensvärd, Jakob; Jones, Michael B .; Kumar, Akshay; Lindemann, Rolf; Poderes, Adam; Verrept, Johan, eds. (30 de enero de 2019). "Protocolo de cliente a autenticador (CTAP)" . Alianza FIDO . Consultado el 7 de marzo de 2019 .
- ^ "WebAuthn / CTAP: autenticación moderna" (PDF) . Consorcio World Wide Web (W3C). 10 de diciembre de 2018 . Consultado el 11 de marzo de 2019 .
- ^ Kan, Michael (7 de marzo de 2019). "Google: los ataques de phishing que pueden vencer a dos factores están en aumento" . Revista de PC . Consultado el 8 de marzo de 2019 .
- ^ a b Balfanz, Dirk; Czeskis, Alexei; Hodges, Jeff; Jones, JC; Jones, Michael B .; Kumar, Akshay; Liao, Angelo; Lindemann, Rolf; Lundberg, Emil (eds.). "Autenticación web: una API para acceder a las credenciales de clave pública Nivel 1 (más reciente)" . Consorcio World Wide Web (W3C) . Consultado el 4 de marzo de 2019 .
- ^ a b c "W3C y FIDO Alliance finalizan el estándar web para inicios de sesión seguros y sin contraseña" . Consorcio World Wide Web (W3C). 4 de marzo de 2019 . Consultado el 4 de marzo de 2019 .
- ^ Balfanz, Dirk; Czeskis, Alexei; Hodges, Jeff; Jones, JC; Jones, Michael B .; Kumar, Akshay; Lindemann, Rolf; Lundberg, Emil, eds. (4 de junio de 2019). "Autenticación web: una API para acceder a las credenciales de clave pública de nivel 2" (Primera edición del borrador de trabajo público). Consorcio World Wide Web (W3C) . Consultado el 6 de junio de 2019 .
- ^ Baghdasaryan, Davit; Hill, Brad (2 de julio de 2018). "Registro FIDO de Valores Predefinidos" . fidoalliance.org . Alianza FIDO . Consultado el 16 de junio de 2019 .
- ^ "Autenticación web: una API para acceder a credenciales de clave pública Nivel 1 § Terminología: verificación de usuario" . www.w3.org . W3C. 4 de marzo de 2019 . Consultado el 16 de junio de 2019 .
- ^ "API de autenticación web" . Mozilla . Autenticación de sección . Consultado el 18 de marzo de 2019 .
- ^ Simons, Alex (20 de noviembre de 2018). "Inicio de sesión seguro sin contraseña para su cuenta de Microsoft mediante una clave de seguridad o Windows Hello" . Microsoft . Consultado el 6 de marzo de 2019 .
- ^ "Android ahora certificado por FIDO2, acelerando la migración global más allá de las contraseñas" . BARCELONA: Alianza FIDO . 25 de febrero de 2019 . Consultado el 6 de marzo de 2019 .
- ^ "Touch ID y más: planes de Duo para WebAuthn" . Duo Security. 5 de marzo de 2019 . Consultado el 8 de marzo de 2019 .
- ^ Steele, Nick (27 de febrero de 2019). "Cómo WebAuthn pretende resolver el problema de la contraseña" . Ayuda Net Security . Consultado el 8 de marzo de 2019 .
- ^ "API de autenticación web" . Mozilla . Registro de sección . Consultado el 18 de marzo de 2019 .
- ^ "Servicio de metadatos" . Alianza FIDO . Consultado el 18 de marzo de 2019 .
- ^ Protalinski, Emil (4 de marzo de 2019). "W3C aprueba WebAuthn como estándar web para inicios de sesión sin contraseña" .
- ^ "¿Puedo utilizar la API de autenticación web?" . Consultado el 7 de marzo de 2019 .
- ^ Brand, Christiaan (3 de junio de 2018). "Habilitación de la autenticación fuerte con WebAuthn" . Desarrolladores de Google . Consultado el 25 de junio de 2018 .
- ^ Shankland, Stephen (9 de mayo de 2018). "Firefox mueve los navegadores al futuro posterior a la contraseña con la tecnología WebAuthn" . CNET . Consultado el 11 de mayo de 2018 .
- ^ Sarkar; et al. (23 de mayo de 2018). "Anuncio de Windows 10 Insider Preview Build 17682" . Microsoft . Consultado el 25 de junio de 2018 .
- ^ "Yubico lanza un nuevo programa para desarrolladores y una clave de seguridad para las especificaciones de FIDO2 y WebAuthn W3C" (Comunicado de prensa). 2018-04-10 . Consultado el 11 de mayo de 2018 .
- ^ "eWBM: el lector de huellas dactilares Goldengate de eWBM es el primero en obtener la certificación FIDO L2" (comunicado de prensa). 2019-04-08 . Consultado el 15 de junio de 2019 .
- ^ "Mobile ID World, Alex Perala: el lector de huellas dactilares Goldengate de eWBM es el primero en obtener la certificación FIDO L2" (Comunicado de prensa). 2019-04-09 . Consultado el 15 de junio de 2019 .
- ^ Girardeau, Brad (8 de mayo de 2018). "Presentamos la compatibilidad con WebAuthn para el inicio de sesión seguro en Dropbox" . Blog de tecnología de Dropbox . Dropbox . Consultado el 11 de mayo de 2018 .
- ^ Girardeau, Brad (24 de junio de 2020). "Notas de la versión Beta de Safari 14" . Documentación para desarrolladores de Apple . Manzana . Consultado el 24 de junio de 2020 .
- ^ "API de autenticación web" . Mozilla . Consultado el 16 de marzo de 2019 .
- ^ Ackermann, Yuriy (15 de enero de 2019). "Introducción a la API de WebAuthn" . Medio . Consultado el 8 de marzo de 2019 .
- ^ "Preocupaciones de seguridad que rodean a WebAuthn: no implemente ECDAA (todavía)" . Blog de Empresas de la Iniciativa Paragon. 2018-08-23 . Consultado el 9 de octubre de 2018 .
- ^ "Algoritmo FIDO ECDAA" . Alianza FIDO. 2018-02-27 . Consultado el 9 de octubre de 2018 .
- ^ "¿Eliminar ECDAA? · Número 1410 · w3c / webauthn" . GitHub . 2020-04-28 . Consultado el 3 de junio de 2020 .
enlaces externos
- Autenticación web: una API para acceder a las credenciales de clave pública de nivel 1
- Grupo de trabajo de autenticación web
- API de autenticación web en MDN
- WebAuthn impresionante