การติดตาม Digital Footprint ทำงานเบื้องหลังอย่างไร
ตั้งแต่ TLS handshake ไปจนถึงการเรนเดอร์ canvas — เราสร้าง digital footprint ของอุปกรณ์ขึ้นใหม่จากสัญญาณ passive กว่า 300 รายการ โดยไม่ต้องพึ่งพาสถานะที่จัดเก็บไว้
อุปกรณ์ทุกเครื่องที่เชื่อมต่ออินเทอร์เน็ตทิ้งร่องรอยของสิ่งประดิษฐ์ทางเทคนิคเอาไว้ — นั่นคือ digital footprint ที่ tracio.ai เราสร้าง footprint นี้ขึ้นใหม่จากสัญญาณ passive กว่า 300 รายการที่เก็บได้ระหว่างการโหลดหน้าเว็บครั้งเดียว โดยการระบุตัวตนไม่ขึ้นอยู่กับคุกกี้หรือที่จัดเก็บข้อมูลฝั่งไคลเอนต์แบบถาวรอื่นใด บทความนี้จะอธิบายอย่างละเอียดว่ากระบวนการนี้ทำงานอย่างไร
เลเยอร์การเก็บสัญญาณ
เมื่อ JavaScript agent ของเราโหลดในเบราว์เซอร์ของผู้เยี่ยมชม มันจะเริ่มเก็บสัญญาณข้ามหลายหมวดหมู่พร้อมกัน การเรนเดอร์ canvas การสอบถามพารามิเตอร์ WebGL การประมวลผล AudioContext การแจกแจงฟอนต์ และการอ่านค่าคุณสมบัติ navigator ทั้งหมดทำงานแบบขนาน โดยแต่ละการตรวจถูกจำกัดด้วย timeout ของตัวเอง เพื่อไม่ให้การตรวจที่ช้าหน่วงรายการอื่น ระยะเวลาของรอบทั้งหมดขึ้นอยู่กับอุปกรณ์ของผู้เยี่ยมชม และตัวเลขด้านล่างคือสิ่งที่เราวัดได้บนอุปกรณ์ของเรา
ประเด็นสำคัญคือ สัญญาณแต่ละรายการจับภาพแง่มุมที่แตกต่างกันของสแตกฮาร์ดแวร์และซอฟต์แวร์ของอุปกรณ์ การเรนเดอร์ canvas สะท้อน GPU ไดรเวอร์ และเอนจินเรนเดอร์ฟอนต์ พารามิเตอร์ WebGL เปิดเผยรุ่นและความสามารถของการ์ดจอ AudioContext เผยให้เห็นความแตกต่างในวิธีที่ audio DSP ประมวลผลการดำเนินการทศนิยม (floating-point) คุณสมบัติ navigator รายงานจำนวนคอร์ CPU หน่วยความจำ แพลตฟอร์ม และการตั้งค่าภาษา
ทีมของเราวัดสิ่งนี้จากเหตุการณ์ 2 พันล้านรายการเมื่อเดือนที่แล้ว เวลาเก็บ median คือ 38ms และ 99th percentile คือ 52ms เราลองแนวทางแบบตรงไปตรงมาก่อนจริง ๆ — เก็บสัญญาณแบบลำดับ ปรากฏว่าช้ากว่าถึง 40 เท่า การเก็บแบบขนานพร้อม timeout fence เป็นหนึ่งในการตัดสินใจเชิงสถาปัตยกรรมแรก ๆ ที่เราทำถูกต้อง
TLS Fingerprinting: เลเยอร์แรก
ก่อนที่ JavaScript ของเราจะเริ่มทำงานด้วยซ้ำ เบราว์เซอร์ได้เปิดเผยข้อมูลสำคัญไปแล้วผ่าน TLS handshake ข้อความ Client Hello มีชุด cipher suites ที่เบราว์เซอร์รองรับ TLS extensions ที่มันใช้ elliptic curves ที่มันต้องการ และ signature algorithms ที่มันยอมรับ ข้อมูลนี้ถูกกำหนดโดยไลบรารี TLS ของเบราว์เซอร์ และแตกต่างกันอย่างมากในแต่ละตระกูลเบราว์เซอร์ เวอร์ชัน และระบบปฏิบัติการ
เราจับ TLS fingerprint นี้ด้วยการทำ JA4 hashing — ตัวแทนสมัยใหม่ของ JA3 ที่ให้ความละเอียดที่ดีกว่าและความเสถียรข้ามเวอร์ชัน JA4 hash เพียงอย่างเดียวสามารถแยก Chrome จาก Firefox จาก Safari และมักจำกัดการระบุตัวตนให้เหลือช่วงเวอร์ชันเบราว์เซอร์เฉพาะได้ เมื่อรวมกับสัญญาณฝั่งไคลเอนต์ของเรา มันจึงมอบเลเยอร์ cross-validation ที่ปลอมแปลงได้ยากอย่างยิ่ง
Canvas และ GPU Fingerprinting
Canvas fingerprinting ใช้ประโยชน์จากข้อเท็จจริงที่ว่า GPU ต่างกันเรนเดอร์คำสั่งการวาดชุดเดียวกันโดยมีความแตกต่างระดับพิกเซลที่ละเอียดอ่อน Canvas API ช่วยให้เราวาดฉากที่ออกแบบอย่างพิถีพิถัน — สตริงข้อความเฉพาะในหลายฟอนต์ รูปทรงเรขาคณิตที่มีพิกัดเฉพาะ และเกรเดียนต์ที่มี color stops ที่แม่นยำ — แล้วคำนวณ hash ของข้อมูลพิกเซลที่ได้
ความแตกต่างของการเรนเดอร์มาจากความแปรผันในอัลกอริทึม anti-aliasing การเรนเดอร์แบบ sub-pixel การผสมสี และ font hinting ในแต่ละรุ่น GPU และเวอร์ชันไดรเวอร์ แม้แต่อุปกรณ์สองเครื่องที่มีรุ่น GPU เดียวกันก็อาจสร้างผลลัพธ์ canvas ที่ต่างกันได้หากใช้เวอร์ชันไดรเวอร์หรือระบบปฏิบัติการต่างกัน สิ่งนี้ทำให้ canvas hash เป็นหนึ่งในสัญญาณที่โดดเด่นที่สุดของเรา
WebGL Hardware Profiling
WebGL API เปิดเผยข้อมูลโดยละเอียดเกี่ยวกับระบบย่อยกราฟิกที่ไปไกลกว่าสตริง renderer และ vendor มาก เราสอบถามขนาด texture สูงสุด รูปแบบความแม่นยำของ shader ส่วนขยายที่รองรับ ขนาด viewport และพารามิเตอร์อีกหลายสิบรายการที่แตกต่างกันในแต่ละรุ่น GPU และการกำหนดค่าไดรเวอร์
การรวมพารามิเตอร์เหล่านี้เข้าด้วยกันสร้างโปรไฟล์ฮาร์ดแวร์ที่ละเอียด ตัวอย่างเช่น อุปกรณ์ที่มี NVIDIA RTX 4070 จะรายงานขนาด texture สูงสุด ความแม่นยำ shader และการรองรับส่วนขยายที่ต่างจากอุปกรณ์ที่มี AMD RX 7800 XT โปรไฟล์ฮาร์ดแวร์นี้เสถียรโดยเนื้อแท้ — มันไม่เปลี่ยนแปลงตามการอัปเดตเบราว์เซอร์ เปลี่ยนเฉพาะเมื่อฮาร์ดแวร์หรือไดรเวอร์เปลี่ยนเท่านั้น
Audio Processing Fingerprinting
Web Audio API มอบแหล่งสัญญาณที่ขึ้นอยู่กับฮาร์ดแวร์อีกแหล่งหนึ่ง เราสร้าง oscillator node เชื่อมต่อกับ dynamics compressor และวัดบัฟเฟอร์เอาต์พุต ความแตกต่างในความแม่นยำของทศนิยม การนำ DSP ไปใช้งาน และอัลกอริทึม resampling ในแต่ละฮาร์ดแวร์เสียงและระบบปฏิบัติการสร้างความแปรผันที่วัดได้ในเอาต์พุต
Audio fingerprints มีความเป็นเอกลักษณ์ปานกลางแต่มีความเสถียรที่ยอดเยี่ยม ไปป์ไลน์การประมวลผลเสียงแทบไม่เปลี่ยนแปลงเว้นแต่ผู้ใช้จะเปลี่ยนฮาร์ดแวร์เสียงหรือติดตั้งระบบปฏิบัติการใหม่ สิ่งนี้ทำให้สัญญาณเสียงเป็นจุดยึดที่มีค่าในระบบระบุตัวตนแบบหลายชั้นของเรา
Signal Fusion และการระบุอัตลักษณ์
สัญญาณดิบถูกเข้ารหัสและส่งไปยัง server ของเรา ซึ่งเอนจินระบุตัวตนอุปกรณ์จะประมวลผลผ่านระบบ hashing สามชั้น สัญญาณระดับฮาร์ดแวร์ (canvas, WebGL, audio) ก่อตัวเป็น Tier 1 — อัตลักษณ์แกนกลางที่เสถียร สัญญาณระดับเบราว์เซอร์ (feature detection, คุณสมบัติ CSS, ความสามารถของสื่อ) ก่อตัวเป็น Tier 2 ประมวลผลผ่านการจับคู่ข้าม session เพื่อรองรับการเลื่อนไหล (drift) ที่คาดว่าจะเกิดจากการอัปเดตเบราว์เซอร์ สัญญาณที่ผันผวน (user agent, timezone, ภาษา) ก่อตัวเป็น Tier 3 ซึ่งมีส่วนช่วยในการให้คะแนนความเชื่อมั่นโดยไม่ขับเคลื่อนการตัดสินใจเรื่องอัตลักษณ์
อัลกอริทึม fusion ถ่วงน้ำหนักแต่ละสัญญาณตามความเป็นเอกลักษณ์และความเสถียรของมัน การจับคู่บน canvas hash ที่หายากมีน้ำหนักมากกว่าการจับคู่บนความละเอียดหน้าจอทั่วไปมาก แนวทางการถ่วงน้ำหนักนี้รับประกันว่าการระบุตัวตนยังคงแม่นยำแม้เมื่อสัญญาณบางส่วนเปลี่ยนแปลง
เราจัดเก็บอะไร และทำไมการระบุตัวตนจึงไม่ขึ้นอยู่กับสิ่งนั้น
หลักการออกแบบที่สำคัญของระบบเราคือ การระบุตัวตนไม่ขึ้นอยู่กับที่จัดเก็บข้อมูลฝั่งไคลเอนต์ visitor ID ได้มาจากลักษณะเฉพาะโดยเนื้อแท้ของอุปกรณ์ — ฮาร์ดแวร์ สแตกซอฟต์แวร์ การกำหนดค่าเครือข่าย — และนั่นคือเหตุผลที่การระบุตัวตนอยู่รอดผ่านการล้างคุกกี้ โหมดไม่ระบุตัวตน และแม้แต่การติดตั้งเบราว์เซอร์ใหม่
นี่เป็นคำกล่าวเรื่องการพึ่งพา ไม่ใช่เรื่องการงดเว้น และความต่างนี้ควรพูดให้ชัด เราตั้งคุกกี้ first-party หนึ่งตัวจริง ๆ คือ _vid_t ซึ่งเก็บตัวระบุแบบทึบที่มีอายุ 365 วัน และเราสะท้อนค่าเดียวกันนี้ไว้ใน localStorage สิ่งที่เราไม่ทำคือ ตั้งคุกกี้ third-party เขียนอะไรก็ตามที่ทำงานข้ามเว็บไซต์ หรืออ่านประวัติการเข้าชม ข้อมูลฟอร์ม หรือ IndexedDB คุกกี้นี้มีอยู่เพราะเป็นคำตอบที่ถูกที่สุดสำหรับคำถามว่า "เราเคยเห็นเบราว์เซอร์นี้มาก่อนหรือไม่" — เมื่อมันอยู่รอด การจับคู่จะเกิดขึ้นทันทีและแน่นอน เมื่อมันไม่อยู่รอด ก็ไม่มีอะไรพัง สัญญาณของอุปกรณ์จะสร้างตัวระบุขึ้นใหม่ได้เอง ด้วยความเชื่อมั่นที่ต่ำลงเล็กน้อย ผู้เยี่ยมชมที่ล้างทุกอย่างก็ยังถูกจดจำได้ ส่วนระบบที่สร้างบนที่จัดเก็บข้อมูลเพียงอย่างเดียวคงสูญเสียเขาไปแล้ว
ความเป็นส่วนตัวโดยสถาปัตยกรรม
เนื่องจากเราเก็บเฉพาะแอตทริบิวต์ทางเทคนิคของเบราว์เซอร์ — ไม่มีประวัติการเข้าชม ไม่มีข้อมูลฟอร์ม ไม่มีเนื้อหาส่วนบุคคล — ผลกระทบต่อความเป็นส่วนตัวจึงน้อยที่สุด W3C Fingerprinting Guidance ระบุแนวปฏิบัติที่ดีที่สุดสำหรับการใช้สัญญาณเบราว์เซอร์อย่างมีความรับผิดชอบ และสถาปัตยกรรมของเราสอดคล้องกับหลักการเหล่านี้ การประมวลผลเกิดขึ้นในคลาวด์แบบ managed ของเรา โดยถิ่นที่อยู่ของข้อมูลอยู่ใน EU (แฟรงก์เฟิร์ต) สถาปัตยกรรมนี้ทำให้การปฏิบัติตาม GDPR, CCPA และกฎระเบียบความเป็นส่วนตัวอื่น ๆ เป็นเรื่องตรงไปตรงมา