Trust Token เป็น API ใหม่ที่ช่วยให้เว็บไซต์สามารถส่งข้อมูลในจำนวนที่จำกัดจากบริบทการท่องเว็บหนึ่งไปยังอีกบริบทหนึ่ง (เช่น ในเว็บไซต์ต่างๆ) เพื่อช่วยต่อสู้กับการประพฤติมิชอบโดยไม่ต้องใช้การติดตามแบบแพสซีฟ
สรุป
โทเค็นความน่าเชื่อถือช่วยให้ต้นทางสามารถออกโทเค็นการเข้ารหัสให้กับผู้ใช้ที่โทเค็นนั้นเชื่อถือ เบราว์เซอร์ของผู้ใช้ จะจัดเก็บโทเค็น จากนั้นเบราว์เซอร์จะใช้โทเค็นในบริบทอื่นๆ เพื่อประเมินความถูกต้องของผู้ใช้ได้
Trust Token API ช่วยให้ความน่าเชื่อถือของผู้ใช้ในบริบทหนึ่งถ่ายทอดไปยังอีกบริบทหนึ่งได้โดยไม่ต้องระบุผู้ใช้หรือเชื่อมโยงข้อมูลประจำตัวทั้ง 2 รายการ
คุณสามารถลองใช้ API ได้ด้วยการสาธิตและโทเค็นการตรวจสอบในแท็บเครือข่ายและแอปพลิเคชันของ Chrome DevTools
ทำไมเราถึงต้องมี Trust Token
เว็บต้องการวิธีกำหนดสัญญาณความน่าเชื่อถือที่แสดงให้เห็นว่าผู้ใช้เป็นบุคคลตามที่อ้าง และไม่ใช่บ็อตที่แอบอ้างว่าเป็นมนุษย์หรือบุคคลที่สามที่เป็นอันตรายซึ่งหลอกลวงบุคคลหรือบริการจริง ความคุ้มครองจากการทุจริตมีความสำคัญเป็นพิเศษสำหรับผู้ลงโฆษณา ผู้ให้บริการโฆษณา และ CDN
อย่างไรก็ตาม มีกลไกมากมายในปัจจุบันที่ใช้วัดและถ่ายทอดความน่าเชื่อถือ ซึ่งจะตรวจสอบว่าการโต้ตอบกับเว็บไซต์มาจากคนจริงๆ หรือไม่นั้น จะใช้ประโยชน์จากเทคนิคต่างๆ ที่สามารถใช้ในฟิงเกอร์ปรินต์ได้ เป็นต้น
API ต้องรักษาความเป็นส่วนตัว ทำให้ความน่าเชื่อถือสามารถกระจายผ่านเว็บไซต์ต่างๆ ได้โดยไม่ต้องติดตามผู้ใช้แต่ละราย
ข้อเสนอโทเค็นความน่าเชื่อถือมีอะไรบ้าง
เว็บอาศัยการสร้างสัญญาณความน่าเชื่อถือในการตรวจหาการประพฤติมิชอบและการส่งสแปม วิธีหนึ่งที่ทำได้คือการติดตามการท่องเว็บด้วยตัวระบุผู้ใช้ทั่วโลกแบบข้ามเว็บไซต์ แต่สำหรับ API การรักษาความเป็นส่วนตัว เป็นสิ่งที่ใช้ไม่ได้
จากผู้อธิบายข้อเสนอ ให้ทำดังนี้
API นี้เสนอพื้นที่เก็บข้อมูลตามต้นทางใหม่สำหรับโทเค็นการเข้ารหัสลับรูปแบบ "Privacy Pass" ซึ่งเข้าถึงได้ในบริบทของบุคคลที่สาม โทเค็นเหล่านี้ไม่ได้ปรับให้เหมาะกับแต่ละบุคคลและจะใช้เพื่อติดตามผู้ใช้ไม่ได้ แต่มีการลงนามแบบเข้ารหัส ดังนั้นจึงไม่สามารถปลอมแปลงได้
เมื่อต้นทางอยู่ในบริบทที่เชื่อถือผู้ใช้ ก็จะออกชุดโทเค็นให้กับเบราว์เซอร์ได้ ซึ่งจะ "นำไปใช้" ในภายหลังได้ในบริบทที่ผู้ใช้ไม่รู้จักหรือเชื่อถือน้อยลง ที่สำคัญคือโทเค็นไม่สามารถแยกแยะจากกันได้ ซึ่งทำให้เว็บไซต์ไม่สามารถติดตามผู้ใช้ผ่านโทเค็นได้
นอกจากนี้ เราขอเสนอกลไกส่วนขยายเพื่อให้เบราว์เซอร์ลงนามในคําขอขาออกที่มีคีย์ที่เชื่อมโยงกับการแลกสิทธิ์โทเค็นที่เฉพาะเจาะจง
ตัวอย่างการใช้งาน API
ตัวอย่างต่อไปนี้ดัดแปลงมาจากโค้ดตัวอย่างในข้อความอธิบาย API
สมมติว่าผู้ใช้เข้าชมเว็บไซต์ข่าว (publisher.example
) ที่ฝังโฆษณาจากเครือข่ายโฆษณาของบุคคลที่สาม (foo.example
) มาก่อนหน้านี้ ผู้ใช้เคยใช้เว็บไซต์โซเชียลมีเดียที่ออกโทเค็นความน่าเชื่อถือ (issuer.example
)
ลำดับด้านล่างแสดงวิธีการทำงานของโทเค็นความน่าเชื่อถือ
1.ผู้ใช้ไปที่ issuer.example
และดำเนินการที่ทำให้เว็บไซต์เชื่อว่าเป็นมนุษย์ เช่น กิจกรรมในบัญชี หรือผ่านชาเลนจ์ CAPTCHA
2.issuer.example
จะยืนยันว่าผู้ใช้เป็นมนุษย์ และเรียกใช้ JavaScript ต่อไปนี้เพื่อออกโทเค็นความน่าเชื่อถือไปยังเบราว์เซอร์ของผู้ใช้
fetch('https://issuer.example/trust-token', {
trustToken: {
type: 'token-request',
issuer: 'https://issuer.example'
}
}).then(...)
3.เบราว์เซอร์ของผู้ใช้จะจัดเก็บโทเค็นความน่าเชื่อถือไว้ และเชื่อมโยงกับ issuer.example
4.หลังจากนั้น ผู้ใช้ได้เข้าชม publisher.example
5.publisher.example
ต้องการทราบว่าผู้ใช้เป็นมนุษย์จริงหรือไม่ publisher.example
เชื่อถือ issuer.example
จึงตรวจสอบว่าเบราว์เซอร์ของผู้ใช้มีโทเค็นที่ถูกต้องจากต้นทางดังกล่าวหรือไม่
document.hasTrustToken('https://issuer.example');
6.หากการดำเนินการนี้แสดงผลสัญญาที่เปลี่ยนเป็น true
หมายความว่าผู้ใช้มีโทเค็นจาก issuer.example
เพื่อให้ publisher.example
พยายามแลกโทเค็นได้
fetch('https://issuer.example/trust-token', {
trustToken: {
type: 'token-redemption',
issuer: 'https://issuer.example',
refreshPolicy: {none, refresh}
}
}).then(...)
ด้วยรหัสนี้
- ผู้แลกสิทธิ์
publisher.example
ขอแลกสิทธิ์ หากการแลกสิทธิ์สำเร็จ ผู้ออกบัตร
issuer.example
จะส่งกลับบันทึกการแลกสิทธิ์ซึ่งระบุว่า ณ จุดใดจุดหนึ่งที่พวกเขาออกโทเค็นที่ถูกต้องให้กับเบราว์เซอร์นี้7.เมื่อสัญญาที่
fetch()
ส่งคืนมาได้รับการแก้ไขแล้ว บันทึกการแลกสิทธิ์จะใช้ในคำขอทรัพยากรที่ตามมาได้ ดังนี้
fetch('https://foo.example/get-content', {
trustToken: {
type: 'send-redemption-record',
issuers: ['https://issuer.example', ...]
}
});
ด้วยรหัสนี้
- ระเบียนการแลกสิทธิ์รวมอยู่ในส่วนหัวของคำขอ
Sec-Redemption-Record
foo.example
ได้รับบันทึกการแลกสิทธิ์และแยกวิเคราะห์ระเบียนเพื่อระบุว่าissuer.example
คิดว่าผู้ใช้รายนี้เป็นมนุษย์หรือไม่foo.example
ตอบสนองตามนั้น
คุณอาจมีประวัติการช็อปปิ้งกับเว็บไซต์อีคอมเมิร์ซ การเช็คอินในแพลตฟอร์มตำแหน่ง หรือประวัติบัญชีที่ธนาคาร ผู้ออกบัตรอาจพิจารณาปัจจัยอื่นๆ ด้วย เช่น ระยะเวลาที่คุณมีบัญชี หรือการโต้ตอบอื่นๆ (เช่น CAPTCHA หรือการส่งแบบฟอร์ม) ที่ทำให้ผู้ออกบัตรเชื่อถือในโอกาสที่คุณเป็นมนุษย์จริงๆ มากขึ้น
การออกโทเค็นความน่าเชื่อถือ
หากผู้ออกโทเค็นความน่าเชื่อถือ เช่น issuer.example
เห็นว่าผู้ใช้เชื่อถือได้ ผู้ออกบัตรจะดึงข้อมูลโทเค็นความน่าเชื่อถือของผู้ใช้ได้โดยส่งคำขอ fetch()
ที่มีพารามิเตอร์ trustToken
ดังนี้
fetch('issuer.example/trust-token', {
trustToken: {
type: 'token-request'
}
}).then(...)
การดำเนินการนี้จะขยายเวลาของโปรโตคอลการออก Privacy Pass โดยใช้วิธีการเข้ารหัสดั้งเดิมใหม่ ดังนี้
สร้างชุดตัวเลขสุ่มเทียมที่เรียกว่า nonces
ปกปิดค่าที่ได้จากการสุ่ม (เข้ารหัสเพื่อให้ผู้ออกใบรับรองดูเนื้อหาไม่ได้) และแนบไว้กับคำขอในส่วนหัว
Sec-Trust-Token
ส่งคำขอ POST ไปยังปลายทางที่ระบุ
ปลายทางจะตอบสนองด้วยโทเค็นแบบปิดบัง (ลายเซ็นบน Nonces ที่ตาบอด) จากนั้นโทเค็นจะไม่ถูกปกปิดและจัดเก็บไว้ภายในร่วมกับ Nonce ที่เกี่ยวข้องซึ่งเบราว์เซอร์เป็นโทเค็นความน่าเชื่อถือ
การแลกสิทธิ์โทเค็นความน่าเชื่อถือ
เว็บไซต์ของผู้เผยแพร่โฆษณา (เช่น publisher.example
ในตัวอย่างด้านบน) ตรวจสอบได้ว่ามีโทเค็นความน่าเชื่อถือสำหรับผู้ใช้หรือไม่
const userHasTokens = await document.hasTrustToken('issuer.example/trust-token');
หากมีโทเค็น เว็บไซต์ของผู้เผยแพร่โฆษณาจะแลกสิทธิ์โทเค็นเพื่อรับบันทึกการแลกสิทธิ์ได้ ดังนี้
fetch('issuer.example/trust-token', {
...
trustToken: {
type: 'token-redemption',
refreshPolicy: 'none'
}
...
}).then(...)
ผู้เผยแพร่โฆษณาสามารถรวมบันทึกการแลกสิทธิ์ในคำขอที่ต้องใช้โทเค็นที่เชื่อถือได้ เช่น การโพสต์ความคิดเห็น การกดชอบหน้าเว็บ หรือการโหวตในแบบสำรวจ โดยใช้การเรียก fetch()
ดังตัวอย่างต่อไปนี้
fetch('https://foo.example/post-comment', {
...
trustToken: {
type: 'send-redemption-record',
issuers: ['issuer.example/trust-token', ...]
}
...
}).then(...);
ระเบียนการแลกสิทธิ์รวมอยู่ในส่วนหัวของคำขอ Sec-Redemption-Record
ข้อควรพิจารณาเกี่ยวกับความเป็นส่วนตัว
โทเค็นออกแบบมาให้ "ลิงก์ไม่ได้" ผู้ออกบัตรสามารถเรียนรู้ข้อมูลแบบรวมเกี่ยวกับเว็บไซต์ที่ผู้ใช้เข้าชมได้ แต่จะลิงก์การออกกับการแลกสิทธิ์ไม่ได้ เมื่อผู้ใช้แลกโทเค็น ผู้ออกจะไม่สามารถแยกโทเค็นนั้นแยกจากโทเค็นอื่นๆ ที่ตนสร้างขึ้น อย่างไรก็ตาม ปัจจุบันโทเค็นความน่าเชื่อถือไม่ได้เกิดขึ้นแล้วในสุญญากาศ ในทางทฤษฎีแล้วยังมีวิธีอื่นๆ ที่ผู้ออกคีย์สามารถเข้าร่วมข้อมูลประจำตัวของผู้ใช้ข้ามเว็บไซต์ เช่น คุกกี้ของบุคคลที่สามและเทคนิคการติดตามโดยไม่เปิดเผย เว็บไซต์ต่างๆ จำเป็นต้องทำความเข้าใจ การเปลี่ยนแปลงของระบบนิเวศนี้เมื่อวางแผนการสนับสนุน นี่เป็นแง่มุมทั่วไปของการเปลี่ยนไปใช้ Privacy Sandbox API หลายรายการ จึงจะยังไม่กล่าวถึงรายละเอียดเพิ่มเติมในที่นี้
ข้อควรพิจารณาด้านความปลอดภัย
การเลิกใช้โทเค็นความน่าเชื่อถือ: เว็บไซต์ที่เป็นอันตรายอาจจงใจจัดหาโทเค็นของผู้ใช้จากผู้ออกบางรายให้หมดไป การโจมตีประเภทนี้มีการบรรเทาปัญหาหลายอย่าง เช่น การอนุญาตให้ผู้ออกบัตรมอบโทเค็นจำนวนมากได้ในคราวเดียว เพื่อให้ผู้ใช้มีความพร้อมเพียงพอในการตรวจสอบว่าเบราว์เซอร์แลกโทเค็นได้เพียง 1 โทเค็นต่อการดูหน้าเว็บระดับบนสุด 1 ครั้ง
การป้องกันการใช้จ่ายซ้ำ: มัลแวร์อาจพยายามเข้าถึงโทเค็นความน่าเชื่อถือของผู้ใช้ทั้งหมด อย่างไรก็ตาม โทเค็นจะหมดลงเมื่อเวลาผ่านไป เนื่องจากระบบจะส่งการแลกสิทธิ์ทั้งหมดไปยังผู้ออกโทเค็นรายเดียวกัน ซึ่งยืนยันได้ว่ามีการใช้โทเค็นแต่ละรายการเพียงครั้งเดียว ผู้ออกบัตรอาจลงชื่อในโทเค็นน้อยลงด้วยเพื่อลดความเสี่ยง
กลไกคำขอ
คุณอาจอนุญาตให้ส่งบันทึกการแลกสิทธิ์นอก fetch()
ได้ เช่น เมื่อมีคำขอการนำทาง นอกจากนี้ เว็บไซต์อาจรวมข้อมูลของผู้ออกไว้ในส่วนหัวการตอบกลับ HTTP เพื่อเปิดใช้การแลกสิทธิ์โทเค็นไปพร้อมกับการโหลดหน้าเว็บ
ขอย้ำอีกครั้งว่าข้อเสนอนี้จำเป็นต้องมีความคิดเห็นของคุณ หากคุณมีความคิดเห็น โปรดสร้างปัญหาในที่เก็บคำอธิบายของ Trust Token
ดูข้อมูลเพิ่มเติม
- การสาธิตโทเค็นความน่าเชื่อถือ
- เริ่มต้นช่วงทดลองใช้จากต้นทางของ Chrome
- เจาะลึกข้อมูลเกี่ยวกับ Privacy Sandbox
- คำอธิบายเกี่ยวกับ Trust Token API
- โปรเจ็กต์ Chromium: API โทเค็นความน่าเชื่อถือ
- จุดประสงค์ในการใช้งาน: Trust Token API
- สถานะแพลตฟอร์ม Chrome
- บัตรความเป็นส่วนตัว
- ส่วนขยายของ Privacy Pass
ขอขอบคุณทุกคนที่ช่วยเขียนและรีวิวโพสต์นี้