Chuyển đến nội dung

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ế:

text
            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 endpoint

Bả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.

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

Canvas 2DWebGL renderer (GPU cố định trong session)Giới hạn getParameter của WebGLAdapter WebGPUFontMúi giờNgôn ngữ (Accept-Language, navigator.languages, Intl)User-Agent + UA-CHPersona TLS ClientHello (JA3/JA4)hardwareConcurrencydeviceMemoryKích thước màn hìnhHạn mức lưu trữnavigator.webdriverDấu hiệu headlessClosed shadow rootIP proxy qua WebRTCnavigator.getBatterynavigator.connectionBố cục bàn phím (layout map)getScreenDetails / đa màn hìnhMedia query pointer/hover của CSSMetadata AudioContext (sample rate / độ trễ)Giọng đọc tổng hợp (speech synthesis)navigator.shareNhất quán OS qua ký tự ổ đĩa trong URLAI agent tích hợp trong trình duyệtCodec của MediaCapabilitiesenumerateDevicesUA-CH bitness/WoW64

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 149; bản build có giấy phép dùng Chromium 153. 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.