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.
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:
- Penebus
publisher.example
meminta penukaran. 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:
- Catatan penukaran disertakan sebagai header permintaan
Sec-Redemption-Record
. foo.example
menerima data penukaran dan dapat mengurai data tersebut untuk menentukan apakahissuer.example
menganggap pengguna ini adalah manusia.foo.example
akan memberikan respons yang sesuai.
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:
Buat kumpulan angka pseudo-random yang dikenal sebagai nonce.
Menonaktifkan nonce (mengenkodenya sehingga penerbit tidak dapat melihat kontennya) dan melampirkannya ke permintaan dalam header
Sec-Trust-Token
.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
- Demo Trust Tokens
- Memulai uji coba origin Chrome
- Mempelajari Privacy Sandbox
- Penjelasan Trust Token API
- Project Chromium: Trust Token API
- Intent untuk Mengimplementasikan: Trust Token API
- Status Platform Chrome
- Kartu Privasi
- Perpanjangan Kartu Privasi
Terima kasih kepada semua yang telah membantu menulis dan meninjau postingan ini.