เคยเจอไหม: ล้างแคช เปิดโหมดไม่ระบุตัวตน แม้แต่ติดตั้งเบราว์เซอร์ใหม่ เปิดเว็บไซต์ไหนมา มันก็ยังรู้ว่าเป็น "คุณ" หรือในทางปฏิบัติกว่านั้น — คุณล็อกอินสองบัญชีร้านค้าบนเครื่องเดียวกัน ตัวหนึ่งใช้ Chrome อีกตัวใช้ Edge แต่แพลตฟอร์มยังตัดสินว่าสองบัญชีเชื่อมโยงกัน
คำตอบน่าจะซ่อนอยู่ในลายนิ้วมือ Canvas
ลายนิ้วมือ Canvas เป็นพารามิเตอร์ที่ปลอมยากที่สุดและมีความแตกต่างสูงสุดในลายนิ้วมือเบราว์เซอร์ — เว็บไซต์สั่งให้เบราว์เซอร์ "วาดรูป" แล้วอ่านข้อมูลพิกเซลของภาพวาดเพื่อสร้างตัวระบุเฉพาะตัว ความต่างเล็กน้อยใด ๆ ใน GPU ไดรเวอร์การ์ดจอ การเรนเดอร์ฟอนต์ หรืออัลกอริทึมลดรอยหยักของคุณ ล้วนทำให้ภาพวาดต่างกันในรายละเอียดที่ตาเปล่ามองไม่เห็น แต่เครื่องจักรตรวจจับได้แม่นยำ
ลายนิ้วมือเบราว์เซอร์คือการรวมกันของพารามิเตอร์หลายสิบรายการ เช่น ระบบปฏิบัติการ ความละเอียด ฟอนต์ เขตเวลา (รายละเอียดครบถ้วนอยู่ในบทความลายนิ้วมือเบราว์เซอร์คืออะไร นี้) และ Canvas เป็นสิ่งที่ปลอมยากที่สุด: UA เปลี่ยนได้ตามใจ ภาษาและเขตเวลาตั้งได้ตามใจ แต่ "ภาพวาดหน้าตาเป็นยังไง" ถูกกำหนดโดยฮาร์ดแวร์จริงและเอนจินเรนเดอร์ของคุณ จะเปลี่ยนต้องแตะเลเยอร์ลึก
นี่คือเหตุผลที่เวลาแพลตฟอร์มตรวจจับการเชื่อมโยงบัญชี Canvas แทบจะอยู่ในรายชื่อ "ตัวชี้วัดอ้างอิงหลัก" เสมอ
กระบวนการทั้งหมดไม่ได้ลึกลับเลย — สี่ขั้นตอนอธิบายได้:
toDataURL() หรือ getImageData() เพื่อแปลงเนื้อหาผืนผ้าใบเป็นชุดข้อมูลพิกเซลครั้งแรกที่เห็น Canvas hash ของตัวเองบนเว็บตรวจสอบ ผมค่อนข้างตกใจ: สตริงอักขระที่ไม่มีความหมายให้เห็น กลับแทน GPU และเอนจินเรนเดอร์ของเครื่องผมได้แม่นยำ ที่สำคัญกว่านั้น กระบวนการนี้คุณไม่รู้สึกตัวเลย — ไม่มีป๊อปอัป ไม่มีคำเตือน หน้าเพจโหลดเสร็จปุ๊บมันได้ข้อมูลไปแล้ว

Canvas ไม่ใช่ลายนิ้วมือเดียว — ทำไมมันถึงถูกใช้มากที่สุด? เทียบกับ UA ฟอนต์ และ WebGL Canvas มีข้อได้เปรียบเฉพาะหลายข้อ:
เทียบกันแล้ว ลายนิ้วมือ WebGL ก็มาจากการเรนเดอร์ GPU เหมือนกัน (เน้นความสามารถ 3D) แต่บางอุปกรณ์เก่าไม่รองรับ ครอบคลุมไม่กว้างเท่า Canvas รายการฟอนต์ ความละเอียดก็ไม่ค่อยมีความแตกต่าง ดังนั้นระบบความเสี่ยงของแพลตฟอร์มมักใช้ Canvas เป็น "หลักฐานหลัก" และใช้ UA เขตเวลา IP เป็น "เบาะแสเสริม" ตรวจสอบข้ามกัน
อยากเห็น Canvas hash ของตัวเองด้วยตาว่าเป็นยังไง เปิดเครื่องมือตรวจสอบออนไลน์ใดก็ได้ (เช่น Browserscan) หน้าเว็บจะรันสี่ขั้นตอนด้านบนอัตโนมัติ แล้วแสดง Canvas hash และภาพวาดที่สร้างออกมา
ดูแฮชไม่ใช่เป้าหมาย — ตรวจสอบ "การแยกสภาพแวดล้อม" ต่างหาก: สร้างสองสภาพแวดล้อมใน MasBrowser เปิดแล้วเข้าเว็บตรวจสอบในแต่ละสภาพแวดล้อม Canvas hash ที่แสดงในสองสภาพแวดล้อมต้องต่างกัน ถ้าเหมือนกันเป๊ะ แปลว่าพารามิเตอร์ Canvas ยังไม่ถูกทำให้ต่าง ต้องกลับไปตรวจการตั้งค่าลายนิ้วมือ หลังเปิดสภาพแวดล้อม ด้านขวาจะมีสถานะสีเขียว "Fingerprint protection: Enabled" เมื่อสถานะนี้ติดสว่างแปลว่าการป้องกันลายนิ้วมือของสภาพแวดล้อมปัจจุบันทำงานอยู่ วิธีสร้างสภาพแวดล้อมหลายบัญชีโดยละเอียด ดูได้จากคู่มือใช้งานเบราว์เซอร์ลายนิ้วมือ

ก่อนอื่นตัดวิธีที่ "ดูเหมือนใช้ได้แต่จริง ๆ แล้วไม่ได้ผล" ออกก่อน:
วิธีที่ทำได้จริงคือใส่ "สัญญาณรบกวน" ลงในผลการเรนเดอร์ Canvas: ให้เบราว์เซอร์รบกวนข้อมูลพิกเซลเล็กน้อยตอนวาด เพื่อให้แฮชที่ตรวจพบแต่ละครั้งต่างจากผลฮาร์ดแวร์จริง แพลตฟอร์มจะใช้มันเป็นหลักฐานการเชื่อมโยงที่เชื่อถือได้ไม่ได้
เบราว์เซอร์ลายนิ้วมือทำให้เรื่องนี้กลายเป็นสวิตช์ ยกตัวอย่างMasBrowser ตอนสร้างสภาพแวดล้อม หาตัวเลือก Canvas ในการตั้งค่าลายนิ้วมือแล้วเลือกโหมด "สัญญาณรบกวน" เมื่อเปิดแล้ว Canvas hash ของแต่ละสภาพแวดล้อมจะถูกรบกวนแบบสุ่ม บัญชีไม่แชร์ลักษณะ Canvas เดียวกันอีกต่อไป ประกอบกับ WebRTC ที่บล็อก ภาษาเขตเวลาที่ซิงก์กับ IP พร็อกซี ห่วงโซ่หลักฐานการเชื่อมโยงหลายบัญชีก็ขาดสะบั้น ดูการตั้งค่าสภาพแวดล้อมอิสระและการแยกลายนิ้วมือแบบครบถ้วนได้ที่หน้าเว็บจัดการความปลอดภัยหลายบัญชี MasBrowser

ในการใช้งานจริงมีรายละเอียดหนึ่งที่น่าจดจำ:ใส่สัญญาณรบกวนไม่ใช่ "ยิ่งยุ่งยิ่งดี" ถ้าผล Canvas เปลี่ยนผันผวนรุนแรงทุกครั้งที่เปิด กลับดูเหมือน "เครื่องพยายามหลบเลี่ยงโดยตั้งใจ" ระบบความเสี่ยงจะติดป้ายผิดปกติได้ง่าย วิธีที่ถูกคือให้สัญญาณรบกวนนิ่ง — แฮชคงที่หลังสร้างสภาพแวดล้อม แค่ต่างจากฮาร์ดแวร์จริง ใน MasBrowser พารามิเตอร์ลายนิ้วมือจะถูกตรึงหลังบันทึกสภาพแวดล้อม เรื่องนี้ไม่ต้องกังวล
ได้ แต่ความถี่ต่ำมาก Canvas hash อาจเปลี่ยนตอนอัปเดตไดรเวอร์การ์ดจอเวอร์ชันใหญ่ ติดตั้งระบบใหม่ หรือเปลี่ยนเอนจินเบราว์เซอร์ ในการใช้ประจำวันแทบเสถียร นี่ก็คือเหตุผลที่แพลตฟอร์มกล้าติดตามมันระยะยาว
ไม่ได้ Cookies เป็นไฟล์ที่เก็บในเครื่อง ส่วนลายนิ้วมือ Canvas เป็นค่าที่วัดจากการเรนเดอร์แบบเรียลไทม์ กลไกต่างกันคนละเรื่อง การล้างแคชไม่มีผลต่อลายนิ้วมือ Canvas เลย
ไม่กระทบฟังก์ชันของหน้าเว็บ กระทบแค่ค่าแฮชที่ตรวจพบ เว็บยังโหลด เข้าสู่ระบบ สั่งซื้อได้ปกติ เพียงแต่ "ภาพวาดที่คุณวาดออกมา" ต่างจากฮาร์ดแวร์จริงเล็กน้อย
Canvas เน้นการเรนเดอร์กราฟิก 2D (ฟอนต์ เกรเดียนต์ รูปทรงเรขาคณิต) ส่วน WebGL เน้นการเรนเดอร์ GPU 3D (shader, รุ่นการ์ดจอ) ทั้งคู่มาจากการเรนเดอร์ฮาร์ดแวร์จริง มักใช้คู่กันเพื่อยืนยันข้ามกัน
ลายนิ้วมือ Canvas เป็นรายการที่ "ซื่อสัตย์" ที่สุดในลายนิ้วมือเบราว์เซอร์ — มันไม่พึ่งสิ่งที่คุณประกาศ แต่วัดฮาร์ดแวร์จริงของคุณ สำหรับผู้ใช้ทั่วไป มันเป็นแค่แหล่งความกังวลเรื่องความเป็นส่วนตัว สำหรับผู้ทำหลายบัญชี มันคือ "หลักฐานหลัก" ที่แพลตฟอร์มใช้ตัดสินการเชื่อมโยง จัดการไม่ดีก็พากันล้มทั้งกระดาน
โชคดีที่ความสามารถนี้จัดการได้ด้วย "สัญญาณรบกวนการเรนเดอร์" เวอร์ชันฟรีมีโควตาสภาพแวดล้อม 2 ตัวดาวน์โหลด MasBrowser สร้างสภาพแวดล้อมแล้วเปิดการตั้งค่าสัญญาณรบกวน Canvas พอเปิดแล้วเห็น "Fingerprint protection: Enabled" สีเขียวทางขวา — แปลว่าพารามิเตอร์ลายนิ้วมือทั้งหมด ไม่ว่าจะเป็นสัญญาณรบกวน Canvas UA เขตเวลา WebGL พร้อมใช้งานแล้ว