מערכת הזיהוי של TRACIO מייצרת מזהה מבקר יציב מתוך למעלה מ-130 אותות דפדפן. המזהה נשמר לאורך הפעלות, מצב גלישה בסתר, החלפות VPN וניקוי עוגיות. עמוד זה מסביר את צינור הזיהוי המלא.
הלקוח אוסף למעלה מ-130 אותות דפדפן ייחודיים ב-10 קטגוריות. כל אות בוחן היבט אחר של הדפדפן והמכשיר, ממאפייני חומרה ועד להתנהגות רינדור.
| קבוצה | אותות | יציבות | דוגמאות |
|---|---|---|---|
| חומרה | 12 | גבוהה מאוד | רזולוציית מסך, זיכרון המכשיר, מקביליות חומרה, תמיכה במגע |
| רינדור | 9 | גבוהה | טביעת אצבע של Canvas (טקסט + גיאומטריה), WebGL renderer, עיבוד שמע |
| גופנים | 5 | גבוהה | גופני מערכת זמינים (69 משפחות נבדקו), העדפות גופנים, רינדור MathML |
| פלטפורמה | 25 | בינונית | User-Agent, מאפייני navigator, אזור זמן, שפה, ספק |
| מנוע CSS | 10 | בינונית | תשובות media query (סכמת צבע, HDR, תנועה מופחתת, צבעים כפויים) |
| אחסון | 10 | בינונית | תמיכה בעוגיות, localStorage, sessionStorage, מכסת אחסון |
| WebGL | 9 | גבוהה | ספק GPU, renderer (unmasked), דיוק shader, תמיכה בהרחבות |
| רשת | 3 | נמוכה | RTT של חיבור, בדיקת TURN, גרסת אפליקציה |
| מדדי בוט | 15 | לא רלוונטי | דגל webdriver, מסגרות אוטומציה, אורך eval, סמני headless |
| מותאם אישית | 14 | משתנה | טביעת אצבע מתמטית, יכולות WASM, זיהוי ארכיטקטורה |
לא כל האותות שימושיים באותה מידה לזיהוי. האותות מסווגים לפי יציבות:
דרגה 1 (קפואה): אותות חומרה ורינדור שכמעט לעולם אינם משתנים. טביעת אצבע של Canvas, WebGL renderer, טביעת אצבע של שמע, פרמטרי GPU, מניית גופנים, פעולות מתמטיות, בית ארכיטקטורה.
דרגה 2 (יציבה למחצה): אותות המשתנים עם עדכוני דפדפן או שינויי תצורה. User-Agent, Client Hints, תוספים, CSS media queries, יכולות אחסון.
דרגה 3 (תנודתית): אותות המשתנים לעיתים קרובות. רזולוציית מסך (החלפת צג), אזור זמן (נסיעות), העדפות שפה, מאפייני חיבור.
מזהה המבקר מחושב באמצעות מערכת גיבוב תלת-דרגתית המאזנת בין יציבות להרחבה:
Visitor ID = [Tier1Hash][Tier2Hash][Tier3Hash] 20 chars 10 chars 10 chars ──────── ──────── ──────── base62 base62 base62דרגה 1 משתמשת אך ורק באותות קפואים שהם אינהרנטיים לחומרה ולמנוע הרינדור. אותות אלה משתנים רק כאשר המשתמש עובר למכשיר פיזי אחר או מבצע שינויי חומרה משמעותיים.
אותות כלולים: hash של טביעת אצבע Canvas, WebGL renderer (unmasked), ספק WebGL (unmasked), טביעת אצבע של שמע, hash של מניית גופנים, hash של פרמטרי WebGL, hash של פעולות מתמטיות, בית ארכיטקטורה (ARM לעומת x86).
אלגוריתם:
key1=value1|key2=value2|... (מפתחות ממוינים לפי סדר אלפביתי)דרגה 1 קפואה בכוונה. אותות חדשים לעולם אינם מתווספים לדרגה 1, מה שמבטיח שליבת הזהות נשארת יציבה לאורך עדכוני שרת.
דרגה 2 לוכדת את סביבת הדפדפן ומערכת ההפעלה. אותות אלה משתנים כאשר המשתמש מעדכן את הדפדפן, מתקין הרחבות או משנה הגדרות מערכת.
אותות כלולים: נתוני User-Agent, Client Hints (מותגים, פלטפורמה, ארכיטקטורה), מאפייני navigator (ספק, פלטפורמה, שפות), רשימת תוספים, עומק צבע המסך, זיכרון המכשיר, מקביליות חומרה.
דרגה 3 לוכדת אותות תנודתיים העשויים להשתנות בין הפעלות. אלה משמשים לניקוד ביטחון ולהתאמה מטושטשת אך אינם משפיעים על ליבת הזהות.
אותות כלולים: רזולוציית מסך, אזור זמן, שפה, חוסמי DOM, יכולות אחסון, תשובות CSS media query, מאפייני חיבור.
כל דרגה עוברת גיבוב באמצעות MurmurHash3-x64-128, פונקציית גיבוב מהירה ולא קריפטוגרפית המייצרת פלט של 128 סיביות. האלגוריתם:
MurmurHash3 מספק פיזור מצוין (כל סיבית בקלט משפיעה על כל סיבית בפלט) ומהיר מספיק לחישוב בזמן אמת. הוא אינו מאובטח קריפטוגרפית, אך הדבר אינו נדרש עבור גיבוב טביעות אצבע.
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 נדיר מזהה יותר מרזולוציית מסך נפוצה.
התאמה מטושטשת: המערכת משווה את טביעת האצבע הנוכחית מול טביעות אצבע שמורות באמצעות מרחק Hamming ברמת הסיבית. האותות מקובצים לפי דרגה, וניקוד ההתאמה של כל דרגה משוקלל באופן עצמאי.
עקביות היסטורית: אם אותות המבקר היו יציבים על פני ביקורים מרובים, הביטחון עולה. אם האותות משתנים לעיתים קרובות, הביטחון יורד.
| תרחיש | ניקוד טיפוסי | הסבר |
|---|---|---|
| התאמת עוגייה | 1.000 | UID של העוגייה _vid_t מאומת בצד השרת |
| ביקור ראשון | 0.900 | אין רשומות קודמות להשוואה |
| התאמת טביעת אצבע חזקה | 0.990-0.999 | כל אותות דרגה 1 תואמים, רוב אותות דרגה 2 |
| התאמה חלקית (עדכון דפדפן) | 0.950-0.989 | דרגה 1 תואמת, דרגה 2 השתנתה (UA חדש) |
| התאמה חלשה (שינויים משמעותיים) | 0.850-0.949 | חלק מאותות דרגה 1 השתנו |
| דו-משמעי | 0.500-0.849 | מספר התאמות אפשריות במסד הנתונים |
TRACIO משתמש בעוגייה מהצד הראשון (_vid_t) לשמירת זהות המבקר לאורך הפעלות:
_vid_tSameSite=Lax, ו-Secure ב-HTTPS (לא HttpOnly — הסוכן קורא אותה בצד הלקוח)העוגייה מונפקת גם בצד השרת (דרך כותרת התגובה Set-Cookie) וגם בצד הלקוח על ידי הסוכן, וה-UID משוכפל גם ל-localStorage כגיבוי כאשר עוגיות חסומות.
השרת מנסה להגדיר את העוגייה על היקפי דומיין רחבים בהדרגה:
app.example.com → example.com → comהדומיין הרחב ביותר שבו העוגייה מוגדרת בהצלחה הוא זה שנעשה בו שימוש. הדבר מבטיח שהעוגייה נשמרת על פני תת-דומיינים.
TRACIO יכול לזהות את אותו אדם על פני דפדפנים שונים באותו מכשיר כאשר אותות דרגה 1 מייצרים hashes תואמים. מכיוון שדרגה 1 מסתמכת על מאפייני חומרה ורינדור (canvas, WebGL, שמע, גופנים), אותות אלה לרוב זהים בין דפדפנים מבוססי Chromium על אותה מכונה ומתדרדרים בין מנועים (Chromium לעומת Firefox לעומת Safari). התאמת מבקר שולחני למבקר נייד אינה צפויה — משטחי החומרה והרינדור שונים.
התאמה חוצת-דפדפנים היא מטבעה פעולה בעלת ביטחון נמוך יותר ומטופלת ככזו בניקוד.