Mulai menggunakan Trust Token

Trust Token adalah API baru yang memungkinkan situs menyampaikan sejumlah informasi terbatas dari satu konteks penjelajahan ke konteks penjelajahan lainnya (misalnya, lintas situs) untuk membantu memberantas penipuan, tanpa pelacakan pasif.



Ringkasan

Trust token memungkinkan origin menerbitkan token kriptografis kepada pengguna yang dipercayainya. Token disimpan oleh browser pengguna. Selanjutnya, browser dapat menggunakan token tersebut dalam konteks lain untuk mengevaluasi keaslian pengguna.

Trust Token API memungkinkan kepercayaan pengguna dalam satu konteks disampaikan ke konteks lain tanpa mengidentifikasi pengguna atau menautkan kedua identitas tersebut.

Anda dapat mencoba API dengan demo kami, dan token pemeriksaan di tab Jaringan dan Aplikasi Chrome DevTools.

Screenshot yang menunjukkan Trust Token di tab Network di Chrome DevTools.
Trust Tokens di tab Jaringan Chrome DevTools.
Screenshot yang menunjukkan Trust Token di tab Application Chrome DevTools.
Trust Tokens di tab Application Chrome DevTools.

Mengapa kami membutuhkan Token Kepercayaan?

Web memerlukan cara untuk menetapkan sinyal kepercayaan yang menunjukkan bahwa pengguna adalah identitasnya, dan bukan bot yang berpura-pura menjadi manusia, atau pihak ketiga berbahaya yang menipu orang atau layanan sungguhan. Perlindungan terhadap penipuan sangat penting bagi pengiklan, penyedia iklan, dan CDN.

Sayangnya, banyak mekanisme yang ada untuk mengukur dan menyebarkan kredibilitas—untuk mengetahui apakah interaksi dengan situs berasal dari manusia sungguhan, misalnya—memanfaatkan teknik yang juga dapat digunakan untuk pelacakan sidik jari.

API harus menjaga privasi, sehingga kepercayaan dapat disebarkan di seluruh situs tanpa pelacakan pengguna individual.

Apa yang ada dalam proposal Trust Tokens?

Web mengandalkan pembangunan sinyal kepercayaan untuk mendeteksi penipuan dan spamming. Salah satu cara untuk melakukannya adalah dengan melacak penjelajahan dengan ID global, lintas situs per pengguna. Untuk API yang menjaga privasi, hal tersebut tidak dapat diterima.

Dari penjelasan proposal:

API ini mengusulkan area penyimpanan per origin baru untuk token kriptografis bergaya "Privacy Pass", yang dapat diakses dalam konteks pihak ketiga. Token ini tidak dipersonalisasi dan tidak dapat digunakan untuk melacak pengguna, tetapi ditandatangani secara kriptografis sehingga tidak dapat dipalsukan.

Jika origin berada dalam konteks tempat pengguna tersebut memercayai pengguna, mereka dapat menerbitkan kumpulan token ke browser, yang dapat "dibelanjakan" di lain waktu dalam konteks ketika pengguna tidak diketahui atau kurang tepercaya. Yang terpenting, token tidak dapat dibedakan satu sama lain, sehingga mencegah situs melacak pengguna melalui token tersebut.

Kami mengusulkan lebih lanjut mekanisme ekstensi bagi browser untuk menandatangani permintaan keluar dengan kunci yang terikat dengan penukaran token tertentu.

Contoh penggunaan API

Berikut ini diadaptasi dari kode contoh dalam penjelasan API.

Bayangkan pengguna mengunjungi situs berita (publisher.example) yang menyematkan iklan dari jaringan iklan pihak ketiga (foo.example). Pengguna sebelumnya pernah menggunakan situs media sosial yang menerbitkan token kepercayaan (issuer.example).

Urutan di bawah menunjukkan cara kerja token kepercayaan.

1.Pengguna mengunjungi issuer.example dan melakukan tindakan yang membuat situs tersebut yakin bahwa mereka adalah manusia sungguhan, seperti aktivitas akun, atau berhasil melewati tantangan CAPTCHA.

2.issuer.example akan memverifikasi bahwa pengguna adalah manusia, dan menjalankan JavaScript berikut untuk menerbitkan token kepercayaan ke browser pengguna:

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

3.Browser pengguna menyimpan token kepercayaan, yang mengaitkannya dengan issuer.example.

4.Beberapa waktu kemudian, pengguna membuka publisher.example.

5.publisher.example ingin mengetahui apakah pengguna tersebut adalah manusia sungguhan. publisher.example memercayai issuer.example sehingga dapat memeriksa apakah browser pengguna memiliki token yang valid dari origin tersebut:

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

6.Jika metode ini menampilkan promise yang di-resolve ke true, artinya pengguna memiliki token dari issuer.example, sehingga publisher.example dapat mencoba menukarkan token:

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

Dengan kode ini:

  1. Penukaran publisher.example meminta penukaran.
  2. Jika penukaran berhasil, penerbit issuer.example akan menampilkan data penukaran yang menunjukkan bahwa pada suatu saat mereka mengeluarkan token yang valid untuk browser ini.

    7.Setelah promise yang ditampilkan oleh fetch() di-resolve, data penukaran dapat digunakan dalam permintaan resource berikutnya:

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

Dengan kode ini:

  1. Catatan penukaran disertakan sebagai header permintaan Sec-Redemption-Record.
  2. foo.example menerima data penukaran dan dapat mengurainya untuk menentukan apakah issuer.example menganggap pengguna ini adalah manusia.
  3. foo.example merespons sebagaimana mestinya.
Bagaimana sebuah situs web dapat mempercayai Anda?

Anda mungkin memiliki histori belanja dengan situs e-commerce, check in di platform lokasi, atau histori akun di bank. Penerbit mungkin juga mempertimbangkan faktor lain seperti berapa lama Anda telah memiliki akun, atau interaksi lain (seperti CAPTCHA atau pengiriman formulir) yang meningkatkan kepercayaan penerbit terhadap kemungkinan bahwa Anda adalah manusia sungguhan.

Penerbitan token kepercayaan

Jika pengguna dianggap dapat dipercaya oleh penerbit token kepercayaan seperti issuer.example, penerbit dapat mengambil token kepercayaan untuk pengguna dengan membuat permintaan fetch() menggunakan parameter trustToken:

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

Tindakan ini akan memanggil ekstensi protokol penerbitan Privacy Pass menggunakan primitif kriptografis baru:

  1. Membuat kumpulan angka pseudo-random yang dikenal sebagai nonce.

  2. Jalankan nonce (kodekan sehingga penerbit tidak dapat melihat kontennya) dan lampirkan ke permintaan di header Sec-Trust-Token.

  3. Kirim permintaan POST ke endpoint yang disediakan.

Endpoint merespons dengan token buta (tanda tangan pada nonce buta), lalu token akan di-unblind dan disimpan secara internal bersama nonce terkait oleh browser sebagai token kepercayaan.

Penukaran token kepercayaan

Situs penerbit (seperti publisher.example dalam contoh di atas) dapat memeriksa apakah ada token kepercayaan yang tersedia untuk pengguna:

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

Jika ada token yang tersedia, situs penayang dapat menukarkannya untuk mendapatkan data penukaran:

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

Penayang dapat menyertakan data penukaran dalam permintaan yang memerlukan token kepercayaan, seperti memposting komentar, menyukai halaman, atau memberi suara dalam polling, dengan menggunakan panggilan fetch() seperti berikut:

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

Data penukaran disertakan sebagai header permintaan Sec-Redemption-Record.

Pertimbangan privasi

Token dirancang agar 'tidak dapat dibatalkan'. Penerbit dapat mempelajari informasi gabungan tentang situs yang dikunjungi pengguna, tetapi tidak dapat menautkan penerbitan dengan penukaran: saat pengguna menukarkan token, penerbit tidak dapat membedakan token dari token lain yang telah dibuatnya. Namun, token kepercayaan saat ini tidak tersedia secara kosong: ada cara lain yang dapat dilakukan penerbit saat ini—secara teori—menggabungkan identitas pengguna di berbagai situs, seperti cookie pihak ketiga dan teknik pelacakan tersembunyi. Penting bagi situs untuk memahami transisi ekosistem ini saat merencanakan dukungan. Ini adalah aspek umum dari transisi untuk banyak API Privacy Sandbox, jadi tidak dibahas lebih lanjut di sini.

Pertimbangan keamanan

Kehabisan token kepercayaan: situs berbahaya dapat dengan sengaja merusak pasokan token pengguna dari penerbit tertentu. Ada beberapa mitigasi terhadap serangan semacam ini, seperti memungkinkan penerbit menyediakan banyak token sekaligus, sehingga pengguna memiliki persediaan yang memadai untuk memastikan browser hanya menukarkan satu token per kunjungan halaman tingkat atas.

Pencegahan pembelanjaan ganda: malware mungkin mencoba mengakses semua token kepercayaan pengguna. Namun, token akan habis seiring waktu, karena setiap penukaran dikirim ke penerbit token yang sama, yang dapat memverifikasi bahwa setiap token hanya digunakan satu kali. Untuk memitigasi risiko, penerbit juga dapat menandatangani lebih sedikit token.

Mekanisme permintaan

Anda mungkin dapat mengizinkan pengiriman data penukaran di luar fetch(), misalnya dengan permintaan navigasi. Situs mungkin juga dapat menyertakan data penerbit di header respons HTTP untuk mengaktifkan penukaran token secara paralel dengan pemuatan halaman.

Untuk menegaskan: proposal ini memerlukan masukan Anda. Jika Anda memiliki komentar, harap laporkan masalah di repositori penjelasan Token Kepercayaan.

Cari tahu selengkapnya


Terima kasih kepada semua yang telah membantu menulis dan meninjau postingan ini.

Foto oleh ZSun Fu di Unsplash.