Trust Tokens to nowy interfejs API, który umożliwia witrynie przenoszenie ograniczonej ilości informacji z jednego kontekstu przeglądania do innego (np. z wielu witryn) na potrzeby walki z oszustwami bez konieczności pasywnego śledzenia.
Podsumowanie
Tokeny zaufania umożliwiają źródłom wysyłanie tokenów kryptograficznych zaufanemu użytkownikowi. Tokeny są przechowywane przez przeglądarkę użytkownika. Przeglądarka może następnie użyć tokenów w innych kontekstach, aby ocenić autentyczność użytkownika.
Interfejs Trust Token API umożliwia przeniesienie zaufania użytkownika w jednym kontekście do innego kontekstu bez identyfikowania użytkownika czy łączenia obu tożsamości.
Możesz wypróbować ten interfejs API w wersji demonstracyjnej i sprawdzić tokeny na kartach Sieć i Aplikacja w Narzędziach deweloperskich w Chrome.
Dlaczego potrzebujemy tokenów zaufania?
W internecie trzeba tworzyć sygnały zaufania, które dowodzą, że użytkownik jest tym, za kogo się podaje, a nie botem podszywającym się pod człowieka albo złośliwą osobę trzecią defrustrującą prawdziwą osobę lub usługę. Ochrona przed oszustwami jest szczególnie ważna dla reklamodawców, dostawców reklam i sieci CDN.
Niestety wiele istniejących mechanizmów do pomiaru i rozpowszechniania wiarygodności – aby ustalić, czy interakcja ze stroną pochodzi na przykład ze strony prawdziwego człowieka – korzysta z technik, których można też użyć do odcisków cyfrowych.
Interfejs API musi chronić prywatność, umożliwiając rozpowszechnianie zaufania między witrynami bez śledzenia poszczególnych użytkowników.
Co zawiera propozycja dotycząca tokenów zaufania?
Internet wykorzystuje sygnały zaufania do wykrywania oszustw i spamowania. Można to robić na przykład przez śledzenie przeglądania z wykorzystaniem globalnych, identyfikatorów użytkownika w różnych witrynach. W przypadku interfejsu API chroniącego prywatność nie akceptujemy tego.
Z objaśnienia oferty pakietowej:
Ten interfejs API proponuje nowy obszar przechowywania na poszczególnych domenach dla tokenów kryptograficznych w stylu „Privacy Pass”, które są dostępne w kontekstach innych firm. Te tokeny nie są personalizowane i nie można ich używać do śledzenia użytkowników. Są one jednak podpisane kryptograficznie, więc nie można ich sfałszować.
Gdy źródło znajduje się w kontekście, w którym użytkownik jest zaufany, może wysłać do przeglądarki grupę tokenów, które można „wydać” w późniejszym czasie w kontekście, w którym użytkownik byłby nieznany lub mniej zaufany. Tokeny nie można odróżnić od siebie, co uniemożliwia witrynom śledzenie użytkowników za ich pomocą.
Ponadto proponujemy mechanizm rozszerzenia przeglądarki do podpisywania żądań wychodzących za pomocą kluczy powiązanych z konkretnym wykorzystaniem tokena.
Przykładowe wykorzystanie interfejsu API
Ten fragment został zaadaptowany na podstawie przykładowego kodu w wyjaśnieniu interfejsu API.
Wyobraź sobie, że użytkownik odwiedza witrynę z wiadomościami (publisher.example
), na której znajdują się reklamy z zewnętrznej sieci reklamowej (foo.example
). Wcześniej korzystał z witryny w mediach społecznościowych, która wydaje tokeny zaufania (issuer.example
).
Poniższa sekwencja pokazuje, jak działają tokeny zaufania.
1.Użytkownik otwiera stronę issuer.example
i wykonuje działania, które sprawiają, że strona uważa, że jest człowiekiem. Może to być aktywność na koncie lub przejście testu CAPTCHA.
2.issuer.example
weryfikuje, czy użytkownik jest człowiekiem, i uruchamia następujący kod JavaScript, aby wysłać token zaufania w przeglądarce 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, który wiąże go z elementem issuer.example
.
4.Jakiś czas później użytkownik odwiedza stronę publisher.example
.
5.publisher.example
chce wiedzieć, czy użytkownik jest człowiekiem. Domena publisher.example
ufa usłudze issuer.example
, więc sprawdza, czy przeglądarka użytkownika ma prawidłowe tokeny z tego źródła:
document.hasTrustToken('https://issuer.example');
6.Jeśli to polecenie zwraca obietnicę o wartości true
, oznacza to, że użytkownik ma tokeny z domeny issuer.example
, więc publisher.example
może pró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:
- Użytkownik
publisher.example
prosi o wykorzystanie oferty. Jeśli skorzystanie z oferty się powiedzie, 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
fetch()
zostanie zrealizowana, rekordu wykorzystania można używać 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:
- Rekordy wykorzystania są uwzględniane jako nagłówek żądania
Sec-Redemption-Record
. foo.example
otrzymuje rekord wykorzystania i może go przeanalizować, aby określić, czyissuer.example
uważa, że użytkownik to człowiek.foo.example
odpowiada odpowiednio.
Możesz mieć historię zakupów w witrynie e-commerce, meldowania się na platformie lokalizacyjnej lub historii konta w banku. Wystawcy mogą też brać pod uwagę inne czynniki, takie jak czas korzystania z konta lub inne interakcje (takie jak CAPTCHA czy przesłanie formularza), które zwiększają zaufanie wydawcy do prawdopodobieństwa, że jesteś człowiekiem.
Wydawanie tokenów zaufania
Jeśli wydawca tokena zaufania (np. issuer.example
) uzna użytkownika za godnego zaufania, może on pobrać dla niego tokeny zaufania, wysyłając żądanie fetch()
z parametrem trustToken
:
fetch('issuer.example/trust-token', {
trustToken: {
type: 'token-request'
}
}).then(...)
Powoduje to wywołanie rozszerzenia protokołu wystawiania dokumentu Privacy Pass z wykorzystaniem nowego prymitywu kryptograficznego:
Wygeneruj zestaw pseudolosowych liczb nazywanych liczbą jednorazową.
Zakoduj liczby jednorazowe (zakoduj je tak, aby wydawca nie mógł zobaczyć ich zawartości) i dołącz je do żądania w nagłówku
Sec-Trust-Token
.Wyślij żądanie POST do podanego punktu końcowego.
Punkt końcowy odpowiada zaciemnionym tokenem (sygnatury na ślepych jednorazowych), po czym tokeny są niezaciemniane i przechowywane wewnętrznie razem z powiązanymi z nimi tokenami zaufania 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 dostępne są tokeny zaufania:
const userHasTokens = await document.hasTrustToken('issuer.example/trust-token');
Jeśli są dostępne tokeny, witryna wydawcy może je wykorzystać, aby otrzymać rekord wykorzystania:
fetch('issuer.example/trust-token', {
...
trustToken: {
type: 'token-redemption',
refreshPolicy: 'none'
}
...
}).then(...)
Wydawca może dołączać rekordy wykorzystania w żądaniach wymagających tokena zaufania – na przykład zamieścić komentarz, polubić stronę lub zagłosować w ankiecie – używając wywołania fetch()
w ten sposób:
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ą zaprojektowane tak, aby nie można było ich połączyć. Wydawca może poznać zbiorcze informacje o witrynach odwiedzanych przez jego użytkowników, ale nie może powiązać procesu wystawiania z wykorzystaniem tokena: gdy użytkownik wykorzysta token, wydawca nie może odróżnić go od innych utworzonych przez siebie tokenów. Obecnie jednak tokeny zaufania nie istnieją w próżni: istnieją inne sposoby – teoretycznie – wydawca może obecnie połączyć tożsamość użytkownika w różnych witrynach, np. za pomocą plików cookie innych firm i tajnych technik śledzenia. Właściciele witryn powinni zrozumieć tę zmianę w ekosystemie, planując wsparcie. To ogólny aspekt przechodzenia wielu interfejsów API Piaskownicy prywatności, więc nie omawiamy go tutaj bardziej.
Bezpieczeństwo
Wyczerpanie tokena zaufania: szkodliwa witryna mogła celowo wyczerpać zasoby tokenów od określonego wydawcy. Istnieje kilka sposobów na złagodzenie tego typu ataków, np. umożliwienie wydawcom udostępnienia wielu tokenów jednocześnie, tak aby użytkownicy mieli pewność, że przeglądarki wykorzystują tylko 1 token na wyświetlenie strony najwyższego poziomu.
Zapobieganie podwójnemu wydatkom: złośliwe oprogramowanie może próbować uzyskać dostęp do wszystkich tokenów zaufania użytkownika. Jednak tokeny będą się jednak stopniowo wyczerpywać, ponieważ każde wykorzystanie kodu jest wysyłane do tego samego wydawcy tokena, który może sprawdzić, czy każdy z nich został użyty tylko raz. Aby ograniczyć ryzyko, wydawcy mogą też podpisywać mniej tokenów.
Mechanizmy żądań
Można zezwolić na wysyłanie rekordów wykorzystania kodu poza regionem fetch()
, na przykład w przypadku żądań nawigacji. Witryny mogą też uwzględniać dane wydawcy w nagłówkach odpowiedzi HTTP, aby umożliwić wykorzystywanie tokenów równolegle z wczytywaniem stron.
Dla przypomnienia: ta propozycja wymaga Twojej opinii. Jeśli masz jakieś komentarze, utwórz zgłoszenie w repozytorium objaśniającym token zaufania.
Więcej informacji
- Wersja demonstracyjna tokenów zaufania
- Pierwsze kroki z testami origin Chrome
- Podstawowe informacje o Piaskownicy prywatności
- Wyjaśnienie interfejsu Trust Token API
- Projekty Chromium: interfejs Trust Token API
- Intencja do wdrożenia: interfejs Trust Token API
- Stan platformy Chrome
- Dokument ochrony prywatności
- Przedłużenia karty Privacy Pass
Dziękujemy wszystkim, którzy pomogli napisać i zrecenzować ten post.