Kiến trúc
Cách Clearcote bổ sung các lớp kiểm soát quyền riêng tư và danh tính lên Chromium — một cách minh bạch.
Stack công nghệ
Bản build mở là một stack mỏng, có thể audit được. Mỗi lớp đều mở và có thể thay thế:
Chromium (Google, BSD-3)
|
ungoogled-chromium -> removes Google services, telemetry, integration
|
Clearcote patches -> engine-level identity & privacy controls
|
reproducible build -> checksummed, GPG-signed, rebuildable by anyone (open build)
|
Clearcote Browser + SDK (Playwright objects) / CDP endpointBản build có giấy phép (Miễn phí với GitHub và Pro) bổ sung thêm các patch không công khai lên trên stack này. Bản này được xác minh SHA-256 khi tải về nhưng không thể build lại từ mã nguồn công khai.
Ở cấp engine, không phải chèn script
Phần lớn công cụ “stealth” chèn JavaScript để ghi đè các thuộc tính navigator lúc runtime. Cách này dễ vỡ và tự làm lộ mình — chính các phần ghi đè lại trở thành một fingerprint (prototype chain sai, timing của getter, thiếu chuỗi native code khi stringify).
Thay vào đó, Clearcote chỉnh sửa engine C++. Các giá trị mà trang đọc được sinh ra từ chính những code path Chromium vẫn luôn dùng, nên không có lớp chèn thêm nào để phát hiện. Cách này bao quát cả những API mà JavaScript hoàn toàn không thể can thiệp một cách sạch sẽ.
Danh tính nhất quán, nhiễu render theo từng site (farbling)
Ngẫu nhiên hóa từng tín hiệu một cách độc lập sẽ tạo ra một danh tính không ăn khớp — một dấu hiệu lộ tẩy rõ ràng. Clearcote suy ra persona từ một seed duy nhất, và suy ra nhiễu render từ seed đó kết hợp với registrable domain (tên miền đăng ký được) của site:
- Nhất quán nội tại — nền tảng, GPU, màn hình và phần cứng khớp với nhau; múi giờ và ngôn ngữ lấy từ tùy chọn của bạn hoặc từ
geoip. - Ổn định theo từng site — cùng một site sẽ thấy cùng một danh tính trong suốt session.
- Nhiễu render theo từng site — dữ liệu readback từ canvas và WebGL khác nhau giữa các site, nên hash render không khớp giữa các domain. Các giá trị thuộc nhóm phần cứng giữ nguyên ở mọi nơi, giống như trên một máy thật.
Mô hình nhiễu theo eTLD+1 này lấy cảm hứng từ cách farbling của Brave. Nhiễu phụ thuộc vào seed: không có seed --fingerprint thì cũng không có nhiễu.
Persona nhất quán — một seed, một cỗ máy như thật
Clearcote tiến thêm một bước so với việc thêm nhiễu cho từng tín hiệu. Một seed --fingerprint duy nhất sẽ suy ra một persona nhất quán cho nền tảng bạn thể hiện ra — một cỗ máy duy nhất trông như thật, với các thuộc tính khớp với nhau. Mặc định SDK thể hiện hệ điều hành của máy host (Windows hoặc Linux); UA macOS và persona Android (ở mức best-effort) có sẵn khi bạn yêu cầu. Từ seed, nó chọn ra một hạng phần cứng (số nhân CPU và dung lượng RAM thực sự đi cùng nhau trên máy bán ra — không bao giờ có chuyện 20 nhân với 4 GB), độ phân giải màn hình phù hợp, độ sâu màu và device-pixel ratio, một GPU nhất quán, và một phiên bản Chrome có thật.
Từ bản dựng Chromium 156 có giấy phép (r51), persona được tạo trong dịch vụ persona của Clearcote thay vì trong trình duyệt: ở mỗi lần khởi động, trình khởi chạy (SDK, Profile Manager hoặc ảnh Docker) gửi seed hoặc lựa chọn hồ sơ của bạn cùng run token của giấy phép và chuyển persona đã ký nhận được cho trình duyệt; không có nó, trình duyệt không khởi động. Kết quả không đổi — một seed cho cùng persona trên r51 như trên r50 — nhưng một engine sao chép không có giấy phép sẽ không chạy được gì.
Các thuộc tính thuộc nhóm phần cứng giữ cố định trong suốt session — một máy thật không đổi số nhân hay kích thước màn hình giữa các site — trong khi các bề mặt render bị làm nhiễu (pixel của canvas và WebGL) vẫn được farble theo từng site, nên bạn không bị liên kết giữa các domain. Client rect và âm thanh được render không bị làm nhiễu — dù sampleRate, baseLatency và outputLatency của AudioContext được lấy từ persona mỗi khi có persona đang hoạt động; những gì được farble, và những gì cố ý không giải thích sự đánh đổi này.
Vì sao điều này quan trọng: tín hiệu phát hiện mạnh nhất hiện nay không nằm ở một giá trị riêng lẻ nào, mà là mâu thuẫn nội tại — một máy tự nhận là hệ điều hành này nhưng lại render như hệ điều hành khác, hoặc ghép CPU nhiều nhân với quá ít RAM. Suy ra mọi tín hiệu từ một bảng persona giúp chúng luôn kể cùng một câu chuyện. Cơ chế này chạy trên chính seed --fingerprint mà bạn vẫn truyền vào (không cần cờ mới).
Có ba cách thể hiện một danh tính: preset light-stealth (vài giá trị metadata, không seed, không nhiễu), persona từ seed như trên, hoặc một profile thu thập từ máy thật (fingerprint_profile, hoặc profile="auto" từ thư viện profile của bản build có giấy phép). Xem Khuyến nghị để biết nên bắt đầu từ cách nào.
Những gì được kiểm soát
Nền tảng build
Bản build mở nhắm tới Windows x64 (cross-compile từ Linux) và Linux x64 (native), trên Chromium 151; bản build có giấy phép dùng Chromium 156. Toàn bộ quy trình build của bản build mở — cùng mọi điểm dễ vấp khi cross-build — đều được ghi lại để ai cũng có thể tái tạo. Xem Build từ mã nguồn.
38.921 dòng giữa Chromium gốc và Clearcote Pro.
Đó là khoảng cách giữa bản build Pro và bản Chromium do Google phát hành. Mọi giá trị một trang web có thể đọc đều được đặt ở nơi Chromium tính ra nó, nên trang, các worker và iframe của nó đều mô tả cùng một thiết bị.
- Canvas
- WebGL
- WebGPU
- Âm thanh
- Phông chữ
- Màn hình và cửa sổ
- WebRTC
- TLS
- Client hints
- Thời gian nhập liệu
- Giọng nói và codec
Bản build Pro, đếm từ bộ bản vá r57 (Chromium 156.0.8078.47). Bản build mở miễn phí là một bộ bản vá nhỏ hơn và công khai.
345 files changed, 35915 insertions(+), 3006 deletions(-)
240 bản vá
Tệp được sửa, theo khu vực
- Engine kết xuất (Blink)118
- Trình duyệt (chrome/)52
- Tầng content42
- Thành phần39
- Tầng mạng22
- Giao diện và cửa sổ14
- TLS (BoringSSL)11
- V8 và URL17
- Phần còn lại30