Canvasフィンガープリンティングの仕組み
スクリプトは画面外のcanvasを作成し、通常は特定のフォントによるテキスト文字列に加えて図形、グラデーション、色をレンダリングする描画命令を発行します。ブラウザはこれらの命令をグラフィックススタックに渡し、そこで生成される正確なピクセルは、オペレーティングシステム、GPU、ドライバーのバージョン、フォントヒンティングエンジンに依存します。
続いてスクリプトはtoDataURLやgetImageDataといったメソッドを呼び出し、レンダリングされたピクセルバッファを取得します。このバッファはハッシュ化されてコンパクトな値になります。レンダリングパイプラインはデバイスごとに異なるため、このハッシュは1つのデバイスでは一貫し、デバイス間では変動する傾向があり、有用な識別シグナルになります。
canvasの出力は、基盤となるハードウェアやドライバーが頻繁には変わらないため、時間の経過に対して比較的安定しています。ただし、ドライバーの更新、オペレーティングシステムのアップグレード、ブラウザのレンダリング挙動の変更後に変化することがあるため、通常は単独で信頼せず、他のシグナルと組み合わせます。
プライバシーツールや一部のブラウザは、ピクセルデータにランダムなノイズを加えたり、読み戻しを許可する前に確認を求めたりすることで、canvasフィンガープリンティングに対抗します。この意図的な擾乱はそれ自体が検知可能であり、独自のシグナルとして扱えます。
不正防止においてCanvasフィンガープリンティングが重要な理由
Canvasフィンガープリンティングは、基盤となるハードウェアに関する高エントロピーの情報をもたらし、ブラウザレベルでは同一に見えるデバイスを区別するのに有用です。不正防止においては、上位レベルの属性を偽装しても真のレンダリングパイプラインは容易に偽れない、類似マシンのファーム、エミュレーター、アンチディテクトブラウザを露呈させるのに役立ちます。Cookieを使わないデバイス認識の主力シグナルです。
TRACIOでの扱い方
TRACIOはcanvasレンダリングを130+のシグナルの1つとして利用し、それ自体を一意のIDとして扱うのではなく、特定の訪問者に対してどれだけ特徴的で安定しているかに応じて重み付けします。攻撃者がcanvasにノイズを注入する可能性があるため、TRACIOはこれを他のレンダリングおよびハードウェアのシグナルと相互照合し、1つの次元を偽装しても識別が破られないようにします。これにより認識を堅牢に保ちつつ、全体の信頼度スコアに反映させます。