Erste Schritte mit Trust Tokens

Trust Tokens ist eine neue API, mit der eine Website ohne passives Tracking eine begrenzte Menge an Informationen von einem Browserkontext an einen anderen (z. B. websiteübergreifend) übertragen kann, um Betrug zu bekämpfen.



Zusammenfassung

Mit Trust Tokens kann ein Ursprung kryptografische Tokens für einen vertrauenswürdigen Nutzer ausgeben. Die Tokens werden vom Browser des Nutzers gespeichert. Der Browser kann die Tokens dann in anderen Kontexten verwenden, um die Authentizität des Nutzers zu bewerten.

Mit der Trust Token API kann das Vertrauen eines Nutzers in einem Kontext in einen anderen Kontext übertragen werden, ohne den Nutzer zu identifizieren oder die beiden Identitäten zu verknüpfen.

Sie können die API mit unserer Demo ausprobieren und in den Chrome-Entwicklertools auf den Tabs Netzwerk und Anwendung Tokens prüfen.

Screenshot mit Trust Tokens auf dem Chrome-Entwicklertools-Tab „Network“
Trust Tokens in den Chrome-Entwicklertools auf dem Tab Netzwerk.
Screenshot mit Trust Tokens auf dem Tab „Anwendung“ der Chrome-Entwicklertools.
„Trust Tokens“ in den Chrome-Entwicklertools auf dem Tab Anwendung in den Chrome-Entwicklertools.

Wozu brauchen wir Trust Tokens?

Das Web braucht Möglichkeiten, um Vertrauenssignale zu schaffen, die zeigen, dass ein Nutzer die ist, der er vorgibt zu sein. Es darf kein Bot vorgeben, ein Mensch zu sein, oder ein böswilliger Dritter, der eine echte Person oder einen Dienst betrügt. Betrugsschutz ist für Werbetreibende, Anzeigenanbieter und CDNs besonders wichtig.

Leider nutzen viele der vorhandenen Mechanismen zur Messung und Verbreitung von Vertrauenswürdigkeit – beispielsweise um herauszufinden, ob eine Interaktion mit einer Website von einem echten Menschen stammt – Techniken, die auch für das Fingerprinting verwendet werden können.

In der API muss der Datenschutz gewahrt werden, damit die Vertrauensstellung auf Websites ohne individuelles Nutzer-Tracking weitergegeben werden kann.

Was beinhaltet das Trust Tokens-Angebot?

Im Web werden Vertrauenssignale genutzt, um Betrug und Spamming zu erkennen. Eine Möglichkeit dafür ist das Tracking des Surfens mit globalen, websiteübergreifenden IDs pro Nutzer. Für eine datenschutzfreundliche API ist das nicht akzeptabel.

In der Erläuterung zum Angebot:

Diese API schlägt einen neuen ursprungsspezifischen Speicherbereich für kryptografische Tokens des Stils „Privacy Pass“ vor, auf die über Drittanbieterkontexte zugegriffen werden kann. Diese Tokens sind nicht personalisiert und können nicht zur Verfolgung von Nutzern verwendet werden. Sie sind jedoch kryptografisch signiert, sodass sie nicht gefälscht werden können.

Wenn sich ein Ursprung in einem Kontext befindet, in dem er dem Nutzer vertraut, kann er dem Browser einen Batch von Tokens ausstellen, der später in einem Kontext ausgegeben werden kann, in dem der Nutzer ansonsten unbekannt oder weniger vertrauenswürdig wäre. Entscheidend ist, dass die Tokens nicht voneinander zu unterscheiden sind und Websites daran hindern, Nutzer über sie zu verfolgen.

Wir schlagen außerdem einen Erweiterungsmechanismus für den Browser vor, um ausgehende Anfragen mit Schlüsseln zu signieren, die an eine bestimmte Token-Einlösung gebunden sind.

Beispiel für die API-Verwendung

Der folgende Code wurde aus dem Beispielcode in der API-Erklärung übernommen.

Angenommen, ein Nutzer besucht eine Nachrichtenwebsite (publisher.example), auf der Werbung von einem Drittanbieter-Werbenetzwerk (foo.example) eingebettet ist. Er hat zuvor eine Social-Media-Website verwendet, auf der Vertrauenstokens (issuer.example) ausgestellt werden.

Die folgende Reihenfolge zeigt, wie Trust Tokens funktionieren.

1.Der Nutzer besucht issuer.example und führt Aktionen aus, die den Eindruck erwecken, dass es sich um einen echten Menschen handelt. Dazu gehören Kontoaktivitäten oder das Bestehen einer CAPTCHA-Abfrage.

2.issuer.example bestätigt, dass es sich bei dem Nutzer um einen Menschen handelt, und führt den folgenden JavaScript-Code aus, um ein Trust Token an den Browser des Nutzers zu senden:

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

3.Das Trust Token wird im Browser des Nutzers gespeichert und mit issuer.example verknüpft.

4.Einige Zeit später besucht der Nutzer publisher.example.

5.publisher.example möchte wissen, ob der Nutzer ein echter Mensch ist. publisher.example vertraut issuer.example und prüft daher, ob der Browser des Nutzers gültige Tokens von diesem Ursprung hat:

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

6.Wenn dadurch ein Promise zurückgegeben wird, das in true aufgelöst wird, bedeutet das, dass der Nutzer Tokens aus issuer.example hat und publisher.example versuchen kann, ein Token einzulösen:

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

Durch folgenden Code:

  1. Der Einlösungsanbieter publisher.example fordert eine Einlösung an.
  2. Wenn das Einlösen erfolgreich ist, gibt der Aussteller issuer.example einen Einlösungseintrag zurück, der anzeigt, dass er irgendwann ein gültiges Token an diesen Browser ausgegeben hat.

    7.Sobald das von fetch() zurückgegebene Promise aufgelöst ist, kann der Einlösungseintrag in nachfolgenden Ressourcenanfragen verwendet werden:

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

Durch folgenden Code:

  1. Einlösungseinträge sind als Anfrageheader Sec-Redemption-Record enthalten.
  2. foo.example empfängt den Einlösungseintrag und kann ihn parsen, um festzustellen, ob issuer.example den Nutzer für einen Menschen hält.
  3. foo.example antwortet entsprechend.
Wie kann eine Website herausfinden, ob sie Ihnen vertrauenswürdig ist?

Vielleicht hast du deinen Einkaufverlauf auf einer E-Commerce-Website, Check-ins auf einer Standortplattform oder den Kontoverlauf bei einer Bank. Aussteller können auch andere Faktoren berücksichtigen, z. B. wie lange Sie schon ein Konto haben, oder andere Interaktionen (z. B. CAPTCHAs oder das Senden von Formularen), die das Vertrauen des Ausstellers in die Wahrscheinlichkeit stärken, dass Sie ein echter Mensch sind.

Ausstellung von Trust Tokens

Wenn der Nutzer von einem Trust-Token-Aussteller wie issuer.example als vertrauenswürdig eingestuft wird, kann der Aussteller Trust Tokens für den Nutzer abrufen. Dazu stellt er eine fetch()-Anfrage mit einem trustToken-Parameter:

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

Dadurch wird eine Erweiterung des Privacy Pass-Ausstellungsprotokolls mit einer neuen kryptografischen Primitive aufgerufen:

  1. Erstellen Sie einen Satz von Pseudozufallszahlen, die als Nonces bezeichnet werden.

  2. Blinden Sie die Nonces (codieren Sie sie so, dass der Aussteller seinen Inhalt nicht sehen kann) und hängen Sie sie in einem Sec-Trust-Token-Header an die Anfrage an.

  3. Senden Sie eine POST-Anfrage an den angegebenen Endpunkt.

Der Endpunkt antwortet mit blinden Tokens (Signaturen auf den blinden Nonces). Die Tokens werden dann entblößt und intern zusammen mit den zugehörigen Nonces vom Browser als Trust Tokens gespeichert.

Einlösung von Trust Tokens

Eine Publisher-Website (z. B. publisher.example im obigen Beispiel) kann prüfen, ob dem Nutzer Trust Tokens zur Verfügung stehen:

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

Wenn Tokens verfügbar sind, kann die Publisher-Website diese einlösen, um einen Einlösungsnachweis zu erhalten:

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

Mit einem fetch()-Aufruf wie dem folgenden kann der Verlag oder Webpublisher Einlösungsdatensätze in Anfragen einbinden, die ein Trust Token erfordern. So kann er z. B. einen Kommentar posten, eine Seite mit „Gefällt mir“ markieren oder an einer Umfrage abstimmen:

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

Einlösungseinträge sind als Sec-Redemption-Record-Anfrageheader enthalten.

Datenschutz

Tokens sind so konzipiert, dass sie nicht verknüpft werden können. Ein Aussteller kann aggregierte Informationen darüber erhalten, welche Websites seine Nutzer besuchen, kann die Ausstellung jedoch nicht mit der Einlösung verknüpfen: Wenn ein Nutzer ein Token einlöst, kann der Aussteller das Token nicht von anderen Tokens unterscheiden, die er erstellt hat. Trust Tokens existieren derzeit jedoch nicht vakuum: Ein Aussteller könnte derzeit theoretisch die Identität eines Nutzers über Websites hinweg verknüpfen, wie etwa Drittanbieter-Cookies und verdeckte Tracking-Techniken. Es ist wichtig, dass Websites diesen Wandel im System verstehen, während sie ihren Support planen. Dies ist ein allgemeiner Aspekt der Umstellung für viele Privacy Sandbox APIs, der hier nicht weiter erläutert wird.

Sicherheitsaspekte

Ausschöpfung von Trust-Tokens:Eine schädliche Website könnte absichtlich die Tokens eines Nutzers von einem bestimmten Aussteller erschöpfen. Es gibt mehrere Abwehrmaßnahmen gegen diese Art von Angriff, z. B. können Aussteller viele Tokens auf einmal bereitstellen, sodass Nutzer ausreichend dafür sorgen können, dass Browser immer nur ein Token pro Seitenaufruf der obersten Ebene einlösen.

Verhinderung von doppelten Ausgaben:Malware versucht möglicherweise, auf alle Trust Tokens eines Nutzers zuzugreifen. Die Tokens werden jedoch im Laufe der Zeit aufgebraucht, da jede Einlösung an denselben Tokenaussteller gesendet wird. Dieser kann prüfen, ob jedes Token nur einmal verwendet wird. Zur Risikominimierung können Aussteller auch weniger Tokens signieren.

Anfragemechanismen

Möglicherweise können Sie das Senden von Einlösungseinträgen außerhalb von fetch() zulassen, z. B. mit Navigationsanfragen. Websites können auch Ausstellerdaten in HTTP-Antwortheader aufnehmen, um das Einlösen von Tokens parallel zum Seitenaufbau zu ermöglichen.

Noch einmal: Für diesen Vorschlag ist Ihr Feedback erforderlich. Wenn Sie Kommentare haben, erstellen Sie ein Problem im Explainer-Repository des Trust Tokens.

Weitere Informationen


Vielen Dank an alle, die uns beim Verfassen dieses Beitrags geholfen haben.

Foto von ZSun Fu bei Unsplash.