Erste Schritte mit Trust Tokens

Trust Tokens ist eine neue API, die es einer Website ermöglicht, eine begrenzte Menge an Informationen (z. B. seitenübergreifend) von einem Browserkontext in einen anderen zu übertragen, um Betrug zu bekämpfen, ohne dass passives Tracking erforderlich ist.



Zusammenfassung

Mit Trust Tokens kann eine Quelle kryptografische Tokens an einen vertrauenswürdigen Nutzer ausstellen. 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 dass der Nutzer identifiziert oder die beiden Identitäten verknüpft werden müssen.

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

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

Wozu werden Trust Tokens benötigt?

Im Web müssen Vertrauenssignale erzeugt werden, aus denen hervorgeht, dass ein Nutzer tatsächlich die ist, die er vorgibt zu sein. Es darf kein Bot sein, der vorgibt, ein Mensch zu sein, oder ein böswilliger Dritter, der eine echte Person oder einen echten Dienst betrügt. Betrugsschutz ist besonders wichtig für Werbetreibende, Anzeigenanbieter und CDNs.

Leider nutzen viele der bestehenden Mechanismen zur Bewertung und Verbreitung der Vertrauenswürdigkeit, z. B. um zu ermitteln, ob eine Interaktion mit einer Website von einem echten Menschen stammt, Techniken, die auch für Fingerprinting verwendet werden können.

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

Was enthält das Trust Tokens-Angebot?

Das Web nutzt Vertrauenssignale, um Betrug und Spamming zu erkennen. Eine Möglichkeit dafür ist das Tracking des Surfens mit globalen, websiteübergreifenden Kennungen pro Nutzer. Bei einer datenschutzfreundlichen API ist dies nicht akzeptabel.

Aus der Erklärung des Angebots:

Diese API schlägt einen neuen ursprungsspezifischen Speicherbereich für kryptografische Tokens vom Stil „Privacy Pass“ vor, auf die in Drittanbieterkontexten zugegriffen werden kann. Diese Tokens sind nicht personalisiert und können nicht zum Nachverfolgen von Nutzern verwendet werden. Sie sind jedoch kryptografisch signiert, damit 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, die zu einem späteren Zeitpunkt in einem Kontext „ausgegeben“ werden können, in dem der Nutzer andernfalls unbekannt oder weniger vertrauenswürdig wäre. Wichtig ist, dass die Tokens nicht voneinander zu unterscheiden sind, sodass Websites Nutzer nicht über sie verfolgen können.

Außerdem schlagen wir einen Erweiterungsmechanismus für den Browser vor, um ausgehende Anfragen mit Schlüsseln zu signieren, die an eine bestimmte Tokeneinlösung gebunden sind.

Beispiel für die API-Verwendung

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

Angenommen, ein Nutzer besucht eine Nachrichtenwebsite (publisher.example), auf der Werbung aus einem Drittanbieter-Werbenetzwerk (foo.example) eingebettet ist. Er hat zuvor eine Social-Media-Website verwendet, die Trust Tokens ausgibt (issuer.example).

Die folgende Reihenfolge zeigt, wie Trust Tokens funktionieren.

1.Der Nutzer besucht issuer.example und führt Aktionen aus, durch die die Website den Eindruck erweckt, dass es sich um einen echten Menschen handelt, z. B. Kontoaktivitäten oder das Bestehen einer CAPTCHA-Abfrage.

2.issuer.example überprüft, ob der Nutzer ein Mensch ist, und führt den folgenden JavaScript-Code aus, um ein Trust Token für den Browser des Nutzers auszugeben:

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

3.Der Browser des Nutzers speichert das Trust Token und verknüpft es mit issuer.example.

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 aus diesem Ursprung hat:

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

6.Wenn dabei ein Promise zurückgegeben wird, das in true aufgelöst wird, bedeutet dies, dass der Nutzer Tokens von issuer.example hat, sodass 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ösungsempfänger publisher.example fordert eine Einlösung an.
  2. Wenn die Einlösung erfolgreich ist, gibt der Aussteller issuer.example einen Einlösungseintrag zurück, der angibt, dass er irgendwann ein gültiges Token an diesen Browser ausgegeben hat.

    7.Sobald das von fetch() zurückgegebene Versprechen aufgelöst wurde, 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 im Anfrageheader Sec-Redemption-Record enthalten.
  2. foo.example empfängt den Einlösungseintrag und kann ihn parsen, um festzustellen, ob issuer.example diesen Nutzer für einen Menschen gehalten hat.
  3. foo.example reagiert entsprechend.
Wie kann eine Website feststellen, ob sie dir vertrauen kann?

Sie haben einen Einkaufsverlauf auf einer E-Commerce-Website, Check-ins auf einer Standortplattform oder einen Kontoverlauf bei einer Bank. Aussteller berücksichtigen möglicherweise auch andere Faktoren, z. B. wie lange Sie ein Konto haben, oder andere Interaktionen (z. B. CAPTCHAs oder das Senden von Formularen), die das Vertrauen des Ausstellers in die Wahrscheinlichkeit erhöhen, 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, indem er eine fetch()-Anfrage mit einem trustToken-Parameter stellt:

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

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

  1. Generieren Sie eine Reihe von Pseudozufallszahlen, die als Nonces bezeichnet werden.

  2. Blenden Sie die Nonces ein, codieren Sie sie, damit der Aussteller den Inhalt nicht sehen kann, und hängen Sie sie in einem Sec-Trust-Token-Header an die Anfrage an.

  3. Sendet eine POST-Anfrage an den angegebenen Endpunkt.

Der Endpunkt antwortet mit verblindenen Tokens (Signaturen auf den blinden Nonces). Anschließend werden die Tokens entschlüsselt und intern zusammen mit den zugehörigen Nonces vom Browser als Trust-Tokens gespeichert.

Einlösung von Trust Tokens

Eine Publisher-Website (wie publisher.example im Beispiel oben) kann prüfen, ob für den Nutzer Trust Tokens verfügbar sind:

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

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

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

Der Verlag oder Webpublisher kann Einlösungsdatensätze in Anfragen einschließen, für die ein Trust Token erforderlich ist. Dazu kann er einen fetch()-Aufruf wie den folgenden verwenden:

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.

Überlegungen zum Datenschutz

Tokens sind nicht verknüpfbar. Ein Aussteller kann aggregierte Informationen darüber erhalten, welche Websites seine Nutzer besuchen, aber die Ausstellung nicht mit der Einlösung verknüpfen: Wenn ein Nutzer ein Token einlöst, kann der Aussteller das Token nicht von anderen erstellten Tokens unterscheiden. Trust Tokens existieren jedoch derzeit nicht vollständig: Es gibt noch andere Möglichkeiten, wie ein Aussteller theoretisch die Identität eines Nutzers über Websites hinweg verknüpfen könnte, z. B. Drittanbieter-Cookies und verdecktes Tracking. Für Websites ist es wichtig, diesen Wandel bei der Planung ihrer Unterstützung zu verstehen. 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 das Angebot eines Nutzers mit Tokens von einem bestimmten Aussteller absichtlich erschöpfen. Es gibt verschiedene Maßnahmen gegen diese Art von Angriff, z. B. die Möglichkeit, Aussteller viele Tokens gleichzeitig bereitzustellen, sodass Nutzer in ausreichendem Umfang dafür sorgen können, dass Browser nur ein Token pro Seitenaufruf der obersten Ebene einlösen.

Verhinderung von doppelten Ausgaben:Malware kann versuchen, auf alle Trust Tokens eines Nutzers zuzugreifen. Tokens erschöpfen sich jedoch mit der Zeit, da jede Einlösung an denselben Tokenaussteller gesendet wird, der prüfen kann, ob jedes Token nur einmal verwendet wird. Zur Risikominimierung können Aussteller auch weniger Tokens signieren.

Anfragemechanismen

Eventuell ist es möglich, das Senden von Einlösungseinträgen außerhalb von fetch() zuzulassen, z. B. mit Navigationsanfragen. Websites können möglicherweise auch Ausstellerdaten in HTTP-Antwortheadern aufnehmen, um das Einlösen von Tokens parallel zum Seitenaufbau zu ermöglichen.

Nochmals möchte ich noch einmal darauf hinweisen: Zu diesem Angebot ist Ihr Feedback erforderlich. Wenn Sie Kommentare haben, erstellen Sie ein Problem im Erläuterungs-Repository für Trust Tokens.

Weitere Informationen


Vielen Dank an alle, die beim Schreiben und Rezensieren dieses Beitrags mitgewirkt haben.

Foto von ZSun Fu auf Unsplash