Mulai menggunakan Trust Token

Trust Tokens adalah API baru yang memungkinkan situs menyampaikan informasi dalam jumlah terbatas dari satu konteks penjelajahan ke konteks penjelajahan lainnya (misalnya, di seluruh situs) untuk membantu memberantas penipuan, tanpa pelacakan pasif.



Ringkasan

Trust token memungkinkan origin mengeluarkan token kriptografi kepada pengguna yang dipercaya. Token disimpan oleh browser pengguna. Selanjutnya, browser dapat menggunakan token dalam konteks lain untuk mengevaluasi keaslian pengguna.

Trust Token API memungkinkan kepercayaan pengguna dalam satu konteks untuk 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 Jaringan Chrome DevTools.
Percayai Token di tab Jaringan Chrome DevTools.
Screenshot yang menunjukkan Trust Token di tab Chrome DevTools Application.
Trust Tokens di tab Application Chrome DevTools.

Mengapa kami memerlukan Trust Token?

Web memerlukan cara untuk mendapatkan sinyal kepercayaan yang menunjukkan bahwa identitas pengguna sama persis, 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 kepercayaan—untuk mencari tahu apakah interaksi dengan situs berasal dari manusia sungguhan, misalnya—memanfaatkan teknik yang juga dapat digunakan untuk pelacakan sidik jari.

API harus menjaga privasi, sehingga memungkinkan kepercayaan diterapkan di seluruh situs tanpa pelacakan pengguna individual.

Apa yang ada dalam proposal Trust Tokens?

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

Dari proposal penjelasan:

API ini mengusulkan area penyimpanan per origin baru untuk token kriptografi gaya "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 yang membuat pengguna memercayai pengguna, origin tersebut dapat menerbitkan batch token ke browser, yang dapat "dibelanjakan" di lain waktu dalam konteks saat pengguna tidak diketahui atau kurang tepercaya. Yang terpenting, token tidak dapat dibedakan satu sama lain, sehingga mencegah situs melacak pengguna melalui token tersebut.

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

Contoh penggunaan API

Kode berikut ini diadaptasi dari kode contoh di penjelasan API.

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

Urutan di bawah ini menunjukkan cara kerja trust token.

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

2.issuer.example memverifikasi bahwa pengguna adalah manusia, dan menjalankan JavaScript berikut untuk mengeluarkan 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 mengunjungi publisher.example.

5.publisher.example ingin mengetahui apakah pengguna tersebut adalah manusia sungguhan. publisher.example memercayai issuer.example, sehingga memeriksa apakah browser pengguna memiliki token yang valid dari asal 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. Penebus publisher.example meminta penukaran.
  2. Jika penukaran berhasil, penerbit issuer.example akan menampilkan data penukaran yang menunjukkan bahwa pada waktu tertentu mereka mengeluarkan token yang valid ke browser ini.

    7.Setelah promise yang ditampilkan oleh fetch() diselesaikan, 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 mengurai data tersebut untuk menentukan apakah issuer.example menganggap pengguna ini adalah manusia.
  3. foo.example akan memberikan respons yang sesuai.
Bagaimana cara situs menentukan apakah akan memercayai Anda?

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

Penerbitan token kepercayaan

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

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

Tindakan ini memanggil perpanjangan protokol penerbitan Privacy Pass menggunakan primitif kriptografi baru:

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

  2. Menonaktifkan nonce (mengenkodenya sehingga penerbit tidak dapat melihat kontennya) dan melampirkannya ke permintaan dalam header Sec-Trust-Token.

  3. Kirim permintaan POST ke endpoint yang disediakan.

Endpoint akan merespons dengan token yang di-blinded (tanda tangan pada nonce tunanetra), lalu token tersebut tidak di-blinding dan disimpan secara internal bersama dengan nonce terkait oleh browser sebagai token kepercayaan.

Penukaran token kepercayaan

Situs penayang (seperti publisher.example pada contoh di atas) dapat memeriksa apakah ada trust token yang tersedia untuk pengguna:

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

Jika token 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 trust token, 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(...);

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

Pertimbangan privasi

Token dirancang agar 'tidak dapat dibatalkan tautannya'. Penerbit dapat mempelajari informasi gabungan tentang situs mana yang dikunjungi penggunanya, tetapi tidak dapat menautkan penerbitan dengan penukaran: saat pengguna menukarkan token, penerbit tidak dapat membedakan token tersebut dengan token lain yang telah dibuat. Namun, trust token saat ini tidak ada dalam kekosongan: ada cara lain yang dapat digunakan penerbit saat ini—secara teori—bergabung dengan identitas pengguna di seluruh situs, seperti cookie pihak ketiga dan teknik pelacakan tersembunyi. Penting bagi situs untuk memahami transisi ekosistem ini saat merencanakan dukungan mereka. Ini adalah aspek umum dari transisi untuk banyak Privacy Sandbox API, jadi tidak dibahas lebih lanjut di sini.

Pertimbangan keamanan

Kehabisan token kepercayaan: situs berbahaya dapat dengan sengaja menghabiskan persediaan token pengguna dari penerbit tertentu. Ada beberapa mitigasi terhadap serangan jenis 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 trust token 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 juga mungkin dapat menyertakan data penerbit di header respons HTTP untuk mengaktifkan penukaran token secara paralel dengan pemuatan halaman.

Untuk diulang: 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.