WebGLフィンガープリンティングは、ブラウザの3DグラフィックスAPIを使用してGPUベンダー、 モデル、ドライバーレベルのレンダリング出力を読み取り、同じマシン上のすべてのブラウザに わたって持続し、Cookieのクリアやネットワークの切り替えには完全に影響を受けないデバイス 識別子を生成します。ブラウザが何を公開しているかは、今すぐ whatsmy.fyiで確認できます。
TL;DR
WebGLフィンガープリンティングは、ブラウザベースのゲームや3Dマップをレンダリングするのと 同じWebGL APIを悪用して、GPUベンダー文字列、GPU モデル名、ピクセルレベルのレンダリング 出力を抽出します。浮動小数点の丸め、ドライバーの動作、ハードウェアアーキテクチャの違いにより、 各GPUモデルは同一のレンダリングコマンドに対してわずかに異なる結果を生成します。他のシグナルと 組み合わせると、WebGLデータはデスクトップブラウザの99.24%を一意に識別できます。デバイスへの 保存はなく、削除できるものはなく、VPNでも止められません。
WebGLフィンガープリンティングとは何か
WebGLフィンガープリンティングは、 WebGL API を悪用するブラウザ追跡技術です。WebGL APIはハードウェアアクセラレーションされた 2Dおよび3Dグラフィックスをレンダリングするためのこのインターフェイスで、デバイス固有の GPU特性を読み取るために使用されます。Cookie追跡とは異なり、保存を必要とせず、 プライベートブラウジングモードやブラウザデータのクリアには影響を受けません。
この技術には2つの補完的なコンポーネントがあります。最初のコンポーネントはブラウザAPIから 静的なハードウェアメタデータを直接読み取ります。GPUベンダー名、GPUモデル、ドライバーが サポートするWebGL拡張機能の完全なリストです。2番目のコンポーネントは非表示の3Dシーンを レンダリングしてピクセルデータを読み取ります。このプロセスはすべてのハードウェアと ドライバーの組み合わせで微妙に異なる結果を生成します。
WebGLフィンガープリンティングは キャンバスフィンガープリンティングと密接に関連していますが、システムのより異なる、そしてより識別力の高いレイヤーをターゲットに しています。キャンバスフィンガープリンティングは2Dフォントレンダリングの差異を捉えますが、 WebGLフィンガープリンティングはGPUハードウェアに直接アクセスします。両者はフィンガープリンティング ツールキットで最も高エントロピーのシグナルの二つです。
WebGLフィンガープリンティングの仕組み
WebGLフィンガープリントは3つのステージで組み立てられ、それぞれ数ミリ秒で完了し、 ユーザーには完全に見えません。
ステージ1 — ハードウェアパラメータの読み取り
スクリプトがgl.getParameter()を数十の定数で呼び出してハードウェア機能を 抽出します。ほとんどの値は単独では無害です。最大テクスチャサイズ、最大ビューポート寸法、 サポートされるGLSLシェーダー精度などです。しかし一つのWebGL拡張機能がすべてを変えます。
WEBGL_debug_renderer_info 拡張機能はデバッグ用に設計された2つの定数を公開しています。UNMASKED_VENDOR_WEBGLとUNMASKED_RENDERER_WEBGLです。 クエリすると、正確なマスクなしのGPUベンダー文字列(例:"NVIDIA Corporation")と 完全なGPUレンダラー文字列(例:"NVIDIA GeForce RTX 4080/PCIe/SSE2")が 返されます。これらの文字列だけで、InriaとKU Leuvenの研究によると、訪問者の母集団を 100人未満に絞り込むことができます。
ステージ2 — 3Dシーンのレンダリング
スクリプトが非表示のWebGLキャンバスを作成し、グラデーション、照明計算、特定のテクスチャ 座標を持つ透明なジオメトリなどの複雑なシーンをレンダリングします。浮動小数点演算は各GPU のシェーダーユニットによって異なる処理がされるため(NVIDIA、AMD、Intel、Apple Siliconは それぞれわずかに異なる丸め動作を実装しています)、同一のGLSLシェーダーコードでも、 ハードウェアをまたいでバイナリレベルで異なるピクセルが生成されます。
ステージ3 — readPixels()によるピクセルハッシュ
スクリプトがgl.readPixels()を呼び出して、レンダリングされたシーンから 生のRGBAピクセルバッファを抽出し、通常はMurmurHashでハッシュ化してコンパクトな フィンガープリント値を生成します。このハッシュはブラウザセッション、シークレットモード、 再起動をまたいで安定しています。GPUドライバーが更新されるか物理的なハードウェアが 交換された場合にのみ変化します。
// Stage 1 — read unmasked GPU strings via the debug extension
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const ext = gl.getExtension('WEBGL_debug_renderer_info');
if (ext) {
const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
// e.g. "NVIDIA Corporation", "NVIDIA GeForce RTX 4080/PCIe/SSE2"
}
// Stage 2 — collect hardware capability parameters
const params = {
maxTextureSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),
maxViewportDims: gl.getParameter(gl.MAX_VIEWPORT_DIMS),
supportedExts: gl.getSupportedExtensions(),
highFloatPrecision: gl.getShaderPrecisionFormat(
gl.FRAGMENT_SHADER, gl.HIGH_FLOAT
).precision,
};
// Stage 3 — render a scene and extract pixels
// (abbreviated; real scripts render complex GLSL shaders)
const pixels = new Uint8Array(4 * canvas.width * canvas.height);
gl.readPixels(
0, 0, canvas.width, canvas.height,
gl.RGBA, gl.UNSIGNED_BYTE, pixels
);
// Hash 'pixels' → stable GPU fingerprintWebGLフィンガープリントはどれほど固有か
WebGLはブラウザフィンガープリンティングにおける個別シグナルの中で最も高エントロピーの 一つです。GPUパラメータレイヤーだけで10〜15ビットのエントロピーが得られます。これは 小さなコホート内でハードウェアのメーカーとモデルを識別するのに十分です。レンダリング ハッシュは同一のGPUモデルを持つが異なるドライバーバージョンを持つデバイス間でさらに 識別力を高めます。
| 調査結果 | 値 | 出典 |
|---|---|---|
| GPUベンダー+レンダラー文字列からのエントロピー | 10〜15ビット | Cao et al., NDSS 2017 |
| WebGLレンダリング出力単体からのエントロピー | 約5.7ビット | Fingerprint.com研究 |
| 一意に識別されるデスクトップユーザー(複合シグナル) | 99.24% | Fingerprint.com研究 |
| 一意に識別されるモバイルユーザー(複合シグナル) | 94.5% | Fingerprint.com研究 |
| GPUレンダラー文字列単体で絞り込まれる母集団 | 訪問者の0.01%未満 | Inria / KU Leuven研究 |
| WebGL 2.0のブラウザサポート(Chrome、Edge、Safari) | 95〜99% | BrowserLeaks WebGLテスト |
WebGL 2.0はMAX_3D_TEXTURE_SIZE、MAX_ARRAY_TEXTURE_LAYERS、 トランスフォームフィードバック定数などのパラメータを追加することで、WebGL 1.0を超えて フィンガープリンティングの範囲を拡大します。追加のパラメータごとにハードウェア設定を さらに差別化します。WebGL 2.0のブラウザサポートが95〜99%に達したことで、 フィンガープリンティングスクリプトは通常、両バージョンを一度に収集します。
実世界でのWebGLフィンガープリンティングの利用者
広告ネットワーク
広告テック企業は行動ターゲティングとフリークエンシーキャッピングのために、ウェブサイト 間でユーザーを追跡するためにWebGLフィンガープリンティングを使用しています。SafariがDefault でサードパーティCookieをブロックし、ChromeがCookie廃止に移行するにつれて、ハードウェア レベルのフィンガープリンティングは保存もユーザーインタラクションも不要なため、 魅力的なCookieの代替手段となりました。
不正検出とボット対策
セキュリティプラットフォームはWebGLデータをボット検出シグナルとして使用しています。 ヘッドレスChromeやPuppeteerで動作する自動化されたブラウザは、多くの場合、クレームされた ユーザーエージェントと一致しないGPUレンダラー文字列を報告します。例えば、ソフトウェアの みのMesaレンダラー文字列と組み合わされた「Windows上のChrome」のユーザーエージェントです。 GPUハードウェアの主張と利用可能なWebGL拡張機能間の不一致は、自動化またはVM環境の強力な 指標です。 Fingerprint.com やCastle.ioなどの企業はWebGLフィンガープリンティングをデバイスインテリジェンス スタックの一部として展開しています。
クロスブラウザ追跡
WebGLレンダラー文字列とピクセルハッシュは物理的なハードウェアから派生しているため、 ブラウザの状態ではなく、同じマシンにインストールされた異なるブラウザ間で一貫しています。 追跡を回避するためにChrome、Firefox、Edgeを交互に使用するユーザーでも、各ブラウザで 同じGPUレンダラー文字列が生成されます。Cookieベースのシステムでは不可能なクロス ブラウザのリンケージが実現されます。
WebGLフィンガープリンティングから身を守る方法
効果的な保護には、WebGL APIをブロックするか、その出力をランダム化するか、または大きな ユーザー母集団全体で正規化する必要があります。最も強力なものから日常使用に最も実用的な ものの順に並べています。
- Torブラウザ(最強の保護):Torブラウザは
gl.readPixels()関数を完全に無効にし、webgl.min_capability_modeを通じてWebGLを最小限の 機能モードに制限し、レンダリングベースのフィンガープリンティングを不可能にします。WEBGL_debug_renderer_info拡張機能はブロックされるため、マスクなしの GPU文字列を読み取ることができません。トレードオフはTorネットワークによる閲覧速度の 低下です。 - Braveブラウザ(日常使用に推奨):Braveはキャンバスとウェブの ピクセル出力に Farbling 技術を適用します。セッションごと、サイトごとのノイズがキャンバスとWebGLピクセル出力に 注入され、サイト訪問ごとにレンダリングハッシュが異なります。WebGL APIもデフォルトで サードパーティのコンテキストからブロックされます。GPUレンダラー文字列は依然として 読み取れますが、レンダリングハッシュは安定した識別子としては信頼できなくなります。
- Firefoxと
privacy.resistFingerprinting:このフラグをabout:configでtrueに設定すると、WEBGL_debug_renderer_info拡張機能が完全に無効になり、実際のGPU文字列の代わりに汎用的な値が返されます。 WebGLレンダリング出力も正規化されます。これは速度ペナルティなしに主要なブラウザで 利用できる最もTorレベルに近い保護です。 - AppleデバイスのSafari:Safariは特定のチップモデル(M1、M2、M3)の 代わりに汎用の
"Apple GPU"文字列を報告し、キャンバス出力をランダム化します。 これによりスクリプトからハードウェアの世代が隠されますが、レンダリングベースの ピクセルハッシュからは保護されません。 - uBlock Origin(上級ユーザー向け):uBlock Originをmediumまたは hardモードで使用すると、ほとんどのサードパーティフィンガープリンティングスクリプトが 実行される前にブロックされます。ファーストパーティフィンガープリンティングからは 保護されませんが、広告テック追跡ユースケースの大多数を排除します。
- VPNにできないこと:VPNはトラフィックを暗号化されたトンネルで ルーティングしてIPアドレスを隠しますが、WebGL出力には影響しません。GPUベンダー文字列、 レンダラー文字列、ピクセルハッシュはブラウザ内で生成され、ネットワークメタデータとして ではなくJavaScriptデータとして追跡サーバーに送信されます。VPNが機能しているかどうか (IPレベル)は whatsmy.fyiで確認できますが、フィンガープリンティングには対処していないことを理解してください。
よくある質問
WebGLフィンガープリンティングは実際に私のハードウェアについて何を明かしますか?
最低でも、GPUメーカー(NVIDIA、AMD、Intel、Apple、Qualcomm)、GPUモデル名、場合によっては ドライバーバージョンがWEBGL_debug_renderer_info拡張機能を通じてプレーン テキストで公開されます。さらに、レンダリングハッシュはハードウェアの世代とドライバー バージョンの組み合わせに固有のGPUの浮動小数点動作をエンコードします。これらのシグナルを 合わせると、典型的なウェブサイト訪問者の0.01%未満の母集団に絞り込むことができます。
WebGLフィンガープリンティングはシークレット/プライベートモードでも機能しますか?
はい。プライベートブラウジングはブラウザがCookie、履歴、フォームデータをディスクに 保存するのを防ぎますが、GPUハードウェアやドライバーを変更しません。WEBGL_debug_renderer_info拡張機能はシークレットウィンドウでも通常の ウィンドウと同じ文字列を返します。Braveやprivacy.resistFingerprintingを 有効にしたFirefox、Torブラウザなどのアクティブなフィンガープリント保護を持つブラウザ のみが異なる動作をします。
WebGLフィンガープリンティングはキャンバスフィンガープリンティングより強力ですか?
それぞれはデバイス固有性の補完的な次元をターゲットにしています。キャンバスフィンガープリン ティングはOSのテキストエンジン(ClearType、Core Text、FreeType)間の2Dフォントレンダリングの 違いを捉えます。WebGLフィンガープリンティングはGPUベンダーとモデルのメタデータを直接公開し、 3Dシェーダーレベルの浮動小数点の違いを捉えます。GPUハードウェアはフォントレンダリング スタックよりも多様性が高いため、WebGLは通常シグナルごとにより高いエントロピーをもたらします。 ほとんどの商業的なフィンガープリンティングプラットフォームは両者を同時に展開しています。 詳細な比較については キャンバスフィンガープリンティングガイド をご覧ください。
WebGLフィンガープリンティングは同じコンピュータ上の異なるブラウザをまたいで追跡できますか?
はい。これはその最も重要な機能の一つです。GPUベンダーとレンダラー文字列はハードウェアから 派生しているため、同じマシンでChrome、Firefox、Edge、またはその他のブラウザを使用しても 同一です。NDSS 2017で発表された研究は、GPUレベルのWebGL機能を使用したクロスブラウザ フィンガープリンティングを特に実証し、共有されたCookieやストレージなしにブラウザを またいでブラウジングセッションをリンクしました。
WEBGL_debug_renderer_info拡張機能は常に機能しますか?
すべてのブラウザで機能するわけではありません。privacy.resistFingerprintingを 有効にしたFirefoxは汎用のプレースホルダー文字列を返します。Torブラウザは拡張機能を 完全にブロックします。一部のハード化された設定では、拡張機能がnullを返します。ただし、 プライバシーフラグなしのデフォルトのChrome、Edge、標準のFirefoxでは完全なマスクなしの GPU文字列が返されます。ほとんどのユーザーはデフォルト設定でブラウザを実行しているため、 これは広く有効な追跡ベクターとなっています。
ハードウェアアクセラレーションを無効にするとWebGLフィンガープリンティングは止まりますか?
部分的に止まります。ブラウザ設定でハードウェアアクセラレーションを無効にすると、WebGLが 物理GPUの代わりにソフトウェアレンダラー(通常はMesaのLLVMpipeまたはSwiftShader)を 使用するように強制されます。これによりGPU固有のレンダラー文字列が削除され、レンダリング 出力がより均一になります。ただし、スクリプトがソフトウェアレンダラー文字列やハードウェア 機能パラメータを引き続き読み取れるため、保護が保証されるわけではありません。また、 メディアが多いウェブサイトでグラフィックスパフォーマンスが大幅に低下します。
WebGLフィンガープリンティングの阻止に関する学術研究はありますか?
はい。USENIX Security 2019で発表されたWu、Li、Cao、Wangによる論文「Rendered Private: Making GLSL Execution Uniform to Prevent WebGL-based Browser Fingerprinting」は、 視覚的な忠実度を維持しながら異なるGPUハードウェアにわたってレンダリング出力を均一にするために GLSLシェーダープログラムを書き直すUNIGLシステムを提案しました。このアプローチはWebGLを 完全にブロックすることなくレンダリングベースのピクセルハッシュを防ぎ、Torブラウザが 使用する「すべてをブロック」するアプローチよりも微妙な代替手段を提供します。
関連記事
- ブラウザフィンガープリンティングとは?Cookieなしでサイトがあなたを追跡する方法 — すべてのフィンガープリンティングシグナルを組み合わせた完全ガイド
- キャンバスフィンガープリンティングとは?ウェブサイトがCookieなしであなたを追跡する方法 — 2D Canvas APIがフォントレンダリングとGPUの違いを捉える仕組み
- オーディオフィンガープリンティングとは?AudioContextがブラウザを追跡する方法 — デバイスのオーディオスタックが固有識別子を生成する仕組み
- WebRTCリークとは?本当のIPが公開される方法 — VPNを通してでも本当のIPを公開する関連する追跡リスク



