Contenidos
Trust Tokens est une nouvelle API pour aider à lutter contre la fraude et à distinguer les robots des vrais humains, sans suivi passif.
Mise à jour
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:
- Le navigateur demande un rachat.
- L'émetteur renvoie un enregistrement de remboursement signé (SRR) indiquant qu'il a déjà émis un jeton valide pour ce navigateur.
- 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:
foo.example
vous obtenez le SRR, et maintenant vous avez une indication que
émetteur.exemple
pensait que cet utilisateur était humain.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:
-
Générez un ensemble de nombres pseudo-aléatoires appelés nonces.
-
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. -
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
item: non accessible directement.
Considérations relatives à la confidentialité
Les jetons sont conçus pour être «non liés». Un émetteur peut obtenir des informations agrégées sur les sites que ses utilisateurs visitent, mais ne peut pas lier l'émission à l'échange - lorsqu'un utilisateur rachète un jeton, l'émetteur ne peut pas différencier le jeton des autres jetons qu'il a créés. Cependant, les jetons de confiance n'existent actuellement pas dans le vide - il existe d'autres moyens par lesquels un émetteur pourrait, en théorie, faire correspondre l'identité d'un utilisateur sur plusieurs sites, tels que les cookies tiers et les techniques de suivi secrètes. Il est important que les sites comprennent cette transition de l'écosystème lorsqu'ils planifient leur soutien. Il s'agit d'un aspect général de la transition pour de nombreuses API Privacy Sandbox, il n'est donc pas abordé plus en détail ici.
Considérations relatives à la sécurité
Confiance dans l'épuisement des jetons: un site malveillant pourrait délibérément épuiser l'offre de jetons d'un utilisateur d'un émetteur particulier. Il existe plusieurs mesures d'atténuation contre ce type d'attaque, par exemple en permettant aux émetteurs de fournir plusieurs jetons à la fois, de sorte que les utilisateurs disposent d'un approvisionnement adéquat pour garantir que les navigateurs n'utilisent qu'un seul jeton par vue de page de niveau supérieur.
Prévention des doubles dépenses: les logiciels malveillants peuvent essayer d'accéder à tous les jetons de confiance d'un utilisateur. Cependant, les jetons seront utilisés au fil du temps, car chaque échange est envoyé au même émetteur de jetons, qui peut vérifier que chaque jeton n'est utilisé qu'une seule fois. Pour atténuer le risque, les émetteurs pourraient également signer moins de jetons.
Mécanismes de demande
Il peut être possible d'autoriser l'envoi des SRR en dehors de aller chercher ()
, par exemple, avec des demandes de navigation. Les sites peuvent également inclure des données d'émetteur dans les en-têtes de réponse HTTP pour permettre l'utilisation de jetons en parallèle avec le chargement de la page.
Pour réitérer: cette proposition a besoin de vos commentaires! Si vous avez des commentaires, veuillez
créer un problème dans le jeton de confiance référentiel explicatif.
Savoir plus
Merci à Kayce Basques, David Van Cleve, Steven Valdez, Tancrède Lepoint et Marshall Vale pour leur aide dans la rédaction et la révision de ce billet.
photo par ZSun Fu au Unsplash.