La criptografía tras las PassKeys ~ Segu-Info

Cuando la mayoría de la gente piensa en criptografía, lo primero que suele
venir a la mente es el cifrado: mantener la confidencialidad de la
información. Pero igual de importante (o incluso más) es la autenticidad:
garantizar que la información provenga realmente de una fuente auténtica.

Al visitar un sitio web, el servidor suele comprobar su identidad mediante un
certificado de seguridad de la capa de transporte (TLS) autenticado por la
Infraestructura de Clave Pública (PKI). Las contraseñas son la solución
tradicional para la autenticación de usuarios, pero sufren ataques de phishing
y filtraciones de datos.
Aquí es donde entran en juego las PassKey (Claves de Acceso).

En lugar de explicar qué son las claves de acceso y por qué son mejores que
las contraseñas (algo que ya se ha abordado muchas veces), esta publicación examinará la criptografía tras las PassKey, las garantías
que ofrecen y las interesantes funciones criptográficas que se pueden realizar
con ellas, como generar claves criptográficas y almacenar certificados. Es
necesario comprender la criptografía tras las PassKey para implementar
correctamente la autenticación segura.

También analizaremos la especificación principal de la clave de acceso,
WebAuthn, y mostraremos cómo usar extensiones de mecanismos de PassKey para
construir un sistema más complejo con diferentes capacidades.

Fundamentos de la criptografía de PassKey

En esencia,
las PassKey son pares de claves que se utilizan para generar firmas
digitales.

Al registrar una clave de acceso, el sitio web guarda la clave pública y un
identificador. Al autenticar a un usuario mediante una clave de acceso, el
sitio web presenta un desafío y espera una respuesta firmada que incluya este
desafío (y otros metadatos, como el identificador). El identificador se
utiliza para buscar la clave pública, que a su vez verifica la firma.

Desde una perspectiva criptográfica, esto es bastante sencillo.
La clave privada autentica al usuario, pero no se comunica al servidor
ninguna información confidencial útil para un atacante.

Si el desafío del servidor se genera correctamente (por ejemplo, como una
secuencia aleatoria uniforme de 32 bytes), se evitarán los ataques de
repetición. Dado que el servidor solo contiene una clave pública y el usuario
no le envía información confidencial, no hay nada que pueda filtrarse en caso
de un ataque informático.

Pero las firmas digitales por sí solas no son suficientes para resolver el
problema del phishing. Si nos limitáramos a las primitivas criptográficas, los
usuarios seguirían siendo vulnerables. Por ejemplo, sin medidas de seguridad
adicionales, un atacante podría engañar a los usuarios para que firmen
desafíos para el sitio web equivocado o reutilicen el mismo par de claves en
varios sitios.

Por eso, las PassKey se basan en la especificación
WebAuthn del W3C, que añade propiedades de seguridad cruciales más allá de la criptografía
básica. Veamos cómo WebAuthn transforma estas sencillas primitivas
criptográficas en un sistema de autenticación resistente al phishing.

WebAuthn

WebAuthn es la principal especificación detrás de PassKey. En pocas
palabras, los usuarios acceden a un sitio web (parte confiante) a través de su
navegador (agente de usuario WebAuthn) en un dispositivo como un portátil, un
teléfono o un PC (dispositivo cliente). El navegador interactúa con un
autenticador, una pieza de hardware o software que genera el par de
PassKey y crea firmas digitales utilizando este par de claves.

En el diagrama anterior, puede ver cómo funciona la autenticación con clave de
acceso:

  • El sitio web solicita la autenticación a través del navegador.
  • El navegador se comunica con el autenticador.
  • El autenticador comprueba las credenciales y la presencia del usuario.
  • El autenticador devuelve una respuesta firmada.
  • El navegador reenvía esta respuesta al sitio web para su verificación.

(Esta interacción entre el navegador y el autenticador se describe con más
detalle en otra especificación: el
Protocolo de Cliente a Autenticador (CTAP) de FIDO Alliance).

Esta es una descripción simplificada; la especificación WebAuthn permite una
mayor variedad de casos de uso (por ejemplo, todo podría funcionar a través de
una aplicación móvil en lugar de un sitio web/navegador). Sin embargo, estos
detalles no son relevantes para comprender cómo funcionan las PassKey con la
criptografía.

Protección contra phishing


WebAuthn resuelve el problema del phishing mediante la vinculación de
origen.

La especificación requiere que los navegadores proporcionen el origen de la
solicitud (es decir, el dominio del sitio web) al autenticador. El
autenticador, a su vez, utiliza PassKey solo cuando el sitio web que realiza
la solicitud coincide con el que la creó.

Esto significa que si crea una PassKey para bank.com, un sitio de
phishing como fake-bank.com simplemente no podrá usarla; su
autenticador rechazará la solicitud. Cada sitio web también obtiene su propio
par de claves único, lo que
elimina por completo el problema de la reutilización de contraseñas.

Además, la especificación solo permite orígenes que utilizan HTTPS, lo que
significa que la solicitud proviene de un servidor con un certificado válido
para el origen correspondiente.

Tipos de autenticadores

Generalmente, los autenticadores son «algo que se tiene». Todos los
autenticadores pueden comprobar si un usuario está realmente presente durante
la autenticación. Algunos autenticadores también pueden verificar al usuario
según «algo que sabe», como un PIN, o «algo que es», como sus datos
biométricos.

Existen dos tipos principales de autenticadores:

  • Autenticadores de plataforma: se encuentran dentro del dispositivo del
    usuario.
    • Ejemplos: iCloud Keychain, Google Password Manager, Windows Hello,
      1Password
    • Ventajas: convenientes, suelen incluir funciones de copia de seguridad en
      la nube
    • Desventajas: vulnerables si el dispositivo se ve comprometido
  • Autenticadores itinerantes: son dispositivos de hardware dedicados e
    independientes
    • Ejemplos: YubiKeys, llaves de Seguridad Titan, llaves Feitian
    • Ventajas: mayor aislamiento de seguridad, no se ven afectados por la
      vulneración del dispositivo.
    • Desventajas: pueden perderse o dañarse, generalmente no tienen mecanismo
      de copia de seguridad

Si una plataforma permite la comunicación entre plataformas (como Bluetooth),
sus autenticadores también pueden usarse como autenticadores itinerantes al
comunicarse con otro dispositivo (por ejemplo, un smartphone). Para máxima
seguridad en aplicaciones de alto valor, recomendamos usar llaves de seguridad
de hardware dedicadas como autenticadores.

Algunos autenticadores muestran al usuario los detalles de la solicitud para
la que generan una firma digital. En el caso de los autenticadores que no
pueden hacerlo, el navegador mostrará estos detalles. Verifique siempre estos
detalles antes de aprobar una solicitud de autenticación.

Cuando un usuario registra una clave de acceso en un sitio web, el
autenticador genera una clave de acceso y un identificador (ID de credencial).
El sitio web almacena la clave pública y el identificador y los vincula a la
cuenta del usuario. El sitio web puede usar este identificador para indicar a
los autenticadores a qué clave de acceso desean acceder.

Algunos autenticadores tienen mucho espacio de almacenamiento y almacenan
todas las PassKey de los usuarios. Otros no, por lo que cifran la clave
de acceso y la proporcionan al sitio web como identificador durante el
registro. Cuando el sitio web desea autenticar a un usuario, proporciona el
identificador al navegador, que a su vez se lo proporciona al autenticador,
quien lo descifra y utiliza la clave de acceso. En esencia, el sitio web
almacena la clave de acceso, pero al estar cifrada, su valor es limitado si el
sitio web es atacado.

En teoría, se puede simplemente almacenar un par de claves criptográficas en
un archivo, desarrollar un software que utilice este par de claves para
operaciones criptográficas y simular que es un autenticador. 

Pero ¿cómo pueden los sitios web saber si sus usuarios utilizan autenticadores
seguros? Los autenticadores pueden comprobar criptográficamente ciertos datos
sobre su origen, como quién los fabricó, generando una declaración de
atestación cuando el usuario crea una clave de acceso. Esta declaración está
respaldada por una cadena de certificados firmada por el fabricante. Esto es
especialmente útil para usuarios empresariales, ya que permite a la empresa
garantizar que todos los usuarios tengan autenticadores específicos que
cumplan con ciertos requisitos de seguridad. Sin embargo, la atestación es
opcional: la especificación WebAuthn no exige que los autenticadores la
admitan.


Finalmente, como con cualquier factor de autenticación que se posee, una
pregunta importante es: ¿qué sucede si se pierde o se rompe? En general,
perder un autenticador implica perder todas las PassKey que controla.

Dado que las KeyPass son pares de claves criptográficas generadas
aleatoriamente, no hay posibilidad de recuperación. La mayoría de los
autenticadores de plataformas, como iCloud Keychain, Google Password Manager y
1Password, permiten realizar copias de seguridad de las
PassKey sincronizándolas con la nube. Sin embargo, esto siempre implica
una desventaja: las PassKey recuperables tienen una mayor superficie de
ataque, ya que los atacantes podrían intentar obtenerlas a través del
mecanismo de recuperación.

En general, es importante que los sitios web cuenten con un mecanismo de
recuperación para cuando los usuarios pierdan el acceso a sus PassKey,
teniendo en cuenta que los atacantes podrían atacar este mecanismo de
recuperación.

Si bien el uso de autenticadores de plataformas con funciones de copia de
seguridad reduce el riesgo de pérdida de PassKey, no lo elimina. Los usuarios
que sean baneados de la plataforma perderán el acceso a sus claves de acceso,
y la plataforma podría eliminarlas accidentalmente. Además, las plataformas
también pueden permitir el uso compartido de PassKey o cuentas familiares,
donde varios usuarios pueden acceder a las mismas. El sitio web debería
advertir a los usuarios sobre estos riesgos, dependiendo del acceso que
proporcione la clave.

Modelado de amenazas


A pesar de las afirmaciones de marketing que pueda haber escuchado, las
claves de acceso no son una solución milagrosa para la seguridad. Veamos
contra qué protegen realmente.

El
modelado de amenazas de las PassKey
muestra que protegen contra amenazas contra las que las contraseñas suelen
proteger, a la vez que eliminan el riesgo de phishing y reutilización de
contraseñas. ¡Una mejora significativa!

La
Sección de Conformidad
de la especificación WebAuthn hace una declaración muy contundente que implica
que los sitios web, navegadores y autenticadores que cumplen con la
especificación son «seguros» contra comportamiento malicioso. Esta afirmación
simplifica demasiado la realidad de la seguridad. Estos son algunos escenarios
de ataque reales que aún pueden ocurrir:

  • Ataques basados ​​en navegador: algunos autenticadores (como
    una YubiKey 5C) no tienen pantalla integrada y dependen completamente del
    navegador para mostrar a los usuarios el sitio web al que se están
    autenticando. Si el navegador está comprometido por malware o una extensión
    maliciosa, podría mostrarle «attacker.com» mientras que en realidad
    envía a su autenticador una solicitud para firmar en «google.com».
  • Autenticadores comprometidos: la seguridad de las PassKey
    depende de que el autenticador proteja las claves privadas. Una clave de
    hardware falsificada, un software de autenticación con puerta trasera o
    malware que suplanta la identidad del autenticador integrado de su sistema
    operativo podría extraer secretamente sus claves privadas. Imagine comprar
    lo que parece ser una YubiKey de una fuente no confiable; podría estar
    enviando copias de sus claves a otra persona.

Las PassKey no protegen completamente contra la mayoría de las
vulnerabilidades de los dispositivos de los usuarios, como navegadores
maliciosos o malware. Sin embargo, sirven como limitadores de velocidad
eficaces para los ataques, ya que cada firma requiere una interacción
independiente del usuario con el autenticador. Además, las PassKey no
protegen contra atacantes que puedan controlar el dominio del sitio web, ya
sea mediante una toma directa o mediante el secuestro de subdominios.

Otro aspecto que los sitios web deben tener en cuenta son las colisiones de ID
de credenciales. La especificación solo exige que sean
probabilísticamente únicas, lo que significa que se generan aleatoriamente con una probabilidad
extremadamente baja (pero no nula) de duplicación, similar a los UUID.

¿Por qué es importante esto? Cuando un usuario registra una clave de acceso,
el sitio web almacena el ID de la credencial como identificador de la clave de
acceso de ese usuario. Si un atacante pudiera registrar una clave de acceso
con el mismo ID de credencial que su víctima, podría generar «confusión» en la
autenticación.

Esto puede parecer improbable, pero considere estos escenarios:

  • Un atacante que conoce el ID de credencial de una víctima (quizás obtenido
    del tráfico de red) podría intentar registrar su propia clave de acceso con
    ese mismo ID.
  • Una aplicación de autenticación maliciosa podría generar deliberadamente ID
    de credenciales duplicados en lugar de seguir los requisitos de aleatoriedad
    del protocolo.
  • Los errores de implementación podrían reducir la aleatoriedad efectiva en la
    generación de ID de credenciales.

La solución es sencilla: los sitios web
siempre deberían rechazar los intentos de registro
cuando el ID de credencial de una nueva clave coincida con uno ya existente
en la base de datos. Esto crea una protección simple, por orden de llegada,
contra conflictos de ID de credenciales.

Extensiones

WebAuthn también permite definir extensiones para los mecanismos utilizados
para generar credenciales y realizar la autenticación. Básicamente, un sitio
web puede solicitar el uso de una o más extensiones a través de la API de
WebAuthn. El navegador y el autenticador procesarán estas extensiones si son
compatibles e ignorarán las que no lo sean.

La especificación de WebAuthn enumera algunas extensiones definidas y enlaza
con el registro de la Autoridad de Números Asignados de Internet (IANA) para
obtener definiciones de más extensiones. Estas extensiones abarcan desde la
compatibilidad con API anteriores hasta la compatibilidad con funcionalidades
criptográficas completamente diferentes. Dado que esta entrada de blog trata
sobre criptografía, estas últimas extensiones son las más interesantes.

Una de estas extensiones es la que la especificación de WebAuthn denomina
prf
(familia de funciones pseudoaleatorias), que se basa en la extensión
hmac-secret definida en la especificación FIDO CTAP v2.1. Con la
extensión prf, el autenticador puede calcular HMAC-SHA-256 utilizando
una clave HMAC fija de 32 bytes generada aleatoriamente. La entrada para el
cálculo de HMAC es el resumen SHA-256 de un prefijo WebAuthn fijo, seguido de
la entrada proporcionada por el sitio web. Si bien esta extensión no es lo
suficientemente flexible como para implementar algo como HKDF, es posible
usarla para implementar HKDF Extract2.

Otra extensión similar se llama largeBlob y solicita a los
autenticadores compatibles que almacenen un «blob grande» de datos opacos que
el sitio web puede leer o escribir durante las aserciones de autenticación. El
sitio web puede usarlo para almacenar cualquier dato (sensible), como
certificados o claves criptográficas.

Por lo tanto, con estas extensiones, es posible derivar o almacenar claves
criptográficas estáticas. Como se sugiere en el ejemplo de largeBlob,
incluso se podría usar para el cifrado de extremo a extremo. Sin embargo, como
ocurre con todas las aplicaciones de criptografía en la configuración del
navegador, es extremadamente difícil, si no imposible, lograr una verdadera
seguridad de extremo a extremo.

Normalmente, esto requiere que el sistema sea resistente a servidores
maliciosos. La criptografía web se ejecuta en JavaScript proporcionado por un
servidor, lo que significa que un servidor malicioso puede simplemente
proporcionar JavaScript malicioso que extrae claves, envía mensajes
descifrados al servidor, etc. Peor aún, un servidor malicioso puede hacerlo de
forma muy selectiva, proporcionando JavaScript correcto a la mayoría de los
usuarios, pero JavaScript malicioso a un usuario objetivo específico.
Implementar la integridad de subrecursos para el código web (por ejemplo,
almacenar el hash de todas las versiones publicadas con un tercero de
confianza) y técnicas de transparencia binaria (por ejemplo, un registro
públicamente verificable y a prueba de manipulaciones) son dos soluciones
prometedoras para este tipo de problema.

Además, es importante tener en cuenta que la especificación considera todas
las extensiones opcionales, lo que significa que no hay garantía de que los
navegadores y autenticadores las admitan. Los sitios web deben comprobar si
las extensiones están disponibles cuando las requieren; de lo contrario, los
usuarios tendrán problemas para acceder a sus servicios. En el futuro, se
espera que todos los navegadores y autenticadores principales las admitan, lo
que podría mejorar la gestión de claves para la criptografía web.

En general, la especificación se encuentra en desarrollo activo y hay margen
para muchas más extensiones interesantes. Entre las posibles extensiones se
incluyen primitivas criptográficas adicionales (como esquemas de firma más
avanzados y pruebas de conocimiento cero), pero los contadores monótonos
serían una extensión interesante. Si bien no se trata directamente de una
función criptográfica, los contadores monótonos podrían utilizarse para
proteger el almacenamiento externo, como el almacenamiento en la nube con
cifrado de extremo a extremo, de ataques de reversión.

El camino a seguir para las PassKey

Ha llegado el momento de adoptar las PassKey. Sus fundamentos
criptográficos ofrecen sólidas garantías de seguridad que las convierten en la
opción predeterminada para los sistemas de autenticación modernos cuando se
implementan correctamente con WebAuthn.

Si bien no son una solución de seguridad perfecta, las claves de acceso
eliminan muchas vulnerabilidades críticas que han afectado a las contraseñas
durante décadas: nunca transmiten información confidencial a los servidores,
no se pueden reutilizar en diferentes sitios y resisten el phishing mediante
la vinculación de origen.

Consejo para usuarios y desarrolladores


Los usuarios deberían adoptar las claves de acceso y los desarrolladores
deberían apoyarlas siempre que sea posible.

Las claves de seguridad de hardware ofrecen la protección más sólida para
aplicaciones de alto valor, mientras que los autenticadores de plataforma
suelen ofrecer una mejor experiencia de usuario y funciones de copia de
seguridad. Al autenticarse en dispositivos no confiables, utilice las PassKey
de un dispositivo independiente con su propia pantalla para verificar las
solicitudes de autenticación.

Los desarrolladores deberían implementar mecanismos de recuperación de
cuentas, ya que las claves de acceso son pares de claves criptográficas que no
se pueden reconstruir en caso de pérdida. Incluso los autenticadores de
plataforma con funciones de copia de seguridad conllevan riesgos que los
usuarios deben comprender.

Las PassKey pueden servir como primer factor de autenticación, segundo
factor de autenticación o incluso
múltiples factores de autenticación. Sin embargo, los desarrolladores deben considerar las claves de acceso
dentro de su modelo de amenazas más amplio. Para protegerse contra servidores
maliciosos, como en aplicaciones E2EE, implemente técnicas de integridad de
subrecursos y transparencia binaria. A medida que WebAuthn evoluciona, nuevas
extensiones habilitarán más aplicaciones criptográficas, aunque la
compatibilidad varía según el navegador y el autenticador.

Fuente:
TrailsOfBits


Ver fuente

Related Post