Lấy dấu vân tay âm thanh nhận diện thiết bị của bạn qua Web Audio API — không cần micro. Tìm hiểu cách nó hoạt động và cách phòng vệ.
Lấy dấu vân tay âm thanh là một kỹ thuật theo dõi nhận diện thiết bị của bạn dựa trên cách nó xử lý âm thanh — không phải bằng cách ghi âm bất cứ thứ gì qua micro, mà bằng cách đo những khác biệt nhỏ trong cách Web Audio API của trình duyệt kết xuất một tín hiệu được tạo ra. Cùng một dạng sóng âm thanh, khi được xử lý trên các ngăn xếp phần cứng và phần mềm khác nhau, sẽ cho kết quả hơi khác nhau, và sự khác biệt đó đủ ổn định để giúp nhận ra bạn qua các trang web. Bài viết này giải thích cách lấy dấu vân tay AudioContext hoạt động, nó đặc trưng đến mức nào, và bạn có thể làm gì với nó.
Tóm tắt nhanh
- Lấy dấu vân tay âm thanh nhận diện thiết bị của bạn bằng cách đo cách Web Audio API của trình duyệt xử lý một tín hiệu được tạo ra — nó không bao giờ dùng micro và không phát ra âm thanh.
- Toàn bộ quá trình diễn ra âm thầm bên trong một
OfflineAudioContext, nên không có lời nhắc xin quyền nào xuất hiện và không có gì được ghi lại. - Tự thân nó chỉ đặc trưng ở mức vừa phải, nhưng nó bổ sung entropy đáng kể khi kết hợp với dấu vân tay canvas, WebGL và phông chữ.
- Xóa cookie hay dùng chế độ riêng tư đều không ngăn được nó, vì mã định danh đến từ các đặc điểm thiết bị và trình duyệt chứ không phải dữ liệu được lưu.
- Các trình duyệt riêng tư (Firefox, Tor, Brave) và công cụ chống lấy dấu vân tay có thể giảm hoặc ngẫu nhiên hóa tín hiệu, nhưng hiếm khi loại bỏ nó hoàn toàn.
Lấy dấu vân tay âm thanh là gì?
Lấy dấu vân tay âm thanh dùng Web Audio API của trình duyệt để tạo ra một tín hiệu âm thanh trong nội bộ, xử lý nó qua đường âm thanh, rồi đọc ngược lại kết quả số học. Quan trọng là âm thanh không bao giờ được phát ra và micro của bạn không hề bị chạm tới — mọi thứ diễn ra trong một OfflineAudioContext kết xuất âm thầm vào một bộ đệm gồm các con số.
Vì các giá trị thu được phụ thuộc vào phần cứng âm thanh, hệ điều hành, phiên bản trình duyệt và các thư viện toán học bên dưới của thiết bị bạn, hai máy khác nhau tạo ra kết quả hơi khác nhau cho cùng một đầu vào. Một script băm các giá trị đó thành một mã định danh gọn. Kết hợp với các tín hiệu khác như dấu vân tay canvas và WebGL, nó giúp xây dựng một hồ sơ nhận ra trình duyệt của bạn ngay cả sau khi bạn xóa cookie.
Cách lấy dấu vân tay AudioContext hoạt động
Kỹ thuật này tuân theo một công thức có thể dự đoán được:
- Tạo một context ngoài tuyến. Script tạo một
OfflineAudioContext, vốn xử lý âm thanh nhanh nhất có thể mà không xuất âm thanh ra. - Tạo một tín hiệu. Nó tạo một
OscillatorNode(thường là sóng tam giác hoặc sóng sin ở một tần số cố định) làm nguồn nhất quán, có thể tái lập. - Xử lý nó. Tín hiệu được dẫn qua các node như
DynamicsCompressorNode, vốn có phép toán dấu phẩy động khuếch đại những khác biệt nhỏ trong triển khai. - Đọc bộ đệm. Các mẫu đã kết xuất được cộng tổng hoặc băm lại thành một giá trị duy nhất.
Điểm mấu chốt là phép toán âm thanh dấu phẩy động không giống hệt nhau từng bit giữa các hệ thống. Mặc dù đặc tả W3C Web Audio API định nghĩa đồ thị xử lý, nó không bắt buộc đầu ra chính xác từng bit, nên các CPU, driver âm thanh và bản dựng trình duyệt khác nhau làm tròn và xử lý các mẫu đó theo những cách hơi khác nhau. Do đó giá trị băm cuối cùng trở thành một chữ ký của thiết bị và trình duyệt.
Một ví dụ đơn giản hóa
Đoạn mã dưới đây phác họa ý tưởng cốt lõi — tạo một âm, nén nó, và rút gọn đầu ra thành một con số:
// Kết xuất một âm ngoài tuyến và rút gọn nó thành một giá trị dấu vân tay
const ctx = new OfflineAudioContext(1, 44100, 44100);
const oscillator = ctx.createOscillator();
oscillator.type = 'triangle';
oscillator.frequency.value = 10000;
const compressor = ctx.createDynamicsCompressor();
oscillator.connect(compressor);
compressor.connect(ctx.destination);
oscillator.start(0);
ctx.startRendering().then((buffer) => {
const samples = buffer.getChannelData(0);
// Cộng tổng một đoạn các mẫu; tổng chính xác thay đổi theo thiết bị/trình duyệt
let fingerprint = 0;
for (let i = 4000; i < 5000; i++) {
fingerprint += Math.abs(samples[i]);
}
console.log('Giá trị dấu vân tay âm thanh:', fingerprint);
});
Hai trình duyệt trên phần cứng và phiên bản giống hệt nhau thường cho kết quả khớp nhau; thay đổi hệ điều hành, ngăn xếp âm thanh hoặc bản dựng trình duyệt thì giá trị sẽ trôi đi.
Nó đặc trưng và ổn định đến mức nào?
Lấy dấu vân tay âm thanh có mức độ đặc trưng vừa phải — ít định danh độc nhất hơn so với chuỗi bộ kết xuất GPU của WebGL, nhưng là một đóng góp có ý nghĩa khi kết hợp với các tín hiệu khác. Hành vi của nó thay đổi theo trình duyệt:
| Trình duyệt / chế độ | Hành vi dấu vân tay âm thanh |
|---|---|
| Chrome / Edge (Blink) | Khả dụng và ổn định; được các bên theo dõi dùng rộng rãi |
| Firefox (bình thường) | Khả dụng; Firefox đánh dấu nó trong các lớp bảo vệ chống lấy dấu vân tay |
| Firefox (chế độ riêng tư) | Bị chặn hoặc trả về một giá trị đã trung hòa |
| Safari | Khả dụng nhưng bị giới hạn độ chính xác, làm giảm entropy |
Độ ổn định là thuộc tính mà các bên theo dõi quan tâm: một dấu vân tay chỉ hữu ích nếu nó giữ nguyên qua các lần truy cập. Dấu vân tay âm thanh nhìn chung ổn định với một thiết bị và phiên bản trình duyệt nhất định, dù một bản cập nhật trình duyệt có thể làm thay đổi giá trị.
Xét theo lý thuyết thông tin, tín hiệu âm thanh đóng góp một lượng entropy khiêm tốn — đủ để thu hẹp một quần thể, nhưng hiếm khi đủ để chỉ ra một cá nhân nếu chỉ dựa vào riêng nó. Đó là lý do nó gần như không bao giờ xuất hiện đơn độc. Một bên theo dõi kết hợp vài bit từ âm thanh với những đóng góp lớn hơn từ chuỗi bộ kết xuất GPU của WebGL, phông chữ đã cài, kích thước màn hình và múi giờ, và các bit cộng dồn lại: mỗi tín hiệu độc lập nhân lên số lượng cấu hình có thể phân biệt được. Âm thanh giành được chỗ đứng trong chồng tín hiệu đó chính vì nó rẻ để thu thập một cách âm thầm và khá ổn định, nên nó bổ sung bit một cách đáng tin cậy mà không làm xuất hiện lời nhắc xin quyền hay cảnh báo người dùng.
Cách phòng vệ trước việc lấy dấu vân tay âm thanh
Bạn không thể khiến mình hoàn toàn không thể bị lấy dấu vân tay, nhưng bạn có thể giảm tín hiệu:
- Dùng một trình duyệt có sẵn các lớp bảo vệ. Tính năng chống lấy dấu vân tay của Firefox và Tor Browser chủ động chặn hoặc chuẩn hóa việc lấy dấu vân tay âm thanh. Brave ngẫu nhiên hóa đầu ra theo từng phiên ("farbling").
- Tiện ích mở rộng. Các tiện ích chống lấy dấu vân tay có thể thêm nhiễu vào đầu ra Web Audio, dù những tiện ích quá quyết liệt có thể làm hỏng các ứng dụng âm thanh hợp pháp.
- Hiểu rõ giới hạn. Chế độ riêng tư/ẩn danh đơn thuần không ngăn được việc lấy dấu vân tay — nó chỉ xóa cookie và lịch sử. Lấy dấu vân tay âm thanh vẫn hoạt động bất kể điều đó, một hiểu lầm phổ biến được trình bày trong hướng dẫn về lấy dấu vân tay trình duyệt của chúng tôi.
Sự đánh đổi vẫn là cái thường thấy: bảo vệ mạnh hơn có thể khiến các trang web hoạt động kỳ lạ hoặc khiến bạn bất thường hơn (và do đó dễ bị theo dõi hơn) nếu cấu hình của bạn hiếm gặp.
Cách kiểm tra dấu vân tay âm thanh của bạn
Bạn có thể xem dấu vân tay âm thanh của chính mình mà không cần viết bất kỳ đoạn mã nào:
- Chạy một công cụ kiểm tra dấu vân tay. Công cụ kiểm tra dấu vân tay của BrowserInsight tính giá trị âm thanh của bạn cùng với canvas và WebGL, còn dự án Cover Your Tracks của EFF cho thấy toàn bộ cấu hình trình duyệt của bạn dễ nhận diện đến mức nào.
- So sánh giữa các trình duyệt. Mở cùng một bài kiểm tra trong Chrome, Firefox và Safari trên một máy. Giá trị âm thanh thường khác nhau giữa các engine kết xuất, điều này cho thấy bản dựng trình duyệt — chứ không chỉ phần cứng — định hình kết quả.
- So sánh chế độ thường với chế độ bảo vệ. Chạy lại bài kiểm tra trong Firefox với Bảo vệ chống theo dõi nâng cao ở mức nghiêm ngặt, hoặc trong Tor Browser, và xem giá trị âm thanh bị chặn hoặc bị chuẩn hóa về một giá trị mặc định dùng chung.
Những yếu tố ảnh hưởng nhất tới giá trị bạn nhận được được tóm tắt dưới đây:
| Tham số | Thiết lập điển hình | Vì sao quan trọng |
|---|---|---|
| Loại context | OfflineAudioContext | Kết xuất âm thầm, nhanh hơn thời gian thực, không xuất âm thanh |
| Dạng sóng oscillator | Tam giác hoặc sin | Một tín hiệu nguồn có thể tái lập, mang tính tất định |
| Tần số | ~10.000 Hz | Một âm cố định để biến thiên duy nhất đến từ quá trình xử lý |
| Node xử lý | DynamicsCompressorNode | Nén dấu phẩy động khuếch đại những khác biệt triển khai nhỏ |
| Khoảng mẫu được băm | Một đoạn của bộ đệm | Cộng tổng hoặc băm rút hàng nghìn mẫu xuống một con số ổn định |
Vì mọi script tuân theo công thức này đều dùng các tham số tương đương, hai bên theo dõi trên các trang khác nhau có thể đi đến một giá trị tương tự cho cùng một thiết bị — đây chính là điều khiến tín hiệu hữu ích cho việc nhận diện xuyên trang.
Câu hỏi thường gặp
Lấy dấu vân tay âm thanh có dùng micro của tôi không?
Không. Lấy dấu vân tay âm thanh không bao giờ truy cập micro của bạn và không phát ra âm thanh nào. Nó tạo một tín hiệu trong nội bộ bằng Web Audio API và đo cách thiết bị của bạn xử lý nó, nên không có lời nhắc xin quyền nào xuất hiện và không có gì được ghi lại.
Tôi có thể bị theo dõi chỉ bằng dấu vân tay âm thanh không?
Hiếm khi chỉ bằng riêng nó — nó đặc trưng ở mức vừa phải, không độc nhất. Các bên theo dõi kết hợp nó với canvas, WebGL, phông chữ và các tín hiệu khác để xây dựng một hồ sơ đủ tin cậy để nhận ra bạn. Âm thanh là một lớp đóng góp, không phải toàn bộ dấu vân tay.
Xóa cookie có ngăn được việc lấy dấu vân tay âm thanh không?
Không. Lấy dấu vân tay được thiết kế để sống sót qua việc xóa cookie. Vì mã định danh được suy ra từ các đặc điểm thiết bị và trình duyệt của bạn chứ không phải dữ liệu được lưu, việc xóa cookie hoặc dùng chế độ riêng tư không làm thay đổi dấu vân tay âm thanh.
Làm sao để xem dấu vân tay âm thanh và thiết bị của chính tôi?
Hãy chạy công cụ kiểm tra dấu vân tay của BrowserInsight để xem các tín hiệu mà trình duyệt của bạn để lộ, bao gồm âm thanh, canvas và WebGL, cùng mức độ chúng khiến bạn dễ nhận diện.
Kết luận
Lấy dấu vân tay âm thanh biến quá trình xử lý âm thanh âm thầm của trình duyệt thành một mã định danh ổn định, không cần micro. Tự thân nó chỉ đặc trưng ở mức vừa phải, nhưng như một lớp giữa các tín hiệu canvas, WebGL và phông chữ, nó giúp các bên theo dõi nhận ra bạn qua các trang web và sống sót qua việc xóa cookie. Các trình duyệt riêng tư và công cụ chống lấy dấu vân tay có thể làm cùn nó đi, nhưng mục tiêu thực tế là giảm tín hiệu chứ không phải loại bỏ hoàn toàn.
Bài viết nên đọc: