WebGPU tiết lộ nhà sản xuất, kiến trúc và thiết bị bộ điều hợp mà không cần tiện ích gỡ lỗi. Khám phá bề mặt vân tay mới này và cách phòng vệ.
WebGPU là người kế nhiệm hiện đại của WebGL — một API cấp thấp hơn, ít chi phí hơn, cho phép các trang web truy cập trực tiếp vào pipeline tính toán và kết xuất của GPU. Kể từ khi Chrome 113 và Edge 113 phát hành nó dưới dạng phiên bản ổn định vào tháng 5 năm 2023, mức độ áp dụng đã tăng trưởng đều đặn trên hệ sinh thái Chromium. Điều mà cộng đồng bảo mật và quyền riêng tư đang nhận ra là WebGPU tiết lộ nhiều hơn thông tin nhận dạng phần cứng so với WebGL, và thực hiện điều này thông qua các bề mặt API hạng nhất tiêu chuẩn thay vì một tiện ích mở rộng gỡ lỗi mà các trình duyệt đang dần loại bỏ. Điều này khiến WebGPU trở thành bề mặt vân tay GPU lớn tiếp theo — và hầu hết các công cụ chống phát hiện vẫn chưa theo kịp.
Điểm chính
navigator.gpu.requestAdapter()trả về siêu dữ liệu bộ điều hợp theo mặc định — chuỗi nhà sản xuất, kiến trúc, thiết bị và driver mà không cần tiện ích mở rộng hay lời nhắc quyền.- Các Limits và Features được hỗ trợ tự chúng tạo thành vân tay có cardinality cao ngay cả khi không đọc trực tiếp chuỗi nhà sản xuất.
- Benchmark compute shader tạo ra đầu ra dấu phẩy động phụ thuộc phần cứng có thể được băm thành giá trị băm ổn định theo từng thiết bị, tương tự hash pixel kết xuất WebGL.
- Hầu hết các công cụ chống phát hiện tập trung vào WebGL, để lộ các tín hiệu WebGPU không được bảo vệ trong phần lớn cấu hình tăng cường quyền riêng tư.
- Giả mạo nhất quán rất khó: làm giả thông tin bộ điều hợp mà không thay đổi đầu ra tính toán khiến bạn dễ nhận dạng hơn, không phải ít hơn.
Cách WebGPU tiết lộ danh tính GPU
WebGL cần một tiện ích mở rộng đặc biệt — WEBGL_debug_renderer_info — để tiết lộ các chuỗi nhà sản xuất GPU và bộ kết xuất thực sự. WebGPU không cần cách giải quyết như vậy. Gọi navigator.gpu.requestAdapter() trả về một GPUAdapter có thuộc tính đồng bộ .info cung cấp đối tượng GPUAdapterInfo với bốn trường: vendor (nhà sản xuất), architecture (kiến trúc), device (thiết bị) và description (mô tả). Trên máy tính để bàn điển hình, các trường này tiết lộ nhà sản xuất GPU, dòng vi kiến trúc, mẫu thiết bị và đôi khi là nhãn bản dựng driver — tất cả mà không cần bất kỳ lời nhắc người dùng nào.
Ngoài các chuỗi nhận dạng, bộ điều hợp còn tiết lộ:
limits— đối tượngGPUSupportedLimitsvới hơn 30 giá trị khả năng số: kích thước texture tối đa, kích thước bộ đệm tối đa, số lượng workgroup tính toán tối đa, số nhóm ràng buộc tối đa và nhiều hơn nữa. Các con số này phản ánh GPU vật lý và driver, và chúng khác nhau đáng kể giữa các dòng phần cứng, thêm entropy đáng kể.features— tậpGPUSupportedFeaturesliệt kê các khả năng tùy chọn mà GPU và driver hỗ trợ, chẳng hạnfloat32-filterable,timestamp-queryhayshader-f16. Tập tính năng chính xác phụ thuộc vào dòng GPU và phiên bản driver.isFallbackAdapter— cờ boolean làtruekhi trình duyệt đã rơi lại bộ kết xuất phần mềm. Bộ kết xuất phần mềm là tín hiệu mạnh của môi trường headless hoặc ảo hóa, giống như chuỗillvmpipetrong WebGL.
Cùng với nhau, các thuộc tính này tạo ra vân tay phong phú hơn hầu hết các triển khai WebGL, và chúng có thể truy cập đồng bộ sau yêu cầu bộ điều hợp không đồng bộ ban đầu.
Đọc bộ điều hợp trong thực tế
Đoạn code dưới đây cho thấy cần rất ít nỗ lực để thu thập các tín hiệu phần cứng WebGPU cốt lõi.
async function getWebGPUFingerprint() {
if (!navigator.gpu) return { supported: false };
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) return { supported: false, reason: 'no-adapter' };
// Nhận dạng phần cứng trực tiếp — không cần tiện ích mở rộng
const { vendor, architecture, device, description } = adapter.info;
// Giới hạn khả năng số (30+ giá trị, tất cả phụ thuộc phần cứng)
const limits = {};
const limitKeys = [
'maxTextureDimension2D',
'maxBufferSize',
'maxComputeWorkgroupSizeX',
'maxComputeWorkgroupsPerDimension',
'maxBindGroups',
];
for (const key of limitKeys) {
limits[key] = adapter.limits[key];
}
// Tập tính năng tùy chọn
const features = [...adapter.features];
return {
supported: true,
isFallback: adapter.isFallbackAdapter,
info: { vendor, architecture, device, description },
limits,
features,
};
}
Bạn có thể kiểm tra các giá trị bộ điều hợp WebGPU của trình duyệt mình trực tiếp bằng công cụ phát hiện vân tay của BrowserInsight.
Băm đầu ra compute shader
Kỹ thuật vân tay WebGPU mạnh nhất vượt ra ngoài siêu dữ liệu. Một script có thể yêu cầu thiết bị từ bộ điều hợp, tải lên một compute shader thực hiện các phép toán dấu phẩy động, thực thi nó trên GPU và đọc bộ đệm đầu ra trở lại JavaScript. Vì các GPU của các kiến trúc và phiên bản driver khác nhau triển khai làm tròn dấu phẩy động, độ chính xác và cắt xén hơi khác nhau, kết quả số khác nhau giữa các dòng phần cứng — và ổn định cho cùng một thiết bị qua các lần tải trang.
async function computeHash(device) {
// Bộ đệm nhỏ để shader ghi kết quả
const outputBuffer = device.createBuffer({
size: 16,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
// Shader thực hiện phép toán dấu phẩy động biến đổi theo GPU
const shaderCode = `
@group(0) @binding(0) var<storage, read_write> out: array<f32>;
@compute @workgroup_size(1)
fn main() {
out[0] = sqrt(2.0) * sin(1.5707963);
out[1] = log(exp(1.0)) + pow(2.0, 0.5);
}
`;
// ... biên dịch, điều phối, đọc lại, băm
}
Kết quả thực tế là một con số ổn định theo thiết bị tương quan với — nhưng thêm entropy ngoài — các chuỗi thông tin bộ điều hợp. Các trang web có thể kết hợp cả hai để có GPU ID độ tin cậy cao hơn.
WebGPU so với WebGL làm bề mặt vân tay
WebGPU và WebGL trùng lặp ở điểm chúng cuối cùng tiết lộ điều gì — GPU của bạn — nhưng khác nhau về mức độ nỗ lực kẻ theo dõi phải bỏ ra và độ bền của kết quả.
| Thuộc tính | WebGL | WebGPU |
|---|---|---|
| Chuỗi nhận dạng | Qua tiện ích mở rộng WEBGL_debug_renderer_info | Tích hợp trong GPUAdapter.info theo mặc định |
| Rủi ro loại bỏ tiện ích mở rộng | Được đánh dấu để xóa trong một số trình duyệt | Không áp dụng — info là API cốt lõi |
| Giới hạn số | ~15 giá trị khả năng | 30+ Limits có cấu trúc |
| Tập tính năng tùy chọn | Thay đổi theo driver | Tập features rõ ràng |
| Hash tính toán | Qua readPixels() trên cảnh kết xuất | Qua readBuffer() của compute shader |
| Tín hiệu bộ kết xuất phần mềm | Chuỗi llvmpipe hoặc SwiftShader | isFallbackAdapter: true |
Lợi thế chính cho kẻ theo dõi là WebGPU là một API gọn gàng hơn: siêu dữ liệu có cấu trúc thay vì được nhúng trong chuỗi tự do; các giới hạn nhiều hơn và được định nghĩa chính xác hơn; con đường tính toán để băm đầu ra được xây dựng cho mục đích tính toán, không phải mượn từ pipeline kết xuất. Để tìm hiểu sâu hơn về WebGL, xem phân tích sâu vân tay WebGL của chúng tôi. Cả hai hình thành một phần của bức tranh tổng thể trong hướng dẫn về vân tay trình duyệt.
Bối cảnh mối đe dọa đang nổi lên
Đặc tả WebGPU là tiêu chuẩn W3C, và các tác động quyền riêng tư của nó đã được thảo luận trong Nhóm Làm việc có liên quan — nhưng đặc tả ưu tiên cho phép đồ họa và tính toán hiệu suất cao hơn là giảm thiểu tiết lộ phần cứng. Nhận thức của những kẻ theo dõi về WebGPU đang tăng lên: nó xuất hiện như một tùy chọn bật/tắt trong các trình duyệt chống phát hiện chuyên nghiệp như Dolphin Anty chính xác vì các nhà điều hành biết nó có thể làm lộ hành vi giả mạo của họ nếu không được kiểm soát.
Đồng thời, hầu hết các tiện ích mở rộng trình duyệt và công cụ quyền riêng tư thêm nhiễu vào tín hiệu WebGL vẫn chưa được cập nhật để bao gồm WebGPU. Sự chậm trễ này làm cho vân tay WebGPU trở thành bề mặt chưa được bảo vệ cho hầu hết người dùng hiện nay.
Các biện pháp giảm thiểu và đánh đổi
Brave: Farbling mở rộng sang WebGPU
Brave đã mở rộng hệ thống farbling của mình sang WebGPU, thêm ngẫu nhiên hóa theo nguồn gốc và phiên vào các chuỗi thông tin bộ điều hợp và đầu ra tính toán. Cùng mô hình quản lý farbling WebGL áp dụng ở đây: nhiễu là tất định trong một phiên (để các trang không bị hỏng) nhưng khác nhau giữa các nguồn gốc và phiên (để không thể xây dựng ID xuyên trang). Đây hiện là biện pháp bảo vệ cấp người tiêu dùng thực tế nhất cho việc duyệt web hàng ngày.
Tor Browser
Tor Browser hạn chế truy cập WebGPU, coi nó là bề mặt vân tay rủi ro cao. Mục tiêu — như với WebGL — là tính đồng nhất thay vì giả mạo: mỗi người dùng Tor trình bày cùng một bề mặt (vắng mặt), về lý thuyết mạnh hơn nhưng có thể làm hỏng các ứng dụng web tăng tốc GPU.
Vô hiệu hóa WebGPU trong Firefox
Firefox hỗ trợ WebGPU thông qua cờ (dom.webgpu.enabled trong about:config). Vô hiệu hóa hoàn toàn loại bỏ bề mặt, nhưng — như với việc vô hiệu hóa WebGL — sự vắng mặt của WebGPU trở thành một đặc điểm phân biệt trong một tập người dùng nơi nó ngày càng được bật theo mặc định.
Tại sao giả mạo tùy hứng phản tác dụng
Nếu bạn thay đổi chuỗi nhà sản xuất do GPUAdapter.info trả về mà không thay đổi đồng thời Limits, tập tính năng hoặc đầu ra tính toán, bạn tạo ra một bức tranh mâu thuẫn nội bộ. Bộ phát hiện tương quan các trường này: một thiết bị báo cáo nhà sản xuất "Apple" trong khi có Limits và kết quả tính toán kiểu NVIDIA lập tức gây nghi ngờ. Giả mạo hiệu quả đòi hỏi tính nhất quán đầy đủ trên tất cả các tín hiệu hoặc tính đồng nhất chung (cách tiếp cận của Tor và Brave). Ngẫu nhiên hóa cá nhân không có sự phối hợp thường đạt kết quả ngược lại.
Câu hỏi thường gặp
Đọc thông tin bộ điều hợp WebGPU có cần quyền không?
Không. Gọi navigator.gpu.requestAdapter() không kích hoạt lời nhắc quyền. Siêu dữ liệu bộ điều hợp — nhà sản xuất, kiến trúc, thiết bị — được trả về theo mặc định, giống như độ phân giải màn hình hay múi giờ. Không cần bất kỳ cử chỉ người dùng nào.
Vân tay WebGPU đã được sử dụng trên các trang web thực chưa?
Có, ít nhất là trong cộng đồng nghiên cứu vân tay và chống phát hiện. Các công cụ như BrowserLeaks bao gồm dữ liệu đọc WebGPU, và các nhà cung cấp trình duyệt chống phát hiện rõ ràng cung cấp giả mạo WebGPU như một tính năng — điều này xác nhận rằng những người thu thập vân tay đang hoạt động đã sử dụng nó. Các script quảng cáo và phân tích chính thống thêm hỗ trợ chậm hơn, nhưng khoảng cách đang thu hẹp.
Tôi có thể kiểm tra mức độ phơi bày WebGPU của mình không?
Công cụ phát hiện vân tay của BrowserInsight hiển thị các tín hiệu GPU trực tiếp của bạn bao gồm dữ liệu bộ điều hợp WebGPU nơi trình duyệt của bạn hỗ trợ, cùng với phần còn lại của các thành phần vân tay.
Vân tay WebGPU khác với WebGL như thế nào?
WebGL tiết lộ siêu dữ liệu phần cứng chủ yếu qua tiện ích mở rộng WEBGL_debug_renderer_info, mà một số trình duyệt hạn chế. WebGPU tiết lộ thông tin bộ điều hợp có cấu trúc — nhà sản xuất, kiến trúc, thiết bị, driver — qua thuộc tính API cốt lõi mà không cần tiện ích mở rộng nào. WebGPU cũng cung cấp nhiều giới hạn khả năng hơn, liệt kê tập tính năng rõ ràng hơn và con đường đầu ra hướng tính toán cho việc băm dựa trên hành vi.
Vô hiệu hóa JavaScript có ngăn vân tay WebGPU không?
Có, WebGPU là API JavaScript, nên vô hiệu hóa JavaScript loại bỏ bề mặt. Tuy nhiên, vô hiệu hóa JavaScript cũng phá vỡ phần lớn các ứng dụng web hiện đại, khiến đây là biện pháp phòng vệ không thực tế cho hầu hết người dùng.


