Comienza a usar Trust Tokens

Trust Tokens es una nueva API para permitir que un sitio web transmita una cantidad limitada de información de un contexto de navegación a otro (por ejemplo, entre sitios) para ayudar a combatir el fraude, sin seguimiento pasivo.



Resumen

Los tokens de confianza permiten que un origen emita tokens criptográficos a un usuario de confianza. El navegador del usuario almacena los tokens. Luego, el navegador puede usar los tokens en otros contextos para evaluar la autenticidad del usuario.

La API de Trust Token permite que la confianza de un usuario en un contexto se transmita a otro sin identificar al usuario ni vincular las dos identidades.

Puedes probar la API con nuestra demostración y también inspeccionar tokens en las pestañas Network y Application de Herramientas para desarrolladores de Chrome.

Captura de pantalla en la que se muestran los tokens de confianza en la pestaña Network de Chrome DevTools.
Tokens de confianza en la pestaña Red de las Herramientas para desarrolladores de Chrome
Captura de pantalla en la que se muestran los tokens de confianza en la pestaña Application de las Herramientas para desarrolladores de Chrome.
Tokens de confianza en la pestaña Aplicación de las Herramientas para desarrolladores de Chrome

¿Por qué necesitamos tokens de confianza?

La Web necesita formas de establecer indicadores de confianza que demuestren que un usuario es quien dice ser y no un bot que simula ser un ser humano o un tercero malicioso que defrauda a una persona o un servicio reales. La protección contra fraudes es particularmente importante para los anunciantes, los proveedores de anuncios y las CDN.

Lamentablemente, muchos mecanismos existentes para medir y propagar la confiabilidad (por ejemplo, averiguar si la interacción con un sitio es de un ser humano real) aprovechan las técnicas que también se pueden usar para la creación de huellas digitales.

La API debe preservar la privacidad para permitir que la confianza se propague entre sitios sin un seguimiento individual del usuario.

¿Qué se incluye en la propuesta de tokens de confianza?

La Web depende de la creación de indicadores de confianza para detectar fraudes y spam. Una forma de hacerlo es mediante el seguimiento de la navegación con identificadores globales entre sitios por usuario. Eso no es aceptable para una API que preserva la privacidad.

En la explicación de la propuesta:

Esta API propone una nueva área de almacenamiento por origen para los tokens criptográficos del estilo "Privacy Pass", a los que se puede acceder en contextos de terceros. Estos tokens no son personalizados y no se pueden usar para hacer un seguimiento de los usuarios, pero están firmados de manera criptográfica para que no se puedan falsificar.

Cuando un origen se encuentra en un contexto en el que confía en el usuario, puede emitir un lote de tokens que el navegador pueda "utilizarse" más adelante, en un contexto en el que el usuario sería desconocido o menos confiable. Cabe destacar que los tokens no se distinguen entre sí, lo que impide que los sitios web hagan un seguimiento de los usuarios a través de ellos.

Además, proponemos un mecanismo de extensión para que el navegador firme solicitudes salientes con claves vinculadas a un canje de token específico.

Ejemplo de uso de la API

Lo siguiente es una adaptación del código de muestra de la explicación de la API.

Imagina que un usuario visita un sitio web de noticias (publisher.example) que incorpora publicidad de una red de publicidad de terceros (foo.example). El usuario usó anteriormente un sitio de redes sociales que emite tokens de confianza (issuer.example).

En la secuencia siguiente, se muestra cómo funcionan los tokens de confianza.

1.El usuario visita issuer.example y realiza acciones que llevan al sitio a creer que es un ser humano real, como la actividad de la cuenta o la aprobación de un desafío de CAPTCHA.

2.issuer.example verifica que el usuario sea un ser humano y ejecuta el siguiente JavaScript para emitir un token de confianza al navegador del usuario:

fetch('https://issuer.example/trust-token', {
  trustToken: {
    type: 'token-request',
    issuer: 'https://issuer.example'
  }
}).then(...)

3.El navegador del usuario almacena el token de confianza y lo asocia con issuer.example.

4.Un tiempo más tarde, el usuario visita publisher.example.

5.publisher.example quiere saber si el usuario es un ser humano real. publisher.example confía en issuer.example, por lo que verifica si el navegador del usuario tiene tokens válidos de ese origen:

document.hasTrustToken('https://issuer.example');

6.Si se muestra una promesa que se resuelve en true, significa que el usuario tiene tokens de issuer.example, por lo que publisher.example puede intentar canjear un token:

fetch('https://issuer.example/trust-token', {
trustToken: {
  type: 'token-redemption',
  issuer: 'https://issuer.example',
  refreshPolicy: {none, refresh}
}
}).then(...)

Por este código:

  1. El canjeador publisher.example solicita un canje.
  2. Si el canje se realiza correctamente, la entidad emisora issuer.example mostrará un registro de canje que indica que en algún momento emitió un token válido para este navegador.

    7.Una vez que se resuelve la promesa que muestra fetch(), se puede usar el registro de canje en las solicitudes de recursos posteriores:

fetch('https://foo.example/get-content', {
  trustToken: {
    type: 'send-redemption-record',
    issuers: ['https://issuer.example', ...]
  }
});

Por este código:

  1. Los registros de canje se incluyen como un encabezado de solicitud Sec-Redemption-Record.
  2. foo.example recibe el registro de canje y puede analizarlo para determinar si issuer.example pensó que este usuario era un ser humano.
  3. foo.example responde en consecuencia.
¿Cómo puede un sitio web determinar si puede confiar en ti?

Es posible que tengas un historial de compras con un sitio de comercio electrónico, registros de visitas en una plataforma de ubicaciones o el historial de una cuenta en un banco. Las entidades emisoras también pueden analizar otros factores, como hace cuánto tiempo tienes una cuenta o bien otras interacciones (como CAPTCHA o el envío de formularios) que aumentan la confianza de la entidad emisora en la probabilidad de que seas un ser humano real.

Emisión de token de confianza

Si una entidad emisora de tokens de confianza, como issuer.example, considera que el usuario es confiable, la entidad emisora puede recuperar tokens de confianza para el usuario mediante una solicitud fetch() con un parámetro trustToken:

fetch('issuer.example/trust-token', {
  trustToken: {
    type: 'token-request'
  }
}).then(...)

Esto invoca una extensión del protocolo de emisión de Privacy Pass con una nueva primitiva criptográfica:

  1. Genera un conjunto de números pseudoaleatorios conocidos como nonces.

  2. Ciega los nonces (codifícalos para que la entidad emisora no pueda ver su contenido) y adjúntalos a la solicitud en un encabezado Sec-Trust-Token.

  3. Envía una solicitud POST al extremo proporcionado.

El extremo responde con tokens cegados (firmas en los nonces ciegos) y, luego, los tokens se descenderán y almacenan internamente junto con los nonces asociados mediante el navegador como tokens de confianza.

Canje de token de confianza

Un sitio de publicador (como publisher.example en el ejemplo anterior) puede verificar si hay tokens de confianza disponibles para el usuario:

const userHasTokens = await document.hasTrustToken('issuer.example/trust-token');

Si hay tokens disponibles, el sitio del editor puede canjearlos para obtener un registro de canje:

fetch('issuer.example/trust-token', {
  ...
  trustToken: {
    type: 'token-redemption',
    refreshPolicy: 'none'
  }
  ...
}).then(...)

El editor puede incluir registros de canje en las solicitudes que requieren un token de confianza, como publicar un comentario, marcar “me gusta” en una página o votar en una encuesta, mediante una llamada a fetch() como la siguiente:

fetch('https://foo.example/post-comment', {
  ...
  trustToken: {
    type: 'send-redemption-record',
    issuers: ['issuer.example/trust-token', ...]
  }
  ...
}).then(...);

Los registros de canje se incluyen como un encabezado de solicitud Sec-Redemption-Record.

Consideraciones de privacidad

Los tokens están diseñados para ser “invinculables”. Una entidad emisora puede obtener información agregada sobre los sitios que visitan sus usuarios, pero no puede vincular la emisión con el canje: cuando un usuario canjea un token, la entidad emisora no puede diferenciarlo de otros tokens que haya creado. Sin embargo, por el momento, los tokens de confianza no existen de manera inequívoca. En teoría, una entidad emisora podría unirse a la identidad de un usuario en distintos sitios, como cookies de terceros y técnicas de seguimiento encubierto. Es importante que los sitios comprendan esta transición del ecosistema mientras planifican su asistencia. Este es un aspecto general de la transición de muchas APIs de Privacy Sandbox, por lo que no se analiza con más detalle aquí.

Consideraciones de seguridad

Agotamiento de los tokens de confianza: Un sitio malicioso podría agotar deliberadamente el suministro de tokens de un usuario proveniente de una entidad emisora en particular. Existen varias mitigaciones contra este tipo de ataques, como permitir que las entidades emisoras proporcionen muchos tokens a la vez, de modo que los usuarios tengan un suministro adecuado para garantizar que los navegadores solo canjeen un token por vista de página de nivel superior.

Prevención de la doble inversión: Es posible que un software malicioso intente acceder a todos los tokens de confianza del usuario. Sin embargo, los tokens se agotarán con el tiempo, ya que cada canje se envía a la misma entidad emisora, que puede verificar que cada token se use solo una vez. Para mitigar el riesgo, las entidades emisoras también podrían firmar menos tokens.

Mecanismos de solicitud

Es posible permitir el envío de registros de canje fuera de fetch(), por ejemplo, con solicitudes de navegación. Los sitios también podrían incluir datos de la entidad emisora en los encabezados de respuesta HTTP para habilitar el canje de tokens en paralelo con la carga de la página.

Recuerda que esta propuesta necesita tus comentarios. Si tienes comentarios, crea un problema en el repositorio de explicación del token de confianza.

Más información


Gracias a todos los que nos ayudaron a escribir y revisar esta publicación.

Foto de ZSun Fu en Unsplash.