Wprowadzenie do tokenów zaufania

Tokeny zaufania to nowy interfejs API, który umożliwia witrynie przekazywanie pewnej ilości informacji z jednego kontekstu przeglądania do innego (na przykład między witrynami), co pomaga w walce z oszustwami bez konieczności pasywnego śledzenia.



Podsumowanie

Tokeny zaufania umożliwiają źródłom wydawanie tokenów kryptograficznych zaufanym użytkownikom. Tokeny są przechowywane w przeglądarce użytkownika. Następnie przeglądarka może używać tokenów w innych kontekstach do oceny autentyczności użytkownika.

Interfejs Trust Token API umożliwia przekazywanie zaufania użytkownika w jednym kontekście w innym kontekście bez identyfikowania użytkownika i łączenia 2 tożsamości.

Możesz go wypróbować za pomocą naszej prezentacji i tokenów inspekcji na kartach Sieć i Aplikacja w Chrome DevTools.

Zrzut ekranu przedstawiający tokeny zaufania na karcie Sieć Narzędzi deweloperskich w Chrome.
Tokeny zaufania na karcie Sieć w Narzędziach deweloperskich w Chrome.
Zrzut ekranu przedstawiający tokeny zaufania na karcie aplikacji Narzędzi deweloperskich w Chrome.
Tokeny zaufania na karcie Aplikacja w Narzędziach deweloperskich w Chrome.

Dlaczego potrzebujemy tokenów zaufania?

Sieć potrzebuje sposobów na wyznaczanie sygnałów zaufania wskazujących, że użytkownik jest tym, za kogo się podaje, a nie bot, który podszywa się pod człowieka, lub podejrzany ktoś inny, który oszukuje prawdziwą osobę lub usługę. Ochrona przed oszustwami jest szczególnie ważna w przypadku reklamodawców, dostawców reklam i sieci CDN.

Niestety, wiele istniejących mechanizmów do pomiaru i rozpowszechniania wiarygodności – aby sprawdzić, czy interakcja z witryną pochodzi na przykład od prawdziwego człowieka – wykorzystuje techniki, których można też używać do pobierania odcisków cyfrowych.

Interfejs API musi chronić prywatność, umożliwiając rozpowszechnianie zaufania w witrynach bez możliwości śledzenia poszczególnych użytkowników.

Co zawiera oferta tokenów zaufania?

Internet polega na budowaniu sygnałów zaufania do wykrywania oszustw i spamu. Można to zrobić na przykład przez śledzenie przeglądania za pomocą globalnych identyfikatorów użytkowników, które mogą pochodzić z różnych witryn. W przypadku interfejsu API chroniącego prywatność jest to niedopuszczalne.

Na podstawie objaśnienia oferty pakietowej:

Ten interfejs API proponuje nowy obszar przechowywania według źródła dla tokenów kryptograficznych typu „Privacy Pass”, które są dostępne w kontekście innych firm. Tokeny te nie są spersonalizowane i nie można ich używać do śledzenia użytkowników, ale są podpisane kryptograficznie, więc nie można ich sfałszować.

Gdy źródło znajduje się w kontekście, w którym użytkownik ufa, może wydać przeglądarce grupę tokenów, które można później „wydać” w kontekście, gdy użytkownik byłby nieznany lub mniej zaufany. Co ważne, tokeny nie różnią się od siebie, co uniemożliwia witrynom śledzenie użytkowników za ich pomocą.

Oferujemy też mechanizm rozszerzenia przeglądarki do podpisywania żądań wychodzących kluczami powiązanymi z konkretnym wykorzystaniem tokena.

Przykładowe wykorzystanie interfejsu API

Poniższy fragment jest zaadaptowany z przykładowego kodu w objaśnieniu interfejsu API.

Załóżmy, że użytkownik odwiedza witrynę z wiadomościami (publisher.example), która zawiera reklamy z zewnętrznej sieci reklamowej (foo.example). Użytkownik korzystał wcześniej ze strony w mediach społecznościowych, która wystawiała tokeny zaufania (issuer.example).

Poniższa sekwencja pokazuje, jak działają tokeny zaufania.

1.Użytkownik odwiedza stronę issuer.example i podejmuje w witrynie działania, które sprawiają, że właściciel witryny uważa, że jest prawdziwym człowiekiem. Może to być np. aktywność na koncie lub zdanie testu CAPTCHA.

2.issuer.example sprawdza, czy użytkownik to człowiek, i uruchamia następujący kod JavaScript, aby wygenerować token zaufania do przeglądarki użytkownika:

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

3.Przeglądarka użytkownika przechowuje token zaufania wiążący go z issuer.example.

4.Po jakimś czasie użytkownik otwiera stronę publisher.example.

5.publisher.example chce się dowiedzieć, czy użytkownik to prawdziwy człowiek. publisher.example ufa issuer.example, dlatego sprawdza, czy przeglądarka użytkownika ma prawidłowe tokeny z tego źródła:

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

6.Jeśli zostanie zwrócona obietnica przekierowująca do true, oznacza to, że użytkownik ma tokeny z issuer.example, więc publisher.example może spróbować wykorzystać token:

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

Następującym kodem:

  1. Użytkownik publisher.example prosi o jego realizację.
  2. Jeśli wykorzystanie się uda, wydawca issuer.example zwraca rekord wykorzystania, który wskazuje, że w którymś momencie wystawił prawidłowy token dla tej przeglądarki.

    7.Gdy obietnica zwrócona przez usługę fetch() zostanie zrealizowana, rekord wykorzystania będzie mógł być używany w kolejnych żądaniach dotyczących zasobów:

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

Następującym kodem:

  1. Rekordy wykorzystania są uwzględnione jako nagłówek żądania Sec-Redemption-Record.
  2. foo.example otrzymuje rekord wykorzystania i może go przeanalizować, aby określić, czy issuer.example uważa, że ten użytkownik był człowiekiem.
  3. foo.example odpowiada odpowiednio.
W jaki sposób witryna może określić, czy można jej zaufać?

Możesz mieć historię zakupów w witrynie e-commerce, zameldowania na platformie lokalizacji lub historię konta w banku. Wystawcy mogą też wziąć pod uwagę inne czynniki, takie jak czas posiadania konta i inne interakcje (takie jak CAPTCHA czy przesłanie formularza), które zwiększają zaufanie wydawcy do prawdopodobieństwa, że jesteś prawdziwym człowiekiem.

Wystawianie tokenów zaufania

Jeśli wydawca tokena zaufania (np. issuer.example) zostanie uznany za godnego zaufania, wydawca może pobrać jego tokeny zaufania, wysyłając żądanie fetch() z parametrem trustToken:

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

Wywołuje to rozszerzenie protokołu wystawiania Privacy Pass za pomocą nowego obiektu podstawowego kryptograficznego:

  1. Wygeneruj zbiór pseudolosowych liczb nazywanych napisami.

  2. Ukryj liczby jednorazowe (zakoduj je, aby wydawca nie mógł wyświetlić ich zawartości) i dołącz je do żądania w nagłówku Sec-Trust-Token.

  3. Wyślij żądanie POST do podanego punktu końcowego.

Punkt końcowy odpowiada zaciemnionym tokenom (podpisom na ślepych liczbach jednorazowych), a potem tokeny są odblokowywane i przechowywane wewnętrznie razem z powiązanymi liczbami jednorazowymi przez przeglądarkę jako tokeny zaufania.

Wykorzystanie tokena zaufania

Witryna wydawcy (np. publisher.example w przykładzie powyżej) może sprawdzić, czy dla użytkownika są dostępne tokeny zaufania:

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

Jeśli są dostępne tokeny, witryna wydawcy może je wykorzystać, aby uzyskać rejestr:

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

Wydawca może uwzględnić rekordy wykorzystania w żądaniach, które wymagają tokena zaufania – np. poprzez opublikowanie komentarza, polubienie strony lub głosowanie w ankiecie, używając wywołania fetch() takiego jak poniżej:

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

Rekordy wykorzystania są uwzględniane jako nagłówek żądania Sec-Redemption-Record.

Kwestie dotyczące prywatności

Tokeny są projektowane tak, aby nie dało się ich połączyć. Wydawca może uzyskać zbiorcze informacje o witrynach odwiedzanych przez użytkowników, ale nie może powiązać go z wykorzystaniem karty. Gdy użytkownik wykorzysta token, wystawca nie może go odróżnić od innych utworzonych przez siebie tokenów. Obecnie tokeny zaufania nie istnieją jednak w próżni. Istnieją też inne sposoby, które wydawca może – teoretycznie – dołączyć do tożsamości użytkownika w różnych witrynach – są to na przykład pliki cookie innych firm i tajne techniki śledzenia. Firmy powinny rozumieć te zmiany w ekosystemie i przygotować swoje wsparcie. To ogólny aspekt przenoszenia wielu interfejsów API Piaskownicy prywatności, który nie został tu szczegółowo omówiony.

Bezpieczeństwo

Wyczerpanie tokenów zaufania: złośliwa witryna może celowo wyczerpać dostęp użytkownika do tokenów od określonego wydawcy. Istnieje kilka środków łagodzących ten rodzaj ataku, np. umożliwienie wydawcom udostępniania wielu tokenów naraz. Dzięki temu użytkownicy mają wystarczającą ilość zasobów, aby mieć pewność, że przeglądarki wykorzystają tylko 1 token na wyświetlenie strony najwyższego poziomu.

Zapobieganie podwójnym wydatkom: złośliwe oprogramowanie może próbować uzyskać dostęp do wszystkich tokenów zaufania użytkownika. Z czasem jednak tokeny wyczerpią się, ponieważ każde wykorzystanie jest wysyłane do tego samego wydawcy tokenów, który może sprawdzić, czy każdy token został użyty tylko raz. Aby ograniczyć ryzyko, wydawcy mogą również podpisywać mniej tokenów.

Mechanizmy żądań

Możesz zezwolić na wysyłanie rekordów wykorzystania poza fetch(), na przykład w przypadku żądań nawigacji. Witryny mogą też mieć możliwość dołączania danych wydawcy do nagłówków odpowiedzi HTTP, aby umożliwić wykorzystywanie tokenów równolegle z wczytywaniem strony.

Przypominamy: ta oferta wymaga Twojej opinii. Jeśli masz uwagi, utwórz problem w repozytorium wyjaśniającym tokeny zaufania.

Więcej informacji


Dziękujemy wszystkim, którzy pomogli napisać i sprawdzić tego posta.

Autor zdjęcia: ZSun Fu, strona Unsplash.