Dấu vân tay canvas
Canvas fingerprinting là cách nhận diện một máy tính qua cách nó vẽ. Một trang web yêu cầu trình duyệt vẽ một hình ảnh vô hình gồm chữ và hình khối, lấy kết quả và tính từ đó một checksum.
Hình ảnh là như nhau, nhưng checksum lại khác nhau giữa các máy: việc vẽ do card đồ họa đảm nhiệm, và những khác biệt cực nhỏ trong nó, trong driver, trong bộ phông chữ và trong khử răng cưa tạo ra các pixel khác nhau ở đầu ra. Con người không nhìn thấy sự khác biệt — nhưng một con số thì thấy.
Cùng một thủ thuật cũng hoạt động với WebGL (đồ họa 3D, cộng thêm tên card đồ họa ở dạng văn bản thuần) và với AudioContext (xử lý âm thanh thay vì hình ảnh).
Vì sao đây là một dấu hiệu mạnh
Checksum canvas không được lưu trong bất kỳ tệp nào — nó không thể bị xóa như cookie. Nó được tính lại mới hoàn toàn mỗi lần truy cập và giữ nguyên cho đến khi bạn đổi máy tính, card đồ họa hoặc driver.
Đó là lý do hai tài khoản mở từ cùng một máy trông giống như cùng một người qua canvas, dù mọi thứ khác đều khác nhau.
Điều gì khiến một bản giả mạo cẩu thả trở nên nguy hiểm
Việc giả mạo thường được thực hiện bằng nhiễu (noise): những sai lệch gần như không nhận thấy được thêm vào kết quả để checksum thay đổi. Ở đây rất dễ làm mọi thứ tệ hơn trước, và có ba cách:
- Nhiễu thay đổi ở mỗi lần đọc. Một máy thật cho cùng một câu trả lời với cùng một yêu cầu. Nếu checksum nhảy từ lần gọi này sang lần gọi khác, đó không phải là "một máy tính độc nhất" — mà là một sự giả mạo rõ ràng, và được kiểm tra bằng hai yêu cầu liên tiếp.
- Nhiễu quá lớn. Giá trị trôi vào vùng mà thiết bị thật không bao giờ rơi vào.
- Canvas bị giả mạo, nhưng card đồ họa trong WebGL vẫn là thật. Hai giá trị đáng lẽ phải liên kết với nhau bắt đầu mâu thuẫn nhau.
Quy tắc cũng giống như với toàn bộ dấu vân tay: tính nhất quán quan trọng hơn tính độc nhất. Một dấu vân tay ổn định và bình thường tốt hơn một dấu vân tay không thể lặp lại.
Cách kiểm tra
Kiểm tra dấu vân tay hiển thị checksum canvas của bạn và thực hiện hai lần đọc liên tiếp — để có thể thấy giá trị có giữ nguyên hay bị nhảy.
