ブラウザフィンガープリントを、エンジンで制御
ブラウザフィンガープリントは、互いにつじつまが合っていなければならない数十の値の集まりです。Clearcote はそれらを 1 つのシードから導出し、Chromium 自身のコードパスから返します。そのため、GPU、画面、フォントを読み取るページは、実在してもおかしくない 1 台のマシンに属する答えを受け取り、言語とタイムゾーンもそのマシンに合わせて設定されます。メインフレームでも、iframe でも、worker でも同じです。
シードによるペルソナとサイトごとのノイズは、オープンビルドを含むすべてのプランで使えます。
シード 1 つに、アイデンティティ 1 つ
import { launch } from "clearcote";
// the same seed returns the same identity; a new seed is a new one
const browser = await launch({
fingerprint: "account-42",
timezone: "America/New_York",
acceptLanguage: "en-US,en",
});主なポイント
シード 1 つで、マシン 1 台
--fingerprint は相互に関連したペルソナを導出します。CPU とメモリのクラス、画面、色深度、GPU、読み上げ音声、コーデック、メディアデバイスが互いに噛み合うように揃います。
全体一律ではなくサイトごとに
canvas と WebGL のノイズは、Brave の farbling モデルにならってサイトごとに導出されます。そのため、これらのハッシュはサイトごとに異なる一方、ペルソナが報告するハードウェアは、実在する 1 台のマシンのようにどこでも同じです。
どの realm でもネイティブ
値は C++ の getter から返されるため、toString、プロパティディスクリプタ、新しい iframe や worker のいずれから見ても、ネイティブコードと同じ答えが得られます。
自己矛盾のない GPU
WebGL の vendor と renderer はセッション中ずっと一定で、getParameter の上限値は、このマシンが裏付けられる範囲でその GPU に合わせられます。WebGPU も同じアダプターを示します。
実機をインポート
実際の Chrome から取得したプロファイルを読み込むか、公開プロファイルライブラリから選ぶと、合成された値がそのプロファイルの値に置き換わります。
必要な場面では控えめに
lightStealth は安全なメタデータだけを変えます。fingerprintNoise: false はアイデンティティを保ったまま、canvas と WebGL のノイズを外します。ノイズそのものが評価対象になる場面向けです。
巧妙な値より一貫性が効く理由
検知が 1 つの珍しい値だけで決まることはめったにありません。検知が探すのは矛盾です。ピクセルと合わない GPU 文字列、IP と食い違うタイムゾーン、ページとは異なるハードウェアを報告する worker などです。ですから Clearcote が答える問いは、どの値を偽るかではなく、すべての値を互いに、そして下で動くマシンとも整合させ続けるにはどうするか、です。
シードは決定論的です。同じシードからは、再訪するユーザーのように起動のたびに同じアイデンティティが生まれ、新しいシードからは新しいアイデンティティが生まれます。Canvas 2D と WebGL の読み出し結果には、シードごと・サイトごとの小さな揺らぎが加えられます。読み出し結果は、実在のマシン同士でももともとばらつくからです。レンダリングされたオーディオと client rects は、意図的に正確なままにしています。これらに揺らぎを加えると、実在のブラウザなら決して出さない値が生まれ、2 つのプロファイルが同じハッシュを共有することよりも目立つシグナルになるからです。各項目の詳細はフィンガープリントのドキュメントで解説しています。
ホストが裏付けられない申告もあり、ドキュメントにはそのことをはっきり書いています。実際のウィンドウと合わない画面サイズや、マシンが実際には描画できない GPU は、ホストと突き合わせて検査されると破綻します。だからこそ lightStealth は実際の画面を維持し、画面の上書きはオプトインになっています。canvas ブリッジがあるのも、推奨の出発点が変える項目を増やすのではなく減らしているのも、同じ理由です。
対象範囲
| 項目 | Clearcote の処理 |
|---|---|
| Canvas 2D と WebGL の読み出し | 実在のマシン間の自然なばらつきの範囲に収まる、シードごと・サイトごとのノイズ |
| WebGL の renderer と上限値 | セッション中は一定の GPU。その GPU のパラメーター上限値を、このマシンが裏付けられる範囲で適用 |
| WebGPU | WebGL と同じアダプター。デフォルトでは 2 つの API が同じ GPU を示す |
| オーディオ | AudioContext のサンプルレートとレイテンシはペルソナに従い、レンダリングされたサンプルは正確なまま |
| フォントと読み上げ音声 | ペルソナのフォントセットと音声セット |
| ハードウェアと画面 | hardwareConcurrency、deviceMemory、ピクセル比、色深度、タッチポイント数、ペルソナの画面と作業領域(lightStealth では実際の画面を維持) |
| ロケールと時刻 | Accept-Language、navigator.language、Intl、タイムゾーンが一致 |
| ユーザーエージェントと Client Hints | ブランド、バージョン、プラットフォーム、ビット数、モデルをエンジンから返す |
| TLS | ClientHello が、ペルソナの名乗る Chrome のバージョンに従う |
| 自動化の手がかり | navigator.webdriver とヘッドレス特有の痕跡 |
スイッチの一覧とそれぞれの働きは、フィンガープリントフラグのリファレンスにまとめています。
主な用途
プライバシー
通常のブラウザは、あなた自身のマシンの値の組み合わせをそのまま報告します。ペルソナが報告するのは、あなたのものではない、もっともらしく一貫したマシンです。
アイデンティティの分離
アカウントごとに専用のシードを割り当て、アカウント間でレンダリングのフィンガープリントを共有しないようにします。
フィンガープリントを扱うコードのテスト
自社の不正検知、分析、パーソナライズのコードが、異なるハードウェア、GPU、ロケールにどう反応するかを確認できます。
フィンガープリンティング研究
テストページが計測する内容を、制御された再現可能な入力で再現します。
Clearcote は、プライバシー保護、テスト、研究、合法的な自動化のために作られています。どう使うか、そしてアクセスするサイトの規約を守ることは、利用者ご自身の責任です。
対象プラン
シードによるペルソナ、サイトごとのノイズ、メタデータの上書き、TLS の一致は、オープンビルドを含むすべてのプランに含まれます。ライセンスビルド(GitHub で無料)では、より細かいスイッチがいくつかと、リアルな振る舞い、そして Chromium の新しいメジャーバージョンへの先行対応が加わります。Pro にしたからといって、「GitHub で無料」にない偽装機能が使えるようになるわけではありません。
プランを比較よくある質問
ブラウザフィンガープリントの偽装とは何ですか?
Web サイトがブラウザを識別するために読み取る値(GPU、画面、フォント、ハードウェア、言語など)を変更することです。ほとんどのツールは JavaScript のプロパティを上書きしてこれを行います。Clearcote は Chromium エンジン内で行うため、値はネイティブコードから返され、互いに整合性が保たれます。
JavaScript のフィンガープリント偽装ツールではだめなのですか?
上書きされた関数は、自ら正体を明かしてしまいます。toString は [native code] ではなく上書きしたコードのソースを返し、プロパティディスクリプタが変わり、新しい iframe や worker では元の値が戻ってきます。Clearcote には、見つかるようなそうしたレイヤーがありません。詳しくは検知の仕組みをご覧ください。
同じシードなら毎回同じフィンガープリントになりますか?
はい。シードからペルソナとサイトごとのノイズが決定論的に導出されるため、同じシードなら起動のたびに同じアイデンティティになり、新しいシードなら新しいアイデンティティになります。
1 台のマシン上の 2 つのアカウントで、異なる canvas フィンガープリントを持てますか?
はい、シードを分ければ可能です。canvas と WebGL の読み出し結果はシードごとに異なります。インポートしたデバイスプロファイルが変えるのは報告される値だけで、レンダリングは変わりません。描画結果を分けるには、アカウントごとのシードを使ってください。レンダリングされたオーディオと client rects は下で動くマシンに由来するため、そのマシン上のすべてのアイデンティティで同じになります。
これで自動化が検知されなくなりますか?
それを約束できるツールはありませんし、私たちも約束しません。Clearcote が取り除くのは、偽装したブラウザにありがちな矛盾です。振る舞い、IP の評判、使い方は依然として重要です。ご自身の環境がどう見えるかはフィンガープリントテストで確認できます。
ドキュメントで詳しく
関連する機能
アカウントごとに 1 つのシード。セッションのたびに同じデバイス、次のアカウントには別のデバイス。Cookie とストレージは実行をまたいで保持されます。
TLS ハンドシェイクと HTTP/2 フレームは Chromium 自身のネットワークスタックから送られ、バージョン依存のフィールドはペルソナが名乗る Chrome バージョンに従います。
canvas と WebGL の操作を実 GPU 搭載のリモートマシンに転送し、ページが読み出すピクセルを、ペルソナが名乗る GPU と一致させます。
geoip を有効にしてプロキシを設定すれば、タイムゾーン、言語、WebRTC が出口 IP に従います。ライセンスビルドなら、ユーザー名とパスワード付きの SOCKS5 もそのまま使えます。
関連記事
Clearcote を試す
Playwright & Puppeteer にそのまま組み込め、TLS ハンドシェイクまで整合性を保ちます。まずはオープンソースのビルドから始められます。
GitHub があればブラウザ 1 つまで無料。カード登録は不要です。