ระบบระบุตัวตนของ TRACIO สร้างตัวระบุผู้เข้าชมที่เสถียรจากสัญญาณของเบราว์เซอร์กว่า 130 รายการ ตัวระบุนี้คงอยู่ข้ามเซสชัน โหมดไม่ระบุตัวตน (incognito) การเปลี่ยน VPN และการล้างคุกกี้ หน้านี้อธิบายไปป์ไลน์การระบุตัวตนทั้งหมด
ไคลเอนต์เก็บสัญญาณของเบราว์เซอร์ที่แตกต่างกันกว่า 130 รายการใน 10 หมวดหมู่ สัญญาณแต่ละรายการตรวจสอบแง่มุมที่ต่างกันของเบราว์เซอร์และอุปกรณ์ ตั้งแต่คุณลักษณะของฮาร์ดแวร์ไปจนถึงพฤติกรรมการเรนเดอร์
| กลุ่ม | สัญญาณ | ความเสถียร | ตัวอย่าง |
|---|---|---|---|
| Hardware | 12 | สูงมาก | ความละเอียดหน้าจอ, หน่วยความจำอุปกรณ์, hardware concurrency, การรองรับการสัมผัส |
| Rendering | 9 | สูง | Canvas fingerprint (ข้อความ + เรขาคณิต), WebGL renderer, การประมวลผลเสียง |
| Fonts | 5 | สูง | ฟอนต์ของระบบที่ใช้ได้ (ทดสอบ 69 ตระกูล), การตั้งค่าฟอนต์, การเรนเดอร์ MathML |
| Platform | 25 | ปานกลาง | User-Agent, คุณสมบัติของ navigator, เขตเวลา, ภาษา, ผู้ผลิต |
| CSS Engine | 10 | ปานกลาง | การตอบสนอง media query (color scheme, HDR, reduced motion, forced colors) |
| Storage | 10 | ปานกลาง | การรองรับคุกกี้, localStorage, sessionStorage, โควตาพื้นที่จัดเก็บ |
| WebGL | 9 | สูง | ผู้ผลิต GPU, renderer (unmasked), ความแม่นยำของ shader, การรองรับ extension |
| Network | 3 | ต่ำ | RTT ของการเชื่อมต่อ, TURN probe, เวอร์ชันแอป |
| Bot Indicators | 15 | ไม่มี | Webdriver flag, automation frameworks, ความยาว eval, headless markers |
| Custom | 14 | ผันแปร | Math fingerprint, ฟีเจอร์ WASM, การตรวจจับสถาปัตยกรรม |
ไม่ใช่ทุกสัญญาณจะมีประโยชน์เท่ากันในการระบุตัวตน สัญญาณถูกจำแนกตามความเสถียร:
Tier 1 (Frozen): สัญญาณฮาร์ดแวร์และการเรนเดอร์ที่แทบไม่เปลี่ยนแปลงเลย ได้แก่ Canvas fingerprint, WebGL renderer, audio fingerprint, พารามิเตอร์ GPU, การแจกแจงฟอนต์, การดำเนินการทางคณิตศาสตร์, ไบต์สถาปัตยกรรม
Tier 2 (Semi-stable): สัญญาณที่เปลี่ยนแปลงเมื่อมีการอัปเดตเบราว์เซอร์หรือเปลี่ยนการกำหนดค่า ได้แก่ User-Agent, Client Hints, ปลั๊กอิน, CSS media queries, ความสามารถด้านพื้นที่จัดเก็บ
Tier 3 (Volatile): สัญญาณที่เปลี่ยนแปลงบ่อย ได้แก่ ความละเอียดหน้าจอ (เปลี่ยนจอภาพ), เขตเวลา (การเดินทาง), การตั้งค่าภาษา, คุณสมบัติของการเชื่อมต่อ
Visitor ID คำนวณด้วยระบบแฮชสามชั้นที่สร้างสมดุลระหว่างความเสถียรกับความสามารถในการขยาย:
Visitor ID = [Tier1Hash][Tier2Hash][Tier3Hash] 20 chars 10 chars 10 chars ──────── ──────── ──────── base62 base62 base62Tier 1 ใช้เฉพาะสัญญาณแบบ frozen ที่เป็นคุณสมบัติในตัวของฮาร์ดแวร์และเอนจินการเรนเดอร์ สัญญาณเหล่านี้เปลี่ยนแปลงก็ต่อเมื่อผู้ใช้เปลี่ยนไปยังอุปกรณ์กายภาพเครื่องอื่นหรือมีการเปลี่ยนแปลงฮาร์ดแวร์อย่างมีนัยสำคัญ
สัญญาณที่รวมอยู่: Canvas fingerprint hash, WebGL renderer (unmasked), WebGL vendor (unmasked), audio fingerprint, font enumeration hash, WebGL parameters hash, math operations hash, ไบต์สถาปัตยกรรม (ARM vs x86)
อัลกอริทึม:
key1=value1|key2=value2|... (เรียงคีย์ตามลำดับตัวอักษร)Tier 1 ถูกทำให้ frozen โดยเจตนา จะไม่มีการเพิ่มสัญญาณใหม่เข้าไปใน Tier 1 เพื่อให้แน่ใจว่าแกนกลางของตัวตนยังคงเสถียรตลอดการอัปเดตของเซิร์ฟเวอร์
Tier 2 เก็บสภาพแวดล้อมของเบราว์เซอร์และระบบปฏิบัติการ สัญญาณเหล่านี้เปลี่ยนแปลงเมื่อผู้ใช้อัปเดตเบราว์เซอร์ ติดตั้งส่วนขยาย หรือแก้ไขการตั้งค่าระบบ
สัญญาณที่รวมอยู่: ข้อมูล User-Agent, Client Hints (แบรนด์, แพลตฟอร์ม, สถาปัตยกรรม), คุณสมบัติของ navigator (ผู้ผลิต, แพลตฟอร์ม, ภาษา), รายการปลั๊กอิน, ความลึกสีของหน้าจอ, หน่วยความจำอุปกรณ์, hardware concurrency
Tier 3 เก็บสัญญาณผันแปรที่อาจเปลี่ยนแปลงระหว่างเซสชัน สัญญาณเหล่านี้ใช้สำหรับการให้คะแนนความเชื่อมั่นและการจับคู่แบบคลุมเครือ แต่ไม่ส่งผลต่อแกนกลางของตัวตน
สัญญาณที่รวมอยู่: ความละเอียดหน้าจอ, เขตเวลา, ภาษา, DOM blockers, ความสามารถด้านพื้นที่จัดเก็บ, การตอบสนอง CSS media query, คุณสมบัติของการเชื่อมต่อ
แต่ละชั้นถูกแฮชด้วย MurmurHash3-x64-128 ซึ่งเป็นฟังก์ชันแฮชที่รวดเร็วและไม่ใช่แบบเข้ารหัสลับ (non-cryptographic) โดยให้ผลลัพธ์ 128 บิต อัลกอริทึม:
MurmurHash3 ให้การกระจายที่ยอดเยี่ยม (ทุกบิตของอินพุตส่งผลต่อทุกบิตของเอาต์พุต) และเร็วพอสำหรับการคำนวณแบบเรียลไทม์ มันไม่ปลอดภัยในเชิงการเข้ารหัสลับ แต่นั่นไม่จำเป็นสำหรับการแฮช fingerprint
Input: "canvas=abc123|webgl_renderer=ANGLE|audio=0.04852" ↓ MurmurHash3-x64-128Output: 0x7f4a8c2d1e3b5f6a 0x9d8c7b6a5e4f3d2c ↓ base62 encodeResult: "X7fh2Hg9LkMn3pQr5tBv"คะแนนความเชื่อมั่น (0.0 ถึง 1.0) แสดงถึงระดับความมั่นใจของระบบเกี่ยวกับการระบุตัวตนผู้เข้าชม:
เมื่อคุกกี้ _vid_t ตรงกับผู้เข้าชมที่รู้จัก ความเชื่อมั่นจะถูกตั้งเป็น 1.0 คุกกี้เก็บ UID ของผู้เข้าชมไว้ ซึ่งเซิร์ฟเวอร์ตรวจสอบกับระเบียนของตน นี่คือเส้นทางการระบุตัวตนที่เร็วและน่าเชื่อถือที่สุด
ผู้เข้าชมใหม่ที่ไม่มีระเบียนก่อนหน้าจะได้รับคะแนนความเชื่อมั่น 0.90 ไม่มีความเสี่ยงในการจับคู่ผิดพลาดเนื่องจากไม่มีระเบียนที่มีอยู่ให้เปรียบเทียบ
สำหรับผู้เข้าชมที่กลับมาอีกครั้งโดยไม่มีการจับคู่คุกกี้ ระบบจะคำนวณความเชื่อมั่นจาก:
การถ่วงน้ำหนักตามความถี่ของสัญญาณ (IDF): สัญญาณที่มีความเป็นเอกลักษณ์มากกว่าในกลุ่มประชากรทั่วโลกจะได้รับน้ำหนักสูงกว่า WebGL renderer ที่หายากบ่งชี้ตัวตนได้ดีกว่าความละเอียดหน้าจอที่พบได้ทั่วไป
การจับคู่แบบคลุมเครือ (Fuzzy matching): ระบบเปรียบเทียบ fingerprint ปัจจุบันกับ fingerprint ที่เก็บไว้โดยใช้ Hamming distance ในระดับบิต สัญญาณถูกจัดกลุ่มตามชั้น และคะแนนการจับคู่ของแต่ละชั้นถูกถ่วงน้ำหนักอย่างเป็นอิสระ
ความสอดคล้องเชิงประวัติ: หากสัญญาณของผู้เข้าชมเสถียรตลอดหลายครั้งของการเข้าชม ความเชื่อมั่นจะเพิ่มขึ้น หากสัญญาณผันผวนบ่อย ความเชื่อมั่นจะลดลง
| สถานการณ์ | คะแนนทั่วไป | คำอธิบาย |
|---|---|---|
| Cookie match | 1.000 | UID ของคุกกี้ _vid_t ตรวจสอบฝั่งเซิร์ฟเวอร์ |
| First visit | 0.900 | ไม่มีระเบียนก่อนหน้าให้เปรียบเทียบ |
| Strong fingerprint match | 0.990-0.999 | สัญญาณ Tier 1 ตรงทั้งหมด, Tier 2 ตรงเกือบทั้งหมด |
| Partial match (browser update) | 0.950-0.989 | Tier 1 ตรงกัน, Tier 2 เปลี่ยน (UA ใหม่) |
| Weak match (significant changes) | 0.850-0.949 | สัญญาณ Tier 1 บางส่วนเปลี่ยนไป |
| Ambiguous | 0.500-0.849 | มีการจับคู่ที่เป็นไปได้หลายรายการในฐานข้อมูล |
TRACIO ใช้คุกกี้แบบ first-party (_vid_t) เพื่อรักษาตัวตนของผู้เข้าชมข้ามเซสชัน:
_vid_tSameSite=Lax และ Secure บน HTTPS (ไม่ใช่ HttpOnly — เอเจนต์อ่านค่านี้ฝั่งไคลเอนต์)คุกกี้ถูกออกทั้งฝั่งเซิร์ฟเวอร์ (ผ่านส่วนหัวตอบกลับ Set-Cookie) และฝั่งไคลเอนต์โดยเอเจนต์ และ UID ยังถูกสะท้อนไปยัง localStorage เป็น fallback เมื่อคุกกี้ถูกบล็อก
เซิร์ฟเวอร์พยายามตั้งคุกกี้บนขอบเขตโดเมนที่กว้างขึ้นเรื่อย ๆ:
app.example.com → example.com → comโดเมนที่กว้างที่สุดซึ่งตั้งคุกกี้ได้สำเร็จจะถูกนำมาใช้ วิธีนี้ทำให้คุกกี้คงอยู่ข้ามซับโดเมน
TRACIO สามารถระบุบุคคลเดียวกันข้ามเบราว์เซอร์ที่ต่างกันบนอุปกรณ์เดียวกันได้ เมื่อสัญญาณ Tier 1 สร้างแฮชที่ตรงกัน เนื่องจาก Tier 1 อาศัยคุณลักษณะของฮาร์ดแวร์และการเรนเดอร์ (canvas, WebGL, audio, fonts) สัญญาณเหล่านี้จึงมักเหมือนกันในเบราว์เซอร์ที่ใช้ Chromium บนเครื่องเดียวกัน และลดความตรงกันลงเมื่อข้ามเอนจิน (Chromium vs Firefox vs Safari) การจับคู่ผู้เข้าชมบนเดสก์ท็อปกับผู้เข้าชมบนมือถือไม่ใช่สิ่งที่คาดหวัง เพราะพื้นผิวด้านฮาร์ดแวร์และการเรนเดอร์แตกต่างกัน
การจับคู่ข้ามเบราว์เซอร์เป็นการดำเนินการที่มีความเชื่อมั่นต่ำกว่าโดยธรรมชาติ และถูกจัดการเช่นนั้นในการให้คะแนน