TRACIOはクライアント・サーバー型の識別システムです。クライアントはブラウザのシグナルを収集してサーバーに送信し、サーバーは安定した訪問者識別子を計算し、検知アルゴリズムを実行し、エンリッチされた結果を返します。このセクションでは、パイプラインの各段階を説明します。
Browser TRACIO Cloud | | |-- Tracio.init({ publicKey }) ---------> | (init, no network) | | |-- tracio.getResult() ----------------> | | 1. Collect 130+ 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)tracio.getResult() が呼び出されると、クライアントは階層に整理された130+個の異なるブラウザシグナルを収集します。収集は、パフォーマンスのためにWeb Workerと共有iframeを用いる多段階パイプラインを使用します。
| カテゴリ | シグナル数 | 例 |
|---|---|---|
| Canvas & WebGL | 9 | Canvasフィンガープリント、WebGLレンダラー、WebGLパラメータ、WebGPU |
| オーディオ | 3 | AudioContextフィンガープリント、ベースレイテンシ、DRMタイミング |
| フォント & レンダリング | 10 | フォント検知、フォント設定、MathML、絵文字レンダリング |
| Navigator & プラットフォーム | 25 | User-Agent、言語、スクリーン、hardware concurrency、タイムゾーン |
| ストレージ & Cookie | 10 | localStorage、sessionStorage、cookie、ストレージクォータ |
| CSS & メディアクエリ | 10 | カラースキーム、HDR、reduced motion、forced colors |
| ネットワーク & WebRTC | 3 | TURNプローブ、接続RTT、アプリバージョン |
| Bot Detection | 15 | Webdriverフラグ、自動化フレームワーク、eval length |
| 改ざん検知 | 8 | プロパティgetterイントロスペクション、プロトタイプチェーン、ネイティブ関数整合性 |
| カスタム拡張 | 14 | 数学フィンガープリント、アーキテクチャ検知、WASM機能 |
収集パイプラインは、メインスレッドのブロッキングを最小化するために4つのステージで実行されます:
ステージ1(即時): 収集が速い高優先度シグナル(navigatorプロパティ、スクリーン、タイムゾーン)。TURNプローブも、並行して動作するためここで開始します。
ステージ2(アイドルコールバック): アイドル期間が有益な同期シグナル(CSSメディアクエリ、ストレージプローブ、cookieテスト)。
ステージ3(非同期): 非同期APIやレンダリングを必要とするシグナル(canvas、WebGL、オーディオフィンガープリント、フォント検知、絵文字レンダリング)。
Web Worker: 専用スレッドでの隔離されたシグナル収集(WASM機能検知、doNotTrack)。
共有の隠しiframeは一度だけ作成され、複数のコレクター(絵文字、MathML、システムカラー、フォント、スクリーンフレーム)によって再利用されます。これにより、シグナルごとに別々のiframeを作成するオーバーヘッドを回避します。
すべてのシグナルは一貫した構造に従います:
interface Signal<T> { s: number // Status code v: T // Value (when successful)}ステータスコード:
| コード | 意味 |
|---|---|
0 | 成功 |
-1 | 利用不可(プロパティが未定義) |
-2 | 副次チェックが失敗 |
-3 | 予期しない挙動 |
-4 | タイムアウト |
-5 | 無効化 |
-6 | CSPによるブロック |
-7 | セキュリティエラー |
収集されたシグナルはJSONにシリアライズされ、送信前に暗号化・圧縮されます:
JSONシリアライズ: すべてのシグナル値が、シグナルをキーとするJSONオブジェクトにパックされ、メタデータフィールド(APIキー用の c、tag用の t、linked ID用の lid)が追加されます。
圧縮: ペイロードが1024バイトを超える場合、CompressionStream("deflate-raw") を用いて圧縮されます。
XOR暗号化: ペイロードは暗号化エンベロープにラップされます:
Base64エンコード: 暗号化されたペイロードはBase64urlエンコードされ、POSTボディとして送信されます。
リクエストは、クライアントバージョンとAPIキーのクエリパラメータとともにイングレスエンドポイントに送信されます。ファーストパーティCookieを送信するためにCORS credentialsが含まれます。
サーバーは暗号化されたペイロードを受信し、複数のサブシステムを通じて処理します:
サーバーはXORエンベロープをデコードし、必要に応じて解凍し、JSONシグナルデータをパースします。各シグナルのステータスコードと値が抽出され、検証されます。
訪問者IDは階層型ハッシュアプローチ(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 identity各層は指定されたシグナルを抽出し、正規の文字列を構築し、MurmurHash3-x64-128 でハッシュ化します。3つの層のハッシュは連結され、base62でエンコードされて最終的な訪問者IDが生成されます。
信頼度スコア(0.0〜1.0)は、この訪問者が正しく識別されたことをシステムがどれだけ確信しているかを示します:
_vid_t cookieが一致する場合、信頼度は最大になります。ボット検知エンジンは複数の検知器を実行し、その重み付けされた出力を組み合わせてボットスコアを算出します(しきい値: bot は0.70以上、suspicious は0.30以上。ハードフェイルシグナルはボット判定を強制します)。寄与する検知器には以下が含まれます:
サーバーサイドのエンリッチメントシグナルは、生のシグナルデータとIP intelligenceから計算されます。これらには、VPN/プロキシ/Tor検知、IP位置情報、ブラウザ改ざん分析、疑わしさスコアリングが含まれます。
IP intelligenceサブシステムは以下を提供します:
サーバーは以下を含むJSONレスポンスを返します:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}これは、ブラウザ内で tracio.getResult() が解決する結果です。正規の bot_result(human / bot / uncertain)、位置情報、smart signalsを含む、完全にエンリッチされたイベントは、webhooksを通じてサーバーサイドに配信され、ダッシュボードに表示されます。
クライアントは、セッションをまたいだ永続化のために、ファーストパーティCookie(365日で失効、SameSite=Lax)とlocalStorageの両方に訪問者トークンを保存します。
| ステップ | 場所 | 所要時間 | 説明 |
|---|---|---|---|
| 1 | Browser | 約5ms | エージェント初期化、共有iframe作成 |
| 2 | Browser | 約50-150ms | 130+シグナルを収集(並列、多段階) |
| 3 | Browser | 約5ms | ペイロードの暗号化と圧縮 |
| 4 | Network | 約10-50ms | サーバーへPOST |
| 5 | Server | 約5-20ms | 復号、シグナル抽出、訪問者ID計算 |
| 6 | Server | 約5-15ms | ボット検知とsmart signalsの実行 |
| 7 | Server | 約5ms | レスポンスの構築 |
| 8 | Network | 約10-50ms | JSONレスポンスを返却 |
| 9 | Browser | 約1ms | 訪問者cookieを保存 |
合計ラウンドトリップ: ネットワーク状況とブラウザの性能に応じて、通常80-300msです。