ブラウザフィンガープリントテスト
ブラウザの固有フィンガープリント情報を表示します。
These attributes are read locally to show what your browser reveals. Nothing is sent or stored.
概要
Cookie による追跡は端末に何かを保存する必要があり、だからこそ見ることも、拒否 することも、消すこともできます。フィンガープリントは何も保存しません。サイトは ブラウザが設計上公開している属性を読み、それらを組み合わせ、その組み合わせを 識別子として使います。
このページはその属性のうち 11 個を表示します。どれもごく普通のブラウザ API で 読めるもので、許可を求めるダイアログは出ず、Cookie バナーの対象にもなりません。
使い方
ページを開くと読み込み時に値が入ります。同じ端末の別のブラウザ、あるいは同じ ブラウザの別の端末と比べると、どの部分が端末を識別しどの部分がブラウザを識別 しているかが分かります。
各属性が何を絞り込むか
| 属性 | 絞り込むもの |
|---|---|
User-Agent | ブラウザ・メジャーバージョン・OS の系統。各ブラウザが意図的に情報量を削っている |
Language | 優先言語と地域。一般的でないロケールでは強く識別的 |
Platform | OS の系統。現行ブラウザでは固定化または削除が進行中 |
Timezone | 地域。言語と組み合わせると、しばしば 1 か国に絞られる |
Screen | 解像度とデバイスピクセル比。珍しい解像度は極めて識別的 |
Color depth | ほぼ常に 24-bit。ほとんど情報量を持たない |
CPU cores | ハードウェアの階層。よく使われる値は少数 |
Device memory | ハードウェアの階層。ブラウザ側で粗く丸められている |
Touch points | タッチ端末とデスクトップを区別する |
Cookies enabled | 1 ビット。しかも答えはほぼ常に「はい」 |
Canvas signature | GPU・ドライバ・フォント・ラスタライズ。この中で単独では最も識別的 |
気づくべき傾向があります。素朴に読み取れる属性ほど寄与が小さく、実際に何かを 描画しないと得られない属性の寄与が最も大きい。商用のフィンガープリント事業者が 実際に頼っているのが Canvas・WebGL・音声である理由がこれです。
属性から個人が特定される仕組み
各属性は母集団を分割します。訪問者の半数が Windows なら、プラットフォームが 分かった時点で候補は半分になります。情報量にして 1 ビットです。色深度はほとんど 誰も分割しないので、ほぼ 0 ビットしか運びません。Canvas 署名は母集団を数千の グループに分割し得るので、多くのビットを運びます。
ビットは加算されます。約 33 ビットあれば約 86 億人の中から 1 人を区別でき、 ブラウザは合計で 33 ビットをかなり上回る量を公開しています。フィンガープリントが そもそも成立する理由であり、単一の属性を隠しても効果が小さい理由でもあります。
ここから直観に反する帰結が出ます。ブラウザを珍しい状態にすると、識別は容易に なります。稀な User-Agent、一般的でない解像度、あり得ない組み合わせを報告する 偽装拡張は、いずれもビットを減らすのではなく増やします。目立つより、紛れ込む方が 有効です。
実際に効く対策
効果の順に、正直に並べます。
- Tor Browser — 最も漏れる値を正規化します。ウィンドウサイズは量子化され、 Canvas の読み取りはブロックまたは確認を要し、タイムゾーンは UTC に固定されます。 利用者どうしが意図的に同一になるよう設計されています。
- 保護を有効にした Safari と Firefox — どちらも Canvas と音声の読み取りを ランダム化またはブロックし、Safari は情報量を削った User-Agent を返します。 表面積をなくすわけではありませんが、価値の高いビットを取り除きます。
- それ以外はあまり効きません。 Cookie のブロック、プライベートブラウジング、 履歴の消去はいずれもストレージを対象にしていて、ここに挙げた値は保存されません。
偽装拡張は、しばしば逆効果になるので個別に触れておく価値があります。Canvas の 出力が macOS に見える端末から Windows の User-Agent を報告すれば、その矛盾自体が 特徴的な目印になります。
使用例
- Cookie バナーが話の全部ではないと納得してもらう — Cookie をブロックした 状態でこのページを見せます。
- 一部の利用者だけで起きる不具合を理解する —
Screen・Language・Timezoneは、「自分の端末だけで起きる」種類のレイアウト崩れや日付書式の報告の背後にある 変数です。 - 自分のプライバシー設定が実際に何を変えているか確認する — 拡張機能と設定の 有無で値を比べ、動かない項目がどれだけ多いかを見ます。
- BAN が追いかけてきた理由を説明する — IP が変わりプロファイルを消した後でも サイトが再訪問者を認識できるのは、フィンガープリントによってです。
注意事項
ブラウザが値を出さない項目は、推測せず — と表示します。deviceMemory は
Firefox と Safari では設計上取得できず、platform は各ブラウザで固定化または
削除が進行中です。ここでのダッシュは失敗ではなく、ブラウザが守ってくれている印です。
Canvas 署名は、符号化された画像データの末尾 16 文字であって、暗号ハッシュでは ありません。同じ端末では安定し、端末をまたぐと変わります。正規の識別子ではなく 手法の例示として表示しています。Canvas の読み取りをランダム化するブラウザでは 訪問ごとに違う値が出ますが、それはまさに防御が働いている状態です。
ここに挙げた属性のうち、Canvas signature だけは読み取り方が違います。実際に
描画する必要があるため、Canvas をブロックまたはランダム化するブラウザでは値が
変わります。それ以外はプロパティを読むだけで、正当な用途を壊さずに割り込むことが
できません。ブラウザ側の防御が画面サイズを隠そうとするのではなく Canvas・音声・
WebGL を対象にしているのは、この非対称性のためです。
これらの属性の読み取りは、正当な目的にとっても避けられません。レスポンシブな 描画には画面サイズが必要で、日付の整形にはタイムゾーンが必要です。問題は API が 存在することではなく、識別のために読むことと描画のために読むことを区別できない ことにあります。
同じ問いのネットワーク側については IP アドレス確認 を参照して ください。アドレスとフィンガープリントは補完的で、両方を持つサイトはどちらか一方が 安定していることを必要としません。日付整形の裏側にある Unix 時刻そのものを扱う 場合は Unix タイムスタンプ変換 が使えます。