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

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



สรุป

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

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

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

ภาพหน้าจอแสดง Trust Token ในแท็บ Chrome DevTools Network
Trust Token ในแท็บ Network ของ Chrome DevTools
ภาพหน้าจอแสดง Trust Token ในแท็บแอปพลิเคชัน Chrome DevTools
Trust Token ในแท็บแอปพลิเคชันเครื่องมือสำหรับนักพัฒนาเว็บใน 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. ซ่อน nonces (เข้ารหัสเพื่อไม่ให้ผู้ออกเห็นเนื้อหา) และแนบไปกับคำขอในส่วนหัว Sec-Trust-Token

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

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


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

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