كيف يعمل تتبُّع البصمة الرقمية خلف الكواليس
من مصافحات TLS إلى تصيير Canvas — كيف نعيد بناء البصمة الرقمية للجهاز باستخدام أكثر من 130 إشارة سلبية دون ملفات تعريف ارتباط أو تخزين.
كل جهاز يتصل بالإنترنت يترك أثرًا من الآثار التقنية — بصمة رقمية. في tracio.ai، نعيد بناء هذه البصمة من أكثر من 130 إشارة سلبية تُجمَع أثناء تحميل صفحة واحدة، دون الاعتماد على ملفات تعريف الارتباط أو localStorage أو أي شكل من أشكال التخزين الدائم في جانب العميل. تشرح هذه المقالة بالضبط كيف تعمل هذه العملية.
طبقة جمع الإشارات
عندما يُحمَّل وكيل JavaScript الخاص بنا في متصفح الزائر، يبدأ بجمع الإشارات عبر فئات متعددة في وقت واحد. تصيير Canvas، واستعلامات معاملات WebGL، ومعالجة AudioContext، وتعداد الخطوط، وقراءات خصائص navigator — كلها تعمل بالتوازي. تكتمل عملية الجمع بأكملها في أقل من 50 مللي ثانية على العتاد الحديث.
الفكرة الجوهرية هي أن كل إشارة تلتقط جانبًا مختلفًا من حزمة عتاد الجهاز وبرمجياته. يعكس تصيير Canvas وحدة معالجة الرسوميات ومشغّل التعريف ومحرك تصيير الخطوط. وتكشف معاملات WebGL عن طراز بطاقة الرسوميات وقدراتها. ويكشف AudioContext الفروق في كيفية معالجة معالج الإشارات الرقمية للصوت لعمليات الفاصلة العائمة. وتُبلِّغ خصائص navigator عن أنوية المعالج والذاكرة والمنصّة وإعدادات اللغة.
قاس فريقنا هذا عبر ملياري حدث الشهر الماضي: كان زمن الجمع الوسيط 38 مللي ثانية، والمئين التاسع والتسعين 52 مللي ثانية. لقد جرّبنا في الواقع النهج الساذج أولًا — جمع الإشارات على التوالي. كان أبطأ بأربعين مرة. وكان الجمع المتوازي المزوَّد بحاجز مهلة زمنية من أوائل القرارات المعمارية التي أصبنا فيها.
بصمة TLS: الطبقة الأولى
قبل أن يُنفَّذ JavaScript الخاص بنا حتى، يكون المتصفح قد كشف بالفعل معلومات مهمة عبر مصافحة TLS. تحتوي رسالة Client Hello على مجموعات التشفير التي يدعمها المتصفح، وامتدادات TLS التي يستخدمها، والمنحنيات الإهليلجية التي يفضّلها، وخوارزميات التوقيع التي يقبلها. تحدَّد هذه المعلومات بواسطة مكتبة TLS في المتصفح وتتباين تباينًا كبيرًا عبر عائلات المتصفحات وإصداراتها وأنظمة التشغيل.
نلتقط بصمة TLS هذه باستخدام تجزئة JA4 — بديل حديث لـ JA3 يوفّر دقة أفضل واستقرارًا عبر الإصدارات. يمكن لتجزئة JA4 وحدها أن تميّز Chrome عن Firefox عن Safari، وغالبًا ما تضيّق التعرّف إلى مدى إصدار محدد من المتصفح. وبدمجها مع إشاراتنا في جانب العميل، توفّر طبقة تحقق متقاطع يصعب للغاية انتحالها.
بصمة Canvas ووحدة معالجة الرسوميات
تستغل بصمة Canvas حقيقة أن وحدات معالجة الرسوميات المختلفة تصيّر تعليمات الرسم نفسها بفروق دقيقة على مستوى البكسل. تتيح لنا واجهة Canvas API رسم مشهد مصمَّم بعناية — سلاسل نصية محددة بخطوط متعددة، وأشكال هندسية بإحداثيات معيّنة، وتدرجات لونية بنقاط توقّف لونية دقيقة — ثم حساب تجزئة لبيانات البكسل الناتجة.
تنبع فروق التصيير من اختلافات في خوارزميات تنعيم الحواف، والتصيير دون البكسلي، ومزج الألوان، وتلميح الخطوط عبر طرازات وحدات معالجة الرسوميات وإصدارات مشغّلات التعريف. حتى جهازان بالطراز نفسه من وحدة معالجة الرسوميات قد ينتجان مخرجات Canvas مختلفة إذا كانا يشغّلان إصدارات مختلفة من مشغّلات التعريف أو أنظمة تشغيل مختلفة. وهذا يجعل تجزئة Canvas من أكثر إشاراتنا تمييزًا.
توصيف عتاد WebGL
تكشف واجهة WebGL API معلومات مفصّلة عن نظام الرسوميات الفرعي تتجاوز بكثير سلاسل المصيِّر والمورّد. نستعلم عن أقصى أحجام النسيج، وصيغ دقة المظلِّلات، والامتدادات المدعومة، وأبعاد منفذ العرض، وعشرات المعاملات الأخرى التي تتباين عبر طرازات وحدات معالجة الرسوميات وتكوينات مشغّلات التعريف.
يخلق اجتماع هذه المعاملات ملفًا مفصّلًا للعتاد. فجهاز مزوَّد ببطاقة NVIDIA RTX 4070، مثلًا، سيُبلِّغ عن أقصى أحجام نسيج مختلفة، ودقة مظلِّلات مختلفة، ودعم امتدادات مختلف عن جهاز مزوَّد ببطاقة AMD RX 7800 XT. وهذا الملف العتادي مستقر بطبيعته — فهو لا يتغير مع تحديثات المتصفح، بل فقط مع تغيّرات العتاد أو مشغّلات التعريف.
بصمة معالجة الصوت
توفّر واجهة Web Audio API مصدر إشارة آخر يعتمد على العتاد. نُنشئ عقدة مذبذب، ونصلها بضاغط ديناميكي، ونقيس المخزن المؤقت للمخرجات. تنتج الفروق في دقة الفاصلة العائمة، وتطبيق معالج الإشارات الرقمية، وخوارزميات إعادة أخذ العينات عبر عتاد الصوت وأنظمة التشغيل تباينات قابلة للقياس في المخرجات.
تتمتع بصمات الصوت بتفرّد متوسط لكن باستقرار استثنائي. فنادرًا ما يتغير خط أنابيب معالجة الصوت ما لم يبدّل المستخدم عتاد الصوت أو يعيد تثبيت نظام التشغيل. وهذا يجعل إشارات الصوت مراسيَ قيّمة في نظام التعرّف متعدد الطبقات لدينا.
دمج الإشارات وحسم الهوية
تُشفَّر الإشارات الخام وتُرسَل إلى خادمنا، حيث يعالجها محرك التعرّف على الأجهزة عبر نظام تجزئة من ثلاث طبقات. تشكّل إشارات مستوى العتاد (Canvas وWebGL والصوت) الطبقة الأولى — هوية النواة المستقرة. وتشكّل إشارات مستوى المتصفح (كشف الميزات وخصائص CSS وقدرات الوسائط) الطبقة الثانية، وتُعالَج عبر المطابقة بين الجلسات لاستيعاب الانحراف المتوقع من تحديثات المتصفح. أما الإشارات المتقلبة (وكيل المستخدم والمنطقة الزمنية واللغة) فتشكّل الطبقة الثالثة، مسهِمةً في تسجيل الثقة دون أن تقود قرارات الهوية.
توازن خوارزمية الدمج كل إشارة بحسب تفرّدها واستقرارها. فالمطابقة على تجزئة Canvas نادرة تحمل وزنًا أكبر بكثير من المطابقة على دقة شاشة شائعة. ويضمن هذا النهج المرجَّح بقاء التعرّف دقيقًا حتى عندما يتغير جزء من الإشارات.
لا تخزين ولا ملفات تعريف ارتباط
من المبادئ التصميمية الجوهرية لنظامنا أن التعرّف لا يعتمد على أي شكل من أشكال التخزين في جانب العميل. فنحن لا نضع ملفات تعريف ارتباط، ولا نكتب إلى localStorage، ولا نستخدم IndexedDB لأغراض التتبّع. يُشتَق معرّف الزائر بالكامل من الخصائص المتأصلة في الجهاز — العتاد، وحزمة البرمجيات، وتكوين الشبكة. وهذا يعني أن التعرّف يصمد أمام مسح ملفات تعريف الارتباط، ووضع التصفح المتخفّي، بل وحتى إعادة تثبيت المتصفح.
الخصوصية بالتصميم
لأننا نجمع فقط السمات التقنية للمتصفح — لا سجل تصفّح، ولا بيانات نماذج، ولا محتوى شخصي — فإن الأثر على الخصوصية ضئيل. يعرض دليل W3C حول البصمات أفضل الممارسات للاستخدام المسؤول لإشارات المتصفح، وتتوافق معماريتنا مع هذه المبادئ. ومع النشر المستضاف سحابيًا، تجري كل المعالجة على بنيتك التحتية. ولا تصل أي بيانات للزوار إلى خوادمنا أبدًا. تجعل هذه المعمارية الامتثال للائحة GDPR وقانون CCPA وغيرهما من لوائح الخصوصية أمرًا مباشرًا.