ブラウザフィンガープリンティング:サイトが実際に読み取っているもの

CanvasやWebGLからオーディオ、フォント、画面、タイムゾーンまで、ウェブサイトが収集する値を項目ごとに見ていき、なぜランダム化よりも一貫したIDのほうが優れているのかを解説します。
ブラウザフィンガープリンティングとは、ブラウザが保存しているものではなく、報告する値によってブラウザを識別する手法です。Cookieは必要ありません。ブラウザは、どのウェブページにも許されている質問に答えるだけで、その答えを合わせると、再び見分けられるほど特徴的になります。
収集される値
ほとんどのフィンガープリント用スクリプトは、同じいくつかの面から値を読み取ります。
分かりやすいもの
- User-Agentにはブラウザ名、バージョン、プラットフォームが含まれ、すべてのリクエストとともに送信されます。
- 画面は、幅、高さ、色深度、ピクセル比、利用可能な作業領域を報告します。
- 言語とタイムゾーンは、ブラウザが報告するロケールと、算出するオフセットにあたります。
- ハードウェアのヒントは、報告されるプロセッサ数と、一部のブラウザでは概算のメモリ容量を与えます。
レンダリングに関するもの
人々がフィンガープリンティングと言うときに指すのは、これらの値です。間接的だからです。ページはブラウザに何かを描画させ、実際に描画された内容をそのまま読み戻します。
- Canvasでは、オフスクリーンのキャンバスにテキストと図形を描画してハッシュ化します。結果はグラフィックススタック、フォント、アンチエイリアスによって変わります。
- WebGLは、グラフィックスアダプタのベンダーとレンダラーの文字列に加えて、描画したシーンのハッシュを公開します。
- オーディオでは、オシレーターをオーディオ処理グラフに通し、出力をハッシュ化します。浮動小数点の挙動は、スタックごとにわずかに異なります。
- フォント検出では、候補のフォントでテキストを計測し、どの測定値が異なるかから、インストールされているフォントを推測します。
ネットワークに関するもの
- リクエストが届くアドレスと、ジオロケーションデータベースがそれについて示す内容。
- WebRTC。接続が本来は公開しないはずのアドレスを明らかにすることがあります。
- TLSおよびHTTPのハンドシェイクのフィールドの順序と内容。クライアントによって異なります。
すべての項目をランダム化するのが間違った発想である理由
直感的な防御策は、訪問のたびにすべてを変えることです。しかしこれは、2つの理由で裏目に出ます。
1つ目は矛盾です。ランダム化されたフィールドは互いのことを知りません。Windowsを名乗るUser-Agentの隣に、Apple製ハードウェアにしか搭載されないWebGLレンダラーの文字列があれば、どちらか一方の値だけの場合よりも強いシグナルになります。本物のマシンは内部で矛盾がなく、自分自身と食い違うのは合成されたマシンだけです。
2つ目は不安定さです。訪問のたびに異なるデバイスを報告するアカウントは、現実の誰も所有していないものを説明しています。時間を通じた一貫性こそが、普通のユーザーの姿です。
プロファイルのIDがカバーする範囲
| 項目 | 扱い方 |
|---|---|
| User-Agentとプラットフォーム | まとめて生成されるため、名乗るプラットフォームが周囲の値と一致する |
| 画面とピクセル比 | プロファイルごとに固定され、実在のディスプレイが報告するサイズから選ばれる |
| タイムゾーンとロケール | プロファイルごとに設定され、使用するネットワーク経路と照合される |
| Canvas、WebGL、オーディオ | プロファイルごとに安定した処理が施され、開くたびに同一になる |
| フォント | プロファイルが名乗るプラットフォームと整合する、プロファイルごとのセット |
| WebRTC | プロファイルのネットワーク経路と矛盾しないように制約される |
自分の設定を確認する
プロファイルを開き、フィンガープリントのテストページにアクセスします。読み取った値を公開しているページがいくつかあり、無料で使えます。確認する価値のある2点は、思いつくものとは違うかもしれません。
- 値同士が一致しているか?プラットフォーム、フォント、グラフィックスの文字列、タイムゾーンが、もっともらしい1台のマシンを表しているべきです。
- 前回と同じか?プロファイルを閉じて再び開き、テストをやり直します。開くたびに値が動くプロファイルは安定しておらず、重要なのは安定性という性質です。
テストページの希少性スコアは、最も役に立たない数値です。それは、そのページの訪問者と比べた結果であり、訪問者の大多数はアンチディテクトブラウザをテストしている人たちだからです。


