Brave 1.93 و پایان انگشتنگاری GPU
خلاصهٔ کاملتر
این مقالهٔ تحلیلی سراغ یکی از سرسختترین سطحهای ردیابی وب رفته که Brave تو نسخهٔ 1.93 هدف گرفته: انگشتنگاری GPU. به تعبیر نویسنده، کوکی یه حالت ذخیرهشدهست ولی فینگرپرینت یه استنتاجه — یعنی ردیاب بهجای اینکه شناسهای روی مرورگر بنویسه، از چیزهایی که مرورگر خودش لو میده شناسه میسازه. برای همین پاک کردن کوکی یا پارتیشنبندی استوریج هیچ کمکی نمیکنه؛ شناسه هر بار از نو ساخته میشه.
GPU برای این کار طعمهٔ خوبیه چون خیلی کم عوض میشه و کاربر لپتاپ اغلب اصلاً نمیتونه کارت گرافیکشو عوض کنه. WebGL از راه افزونهٔ WEBGL_debug_renderer_info رشتههایی میده که نام سازنده، مدل کارت، لایهٔ ترجمهٔ ANGLE و بکاند گرافیکی (Direct3D، Metal یا Vulkan) توش پیداست. طبق پژوهشی از دانشگاه بنگوریون که Brave بهش ارجاع میده، فقط همین انگشتنگاری WebGL میتونه یه دستگاه رو با دقت ۹۸٪ و تو ۱۵۰ میلیثانیه شناسایی کنه.
لیست افزونههای WebGL هم که با getSupportedExtensions() گرفته میشه یه امضای فشرده از سختافزاره. تکتک افزونهها نادر نیستن، ولی ترکیبشون نادره؛ ردیاب لیست رو مرتب میکنه، به هم میچسبونه و ازش هش میگیره و همون هش میشه شناسهٔ دستگاه. سمت WebGPU هم شیء adapter توضیحگرهایی مثل vendor و architecture برمیگردونه که بهتنهایی سیگنال قویایه.
نویسنده تأکید میکنه بستن کامل WebGL و WebGPU جواب نیست و سه ایراد داره. اول اینکه کلی کاربرد واقعی — نقشهٔ تعاملی، بازی، داشبورد داده، ابزار ویرایش تصویر و دموهای یادگیری ماشین — میشکنه. دوم اینکه نبودن این APIها خودش یه سیگنال کمیابه و کاربر رو انگشتنماتر میکنه، چون اسکریپت بهسادگی نبودن WebGLRenderingContext رو تشخیص میده. سوم هم اینکه وقتی حریم خصوصی به قیمت خراب شدن وب تموم شه، کاربر خودش خاموشش میکنه.
راهحل Brave چیزیه که خودش بهش میگه farbling — یعنی بهجای دروغ تصادفیِ شکننده، مقدارهایی برگردونه که هم باورپذیر باشن هم برای ردیابی بیفایده. سه بخش داره: رشتههای vendor و renderer در WebGL با یه رشتهٔ عمومی یکسان برای همهٔ کاربرهای Brave جایگزین میشه، توضیحگرهای adapter در WebGPU خالی میشن، و لیست افزونههای WebGL بهازای هر نشست، هر سایت و هر فضای ذخیرهسازی تصادفی میشه. یعنی هش ثابت جاشو به یه هدف متحرک میده.
نکات کلیدی:
- سه محافظت نسخهٔ 1.93: رشتهٔ عمومی برای vendor و renderer، خالی کردن توضیحگر adapter در WebGPU، و تصادفیسازی لیست افزونههای WebGL
- طبق پژوهش دانشگاه بنگوریون، انگشتنگاری WebGL بهتنهایی ۹۸٪ دقت تو ۱۵۰ میلیثانیه داشته
- افزونهٔ WEBGL_debug_renderer_info علاوه بر مدل GPU، لایهٔ ANGLE و بکاند Direct3D/Metal رو هم لو میده
- تصادفیسازی بهازای هر نشست، هر سایت و هر فضای ذخیرهسازی جداگانه اعمال میشه
- بستن کامل WebGL خودش یه سیگنال انگشتنگاریه، چون جمعیت کمی این کارو میکنن




