画面解像度フィンガープリントとは — デバイスピクセル比による追跡の仕組み
ブラウザ・デバイス

画面解像度フィンガープリントとは — デバイスピクセル比による追跡の仕組み

screen.widthとdevicePixelRatioがブラウザフィンガープリントに使われる仕組みを解説。シークレットモードでも無効化できません。

7分で読める·

スクリーンフィンガープリンティングは、ブラウザに組み込まれたAPIを通じて、ディスプレイの解像度・ ピクセル密度・カラーデプスを読み取り、セッション・プライベートウィンドウ・VPN接続をまたいで 持続する安定した識別子を生成します。あなたのスクリーンが現在何を公開しているかは、 whatsmy.fyiでご確認いただけます。

TL;DR

スクリーンフィンガープリンティングは、window.screen window.devicePixelRatio の値——ディスプレイ解像度・利用可能なビューポート・ カラーデプス・ピクセル密度比——を組み合わせて、永続的なデバイス識別子を作成します。 単独では3〜5ビットのエントロピーを提供するに過ぎませんが、他のフィンガープリンティング シグナルと組み合わせることで、クッキーの削除やプライベートブラウジングでは無効化できない 信頼性の高いクロスセッショントラッカーになります。

スクリーンフィンガープリンティングとは?

スクリーンフィンガープリンティングは、 Screen API window.devicePixelRatio プロパティが公開するディスプレイ特性を収集する、パッシブなブラウザトラッキング技術です。 これらのAPIは、開発者がレスポンシブレイアウトを構築し、高密度ディスプレイ向けに画像を 適切にサイズ調整できるよう設計されたものですが、同時にフィンガープリンティングスクリプトに 物理モニターとハードウェア構成の詳細な説明を渡してしまいます。

キャンバスフィンガープリンティングやWebGLフィンガープリンティングとは異なり、 スクリーンフィンガープリンティングにはレンダリングが不要です——値はページが読み込まれた 瞬間に同期的に、いかなる計算もなく利用可能です。1行のJavaScriptだけで、デバイスの 完全なスクリーンプロファイルを読み取ることができます。これにより、トラッカーが利用できる フィンガープリンティングベクターの中で最もコストが低く、可用性の高いものの一つとなっています。

スクリーンフィンガープリンティングは、より広い ブラウザフィンガープリンティング 技術ファミリーにおける重要なシグナルです。 WebGLフィンガープリンティングからのGPUデータ、 オーディオフィンガープリンティングからのオーディオスタックデータ、そして キャンバスフィンガープリンティング でキャプチャされたレンダリングの差異と定期的に組み合わせられ、複合識別子を形成します。

スクリーンフィンガープリンティングの仕組み

すべてのブラウザは、物理ディスプレイとCSSピクセルと物理ピクセルの関係を記述した 読み取り専用プロパティのセットを公開しています。フィンガープリンティングスクリプトは これらをすべて一度に収集します。

コアプロパティ

screen.width / screen.height —— CSSピクセルで報告される物理ディスプレイの総ピクセル寸法です。100%スケーリングの 1920×1080モニターは 1920 × 1080 を報告します。125% Windowsスケーリングの 同じモニターは 1536 × 864 を報告し、OSのスケーリング設定が即座に露呈します。

screen.availWidth / screen.availHeight —— タスクバー・ドック・システムUIを差し引いた後、ブラウザウィンドウが利用できる スクリーン部分です。40pxのタスクバーが下部にある1920×1080のWindowsマシンでは、availHeight1040 になります。これにより、使用しているOSや タスクバーが表示・固定されているか自動非表示に設定されているかが明らかになります。

window.devicePixelRatio —— 物理ディスプレイピクセルとCSSピクセルの比率です。標準的な1080pモニターの比率は1 です。MacBook Pro Retinaディスプレイは 2 です。27インチ 5K iMacも 2 です。3×スケーリングの最新Androidフラッグシップは 3です。この単一の値により、HiDPIデバイスと標準ディスプレイ、Retina MacとWindowsマシン、 予算スマートフォンとフラッグシップモデルを確実に区別できます。

screen.colorDepth / screen.pixelDepth —— 各ピクセルの色を表現するために使用されるビット数です。実際には、ほぼすべての最新デバイスで24 ですが、レガシーシステムや一部のリモートデスクトップ設定では16 または 8 を返し、仮想化や組み込み環境の検出に有用なシグナルとなります。

screen.orientation.type —— ディスプレイがポートレートかランドスケープの向きにあるか、そしてそれがハードウェアの プライマリ向きかどうかを報告します。デスクトップでは常に landscape-primary ですが、 モバイルでは変化します。ほぼ常にポートレートで持たれるスマートフォンは行動パターンを明らかにします。

window.innerWidth / window.innerHeight —— スクロールバーの幅を含むがブラウザのクロームを除いた、ブラウザの現在のビューポートの寸法です。 ウィンドウのリサイズで変化しますが、ページ読み込み時にはユーザーの典型的なウィンドウサイズを 反映します——これも行動的データポイントです。

コード

// Screen fingerprinting — all values are synchronous, no rendering needed
function getScreenFingerprint() {
  const dpr = window.devicePixelRatio;

  return {
    // Physical display dimensions (CSS pixels)
    screenWidth:      window.screen.width,
    screenHeight:     window.screen.height,

    // Available area after system UI (taskbar, dock)
    availWidth:       window.screen.availWidth,
    availHeight:      window.screen.availHeight,

    // HiDPI / Retina ratio — key differentiator
    devicePixelRatio: dpr,

    // Physical pixels (what the GPU actually renders)
    physicalWidth:    Math.round(window.screen.width * dpr),
    physicalHeight:   Math.round(window.screen.height * dpr),

    // Color depth — usually 24; lower values flag VMs or legacy systems
    colorDepth:       window.screen.colorDepth,
    pixelDepth:       window.screen.pixelDepth,

    // Viewport — reflects browser window state at load time
    innerWidth:       window.innerWidth,
    innerHeight:      window.innerHeight,

    // Orientation
    orientation:      screen.orientation?.type ?? 'unknown',
  };
}

// Example output — MacBook Pro 14-inch (2023), Chrome, fullscreen
// {
//   screenWidth: 1512, screenHeight: 982,
//   availWidth: 1512,  availHeight: 932,   ← 50px macOS menubar
//   devicePixelRatio: 2,
//   physicalWidth: 3024, physicalHeight: 1964,
//   colorDepth: 24, pixelDepth: 24,
//   innerWidth: 1512, innerHeight: 879,
//   orientation: 'landscape-primary'
// }

screenWidthscreenHeightdevicePixelRatioavailHeight の組み合わせだけで、一般的なデバイスクラス数十種類を 区別するのに十分です。タスクバーのオフセットが含まれると、多くの構成はそれ以上の シグナルなしにユニークになります。

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

スクリーンデータ単独では中程度のエントロピーを提供します——デバイスクラスを大幅に絞り込む のには十分ですが、単独で個人を特定するにはほとんどの場合不十分です。その力は他のシグナルとの 組み合わせ方から生まれます。

シグナル / 調査結果出典
スクリーン解像度単独のエントロピー〜3.3ビットEFF Cover Your Tracks
devicePixelRatio追加後のエントロピー〜4.8ビットBrowserLeaks
最も一般的な画面解像度(1920×1080)ユーザーの〜24%Statcounter GlobalStats、2025年
ユニークなスクリーンプロファイルを持つユーザー(解像度+DPR+OSスケーリング)〜18%Fingerprint.com調査
実環境で確認されるdevicePixelRatioの固有値1、1.25、1.5、1.75、2、2.5、3、3.5BrowserLeaksデータセット
複合フィンガープリント精度(スクリーン+キャンバス+WebGL)>95%Fingerprint.com Pro

1920×1080の解像度を共有するユーザーが24%いることは保護の傘のように聞こえますが、 そのグループ内では、devicePixelRatio・タスクバーの高さ・OSスケーリング設定・ ビューポートサイズの違いが母集団を急速に細分化します。125% Windowsスケーリングの 1920×1080ディスプレイは screenWidth: 1536 を生成し、100%スケーリングの ユーザーと即座に区別されます。16:10アスペクト比のMacBook Proは、同等のCSS解像度の あらゆる16:9 Windowsモニターと一線を画します。

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

広告とクロスサイトトラッキング

スクリーンデータはすべての商業フィンガープリンティングプラットフォームにおける標準的な 入力データです。レンダリングが不要でページ読み込み時に即座に利用可能なため、最初に 収集されるシグナルの一つです。アドテックネットワークはIPアドレス・タイムゾーン・言語・ プラットフォームデータと組み合わせて、ブラウザとデバイスをまたいでクッキーの代替として 機能する安定したクロスサイト識別子を形成します。

不正検出とアカウントセキュリティ

セキュリティプラットフォームはスクリーンフィンガープリンティングを使用して、既存の アカウントに新しいデバイスがログインしようとしているかを検出します。devicePixelRatioやスクリーン寸法の突然の変化——例えば、Retina Mac(dpr: 2)から標準1080p デスクトップ(dpr: 1)への切り替え——は、アカウント乗っ取りの試み・ クレデンシャルスタッフィング・セッションハイジャックに対する強力なリスクシグナルです。

デバイスタイプの推論

devicePixelRatio は、ユーザーエージェント文字列を読み取ることなく デバイスカテゴリを区別するための最も信頼性の高いシグナルの一つです。2 以上の 比率はHiDPIディスプレイを確実に示します——最新のスマートフォンとAppleハードウェアでほぼ 普遍的です。スクリーン寸法と組み合わせることで、フィンガープリンティングスクリプトは デバイスクラス(フラッグシップスマートフォン・ミドルレンジスマートフォン・予算スマートフォン・ ラップトップ・デスクトップ)を正確に推測し、それに応じてトラッキング戦略を調整できます。

ペイウォールと従量制アクセスの回避検出

記事制限を設けているパブリッシャーは、クッキーを削除したりシークレットモードに切り替えた ユーザーを識別するために、スクリーンフィンガープリンティングをキャンバスデータや クッキーデータとともに使用します。スクリーン寸法とピクセル比はハードウェアプロパティで あるため、セッションの削除による影響を受けません。

スクリーンフィンガープリンティングとプライバシー法

W3Cフィンガープリンティングガイダンス は、仕様の作成者が考慮すべきフィンガープリンティングベクターとして screen.widthscreen.heightdevicePixelRatio を明示的に挙げています。 GDPRの下では、合理的に個人に結びつけられるフィンガープリンティングデータは個人データの 処理に当たり、十分な情報に基づく同意または正当な利益の正当化のいずれかが必要です。 フランスのCNILと英国ICOはどちらも、広告目的のフィンガープリンティングには明示的な オプトイン同意が必要だと述べていますが、法域をまたいだ執行は依然として一貫していません。

スクリーンフィンガープリンティングからの保護方法

スクリーンデータは実際のハードウェアプロパティを反映しているため、クッキーを削除する ように変更することはできません。防御策はノーマライゼーションとノイズ注入に重点を置いています:

  • Torブラウザ(最強の保護): Torブラウザはすべてのスクリーン値を 正規化します——実際のディスプレイに関わらず、標準化された 1000×900(または 類似の)解像度を報告し、devicePixelRatio1 に固定します。 すべてのTorユーザーはスクリーンフィンガープリンティングスクリプトに対して同一に見えます。 トレードオフはTorネットワークの速度低下です。
  • Firefox の privacy.resistFingerprinting(RFP): about:config でRFPを有効にすると、Firefoxはスクリーン寸法を標準化された 値に丸め、devicePixelRatio1 に制限します。ビューポートサイズは 最も近い200×100ピクセルバケットにパディングされます。これにより、他のRFPユーザーと スクリーンプロファイルが同一になります。
  • Braveブラウザ(日常使いに推奨): Braveはスクリーンデータに ファービング技術を適用します——screen.widthscreen.heightdevicePixelRatio に、セッション固有でオリジンごとに異なる小さなノイズ値を 導入します。フィンガープリントはセッションごとに変化し、サイト間で異なるため、 サイトの機能を壊すことなくクロスサイト相関を信頼性の低いものにします。
  • 非標準のOSスケーリングを避ける: Windowsユーザーがディスプレイ スケーリングを125%または150%に設定すると、1920pxモニターから 1536 の ような通常とは異なる screenWidth 値が生成されます——これは100%や200%の クリーンな設定よりもまれで、そのため識別しやすくなります。標準的な増分を使用することで エントロピーがわずかに減少します。
  • ブラウザ拡張機能(効果は限定的): Canvas Blockerなどの拡張機能は スクリーン値をスプーフィングするように設定できますが、検出可能であり、一部のサイトで レスポンシブWebデザインを壊す可能性があります。
  • VPN——有用だが不十分: VPNはIPアドレスをマスクしますが、 スクリーンプロパティには全く効果がありません。devicePixelRatio と 解像度はVPNの背後でも同一です。実際のIPが何を公開しているかは whatsmy.fyi で確認してください——スクリーンデータはIPとは別に表示されていることに注目してください。

よくある質問

スクリーンフィンガープリンティングはシークレットモードやプライベートモードでも機能しますか?

はい。プライベートブラウジングモードは、ブラウザが閲覧履歴・クッキー・フォームデータを ディスクに保存するのを防ぎますが、物理ディスプレイは変えません。シークレットモードでも 通常のウィンドウでも、screen.widthscreen.heightdevicePixelRatio は同一です。異なる値を生成するのは、アクティブなディスプレイ 正規化を持つブラウザ——TorブラウザまたはFirefox の privacy.resistFingerprinting——のみです。

ブラウザのズームレベルを変えるとスクリーンフィンガープリントに影響しますか?

一部のブラウザでは、ブラウザズームが window.devicePixelRatio に影響します—— 例えばChromeは、ベースのハードウェアDPRにズーム係数を掛けます。そのため、標準1080p ディスプレイでの125%ズームは devicePixelRatio として 1 ではなく1.25 を生成します。これは、ズームレベルが非標準の場合、エントロピーを 増加させる(より独自性を高める)可能性があります。screen.widthscreen.height はブラウザズームの影響を受けません。

RetinaディスプレイとdevicePixelRatioは標準ディスプレイとどう違いますか?

標準1080pモニターは、1つの物理ピクセルを1つのCSSピクセルにマッピングするハードウェア ピクセル密度を持っているため、devicePixelRatio1 です。 Apple Retinaディスプレイはインチあたりほぼ2倍の物理ピクセルを詰め込んでいるため、2 を報告します。MacBook Pro Retinaでは、1512×982のCSS解像度が 3024×1964の物理ピクセルに対応します。最新のAndroidフラッグシップは通常2.75 または 3 を報告します。この単一の値は、Apple シリコンラップトップと標準的なWindowsラップトップを区別するための最も信頼性の 高いシグナルの一つです。

ブラウザウィンドウをリサイズしても、実際の物理スクリーンを検出できますか?

はい。screen.widthscreen.height は常に物理ディスプレイの 全寸法を反映します——ブラウザウィンドウをリサイズしても変わりません。window.innerWidthwindow.innerHeight はウィンドウサイズに合わせて変化しますが、screen.* の値はハードウェアに固定されています。異なる外部ディスプレイへの 切り替えなど、別のモニターを使用した場合のみスクリーン寸法が変わります。

スクリーンフィンガープリンティングはモバイルとデスクトップではどちらが精度が高いですか?

Androidエコシステムでのスクリーン解像度とDPRの断片化がはるかに大きいため、モバイル デバイスはより高い複合エントロピーを生成します。Samsung・Google・OnePlus・Xiaomiは それぞれ異なる解像度とピクセル密度のデバイスを出荷しています。デスクトップはより 均質です——100%スケーリングの1920×1080が支配的ですが、非標準のスケーリングパーセンテージ (125%・150%・175%)を設定したWindowsユーザーは、独自性を高める異常な値を生成します。

スクリーンフィンガープリンティングとキャンバスフィンガープリンティングの関係は?

スクリーンフィンガープリンティングはハードウェアディスプレイプロパティを同期的に読み取ります—— レンダリング不要です。キャンバスフィンガープリンティングは隠れた画像をレンダリングし、 ピクセル出力を読み取ってGPUとフォントレンダリングの違いを検出します。これらは補完的です: スクリーンフィンガープリンティングはディスプレイハードウェアを識別し、キャンバス フィンガープリンティングはグラフィックスレンダリングスタックを識別します。2つのシグナルは ほとんど矛盾することなく、合わせてデバイス構成を大幅に絞り込みます。レンダリング面への 詳細な解説は キャンバスフィンガープリンティングガイド をご覧ください。

マルチモニター設定に切り替えると、スクリーンフィンガープリントは変わりますか?

window.screen APIは、すべての接続されたディスプレイではなく、ブラウザ ウィンドウが現在表示されているディスプレイのプロパティを報告します。1920×1080の セカンダリモニターから2560×1440のプライマリディスプレイにブラウザウィンドウを移動すると、 JavaScriptが報告するスクリーン寸法が変わります。つまり、フィンガープリンティングスクリプトは ディスプレイ間でウィンドウを頻繁に移動するマルチモニターユーザーを検出できます—— ハードウェアデータに加えた行動シグナルとなります。

関連記事

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

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

今すぐ確認する →

関連記事

画面解像度フィンガープリントとは — デバイスピクセル比による追跡の仕組み | whatsmy.fyi