Comienza a usar Trust Tokens

Trust Tokens es una API nueva que permite que un sitio web transmita una cantidad limitada de información de un contexto de navegación a otro (por ejemplo, en todos los 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 Red y Aplicación de las Herramientas para desarrolladores de Chrome.

Captura de pantalla que muestra los tokens de confianza en la pestaña de red de Herramientas para desarrolladores de Chrome.
Tokens de confianza en la pestaña Red de las Herramientas para desarrolladores de Chrome
Captura de pantalla que muestra los tokens de confianza en la pestaña de la aplicación de Herramientas para desarrolladores de Chrome.
Confianza en los tokens en la pestaña Aplicación de 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 se haga pasar por un ser humano o un tercero malicioso que defrauda a una persona o servicio real. La protección contra fraude 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, para determinar si una interacción con un sitio es de una persona real) aprovechan las técnicas que también se pueden usar para la creación de huellas digitales.

La API debe preservar la privacidad, lo que permite que la confianza se propague entre los sitios sin realizar un seguimiento individual de los usuarios.

¿Qué incluye la propuesta de tokens de confianza?

La Web se basa en el desarrollo de indicadores de confianza para detectar fraudes y generación de spam. Una forma de hacerlo es mediante un seguimiento de la navegación con identificadores globales por usuario entre sitios. Para una API que preserva la privacidad, eso no es aceptable.

Desde la explicación de la propuesta:

Esta API propone una nueva área de almacenamiento por origen para tokens criptográficos de estilo "Pase de privacidad", a las que se puede acceder en contextos de terceros. Estos tokens no son personalizados y no se pueden usar para realizar un seguimiento de los usuarios, pero están firmados criptográficamente, por lo que no se pueden falsificar.

Cuando un origen se encuentra en un contexto en el que confía en el usuario, puede emitir al navegador un lote de tokens, que se pueden "gastar" más adelante en un contexto en el que el usuario, de lo contrario, sería desconocido o menos confiable. Cabe destacar que los tokens no se pueden distinguir entre sí, lo que evita que los sitios web realicen un seguimiento de los usuarios a través de ellos.

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

Ejemplo de uso de la API

La siguiente información se adaptó a partir del código de muestra en 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 ya usó un sitio de redes sociales que emite tokens de confianza (issuer.example).

La siguiente secuencia muestra cómo funcionan los tokens de confianza.

1.El usuario visita issuer.example y realiza acciones que hacen creer al sitio que es un ser humano real, como actividad en la cuenta o pasar un desafío de CAPTCHA.

2.issuer.example verifica que el usuario es 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 después, el usuario visita publisher.example.

5.publisher.example quiere saber si el usuario es una persona 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 como 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 canje publisher.example solicita un canje.
  2. Si el canje se realiza correctamente, la entidad emisora issuer.example muestra 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 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 analizar el registro para determinar si issuer.example pensó que el usuario era un ser humano.
  3. foo.example responde en consecuencia.
¿Cómo puede determinar un sitio web si debe confiar en su empresa?

Es posible que tengas un historial de compras en un sitio de comercio electrónico, registros en una plataforma de ubicación o un historial de la cuenta en un banco. Las entidades emisoras también pueden observar otros factores, como la antigüedad de la cuenta, o bien otras interacciones (como los CAPTCHA o el envío de formularios) que aumenten la confianza de la entidad emisora en la probabilidad de que seas una persona real.

Emisión de tokens de confianza

Si una entidad emisora de tokens de confianza como issuer.example considera que el usuario es de confianza, esta 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 Privacy Pass mediante una nueva primitiva criptográfica:

  1. Genera un conjunto de números seudoaleatorios 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), luego, los tokens se desciegas y se almacenan de forma interna junto con los nonces asociados por el navegador como tokens de confianza.

Canje de tokens 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 publicador puede canjearlos para obtener un registro de canje:

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

El publicador puede incluir registros de canje en las solicitudes que requieren un token de confianza, como publicar un comentario, indicar que te gusta 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 "desvinculables". 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, en la actualidad, los tokens de confianza no existen de forma vacía: hay otras formas en que una entidad emisora podría, en teoría, unir la identidad de un usuario en todos los sitios, como cookies de terceros y técnicas de seguimiento encubierto. Es importante que los sitios comprendan esta transición del ecosistema a medida que planifican su asistencia. Este es un aspecto general de la transición para muchas APIs de Privacy Sandbox, por lo que no se analiza con más detalle aquí.

Consideraciones de seguridad

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

Prevención de la doble inversión: El software malicioso puede intentar acceder a todos los tokens de confianza de un usuario. Sin embargo, los tokens se agotarán con el tiempo, ya que cada canje se envía a la misma entidad emisora de tokens, la cual 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. Es posible que los sitios también puedan 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.

Reitero que en esta propuesta necesitas 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