Passer au contenu principal

Trust Tokens est une nouvelle API pour aider à lutter contre la fraude et à distinguer les robots des vrais humains, sans suivi passif.


Mise à jour

Il apparaît dans:
Sûr et sécurisé

résumé

Les jetons de confiance permettent à une origine d'émettre des jetons de chiffrement à un utilisateur de confiance. Les jetons sont stockés par le navigateur de l'utilisateur. Le navigateur peut utiliser les jetons dans d'autres contextes pour évaluer l'authenticité de l'utilisateur.

L'API Trust Token permet de transmettre la confiance d'un utilisateur dans un contexte (tel que gmail.com) à un autre contexte (tel qu'une annonce diffusée sur nytimes.com) sans identifier l'utilisateur ni lier les deux identités.

Pourquoi avons-nous besoin de jetons de confiance?

Le Web a besoin de moyens pour établir des signaux de confiance qui montrent qu'un utilisateur est ce qu'il prétend être, et non un robot se faisant passer pour un humain ou un tiers malveillant fraudant une personne ou un service réel. La protection contre la fraude est particulièrement importante pour les annonceurs, les fournisseurs d'annonces et les CDN.

Malheureusement, de nombreux mécanismes existants pour mesurer et propager la fiabilité (pour déterminer si une interaction avec un site provient d'un être humain réel, par exemple) tirent parti de techniques qui peuvent également être utilisées pour la prise d'empreintes digitales.

Terme clé:
Empreintes digitales permet aux sites d'identifier et de suivre les utilisateurs individuels en obtenant des données sur leur appareil, leur système d'exploitation et les paramètres du navigateur (tels que les préférences de langue,
agent utilisateuret polices disponibles) ou des changements dans l'état de l'appareil. Cela peut être fait sur le serveur en vérifiant les en-têtes de la requête ou sur le client avec JavaScript.

L'empreinte digitale utilise des mécanismes dont les utilisateurs ne sont pas conscients et ne peuvent pas contrôler. Des sites comme Panoptique y
amiunique.org montrez comment les données d'empreintes digitales peuvent être combinées pour vous identifier en tant qu'individu.

L'API doit préserver la confidentialité, permettant à la confiance de se répandre sur les sites sans suivre les utilisateurs individuels.

Qu'y a-t-il dans la proposition de jetons de confiance?

Le Web est basé sur la génération de signaux de confiance pour détecter la fraude et le spam. Une façon d'y parvenir consiste à suivre la navigation avec des identifiants globaux par utilisateur entre les sites. Pour une API qui préserve la confidentialité, ce n'est pas acceptable.

De la proposition
explicateur:

Cette API propose une nouvelle zone de stockage par origine pour les jetons cryptographiques de style «Privacy Pass», qui sont accessibles dans des contextes tiers. Ces jetons ne sont pas personnalisés et ne peuvent pas être utilisés pour suivre les utilisateurs, mais ils sont signés de manière cryptographique afin qu'ils ne puissent pas être falsifiés.

Lorsqu'une origine se trouve dans un contexte où ils font confiance à l'utilisateur, ils peuvent émettre un lot de jetons au navigateur, qui peuvent être «dépensés» ultérieurement dans un contexte où l'utilisateur serait inconnu ou moins fiable. Fondamentalement, les jetons sont indiscernables les uns des autres, ce qui empêche les sites Web de suivre les utilisateurs à travers eux.

De plus, nous proposons un mécanisme d'extension permettant au navigateur de signer les demandes sortantes avec des clés liées à un échange de jeton particulier.

Exemple d'utilisation de l'API

Ce qui suit est une adaptation de
exemple de code dans l'explicateur d'API.

Imaginez qu'un utilisateur visite un site Web d'actualités (éditeur.exemple) qui intègre la publicité d'un réseau publicitaire tiers (foo.example). L'utilisateur a déjà utilisé un site de réseau social qui émet des jetons de confiance (émetteur.exemple).

La séquence suivante montre le fonctionnement des jetons de confiance.

1. L'utilisateur visite émetteur.exemple.

2. émetteur.exemple vérifie que l'utilisateur est un humain et exécute le JavaScript suivant:

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

3. Le navigateur de l'utilisateur stocke les jetons de confiance associés à émetteur.exemple.

4. Quelque temps plus tard, l'utilisateur visite éditeur.exemple.

5. éditeur.exemple veut savoir si l'utilisateur est un humain, alors ils demandent
émetteur.exemple exécution du JavaScript suivant:

fetch ( 'https: //issuer.example/redeem' , {
trustToken : {
type : 'srr-token-redemption'
}
} ) ;

Avec ce code:

  1. Le navigateur demande un rachat.
  2. L'émetteur renvoie un enregistrement de remboursement signé (SRR) indiquant qu'il a déjà émis un jeton valide pour ce navigateur.
  3. Lorsque la promesse retournée est résolue, le SRR peut être utilisé dans les demandes de ressources suivantes.

6. éditeur.exemple alors vous pouvez exécuter le JavaScript suivant dans un document de niveau supérieur:

fetch ( 'foo.example / get-content' , {
trustToken : {
tapez : 'send-srr' ,
émetteur : 'https: //issuer.example'
}
} ) ;

Avec ce code:

  1. foo.example vous obtenez le SRR, et maintenant vous avez une indication que
    émetteur.exemple pensait que cet utilisateur était humain.
  2. foo.example répondre en conséquence.

Vous pouvez avoir un historique d'achat sur un site de commerce électronique, des enregistrements sur une plateforme de localisation ou un historique de compte auprès d'une banque. Les émetteurs peuvent également prendre en compte d'autres facteurs, tels que la durée pendant laquelle vous avez un compte ou d'autres interactions (comme le CAPTCHA ou la soumission de formulaires) qui augmentent la confiance de l'émetteur dans la probabilité qu'il s'agisse d'un véritable être humain.

Émission de jetons de confiance

Si un émetteur de jetons de confiance considère que l'utilisateur est digne de confiance, par exemple
émetteur.exemple, l'émetteur peut obtenir des jetons de confiance pour l'utilisateur en effectuant un
aller chercher () demande avec un nouveau trustToken paramètre:

fetch ( 'issuer.example / .well-known / trust-token' , {
trustToken : {
type : 'token-request' ,
émetteur : < émetteur >
}
} ) . puis ( ... )

Cela invoque une extension du Passe de confidentialité protocole de diffusion utilisant un nouvelle crypto primitive:

  1. Générez un ensemble de nombres pseudo-aléatoires appelés nonces.

  2. Blind les nonces (les encoder pour que l'émetteur ne puisse pas voir leur contenu) et les attacher à la requête dans un Jeton de confiance Sec entête.

  3. Envoyez une demande POST au point de terminaison fourni.

Le point de terminaison répond avec des jetons aveugles (signatures sur les nonces aveugles), puis les jetons sont démasqués et le navigateur les stocke en interne avec les nonces associés en tant que jetons de confiance.

Rachat de jetons de confiance

Un site d'éditeur (comme éditeur.exemple dans l'exemple ci-dessus), vous pouvez vérifier s'il existe des jetons de confiance disponibles pour l'utilisateur:

const userHasTokens = attendre le document . hasTrustToken ( < émetteur > ) ;

Si des jetons sont disponibles, le site de l'éditeur peut les utiliser pour obtenir un enregistrement de remboursement signé:

fetch ( 'issuer.example / .well-known / trust-token' , {
...
trustToken : {
type : 'srr-token-redemption' ,
émetteur : 'issuer.example' ,
refreshPolicy : 'aucun'
}
...
} ) . puis ( ... )

Le site de l'éditeur peut alors envoyer le SRR aux requêtes qu'il effectue à l'aide de l'API suivante:

chercher ( ' ' , {
...
trustToken : {
tapez : 'send-srr' ,
émetteur : < émetteur > ,
}
...
} ) . puis ( ... ) ;

L'éditeur doit inclure le SRR dans les demandes qui nécessitent un jeton de confiance, telles que la publication d'un commentaire, l'aimage d'une page ou le vote dans un sondage.

Les jetons de confiance ne sont accessibles que via les options Fetch, XHR et HTML