เริ่มต้นใช้งานโทเค็นความน่าเชื่อถือ

Trust Token เป็น API ใหม่ที่ช่วยให้เว็บไซต์สามารถส่งข้อมูลในจำนวนที่จำกัดจากบริบทการท่องเว็บหนึ่งไปยังอีกบริบทหนึ่ง (เช่น ในเว็บไซต์ต่างๆ) เพื่อช่วยต่อสู้กับการประพฤติมิชอบโดยไม่ต้องใช้การติดตามแบบแพสซีฟ



สรุป

โทเค็นความน่าเชื่อถือช่วยให้ต้นทางสามารถออกโทเค็นการเข้ารหัสให้กับผู้ใช้ที่โทเค็นนั้นเชื่อถือ เบราว์เซอร์ของผู้ใช้ จะจัดเก็บโทเค็น จากนั้นเบราว์เซอร์จะใช้โทเค็นในบริบทอื่นๆ เพื่อประเมินความถูกต้องของผู้ใช้ได้

Trust Token API ช่วยให้ความน่าเชื่อถือของผู้ใช้ในบริบทหนึ่งถ่ายทอดไปยังอีกบริบทหนึ่งได้โดยไม่ต้องระบุผู้ใช้หรือเชื่อมโยงข้อมูลประจำตัวทั้ง 2 รายการ

คุณสามารถลองใช้ API ได้ด้วยการสาธิตและโทเค็นการตรวจสอบในแท็บเครือข่ายและแอปพลิเคชันของ Chrome DevTools

ภาพหน้าจอแสดงโทเค็นความน่าเชื่อถือในแท็บเครือข่ายสำหรับนักพัฒนาเว็บใน Chrome
โทเค็นความน่าเชื่อถือในแท็บเครือข่ายของ Chrome
ภาพหน้าจอแสดงโทเค็นความน่าเชื่อถือในแท็บแอปพลิเคชัน Chrome DevTools
โทเค็นความน่าเชื่อถือในแท็บแอปพลิเคชันเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

ทำไมเราถึงต้องมี 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(...)

ด้วยรหัสนี้

  1. ผู้แลกสิทธิ์ publisher.example ขอแลกสิทธิ์
  2. หากการแลกสิทธิ์สำเร็จ ผู้ออกบัตร issuer.example จะส่งกลับบันทึกการแลกสิทธิ์ซึ่งระบุว่า ณ จุดใดจุดหนึ่งที่พวกเขาออกโทเค็นที่ถูกต้องให้กับเบราว์เซอร์นี้

    7.เมื่อสัญญาที่ fetch() ส่งคืนมาได้รับการแก้ไขแล้ว บันทึกการแลกสิทธิ์จะใช้ในคำขอทรัพยากรที่ตามมาได้ ดังนี้

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

ด้วยรหัสนี้

  1. ระเบียนการแลกสิทธิ์รวมอยู่ในส่วนหัวของคำขอ Sec-Redemption-Record
  2. foo.example ได้รับบันทึกการแลกสิทธิ์และแยกวิเคราะห์ระเบียนเพื่อระบุว่า issuer.example คิดว่าผู้ใช้รายนี้เป็นมนุษย์หรือไม่
  3. foo.example ตอบสนองตามนั้น
เว็บไซต์จะทราบได้อย่างไรว่าคุณเชื่อใจคุณหรือไม่

คุณอาจมีประวัติการช็อปปิ้งกับเว็บไซต์อีคอมเมิร์ซ การเช็คอินในแพลตฟอร์มตำแหน่ง หรือประวัติบัญชีที่ธนาคาร ผู้ออกบัตรอาจพิจารณาปัจจัยอื่นๆ ด้วย เช่น ระยะเวลาที่คุณมีบัญชี หรือการโต้ตอบอื่นๆ (เช่น CAPTCHA หรือการส่งแบบฟอร์ม) ที่ทำให้ผู้ออกบัตรเชื่อถือในโอกาสที่คุณเป็นมนุษย์จริงๆ มากขึ้น

การออกโทเค็นความน่าเชื่อถือ

หากผู้ออกโทเค็นความน่าเชื่อถือ เช่น issuer.example เห็นว่าผู้ใช้เชื่อถือได้ ผู้ออกบัตรจะดึงข้อมูลโทเค็นความน่าเชื่อถือของผู้ใช้ได้โดยส่งคำขอ fetch() ที่มีพารามิเตอร์ trustToken ดังนี้

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

การดำเนินการนี้จะขยายเวลาของโปรโตคอลการออก Privacy Pass โดยใช้วิธีการเข้ารหัสดั้งเดิมใหม่ ดังนี้

  1. สร้างชุดตัวเลขสุ่มเทียมที่เรียกว่า nonces

  2. ปกปิดค่าที่ได้จากการสุ่ม (เข้ารหัสเพื่อให้ผู้ออกใบรับรองดูเนื้อหาไม่ได้) และแนบไว้กับคำขอในส่วนหัว Sec-Trust-Token

  3. ส่งคำขอ 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

ดูข้อมูลเพิ่มเติม


ขอขอบคุณทุกคนที่ช่วยเขียนและรีวิวโพสต์นี้

รูปภาพโดย ZSun Fu ใน Unsplash