privacy.resistFingerprinting giả mạo múi giờ, kích thước màn hình và phông chữ — chiến lược đồng nhất đứng sau Firefox và Tor Browser.
Hầu hết công cụ chống lấy dấu vân tay đều cố gắng che giấu thiết bị bằng cách khiến nó "trông khác đi" mỗi lần — một hash Canvas mới, một danh sách phông chữ bị xáo trộn, một kích thước màn hình ngẫu nhiên. Tùy chọn privacy.resistFingerprinting của Firefox (luôn bật trong Tor Browser) lại làm ngược lại: nó khiến trình duyệt của bạn báo cáo cùng một tập giá trị nhỏ giống hệt như mọi người dùng khác đang bật cùng tùy chọn này. Bài viết này sẽ giải thích triết lý "đồng nhất" đó có ý nghĩa gì trong thực tế, RFP giả mạo chính xác những gì, tại sao Firefox và Tor Browser dùng chung một engine bảo vệ, và cái giá bạn phải trả đổi lại.
Điểm Chính
privacy.resistFingerprinting(RFP) là một tùy chọn của Firefox, mặc định tắt trên Firefox thông thường nhưng luôn bật trên Tor Browser, giúp chuẩn hóa các đặc điểm trình duyệt có thể bị lấy dấu vân tay.- Mục tiêu thiết kế của nó là sự đồng nhất, không phải ngẫu nhiên hóa: khiến mọi trình duyệt bật RFP báo cáo cùng giá trị, để không cá thể nào nổi bật giữa đám đông.
- Nó giả mạo múi giờ thành UTC, làm tròn kích thước cửa sổ/màn hình theo các bước cố định ("letterboxing"), yêu cầu xác nhận trước khi đọc Canvas, giới hạn việc liệt kê phông chữ, và cố định User-Agent/hệ điều hành được báo cáo.
- Tor Browser và Firefox dùng chung mã nguồn RFP nhờ dự án "Tor Uplift" — các nghiên cứu chống lấy dấu vân tay của Tor cuối cùng đã trở thành một tùy chọn tiêu chuẩn của Firefox.
- Cái giá phải trả là có thật: RFP làm hỏng các trang web dựa vào định vị địa lý chính xác, kích thước cửa sổ gốc, hoặc các widget dùng Canvas. Đây là một công cụ thô nhưng hiệu quả, không phải giải pháp thay thế liền mạch cho việc duyệt web thông thường.
Triết Lý Đồng Nhất: Hòa Vào Đám Đông, Không Nổi Bật
Các công cụ tạo noise cho Canvas và tiện ích tương tự cố gắng đánh bại việc lấy dấu vân tay bằng cách khiến mỗi lần đọc trở nên độc nhất — một giá trị ngẫu nhiên mới mỗi lần, để không thể tính ra một hash ổn định. Bài viết của chúng tôi về noise Canvas giải thích tại sao cách tiếp cận này là một cái bẫy: bất kỳ sự ngẫu nhiên nào mà một script có thể phát hiện (bằng cách đọc cùng một canvas hai lần và nhận được các byte khác nhau) tự nó trở thành một tín hiệu — việc "trình duyệt này đang chạy công cụ bảo mật" tự nó đã mang tính nhận dạng, đôi khi còn rõ rệt hơn cả dấu vân tay gốc.
Tài liệu thiết kế chống lấy dấu vân tay của Mozilla trình bày trực tiếp giải pháp thay thế: thay vì cố che giấu một giá trị độc nhất, RFP cố gắng khiến các trình duyệt không thể phân biệt được với nhau. Nếu mười triệu người dùng Tor Browser đều báo cáo cùng múi giờ, cùng kích thước cửa sổ đã làm tròn, cùng danh sách phông chữ, thì không một báo cáo riêng lẻ nào mang thông tin phân biệt một người dùng này với những người khác. Sự ẩn danh đến từ quy mô đám đông, không phải từ việc che giấu. Xem trang wiki Security/Fingerprinting của Mozilla để biết cách chính dự án này trình bày mục tiêu đó, và mục từ điển Fingerprinting của MDN để biết định nghĩa về lấy dấu vân tay như một kỹ thuật theo dõi.
Cách này chỉ hiệu quả khi nhóm chia sẻ cùng một giá trị đủ lớn. Sự đồng nhất giữa một nhóm nhỏ người dùng lại gần với một dấu vân tay hơn là một biện pháp bảo vệ — đó chính xác là lý do RFP được phát hành dưới dạng một sự giả mạo nghiêm ngặt, hẹp, thay vì một tùy chọn có thể tùy chỉnh: bất kỳ tùy chọn nào người dùng có thể điều chỉnh cũng sẽ chia nhỏ đám đông trở lại thành các nhóm con có thể phân biệt được.
RFP Giả Mạo Chính Xác Những Gì
RFP tác động đến một danh sách dài các API. Những cái quan trọng nhất:
Múi giờ → UTC. Cả Intl.DateTimeFormat().resolvedOptions().timeZone và Date.prototype.getTimezoneOffset() đều báo cáo UTC bất kể đồng hồ hệ thống được đặt như thế nào. Một tracker đọc múi giờ trực tiếp từ trình duyệt sẽ không nhận được tín hiệu vị trí nào cả — xem Rò Rỉ Múi Giờ và Ngôn Ngữ để biết tín hiệu này thường được dùng thế nào để phát hiện người dùng VPN, và tại sao RFP chọn loại bỏ rò rỉ ngay từ nguồn thay vì cố làm cho múi giờ giả "khớp" với quốc gia thoát của VPN.
Làm tròn cửa sổ và màn hình ("letterboxing"). Thay vì báo cáo kích thước viewport chính xác, RFP làm tròn innerWidth/innerHeight xuống bước gần nhất (mặc định là bội số của 200×100 pixel) và đệm phần thừa bằng viền màu đặc. Độ phân giải màn hình (screen.width, screen.height) cũng bị giới hạn theo kích thước cửa sổ đã làm tròn thay vì độ phân giải thực của màn hình. Đây là hiệu ứng RFP dễ nhận thấy nhất — bạn sẽ thấy viền xám quanh vùng nội dung khi cửa sổ trình duyệt không rơi đúng vào một bước cố định.
Yêu cầu xác nhận khi đọc Canvas. Thay vì chặn hoàn toàn Canvas hoặc tiêm noise, RFP chặn các lệnh gọi toDataURL() / getImageData() bằng một hộp thoại xin quyền khi trang web lần đầu cố đọc pixel canvas. Hầu hết người dùng mặc định từ chối, việc này trả về một canvas trống — giống hệt nhau về mặt hình ảnh trên mọi trình duyệt bật RFP, thỏa mãn mục tiêu đồng nhất mà không gặp phải các tác dụng phụ có thể bị phát hiện của việc tiêm noise.
Giới hạn liệt kê phông chữ. Thay vì để lộ danh sách phông chữ thực sự đã cài trên hệ điều hành — một trong những tín hiệu có entropy cao nhất trong dấu vân tay thông thường — RFP giới hạn document.fonts và việc khớp phông chữ CSS trong một danh sách cố định, nhỏ, được đóng gói sẵn trong trình duyệt, không phụ thuộc vào những gì thực sự đã cài trên hệ thống.
Đóng băng User-Agent và thuộc tính navigator. navigator.platform, navigator.oscpu, navigator.hardwareConcurrency và các trường liên quan bị giả mạo thành một tập giá trị chung nhỏ (ví dụ: một số lõi CPU cố định) thay vì thông số phần cứng thực của bạn, và chuỗi User-Agent được chuẩn hóa về một số ít biến thể phổ biến thay vì phản ánh đúng bản build hệ điều hành của bạn.
Giảm độ chính xác đo thời gian. Các bộ đếm thời gian độ phân giải cao như performance.now() — và cả độ phân giải của Date.now() — bị làm tròn thành các khoảng thô hơn, đóng lại các kênh phụ dựa trên thời gian mà nếu không sẽ có thể bị dùng để lấy dấu vân tay hiệu năng phần cứng hoặc dò hành vi bộ nhớ đệm.
Tor Uplift: Vì Sao Firefox và Tor Browser Dùng Chung Một Engine
RFP tồn tại trong Firefox thông thường nhờ dự án Tor Uplift — một nỗ lực đưa các biện pháp chống lấy dấu vân tay của Tor Browser ra khỏi một bản fork riêng của Tor và đưa vào chính Firefox dưới dạng một tùy chọn tiêu chuẩn, được duy trì thường xuyên. Tor Browser được xây dựng trên nền Firefox ESR và bật privacy.resistFingerprinting theo mặc định; Firefox thông thường chứa cùng đoạn mã đó nhưng để tắt, vì những đánh đổi được nêu bên dưới bị coi là quá gây khó chịu cho việc duyệt web thông thường.
Lợi ích thực tế của việc dùng chung engine là: các lỗi liên quan đến bảo vệ chống lấy dấu vân tay chỉ cần sửa một lần, trong một codebase, và cả hai trình duyệt đều được hưởng lợi. Điều này cũng có nghĩa là bất kỳ ai tò mò về hành vi chống lấy dấu vân tay của Tor Browser đều có thể kiểm tra chính xác cơ chế đó trên Firefox thông thường bằng cách bật tùy chọn trong about:config — hữu ích để hiểu các đánh đổi trước khi chuyển hẳn sang dùng Tor Browser cho việc duyệt web hằng ngày.
Đánh Đổi: Những Gì Sẽ Bị Hỏng
Sự đồng nhất là một công cụ thô, và RFP thực sự làm hỏng một số thứ:
- Các trang web phụ thuộc vào định vị địa lý (thời tiết, kết quả tìm kiếm địa phương, lịch trình theo múi giờ) sẽ thấy UTC thay vì múi giờ thực của bạn và hoạt động như thể bạn đang ở một vị trí bất kỳ.
- Giao diện dựa trên Canvas — một số CAPTCHA, công cụ vẽ, và widget trực quan hóa dữ liệu — hoặc hiện hộp thoại xin quyền mỗi lần tải trang, hoặc hiển thị trống nếu bạn từ chối.
- Kích thước cửa sổ cảm giác không chính xác. Letterboxing nghĩa là vùng nội dung không lấp đầy chính xác cửa sổ, điều mà một số người dùng thấy gây xao nhãng về mặt hình ảnh, đặc biệt ở các kích thước cửa sổ bất thường.
- Một số trang web hoạt động sai khi nhận được User-Agent chung chung hoặc giá trị số luồng xử lý phần cứng đã làm tròn không như mong đợi, đặc biệt là các trang web cũ dùng kỹ thuật soi trình duyệt kiểu tích cực.
Không điều nào trong số này là lỗi — đó là cái giá trực tiếp của chiến lược đồng nhất. Theo chính logic của RFP, một biện pháp bảo vệ chỉ hiệu quả khi nó vô hình thì cũng không hẳn là một biện pháp bảo vệ đáng tin cậy.
Cách Xác Minh RFP Đang Hoạt Động
Nếu bạn bật privacy.resistFingerprinting trong Firefox (about:config → tìm tùy chọn → đặt thành true), hoặc chuyển sang Tor Browser, bạn có thể kiểm chứng hiệu quả trực tiếp thay vì chỉ tin theo lý thuyết. Chạy công cụ kiểm tra vân tay của BrowserInsight trước và sau: khi RFP hoạt động, bạn sẽ thấy múi giờ báo cáo chuyển sang UTC, hash Canvas trống hoặc kích hoạt hộp thoại xin quyền, danh sách phông chữ thu hẹp về danh sách có sẵn, và kích thước cửa sổ/màn hình rơi vào một bước đã làm tròn thay vì độ phân giải gốc của màn hình bạn. So sánh hai lần chạy là cách nhanh nhất để thấy sự đồng nhất hoạt động thay vì chỉ đọc về nó một cách trừu tượng.
Câu Hỏi Thường Gặp
resistFingerprinting có khiến tôi ẩn danh không?
Không có tùy chọn đơn lẻ nào khiến bạn ẩn danh. RFP giảm mức độ tín hiệu trình duyệt của bạn phân biệt bạn với những người dùng RFP khác, nhưng địa chỉ IP, trạng thái đăng nhập tài khoản, và hành vi duyệt web là các kênh theo dõi riêng biệt mà RFP không đụng đến. Tor Browser kết hợp RFP với mạng Tor chính là để đồng thời ẩn danh cả địa chỉ IP của bạn; chỉ dùng RFP riêng lẻ trên Firefox thông thường, danh tính mạng của bạn vẫn còn lộ.
Tôi có nên bật privacy.resistFingerprinting trên Firefox thông thường không?
Điều này tùy thuộc vào mô hình đe dọa của bạn. RFP mang lại sự giảm thiểu thực sự về tính độc nhất của dấu vân tay, nhưng letterboxing, giả mạo múi giờ, và giới hạn phông chữ khá rõ rệt trong sử dụng hằng ngày và sẽ làm hỏng một số trang web. Hầu hết người dùng muốn có một phần lợi ích mà không chịu quá nhiều phiền toái sẽ dùng chế độ Bảo Vệ Chống Theo Dõi Nâng Cao mặc định, nhẹ nhàng hơn của Firefox, và để dành RFP đầy đủ hoặc Tor Browser cho việc duyệt web nhạy cảm hơn.
Vì sao Tor Browser hiện viền xám quanh nội dung?
Đó là letterboxing. RFP làm tròn kích thước cửa sổ được báo cáo của bạn về một bước cố định và đệm phần còn lại bằng viền màu đặc, để kích thước cửa sổ thực của bạn không bị rò rỉ như một giá trị độc nhất. Đây là hành vi được thiết kế sẵn, không phải lỗi hiển thị.
RFP có ngăn hoàn toàn việc lấy dấu vân tay Canvas không?
Riêng với Canvas thì gần như có: hành vi mặc định "xin quyền rồi từ chối" trả về một canvas trống, giống hệt nhau trên mọi trình duyệt bật RFP, thỏa mãn mục tiêu đồng nhất. Đây là cơ chế khác với các biện pháp dựa trên noise như farbling của Brave — xem bài phân tích sâu về noise Canvas của chúng tôi để so sánh hai cách tiếp cận.


