WebGLベンダーフィンガープリントとは — GPUブランドによるブラウザ識別
ブラウザ・デバイス

WebGLベンダーフィンガープリントとは — GPUブランドによるブラウザ識別

WEBGL_debug_renderer_infoがGPUメーカーとモデル名を公開する仕組みと、Cookieなし追跡への影響を解説します。

8分で読める·

WebGLベンダーフィンガープリンティングは、ブラウザの3DグラフィックスAPIからGPUの メーカーと正確なモデル名を読み取り、デバイスに何も保存することなく永続的なデバイス 識別子を構築します。ブラウザが現在何を公開しているかは whatsmy.fyiでご確認いただけます。

TL;DR

WebGLベンダーフィンガープリンティングは、WEBGL_debug_renderer_info というブラウザ拡張機能を使用して、GPUドライバーが公開する2つの文字列を読み取ります: ベンダー名(例:NVIDIA Corporation)とレンダラー文字列(例: ANGLE (NVIDIA GeForce RTX 3050 Direct3D11 vs_5_0 ps_5_0))。これらの文字列は、 GPUモデル・ドライバーのバックエンド・場合によってはドライバーバージョンを特定できるほど 具体的で——めったに変わらず、クッキーのようにクリアすることができません。

WebGLベンダーフィンガープリンティングとは?

WebGLベンダーフィンガープリンティングは、WebGL仕様に組み込まれたデバッグ機能である WEBGL_debug_renderer_info 拡張機能を活用して、グラフィックスハードウェアに関する詳細情報を抽出するブラウザ トラッキング技術です。ピクセルレベルのレンダリング差異からGPUの違いを推論する キャンバスフィンガープリンティングとは異なり、WebGLベンダーフィンガープリンティングはドライバーに直接問いかけます: 「あなたは誰に作られ、何と呼ばれていますか?」

結果は UNMASKED_VENDOR_WEBGLUNMASKED_RENDERER_WEBGL という一対の文字列で——GPUメーカー・モデル名・グラフィックスバックエンド (Direct3D・Metal・Vulkan・OpenGL)・多くの場合ドライバーバージョンを識別します。 これら2つの値を合わせると10〜15ビットのエントロピーを持ち、 ブラウザフィンガープリンティング ツールキットの中で最も高いシグナルを持つ個別属性の一つとなっています。

この技術はもともとグラフィックスパフォーマンスの問題をデバッグする開発者向けに設計された ものでした。トラッキングサーフェスとして設計されたものではありませんが——ブラウザセッション・ プライベートウィンドウ・OS再インストール後でも安定したハードウェアレベルの識別子を公開 するため——ウェブ上で最も広く展開されているフィンガープリンティングシグナルの一つとなっています。

WebGLベンダーフィンガープリンティングの仕組み

抽出プロセスには数行のJavaScriptしか必要とせず、1ミリ秒未満で完了します。

ステップ1 — デバッグ拡張機能のリクエスト

スクリプトはWebGLコンテキストで gl.getExtension("WEBGL_debug_renderer_info") を呼び出します。ほとんどのブラウザはこの拡張機能をデフォルトで公開していますが、 プライバシー強化されたブラウザは null または汎用文字列を返す場合があります。

ステップ2 — ベンダーとレンダラーの文字列の読み取り

拡張機能が利用可能な状態で、スクリプトは gl.getParameter() を2回呼び出します——ext.UNMASKED_VENDOR_WEBGL(例:Google Inc. (NVIDIA))に1回とext.UNMASKED_RENDERER_WEBGL(例: ANGLE (NVIDIA, NVIDIA GeForce RTX 3050 Laptop GPU Direct3D11 vs_5_0 ps_5_0, D3D11))に1回です。これらはブラウザやOSが返す前にサニタイズしない、生のドライバー文字列です。

ステップ3 — 他のシグナルとの組み合わせ

レンダラー文字列はハッシュ化され、サポートされているWebGL拡張機能・最大テクスチャサイズ・ シェーダー精度・その他のWebGLパラメータと組み合わせて、複合GPUフィンガープリントを 生成します。この組み合わせた値は、どちらの文字列単独よりもはるかにユニークです。

// WebGL vendor fingerprinting — how tracking scripts extract GPU identity
function getWebGLVendorFingerprint() {
  const canvas = document.createElement('canvas');
  const gl =
    canvas.getContext('webgl') ||
    canvas.getContext('experimental-webgl');

  if (!gl) return { vendor: 'unsupported', renderer: 'unsupported' };

  // Request the debug extension that exposes unmasked driver strings
  const ext = gl.getExtension('WEBGL_debug_renderer_info');

  if (!ext) {
    // Browser is protecting you (Brave / Firefox resistFingerprinting)
    return { vendor: 'protected', renderer: 'protected' };
  }

  // These strings directly identify your GPU brand and model
  const vendor   = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
  const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);

  // Example output:
  // vendor:   "Google Inc. (NVIDIA)"
  // renderer: "ANGLE (NVIDIA, NVIDIA GeForce RTX 3050 Laptop GPU
  //            (0x000025A2) Direct3D11 vs_5_0 ps_5_0, D3D11)"

  return { vendor, renderer };
}

レンダラー文字列はどのようなものか?

正確な形式はGPUベンダーとオペレーティングシステムによって異なります。Chromiumベースの ブラウザでは、文字列には ANGLE——ネイティブグラフィックスAPIをラップする Chromeのトランスレーションレイヤー——のプレフィックスが付きます。以下に実例を示します:

GPUベンダーREENDERERの文字列例
NVIDIA(Windows)ANGLE (NVIDIA, NVIDIA GeForce RTX 3050 Laptop GPU (0x000025A2) Direct3D11 vs_5_0 ps_5_0, D3D11)
AMD(Windows)ANGLE (AMD, AMD Radeon RX 6600 Direct3D11 vs_5_0 ps_5_0, D3D11)
Intel(Linux / Mesa)ANGLE (Intel, Vulkan 1.3.267 (Intel(R) UHD Graphics (TGL GT2) (0x00009A78)), Intel open-source Mesa driver)
Apple Silicon(M2 Max)ANGLE (Apple, ANGLE Metal Renderer: Apple M2 Max, Unspecified Version)
Apple Silicon(M4)ANGLE (Apple, ANGLE Metal Renderer: Apple M4 Pro, Unspecified Version)

レンダラー文字列は多くの場合GPUの内部PCIデバイスID(例:0x000025A2)を エンコードしており、特定のGPU SKUに固有です。これにより、レンダラー文字列はGPUファミリー だけでなく、多くの場合特定の製品ラインのバリアントにもユニークになります。

WebGLベンダーフィンガープリントはどれほどユニークか?

調査結果出典
GPUレンダラー文字列のエントロピー貢献度10〜15ビットEFF Cover Your Tracks
WebGLフィンガープリンティングを使用しているトップ10,000サイトの割合>8%Princeton Web Transparency & Accountability Project、2020年
13以上のシグナル(WebGL含む)を組み合わせた場合のフィンガープリントのユニーク性83〜90%EFF Panopticlick研究
最新の不正対策ベンダーが追跡するシグナル数100以上Fingerprint.com
ブラウザ再起動をまたいだGPUフィンガープリンティングの安定性ハードウェア変更まで永続的DrawNApart GPUフィンガープリンティング研究(arXiv 2022年)

レンダラー文字列は利用可能なフィンガープリンティングシグナルの中で最も安定したものの 一つです——同じGPUとドライバーが搭載されている限り、ブラウザセッション間・プライベート ウィンドウ間・OS完全再インストール後でも変わりません。そのエントロピーは完全なキャンバス ハッシュよりも低いですが、その安定性により長期的な再識別においてより信頼性が高いです。

実際にWebGLベンダーフィンガープリンティングを使用している事業者

不正検出プラットフォーム

Fingerprint(旧FingerprintJS) などのセキュリティ企業は、WebGLレンダラー文字列をコアのデバイスアイデンティティシグナルと して使用します。そのアカウントの以前のセッションと一致しないGPUフィンガープリントを持つ デバイスからログイン試行が来た場合、リスクエスカレーションがトリガーされます。このシグナルは、 仮想化またはヘッドレス環境で実行されるクレデンシャルスタッフィングボットの検出にも使用されます—— これらのボットは通常、実際のGPU名ではなく汎用的なソフトウェアラスタライザーの値を返します。

アドテックとクロスサイトトラッキング

広告ネットワークはWebGLレンダラー文字列をキャンバス出力・オーディオフィンガープリント・ スクリーン寸法・タイムゾーンと組み合わせて、クッキーの削除をまたいで持続するクロスサイトの デバイス識別子を構築します。主要ブラウザ全体でサードパーティクッキーが廃止されるにつれて、 WebGLベンダーデータはクッキーレスのオーディエンスマッチングとフリークエンシーキャッピングに おいてより重要なインプットとなっています。

ボットと自動化の検出

コンテナ化またはヘッドレスブラウザ環境で実行される自動化ボットは、異常なレンダラー値を 返します——多くの場合 Google SwiftShader(Chromeのソフトウェアフォールバック レンダラー)または Mesa OffScreen です。実際の人間のデバイスは通常のブラウジングで これらの値を返すことはほとんどありません。アンチボットシステムはこれらのレンダラー文字列を 高確信度のボット指標としてフラグし、多くの場合ユーザーはチェックが行われたことに気づきません。

ペイウォールの適用

記事アクセスを制限するパブリッシャーは、クッキーをクリアして記事カウンターをリセットしようと する再来訪者を識別するために、GPUレンダラー文字列をキャンバスとオーディオフィンガープリントと ともに使用します。クッキーとは異なり、レンダラー文字列は削除できません——アクティブな フィンガープリント保護を持つブラウザによってのみ隠すことができます。

WebGLベンダーフィンガープリンティングは合法か?

GDPRの下では、再識別に使用されるGPUレンダラー文字列を含む——合理的に個人に結びつけられる 永続的な識別子は、個人データの処理に当たります。フランスの監督当局CNILは、ブラウザ フィンガープリンティングを十分な情報に基づく同意または狭い正当な利益の免除を必要とする 技術として明示的に挙げています。米国のCCPAとCPRAの下では、フィンガープリンティングデータは オプトアウト権の対象となる個人情報として分類されます。

W3Cフィンガープリンティングガイダンス WEBGL_debug_renderer_info 拡張機能を「高忠実度フィンガープリンティング ベクター」として識別し、ブラウザベンダーはプライバシーに敏感なコンテキストでその 利用可能性を制限することが期待されると指摘しています。すでに数ブラウザがこのガイダンスに 基づいて行動しています——以下の保護セクションをご覧ください。

WebGLベンダーフィンガープリンティングからの保護方法

  • Braveブラウザ(日常使いに推奨): Braveの組み込みファービングシステムは、 セッションごと・サイトごとにWebGLレンダラーとベンダーの文字列をランダム化します。 各サイトは若干異なるGPUの説明を受け取り、レンダラー文字列によるクロスサイトトラッキングを 信頼性の低いものにします。設定は不要です。
  • Firefox の privacy.resistFingerprinting about:config でこのフラグを true に設定すると、Firefoxは 実際のGPUデータではなく汎用の非識別レンダラー文字列を返します。Torブラウザはこれを デフォルトで有効にしています。WebGLを多用するアプリケーション(ゲーム・3D設計ツール)は、 これを有効にすると正常に機能しない場合があります。
  • Firefox の webgl.enable-debug-renderer-info: false about:config のより的を絞ったオプションで、デバッグ拡張機能のみを無効化します—— WebGLの残りの機能は正常に動作し続けます。これにより、WebGLコンテンツとの互換性を保ちながら 直接のベンダー/レンダラークエリをブロックします。
  • WebGL Fingerprint Defender拡張機能: ChromeとFirefoxの両方で利用可能な この拡張機能は WEBGL_debug_renderer_info 拡張機能の呼び出しを傍受し、 ランダム化またはスプーフィングされたレンダラー文字列を返します。ブラウザを切り替えずに フィンガープリント保護が必要なユーザーに有用です。
  • Torブラウザ(最強の保護): TorブラウザはすべてのWebGL出力を正規化し、 すべてのユーザーが同一のレンダラーデータを返すようにして、GPUベースの識別を完全に 排除します。トレードオフはTorネットワークオーバーレイによる速度低下です。
  • WebGLを完全に無効化する: Firefoxで webgl.disabled: true を設定するか、ブラウザ拡張機能を使用してWebGLをブロックすると、すべてのWebGLベースの フィンガープリンティングが防止されますが——オンラインゲーム・地図・データビジュアライゼーションを 含む3Dウェブコンテンツが壊れます。

VPNはWebGLフィンガープリンティングには全く効果がないことに注意してください。GPUレンダラー 文字列はネットワーク接続ではなく、ローカルのブラウザAPIから読み取られます。VPNが実際に IPアドレスを隠しているかどうか(別の問題)は whatsmy.fyiでご確認いただけます。

よくある質問

WebGLベンダーフィンガープリンティングとWebGLレンダラーフィンガープリンティングの違いは何ですか?

これらは同じ技術の2つの側面です。ベンダー文字列(UNMASKED_VENDOR_WEBGL)は GPUメーカーを識別します——通常はNVIDIA・AMD・Intel・Apple、またはGoogle(ANGLE)のような トランスレーションレイヤーです。レンダラー文字列(UNMASKED_RENDERER_WEBGL)は 特定のGPUモデル・グラフィックスバックエンド・多くの場合ドライバーバージョンを識別します。 両方とも同じAPI呼び出しで読み取られます;合わせてWebGLベンダーフィンガープリントを形成します。

プライベートブラウジングモードはWebGLレンダラー文字列を隠しますか?

いいえ。シークレットモードとプライベートモードは、ブラウザが履歴とクッキーを保存することを 防ぎますが、ブラウザが動作するハードウェアは変えません。GPUのレンダラー文字列は プライベートモードでも通常のウィンドウでも同一です。異なる値を返すのは、アクティブな フィンガープリント保護を持つブラウザ——Brave・Torブラウザ・Firefox の privacy.resistFingerprinting——のみです。

GPUを変えずにWebGLレンダラー文字列を変えることはできますか?

確実にはできません。GPUドライバーがOSに報告する文字列を変更することはできず、ブラウザは ドライバーからそれを読み取ります。ブラウザ拡張機能とプライバシー設定はAPIの呼び出しを 傍受してウェブサイトにスプーフィングされた値を返すことができます——しかし高度なフィンガープリンティング システムは、スプーフィングされた値が異常として検出する場合があります(例:既知のGPUに 一致しないレンダラー文字列)。そして、それ自体がフィンガープリンティングシグナルになります—— プライバシーを保護しているデバイスとして識別されます。

WebGLベンダーフィンガープリンティングとキャンバスフィンガープリンティングの違いは何ですか?

キャンバスフィンガープリンティングは間接的にGPUの違いを推論します——画像を描画し、 ハードウェアとソフトウェアスタックによって引き起こされるピクセルレベルのレンダリング差異を 分析します。WebGLベンダーフィンガープリンティングはGPUドライバーに直接クエリし、明示的な メーカーとモデルの文字列を読み取ります。キャンバスフィンガープリンティングはソフトウェアの 違い(フォント・OSのテキストレンダリング)に対してより敏感です;WebGLベンダーフィンガープリンティングは より直接的にハードウェアアイデンティティに結びついています。デバイスの独自性の補完的な次元を 捉えるため、通常は一緒に展開されます。詳細な比較は キャンバスフィンガープリンティングガイド をご覧ください。

VPNはWebGLベンダーフィンガープリンティングから保護しますか?

いいえ。VPNはトラフィックを暗号化してIPアドレスをマスクしますが、ブラウザのグラフィックス APIとは全く関係ありません。GPUレンダラー文字列はネットワークからではなくローカルハードウェアから 読み取られており、VPNはそれを変えることができません。WebGLベンダーフィンガープリンティングは、 VPN・プロキシ・直接接続のいずれで接続していても同一に機能します。

ヘッドレスブラウザはどのようなレンダラー文字列を返しますか?

実際のGPUを持たないヘッドレスブラウザと自動テスト環境は、通常ソフトウェアフォールバック レンダラーを返します:Chromiumでは Google SwiftShader、FirefoxではMesa OffScreen です。実際のユーザーデバイスは通常のブラウジングでこれらの値を 返すことはほとんどありません。アンチボットシステムはこれらを高確信度のボット指標として 扱います。一部の自動化フレームワークは検出を回避するためにレンダラー文字列をスプーフィング しようとしますが、スプーフィングされた値は他のWebGLパラメータとの整合性チェックに 失敗することが多いです。

WebGLベンダーフィンガープリンティングはDrawNApart技術と関連していますか?

関連していますが異なります。DrawNApart(arXiv 2022年)はより高度なGPUフィンガープリンティング 技術で、GPU実行速度のマイクロタイミング変動からデバイスを識別します——特権なしのJavaScriptを 使用して測定可能です。WebGLベンダーフィンガープリンティングは単にドライバー文字列を読み取ります。 DrawNApartは同一のGPUモデルを持つ2台のマシンを区別できます——個々のGPU実行ユニットは速度が わずかに異なるためです;標準的なベンダーフィンガープリンティングはその区別を行えません。 商業的なフィンガープリンティングプラットフォームは両方のアプローチを組み合わせる場合があります。

関連記事

IPアドレス・位置情報・プライバシースコアを今すぐ確認。

ゼロログ・ゼロトラッキング・外部API不使用。

今すぐ確認する →

関連記事

WebGLベンダーフィンガープリントとは — GPUブランドによるブラウザ識別 | whatsmy.fyi