اثر انگشت مرورگر چیست
یک وبسایت میتواند بدون حتی یک کوکی شما را بشناسد: چند ده ویژگی مرورگر را جمع کند، هش بگیرد، و اثر انگشت آماده است. سازوکار آن، چرا آنتروپی جمع میشود، تفاوت اثر انگشت با کوکی، و منطق پشت امتیاز «اصالت اثر انگشت» این سایت.
7 دقیقه مطالعه · انتشار ۱۹ شهریور ۱۴۰۵
کوکیها را پاک میکنید، پنجرهٔ ناشناس باز میکنید، IP را عوض میکنید — و سایت انگار هنوز میداند شما هستید. این معمولاً کار اثر انگشت مرورگر است. چیزی روی دستگاه شما ذخیره نمیکند. فقط اطلاعاتی را که مرورگرتان داوطلبانه میدهد جمع میکند، یک هش میسازد، و نتیجه را بهعنوان شناسه به کار میبرد. هر قطعه بهتنهایی معمولی است؛ در کنار هم اغلب یکتا هستند.
سایت چطور بدون کوکی شما را میشناسد
هر صفحهای را باز کنید، مرورگر چیزهای زیادی به سرور میگوید: رشتهٔ User-Agent، Accept-Language، رزولوشن صفحه و عمق رنگ، منطقهٔ زمانی، فونتهای نصبشده، کدکهای پشتیبانیشده، تعداد هستههای CPU، مقدار تقریبی حافظه، وجود صفحهٔ لمسی. اینها APIهای مشروعی هستند که ساخته شدهاند تا صفحات بتوانند خود را با دستگاه تطبیق دهند.
یک سطح عمیقتر، صفحه میتواند مرورگر را وادار به انجام کاری کند و نتیجه را بررسی کند. یک خط متن و چند شکل روی canvas بکشد و پیکسلها را استخراج کند. یک مثلث با WebGL رندر کند و در همان حال مدل کارت گرافیک را بپرسد. یک سیگنال کوتاه با Web Audio تولید کند و شکل موج را بخواند. نتایج به GPU، درایور آن، نحوهٔ رسم فونتها توسط سیستمعامل، نسخهٔ مرورگر، و حتی نصب بودن یا نبودن یک فونت خاص بستگی دارد. دستگاههای مختلف پیکسلهای کمی متفاوت تولید میکنند، و پس از هش کردن، این تفاوتها به شناسههای پایدار تبدیل میشوند.
آن چند ده مقدار را با ترتیبی ثابت به هم بچسبانید، SHA-256 رشته را بگیرید، و یک «شناسهٔ بازدیدکننده» دارید. شناسهٔ بازدیدکننده در صفحهٔ اثر انگشت این سایت دقیقاً همینطور ساخته میشود.
آنتروپی: چرا ویژگیهای معمولی در ترکیب با هم معمولی نمیمانند
نظریهٔ اطلاعات با «آنتروپی» میسنجد یک ویژگی یک جمعیت را چقدر ریز تقسیم میکند. ویژگیای که مردم را ۵۰/۵۰ تقسیم کند ۱ بیت دارد؛ ویژگیای که فقط یک نفر از هزار نفر با شما در آن مشترک باشد حدود ۱۰ بیت. متمایز کردن یک نفر از میان چند میلیارد نفر در تئوری کمی بیش از ۳۰ بیت میخواهد.
هیچ ویژگیای بهتنهایی نزدیک این عدد نمیشود. صفحهٔ 1920×1080 همهجا هست، Chrome هم همینطور، و تنظیم زبان fa-IR بین کاربران فارسیزبان هیچ چیزی نمیگوید. اما آنتروپی جمع میشود، به شرطی که ویژگیها همبستگی قوی نداشته باشند. صفحه، منطقهٔ زمانی و زبان با هم شاید چند بیت بدهند؛ فهرست فونتها (کمتر کسی مجموعهٔ کامل Adobe بهعلاوهٔ چند فونت غیرمعمول CJK را دارد)، رشتهٔ کامل رندرکنندهٔ WebGL (مدل بهعلاوهٔ نسخهٔ درایور) و هش canvas را اضافه کنید، و با فاصلهٔ زیاد از آستانهٔ یکتایی رد میشوید.
پروژهٔ Panopticlick بنیاد EFF، که حالا Cover Your Tracks نام دارد، دقیقاً همین کار را میکند: اثر انگشت داوطلبان را جمع میکند، توزیع هر ویژگی را میشمارد، و به شما میگوید چه کسری از مرورگرهایی که دیده مقدار شما را دارند. آمار «یکتایی» در پایین صفحهٔ اثر انگشت این سایت همین ایده را دنبال میکند، با بازدیدکنندگان این سایت بهعنوان نمونه. هرچه عدد کوچکتر، آن ویژگی شما را بیشتر لو میدهد.
اثر انگشت در برابر کوکی
کوکی یادداشتی است که سایت در مرورگر شما میگذارد و هر وقت بخواهید میتوانید پارهاش کنید. اثر انگشت فرق دارد:
- چیزی سمت شما ذخیره نمیشود، بنابراین عملیات «پاک کردن» وجود ندارد.
- ذاتاً بینسایتی است. دو سایت که همان اسکریپت را با همان روش هش اجرا کنند، همان شناسه را میگیرند.
- مرور خصوصی تقریباً اثری روی آن ندارد، چون حالت ناشناس ذخیرهسازی را جدا میکند و چیزی از سختافزار یا فونتهای شما را تغییر نمیدهد.
اثر انگشت ضعفهایی هم دارد. بهروزرسانی مرورگر ممکن است رندر canvas را عوض کند؛ مانیتور جدید رزولوشن را عوض میکند؛ نصب یک فونت فهرست فونتها را عوض میکند. پس اثر انگشتها به مرور جابهجا میشوند، و ردیاب نمیتواند به تطابق دقیق تکیه کند — باید تطبیق فازی انجام دهد، یکی دو تغییر را تحمل کند و ببیند بقیه هنوز جور درمیآید یا نه. به همین دلیل هم ویژگیهای پرآنتروپی و پایدار (مدل GPU، هش صدا) برای ردیابها ارزشمندتریناند.
منطق پشت امتیاز «اصالت اثر انگشت»
بالای صفحهٔ اثر انگشت یک عدد بزرگ با برچسب اصالت اثر انگشت هست. این عدد به حریم خصوصی شما نمره نمیدهد. به پرسش دیگری پاسخ میدهد: آیا این مرورگر شبیه یک مرورگر واقعی و معمولی است، یا شبیه یک محیط دستکاریشده؟
امتیاز از ۱۰۰ شروع میشود و برای هر تناقضی که پیدا شود کم میشود:
| بررسی | کسر امتیاز |
|---|---|
User-Agent در هدر HTTP با navigator.userAgent در JavaScript فرق دارد |
30 |
| ویژگیهای موتور با مرورگری که UA ادعا میکند در تناقض است (میگوید Chrome، مثل Firefox رفتار میکند) | 25 |
| پلتفرم یا برند Client Hints با UA در تناقض است | 15 |
| منطقهٔ زمانی استنتاجشده از IP ≠ منطقهٔ زمانی JavaScript | 15 |
| ساعت JavaScript بیش از ۳ دقیقه با زمان منطقهٔ زمانی IP اختلاف دارد | 5 |
زبان اصلی Accept-Language ≠ navigator.language |
10 |
| IP عمومی فاششده از طریق WebRTC ≠ IP اتصال HTTP | 15 |
navigator.webdriver برابر true است، یا سیگنالهای headless وجود دارد |
30 |
| مقادیر ناممکن صفحهنمایش (عرض در دسترس بزرگتر از عرض کل و مانند آن) | 10 |
| UA دسکتاپ با رندرکنندهٔ نرمافزاری (SwiftShader، llvmpipe) | 10 |
| صفر افزونه در Chrome دسکتاپ | 5 |
| دو بار رسم canvas نتیجهٔ متفاوت میدهد (افزونهٔ نویز) | 10 |
دقت کنید که «اثر انگشت شما بیش از حد یکتاست» در این فهرست نیست. امتیاز به سازگاری اهمیت میدهد، به یک دلیل عملی: سیستمهای ضدتقلب و ارزیابی ریسک هم همینطور فکر میکنند. یک مرورگر معمولی که همهٔ ویژگیهایش عادی است و با هم میخوانند، در جمعیت به چشم نمیآید. مرورگری که UA آن به Windows و منطقهٔ زمانیاش به نیویورک تغییر کرده، در حالی که رندرکنندهٔ WebGL هنوز Apple M2 میگوید و Accept-Language هنوز fa-IR است، فوراً علامت میخورد. جعل همهٔ ویژگیها بدون اینکه با هم در تناقض بیفتند، بسیار سختتر از جعل نکردن است.
این امتیاز برای دو گروه مفید است. هر کسی که از فیلترشکن استفاده میکند میتواند نشانههای لورفتن را بررسی کند — رایجترینها منطقهٔ زمانی IP که با منطقهٔ زمانی سیستم نمیخواند، و WebRTC که IP واقعی را فاش میکند. هر کسی که از مرورگر ضدشناسایی استفاده میکند میتواند بررسی کند استتارش با خودش سازگار است یا نه. هر بررسی مقالهٔ خودش را دارد: سازگاری منطقهٔ زمانی و زبان، نشت WebRTC، تشخیص ربات.
این سایت با دادههای شما چه میکند
آزمایشگاه اثر انگشت فقط هشها و ویژگیهای کلی را ذخیره میکند: هش canvas، WebGL، صدا و فونتها، بهعلاوهٔ خانوادهٔ مرورگر، خانوادهٔ سیستمعامل، اندازهٔ صفحه، منطقهٔ زمانی، زبان و نام رندرکننده که برای آمار یکتایی استفاده میشود. پیکسلهای خام canvas، شکل موج صدا و نشانی IP هرگز وارد پایگاهداده نمیشوند. در صفحه گزینهٔ «مشارکت در آمار» هست؛ تیکش را بردارید و چیزی ارسال نمیشود — نتایج فقط بهصورت محلی نمایش داده میشود.
پرسشهای متداول
آیا میتوان بهطور کامل از اثر انگشتگیری فرار کرد؟ بهسختی. راهبرد Tor Browser این است که همهٔ کاربران را یکسان نشان دهد (اندازهٔ پنجرهٔ ثابت، بیشتر APIها غیرفعال)، به بهای تجربهٔ وب ضعیف. در یک مرورگر عادی هدف واقعبینانه کاهش ویژگیهای پرآنتروپی است: فونتهای زیادی نصب نکنید، از رزولوشن رایج استفاده کنید، قابلیتهایی مثل «resist fingerprinting» در Firefox را فعال کنید.
آیا افزونههای نویز canvas کمک میکنند؟ هر هش را متفاوت میکنند، که تطابق دقیق را واقعاً میشکند — اما شما را در گروه کوچکی از افرادی قرار میدهند که خروجی canvasشان تغییر میکند، و این خودش یک ویژگی متمایزکننده است. این سایت برای آن ۱۰ امتیاز کم میکند. اثر انگشت Canvas، WebGL و صدا را ببینید.
چرا Chrome و Firefox روی یک کامپیوتر اثر انگشت متفاوتی میسازند؟ چون موتور رندر، راهبرد جایگزینی فونت و خط پردازش صدا همگی فرق دارند. اثر انگشت «این مرورگر روی این دستگاه» را شناسایی میکند، نه دستگاه را بهتنهایی.