ブラウザ言語フィンガープリンティングは、navigator.languages — 優先言語の完全な順序付きリストを公開するJavaScriptプロパティ — を読み取ることで、 デバイス上に何も保存することなく、ブラウザの持続的な識別子を構築するトラッキング技術です。 ブラウザ言語設定と追跡リスクの観点から重要なのは、言語設定を変更してもフィンガープリンティングを 防ぐことはできないという点です。また、日本語の Accept-Language ヘッダー (Accept-Language: ja-JP,ja;q=0.9)自体がフィンガープリンティングの シグナルになります。ブラウザが何を公開しているかを今すぐ whatsmy.fyiで確認できます。
要約(TL;DR)
すべてのブラウザはnavigator.languagesを通じてランク付けされた言語設定の リストを公開しています。トラッカーはこの配列をタイムゾーン、IPジオロケーション、 画面サイズと並んで読み取ることで、ブラウザフィンガープリントを検証または精緻化します。 単独では低エントロピーのシグナルですが、他の多くのシグナルと組み合わせると、 クッキーをクリアした後でも、サイトやセッションをまたいで同一人物であることを 確認する信頼できる一貫性チェックとなります。
ブラウザ言語フィンガープリンティングとは何か
ブラウザ言語フィンガープリンティングは、 ブラウザフィンガープリンティングツールキットの一構成要素です。2つの密接に関連するブラウザAPIを悪用します。navigator.languages(言語コードの順序付き配列)とnavigator.language(最優先の1つの言語設定)。 どちらも、ゼロのユーザー操作やパーミッション要求なしに、ページ上で動作するあらゆる JavaScriptが利用できます。
言語データがトラッカーにとって有用なのは、単独では高い一意性を持つからではありません — ほとんどの英語話者は["en-US", "en"]を報告します。 むしろ2つの機能を果たします。組み合わせが珍しい場合にフィンガープリントのエントロピーを 追加し、Accept-Language HTTPヘッダー、IPジオロケーション、 システムのタイムゾーンとクロスチェックする一貫性シグナルとして機能します。 これらの層間の不一致は、それ自体がトラッキングシグナルです — VPNユーザー、 ブラウザエミュレーター、プライバシーツールを特定します。
EFFのCover Your Tracksツールは、ブラウザフィンガープリントで測定する30以上のシグナルの1つとして 言語の公開をテストし、すべてのメインストリームブラウザで読み取り可能であることを 一貫して確認しています。
navigator.languagesの動作
navigator.languagesは最優先から最低優先の順に並んだ BCP 47言語タグの読み取り専用配列を返します。各タグはlanguage-REGIONの形式に従います — たとえばja-JP、en-US、zh-CNなど。 最初の要素は常にnavigator.languageの値と等しくなります。
この配列はブラウザの言語設定から生成され、通常はOSの設定言語リストを反映します。 ChromeとFirefoxでは、ユーザーはブラウザ設定で複数の言語を設定でき、その順序はnavigator.languagesに正確に反映されます。同じリストは各ページ読み込みのAccept-Language HTTPリクエストヘッダーとして送信されます。
// 言語設定の読み取り — あらゆるサイトのスクリプトが利用可能
console.log(navigator.language);
// → "ja-JP"
console.log(navigator.languages);
// → ["ja-JP", "ja", "en-US", "en"]
// 各言語設定は優先順に表示されます。
// 英語とその他の言語を追加したバイリンガルユーザーは
// 単一言語の英語話者よりも識別しやすくなります。
// ブラウザはすべてのHTTPリクエストで同じ設定を送信します:
// Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7
// フィンガープリンティングスクリプトはこれを他のシグナルと組み合わせます:
function getLanguageFingerprint() {
return {
language: navigator.language,
languages: navigator.languages,
// クロスチェック: 言語はユーザーのタイムゾーンと一致するか?
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
// クロスチェック: 言語はシステムロケールと一致するか?
locale: Intl.DateTimeFormat().resolvedOptions().locale,
};
}
// バイリンガルユーザーの出力: 高エントロピー
// 典型的なja-JPのみのユーザーの出力: 中程度のエントロピー、
// しかし一貫性検証に有用navigator.languageとnavigator.languagesの違い
2つのプロパティは関連していますが同一ではなく、トラッカーは両方を読み取ります。
| プロパティ | 戻り値の型 | 値の例 | フィンガープリンティングにおける役割 |
|---|---|---|---|
navigator.language | 文字列 | "ja-JP" | 低エントロピー。特定の地域のほとんどのユーザーと一致する |
navigator.languages | 文字列の配列 | ["ja-JP", "en-US", "ko"] | より高いエントロピー。珍しい組み合わせが目立つ |
Accept-Languageヘッダー | HTTPヘッダー文字列 | ja-JP,ja;q=0.9,en-US;q=0.8 | すべてのリクエストで送信。サーバーサイドのフィンガープリンティングベクター |
Intl APIからのロケール | 文字列 | "ja-JP" | 言語配列との一貫性クロスチェック |
言語フィンガープリントの一意性
言語設定単独では、フィンガープリンティングツールキットの中で最もエントロピーの低い シグナルの1つです。その力は組み合わせと一貫性チェックから生まれます。以下の表は、 より高エントロピーのシグナルと比較してその寄与を示しています。
| シグナル | おおよそのエントロピー | 出典 |
|---|---|---|
| ユーザーエージェント文字列 | 10〜15ビット | EFF Cover Your Tracks |
| キャンバスレンダリング | 8〜12ビット | EFF / BrowserLeaks 研究 |
| WebGLレンダラー | 6〜10ビット | フィンガープリンティング学術研究 |
| システムタイムゾーン | 3〜4ビット | EFF Panopticlick、2010年 |
| 言語配列(単一言語) | 1ビット未満 | EFF / 404privacy.com 分析 |
| 言語配列(多言語、珍しい組み合わせ) | 3〜6ビット | フィールド学術研究 |
| 完全フィンガープリント(30以上のシグナルの組み合わせ) | 18ビット以上(287,000人に1人) | EFF Panopticlick オリジナル研究 |
50万以上のブラウザフィンガープリントを分析したEFFの2010年Panopticlick研究では、 ブラウザの84%が完全に固有であることが分かりました。言語設定は測定されたシグナルの 1つであり、非英語または多言語設定のブラウザではその寄与が大幅に増加しました。 特に、この研究では言語フィンガープリンティングが不均一な影響を持つという証拠が 見つかりました。少数言語の話者は英語のみのユーザーよりも高い一意性率を持ち、 したがってより大きなトラッキングリスクにさらされています。
現実世界での言語フィンガープリンティングの利用者
広告ネットワークとクロスサイトトラッカー
アドテクプラットフォームはデバイス識別子を構築する際に、navigator.languagesを 他の多くのシグナルとバンドルします。言語データは一貫性シグナルとして特に価値があります — ユーザーのIPジオロケーションが日本を示しているが言語配列が["en-US", "en"]の場合、その不一致はVPNまたはプロキシの使用を示唆し、広告ターゲティングの意思決定に 影響します。サードパーティクッキーがブラウザ全体で廃止されるにつれ、フィンガープリンティング ベースの識別子が同じターゲティング機能を果たすために成長しています。
不正検出とボット検出プラットフォーム
Fingerprint.comなどのサービスは、デバイスインテリジェンスプロファイルの一部として、 Smart Signalsシステムに言語設定を含めています。あるデバイスからのログイン試行が、 そのアカウントで記録されているものと異なる言語配列を持つ場合、リスクシグナルが 発生します。ブラウザ自動化ツールやヘッドレスブラウザはしばしば珍しいまたは デフォルトの言語値を報告します — 不正システムがボットアクティビティをフラグするために 使用します。
ペイウォールと地域アクセス制限の執行
メディアサイトやストリーミングサービスは、IPリージョンとnavigator.languagesを 組み合わせて、地理的制限を回避するユーザーを検出します。日本のIPからのアクセスで ブラウザが["en-US", "en"]を報告するユーザーや、米国のIPを 使いながら["ja", "ja-JP"]を報告するユーザーは、 地理制限の執行をトリガーする不一致として検出されます。
言語フィンガープリンティングは合法か
GDPRの下では、言語設定データは個人に合理的に関連付けられる可能性がある場合、 ブラウザフィンガープリントとして個人データとみなされます。フランスのデータ保護当局 (CNIL)は、広告目的のブラウザフィンガープリンティングに対してインフォームドコンセントを 明示的に義務付けており、不正防止とセキュリティのための正当な利益の例外は狭く定義されています。 米国のCCPAおよびCPRAの下では、言語ベースの識別子を含むフィンガープリンティングデータは、 オプトアウト権の対象となる個人情報として扱われます。
日本では、個人情報保護法(APPI)の下で、言語設定データが他の情報と 組み合わせて個人を特定できる場合は個人情報として保護対象となります。単独の言語設定は 直接的に個人を特定しませんが、フィンガープリントの一部として組み合わされた場合には 保護の対象になる可能性があります。規制の執行は各法域で一貫していませんが、 フィンガープリンティングベースのトラッキングへの規制圧力は高まっています。
W3C Fingerprinting Guidanceはnavigator.languagesをフィンガープリンティングの対象面として 具体的に識別し、ブラウザベンダーにその公開を制限するよう勧告しています。 このガイダンスはSafari、Brave、FirefoxのプライバシーモードのAPIの動作に 影響を与えています。
言語フィンガープリンティングから身を守る方法
言語フィンガープリンティングへの保護は、キャンバスやWebGLなどの高エントロピーシグナルへの 保護よりも達成しやすいです — データが標準化しやすいためです。これらのオプションは 最強から最も実用的なものの順に列挙します。
- Braveブラウザ(日常使用に推奨):BraveのShieldsはデフォルトで言語フィンガープリンティング保護を実装しています。 標準モードでは、Braveはフル配列の代わりに最優先の言語設定のみを報告します。 ストリクトモードでは、実際の設定に関わらず常に
"en-US"を報告し、 可能な限り最大の匿名性セットに属します。この保護は Accept-Languageヘッダーにも及び、HTTPレイヤーとJavaScriptレイヤーが一貫して報告されることを保証します。 - Firefoxの
privacy.resistFingerprinting:about:configでこのフラグを有効にすると、Firefoxは設定された言語に 関わらず["en-US", "en"]のみを報告し、Torブラウザの ベースラインに一致して匿名性セットを最大化します。 - Torブラウザ(最強の保護):TorブラウザはすべてのTorユーザーで同一の均一な言語設定を報告し、Torネットワーク内での 個別の言語トラッキングを不可能にします。トレードオフは遅いブラウジングとサイトの 互換性の問題です。
- Safari(内蔵の部分的保護):iOS およびmacOS上のSafariはフル配列ではなく最優先の言語設定のみを報告し、 言語報告と並んでどのフォントが公開されるかを制限します。完全な保護ではありませんが、 トラッカーが利用できるシグナルを意味のある形で削減します。
- 言語リストを削減する:コンテンツの設定のためだけに複数の言語をブラウザに追加している場合、 あまり使わないものを削除することを検討してください。
["ja-JP", "en-US", "ko", "zh"]のような 珍しい組み合わせは["ja-JP", "ja"]よりも はるかに目立ちます。これは言語エントロピーを意味のある形で削減する 低摩擦な変更です。 - VPNを使用する — ただしその限界を理解して:VPNはIPジオロケーションを変更しますが、これは
navigator.languagesが 報告する内容には影響しません。VPNはフィンガープリントの一貫性を悪化させる可能性があります。 日本のIPアドレスでブラウザが["ja-JP", "ja"]を報告するのは トラッカーにとって予想内ですが、VPNで米国のIPを使用しながら同じ日本語設定を 持つことは、かえって識別しやすくなる不一致シグナルです。 VPNと言語シグナルの一貫性を whatsmy.fyiで確認してください。
よくある質問
ブラウザ言語を変更するとフィンガープリントは変わりますか?
変わりますが、必ずしも保護になるとは限りません。日本にいてIPジオロケーションが 日本を示している場合、["en-US"]に変更することは、 言語/IP不一致シグナルを作成するため、かえってあなたをより識別しやすくする可能性があります。 フィンガープリントは組み合わせであり、単一の値ではありません。考慮すべきことは、 日本のIPを持つブラウザが["ja-JP", "ja"]を報告するのは トラッカーにとって予想内です — これはあなたを大きな匿名性セットに置きます。 日本にいながら["en-US"]を設定することは、日本在住の英語優先ユーザーの ニッチなカテゴリを作り出します。
英語の言語設定を使用すると匿名になりますか?
いいえ、特に日本のIPを持っている場合。日本のIPジオロケーションと英語の言語設定の 組み合わせは、それ自体が識別可能なシグナルです — 海外在住の日本人、VPNユーザー、 またはプライバシー意識が高いユーザーの可能性があります。["ja-JP", "ja"]と日本のIPの方が、実際には はるかに大きな匿名性セットを持ちます。真の匿名性はフィンガープリント全体を 標準化することから来ます — 単一のシグナルを変えることからではありません。
Accept-Language HTTPヘッダーはnavigator.languagesと同じですか?
同じソースデータを共有しています。Accept-Languageヘッダーは言語設定から 構築され、JavaScriptが実行される前のすべてのHTTPリクエストで送信されます — つまり、 サーバーサイドのフィンガープリンティングシステムはスクリプトを実行することなく それを読み取ることができます。navigator.languagesはJavaScriptを介して 同じ設定を公開します。トラッカーはスプーフィングを示す可能性のある不一致を検出するために 両方をクロスチェックします。BraveのフィンガープリンティングシールドはHTTPヘッダーと JavaScript APIの両方をカバーし、それらが一貫して報告されることを保証します。
Accept-Languageのq=値は何を意味しますか?
q=値は品質係数と呼ばれ、0から1の範囲で言語設定の相対的な優先度を 示します。q=1.0(または省略)は最優先を意味し、q=0.9は わずかに低い優先度を意味します。たとえば、Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7は 「ja-JPを最優先とし、次にja、次にen-US、次にen」を意味します。 トラッカーは言語の優先順位も収集し、単なるリストの存在だけでなく、 より詳細な識別情報を提供します。
言語フィンガープリンティングはタイムゾーンとどのように関連しますか?
組み合わせが最も強力です。navigator.language = "ja-JP"で タイムゾーン = "Asia/Tokyo"の場合、一貫性チェックが通過します — 典型的な日本ユーザー。しかしnavigator.language = "ja-JP"で タイムゾーン = "America/New_York"の場合、より識別可能なシグナルが 生まれます — 米国在住の日本人(特定の人口統計)か、設定が矛盾しているブラウザ (自動化フラグ)の可能性があります。
英語でブラウジングしても、ウェブサイトは私の母国語を検出できますか?
はい、潜在的には。IPジオロケーションがある言語地域を示し、あなたの言語設定が 別の言語を示す場合、このシグナルの組み合わせはあなたの可能性のある背景について 情報を提供します。さらに、ブラウザが英語を最優先として設定されていても、 システムフォント、キャンバスレンダリングパターン、その他のシグナルがOSレベルの 言語設定を暗示する可能性があります。
ブラウザ言語フィンガープリンティングはIPジオロケーションと同じですか?
いいえ。IPジオロケーションはあなたのIPアドレスに基づいて地理的な場所を推定します — これはVPNで変更できます。ブラウザ言語フィンガープリンティングはOSの言語設定から 読み取ります — VPNには影響されません。これらは別個のシグナルですが、トラッカーは 両方を照合して一貫性チェックを実行します。
関連記事
- ブラウザフィンガープリンティングとは?クッキーなしでサイトがあなたを追跡する方法 — すべてのフィンガープリンティングシグナルを組み合わせた完全ガイド
- キャンバスフィンガープリンティングとは?クッキーなしでウェブサイトがあなたを追跡する方法 — HTML5 Canvas APIがGPUを一意に識別する非表示の画像を描く方法
- オーディオフィンガープリンティングとは?AudioContextがブラウザを追跡する方法 — デバイスのオーディオスタックが一意の識別子を生成する方法
- WebGLフィンガープリンティングとは?GPUがブラウザを識別する方法 — 3DグラフィックスAPIがGPUベンダー名とドライバーバージョンを直接公開する方法



