โทเค็นความน่าเชื่อถือเป็น API ใหม่ที่ช่วยให้เว็บไซต์ถ่ายทอดข้อมูลอย่างจำกัดจากบริบทการท่องเว็บหนึ่งไปยังอีกบริบทหนึ่ง (เช่น ข้ามเว็บไซต์) เพื่อช่วยต่อสู้กับการประพฤติมิชอบโดยไม่ต้องมีการติดตามแบบแพสซีฟ
สรุป
โทเค็นความน่าเชื่อถือช่วยให้ต้นทางออกโทเค็นการเข้ารหัสลับแก่ผู้ใช้ที่เชื่อถือ เบราว์เซอร์ของผู้ใช้ จะจัดเก็บโทเค็นไว้ จากนั้นเบราว์เซอร์จะใช้โทเค็นในบริบทอื่นๆ เพื่อประเมินความถูกต้องของผู้ใช้ได้
Trust Token API ช่วยให้สื่อความเชื่อถือของผู้ใช้ในบริบทหนึ่งไปยังอีกบริบทหนึ่งได้โดยไม่ต้องระบุผู้ใช้หรือลิงก์ข้อมูลประจำตัวทั้ง 2 อย่าง
คุณสามารถลอง API ด้วยการสาธิตและตรวจสอบโทเค็นของเราในแท็บเครือข่ายและแอปพลิเคชันของ Chrome DevTools
![ภาพหน้าจอแสดง Trust Token ในแท็บ Chrome DevTools Network](https://web.dev/static/articles/trust-tokens/image/screenshot-showing-trust-4dce3a304ea6.jpg?authuser=5&hl=th)
![ภาพหน้าจอแสดง Trust Token ในแท็บแอปพลิเคชัน Chrome DevTools](https://web.dev/static/articles/trust-tokens/image/screenshot-showing-trust-8569c4b96af8e.jpg?authuser=5&hl=th)
เหตุใดเราจึงต้องมี 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
ซ่อน nonces (เข้ารหัสเพื่อไม่ให้ผู้ออกเห็นเนื้อหา) และแนบไปกับคำขอในส่วนหัว
Sec-Trust-Token
ส่งคำขอ POST ไปยังปลายทางที่ระบุ
ปลายทางตอบสนองด้วยโทเค็นที่ Blind (ลายเซ็นใน Anchor ที่ตาบอด) จากนั้นโทเค็นจะถูกเลิกปกปิดและจัดเก็บภายในไว้ร่วมกับ Nonces ที่เกี่ยวข้องโดยเบราว์เซอร์เป็นโทเค็นที่เชื่อถือได้
การแลกสิทธิ์โทเค็นความน่าเชื่อถือ
เว็บไซต์ของผู้เผยแพร่โฆษณา (เช่น 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 รายการต่อการดูหน้าเว็บระดับบนสุดเท่านั้น
การป้องกันการใช้จ่ายซ้ำ: มัลแวร์อาจพยายามเข้าถึงโทเค็นที่เชื่อถือได้ทั้งหมดของผู้ใช้ อย่างไรก็ตาม โทเค็นจะหมดลงเมื่อเวลาผ่านไป เนื่องจากการแลกสิทธิ์แต่ละครั้งจะส่งไปยังผู้ออกโทเค็นรายเดียวกัน ซึ่งสามารถยืนยันได้ว่าแต่ละโทเค็นใช้งานได้เพียงครั้งเดียว นอกจากนี้ ผู้ออกใบรับรองอาจลงนามในโทเค็นน้อยลงเพื่อลดความเสี่ยง
กลไกคำขอ
คุณอาจอนุญาตให้ส่งบันทึกการแลกสิทธิ์ไปภายนอก fetch()
ได้ เช่น การส่งด้วยคำขอการนำทาง นอกจากนี้ เว็บไซต์อาจรวมข้อมูลผู้ออกในส่วนหัวการตอบกลับ HTTP เพื่อเปิดใช้การแลกสิทธิ์โทเค็นควบคู่ไปกับการโหลดหน้าเว็บ
ขอย้ำอีกครั้งว่าข้อเสนอนี้จำเป็นต้องได้รับความคิดเห็นจากคุณ หากคุณมีความคิดเห็น โปรดสร้างปัญหาในที่เก็บคำอธิบายโทเค็น Trust Token
ดูข้อมูลเพิ่มเติม
- การสาธิตโทเค็นความน่าเชื่อถือ
- การเริ่มต้นใช้งานช่วงทดลองใช้จากต้นทางของ Chrome
- การเจาะลึก Privacy Sandbox
- คำอธิบายเกี่ยวกับ Trust Token API
- โปรเจ็กต์ Chromium: API โทเค็นความน่าเชื่อถือ
- ความตั้งใจในการใช้งาน: Trust Token API
- สถานะแพลตฟอร์ม Chrome
- Privacy Pass
- ส่วนขยายของ Privacy Pass
ขอขอบคุณทุกท่านที่ช่วยเขียนและอ่านโพสต์นี้