TRACIO là một hệ thống nhận dạng theo mô hình client-server. Client thu thập các tín hiệu trình duyệt và gửi chúng đến server, nơi tính toán một mã định danh khách truy cập ổn định, chạy các thuật toán phát hiện và trả về kết quả đã được làm giàu. Phần này giải thích từng giai đoạn của pipeline.
Browser TRACIO Cloud | | |-- Tracio.init({ publicKey }) ---------> | (init, no network) | | |-- tracio.getResult() ----------------> | | 1. Collect 300+ browser signals | | 2. Encrypt (XOR + deflate + B64) | | 3. POST to ingress endpoint | | | | |-- Decrypt & extract signals | |-- Compute visitor ID (MurmurHash3-128) | |-- Run bot detection (weighted scoring) | |-- Run smart signals (server-side enrichment) | |-- Run IP intelligence (VPN/proxy/Tor) | |-- Store visit event | | |<-- JSON response ------------------- | | visitorId, confidence, | | bot detection, smart signals | | | |-- Store visitor cookie (_vid_t) -----> | (365-day persistence)Khi tracio.getResult() được gọi, client thu thập hơn 300 tín hiệu trình duyệt riêng biệt được tổ chức thành các tier. Việc thu thập sử dụng một pipeline nhiều pha với Web Worker và các iframe dùng chung để tối ưu hiệu năng.
Agent cung cấp 300+ tín hiệu thuộc 15 danh mục:
| Danh mục | Tín hiệu | Danh mục | Tín hiệu |
|---|---|---|---|
| Tamper | 82 | Fonts | 15 |
| Navigator | 72 | Network | 15 |
| Bot | 32 | Persistence | 14 |
| Canvas | 26 | Intl | 13 |
| CSS | 19 | Audio | 12 |
| Privacy | 17 | Storage | 12 |
| Crypto | 16 | Behavioral | 5 |
| Display | 15 |
Canvas bao phủ cả WebGL và WebGPU ngang với kết xuất 2D; Tamper là danh mục lớn nhất, bởi việc nhận ra một môi trường đã bị chỉnh sửa đòi hỏi nhiều phép thử hơn so với việc đọc một môi trường nguyên vẹn.
Pipeline thu thập chạy qua bốn giai đoạn để giảm thiểu việc chặn main thread:
Giai đoạn 1 (Ngay lập tức): Các tín hiệu ưu tiên cao và nhanh thu thập (thuộc tính navigator, screen, timezone). TURN probe cũng bắt đầu ở đây vì nó chạy đồng thời.
Giai đoạn 2 (Idle Callback): Các tín hiệu đồng bộ được hưởng lợi từ khoảng thời gian nhàn rỗi (CSS media queries, storage probes, cookie tests).
Giai đoạn 3 (Async): Các tín hiệu yêu cầu API bất đồng bộ hoặc rendering (canvas, WebGL, audio fingerprint, font detection, emoji rendering).
Web Worker: Thu thập tín hiệu tách biệt trong một thread chuyên dụng (WASM feature detection, doNotTrack).
Một iframe ẩn dùng chung được tạo một lần và tái sử dụng bởi nhiều collector (emoji, MathML, system colors, fonts, screen frame) để tránh chi phí tạo iframe riêng cho từng tín hiệu.
Mỗi tín hiệu tuân theo một cấu trúc nhất quán:
interface Signal<T> { s: number // Status code v: T // Value (when successful)}Mã trạng thái:
| Code | Ý nghĩa |
|---|---|
0 | Thành công |
-1 | Không khả dụng (thuộc tính undefined) |
-2 | Kiểm tra phụ thất bại |
-3 | Hành vi bất thường |
-4 | Timeout |
-5 | Đã tắt |
-6 | Bị CSP chặn |
-7 | Lỗi bảo mật |
Các tín hiệu đã thu thập được serialize sang JSON, sau đó được mã hóa và nén trước khi truyền đi:
Serialize JSON: Tất cả giá trị tín hiệu được đóng gói vào một đối tượng JSON được khóa theo tín hiệu, cộng thêm các trường metadata (c cho API key, t cho tag, lid cho linked ID).
Nén: Nếu payload vượt quá 1024 byte, nó được nén bằng CompressionStream("deflate-raw").
Mã hóa XOR: Payload được bọc trong một lớp bao mã hóa:
Mã hóa Base64: Payload đã mã hóa được mã hóa Base64url và gửi làm POST body.
Yêu cầu được gửi đến ingress endpoint với các query parameter cho phiên bản client và API key. CORS credentials được bao gồm để gửi các first-party cookie.
Server nhận payload đã mã hóa và xử lý nó qua nhiều hệ thống con:
Server giải mã lớp bao XOR, giải nén nếu cần và phân tích dữ liệu tín hiệu JSON. Mã trạng thái và giá trị của mỗi tín hiệu được trích xuất và xác thực.
Visitor ID được tính bằng phương pháp tiered hashing (băm phân tầng) (V3):
Tier 1 (Frozen): 20 base62 characters - Stable hardware signals that rarely change - Canvas, WebGL renderer, audio fingerprint, fonts - Provides long-term visitor identity
Tier 2 (Semi-stable): 10 base62 characters - Signals that change with browser updates - User-Agent data, Client Hints, plugins - Extensible without breaking Tier 1
Tier 3 (Volatile): 10 base62 characters - Signals that change frequently - Screen resolution, timezone, language - Used for confidence scoring, not identityMỗi tier trích xuất các tín hiệu được chỉ định của nó, xây dựng một chuỗi chuẩn tắc và băm nó bằng MurmurHash3-x64-128. Ba tier hash được nối lại và mã hóa base62 để tạo ra visitor ID cuối cùng.
Điểm độ tin cậy (0.0 đến 1.0) cho biết hệ thống chắc chắn đến mức nào rằng khách truy cập này đã được nhận dạng chính xác:
_vid_t trùng khớp với một khách truy cập đã biết, độ tin cậy đạt mức tối đa.Bot detection engine chạy nhiều detector và cộng gộp các đầu ra đã đánh trọng số của chúng thành một điểm bot; riêng một tín hiệu hard-fail cũng đủ để ấn định phán định là bot. Giá trị công khai bot.score nằm trên thang 0..100, còn phán định đến với bạn dưới dạng bot.result. Các ngưỡng chính xác không được công bố: một ngưỡng có thể đọc được là một ngưỡng có thể bị dò theo để né. Các detector đóng góp bao gồm:
Các detector cho instrumentation (Frida), root/jailbreak và ứng dụng nhân bản đều có trong nền tảng, nhưng các khe đầu vào của chúng chỉ dành cho native — agent trình duyệt không thu thập chúng, nên chúng không tham gia vào phán định trên web. Xem Phát hiện bot để biết những gì hoạt động đầy đủ trên web.
Các tín hiệu làm giàu phía server được tính từ dữ liệu tín hiệu thô và IP intelligence. Chúng bao gồm phát hiện VPN/proxy/Tor, định vị địa lý IP, phân tích can thiệp trình duyệt và chấm điểm nghi ngờ.
Hệ thống con IP intelligence cung cấp:
Server trả về một phản hồi JSON chứa:
{ "visitorId": "X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y", "bot": { "detected": false, "confidence": 2, "reasons": [] }}Đây là kết quả mà tracio.getResult() resolve về trong trình duyệt. Sự kiện
đầy đủ, đã được làm giàu — bao gồm bot_result chuẩn tắc
(human / bot / uncertain), định vị địa lý và smart signals — được
gửi đi phía server thông qua webhook, đọc được qua
Data API và hiển thị trong dashboard.
Client lưu một visitor token vào cả first-party cookie (hết hạn sau 365 ngày, SameSite=Lax) và localStorage để duy trì qua các phiên.
| Bước | Vị trí | Mô tả |
|---|---|---|
| 1 | Browser | Khởi tạo agent, tạo iframe dùng chung |
| 2 | Browser | Thu thập hơn 300 tín hiệu (song song, nhiều pha) |
| 3 | Browser | Mã hóa và nén payload |
| 4 | Network | POST đến server |
| 5 | Server | Giải mã, trích xuất tín hiệu, tính visitor ID |
| 6 | Server | Chạy bot detection và smart signals |
| 7 | Server | Xây dựng phản hồi |
| 8 | Network | Trả về phản hồi JSON |
| 9 | Browser | Lưu visitor cookie |
Tổng round-trip: tính bằng mili giây. Phần lớn thời gian là ở khâu thu thập tín hiệu — các chặng mạng và phần việc phía server chiếm ít hơn — và con số này thay đổi theo thiết bị cùng kết nối của khách truy cập. Không có công đoạn nào ở đây chặn việc kết xuất trang: agent tải bất đồng bộ, và mọi phép kiểm tra có thể chậm đều bị giới hạn bởi timeout của riêng nó.