Vân tay canvas: vì sao hai trình duyệt giống hệt vẽ ra các điểm ảnh khác nhau

Vân tay canvas là kỹ thuật nhiều người từng nghe nhất và ít người giải thích được nhất. Ý tưởng đơn giản: yêu cầu trình duyệt vẽ một thứ gì đó, đọc lại các điểm ảnh, và băm chúng. Phần thú vị là vì sao các điểm ảnh lại khác nhau giữa các máy.
Bản vẽ
Một script lấy vân tay tạo một <canvas> ngoài màn hình, lấy ngữ cảnh 2D, và vẽ một chuỗi ngắn: một hình chữ nhật tô màu, vài dòng chữ trong một phông chữ được nêu tên, có thể một dải chuyển màu, một đường cong, một emoji. Rồi nó gọi toDataURL() hoặc getImageData() để đọc kết quả, và đưa các byte qua một hàm băm. Đầu ra là một chuỗi ngắn như 71ae464e. Chuỗi đó là "giá trị băm canvas".
Không có gì về bản vẽ là bí mật, và không có gì được gửi tới GPU mà trang không thể mô tả sẵn. Thông tin nằm ở việc kết xuất, không phải ở các chỉ dẫn.
Vì sao các điểm ảnh khác nhau
Văn bản là nguồn biến thiên chính. Kết xuất một ký tự liên quan đến tệp phông chữ thực sự được chọn (phông dự phòng khác nhau theo hệ điều hành), chiến lược hinting và khử răng cưa (thang xám hay sub-pixel, và thứ tự sub-pixel nào), bộ raster hóa (FreeType, DirectWrite, CoreText, hoặc của chính trình duyệt), và việc GPU hay CPU thực hiện ghép lớp. Mỗi yếu tố này tạo ra các điểm ảnh ở rìa khác nhau đôi chút. Một điểm ảnh xám nhạt duy nhất ở mép chữ "e" cũng đủ làm giá trị băm thay đổi hoàn toàn.
Dải chuyển màu và đường cong thêm vào nhiều khác biệt hơn: các trình điều khiển đồ họa và đường khử răng cưa khác nhau làm tròn giá trị trung gian khác nhau. Kết quả là hai máy cùng phiên bản trình duyệt nhưng khác GPU, trình điều khiển hoặc hệ điều hành thường cho ra giá trị băm khác nhau, trong khi cùng một máy luôn cho ra cùng giá trị băm. Ổn định và đa dạng, đúng thứ một bộ theo dõi mong muốn.
Một giá trị băm cho trang web biết gì
Tự nó, không gì về việc bạn là ai. Nó cho trang biết trình duyệt này kết xuất bản vẽ này theo cách này, điều đúng với một nhóm máy nào đó. Kích thước của nhóm đó mới là điều quan trọng. Một laptop phổ biến với đồ họa tích hợp và phông chữ mặc định có chung giá trị băm với nhiều máy khác. Một cấu hình khác thường có thể gần như duy nhất. Kết hợp với kích thước màn hình, danh sách ngôn ngữ và chuỗi bộ render, ngay cả một giá trị băm phổ biến cũng trở thành một phần của một tổ hợp hiếm.
Các trình duyệt làm gì với nó
Firefox, khi bật resist-fingerprinting, trả về canvas trống hoặc ngẫu nhiên và có thể hỏi quyền truy cập canvas. Brave thêm các xáo trộn ngẫu nhiên nhỏ vào các lần đọc canvas để giá trị băm thay đổi giữa các trang và các phiên. Safari giới hạn phông chữ nào hiện ra và ràng buộc một số lần đọc lại. Bản thân Chromium không ngẫu nhiên hóa canvas; các trình duyệt dựng trên nó và nhắm tới việc kiểm soát vân tay làm điều đó bằng các bản vá riêng, và chất lượng các bản vá đó rất khác nhau.
Nhiễu không miễn phí. Một giá trị băm canvas đổi ở mỗi lượt truy cập tự nó là một tín hiệu, vì trình duyệt thật không làm vậy. Chiến lược tốt hơn cho một hồ sơ trình duyệt cô lập là một giá trị băm hợp lý và nhất quán, để nó trông như một chiếc máy bình thường chứ không phải một chiếc máy khác mỗi giờ.
Một công cụ chẩn đoán hiển thị gì
PowerScan tự vẽ một hình nhỏ và hiển thị giá trị băm cho bạn. Nó không bao giờ tải giá trị này lên; giá trị chỉ tồn tại trong tab của bạn. Tải lại và giá trị băm phải giống hệt. Nếu không, có thứ gì đó trong trình duyệt đang chèn nhiễu, điều đáng biết trước khi bạn dựa vào hồ sơ đó.


