ブログに戻る

Canvasフィンガープリント追跡と対策:ランダム化より環境の整合性

Canvasフィンガープリントは、同じ描画命令でもハードウェアやソフトウェアによって生じるレンダリング差を識別子として利用する仕組みで、単独で使われることは多くありません。適切な対策は毎回値を変えることではなく、同一環境内の各特性を矛盾なく整合させることです。

Canvasフィンガープリントの原理は複雑ではありませんが、広く語られている対策の中には、むしろ逆効果になるものが少なくありません。

同じ命令でも、端末が違えば結果が変わる

CanvasはHTML5が提供する描画コンポーネントで、Webページはスクリプトを使って図形や文字を描けます。同じ描画命令でも、OS、ブラウザのバージョン、フォントライブラリ、グラフィックドライバーといった基盤の違いによって、端末ごとにわずかなレンダリング差が生まれます。肉眼ではほとんど分かりませんが、Canvasの内容をデータとして書き出すと、その差は比較可能な値になります。

大まかな流れは次のとおりです。ページがまず図形や文字を描き、次にtoDataURL()で結果をBase64文字列として書き出します。この文字列を識別子として利用できます。端末が異なれば出力結果も異なるため、多くの場合は固有の値になります。Cookieを削除しても影響せず、キャッシュを消しても同様です。

単独で使われることは少ない

Canvasの値1つだけではできることに限りがあり、ブラウザの更新やドライバーの変更によって値が変化する場合もあります。実際には、Canvasは複数の特性と組み合わせて相互に照合されることが一般的です。

  • WebGL、フォント一覧、GPUモデルなどのグラフィック関連情報
  • UA、タイムゾーン、言語、画面解像度などの環境情報
  • Cookie、ローカルストレージ、ネットワーク出口などのセッション関連情報

複数の情報を組み合わせる理由は、整合性を確認するためです。各項目だけを見れば正常範囲に収まっていても、組み合わせると矛盾が目立ちます。たとえば、タイムゾーンは米国なのに言語一覧が中国語だけで、Canvasの値は内蔵GPU相当なのにUAでは最新のハイエンド端末を名乗っている、といった状態です。プラットフォームは利用者が誰かを証明する必要はありません。その特性の組み合わせが実在する1台の端末らしくないと判断できれば十分です。

無効化すると、かえって目立つ

最初にCanvasを無効化しようと考える人は多いですが、結果は逆になることがあります。

一般ユーザーのブラウザはほぼすべてCanvasに対応しています。Canvasを明確にサポートしない環境は統計的に少数派となり、特別な処理をしていることを自ら示す形になります。さらに現実的な問題として、多くのサイトでは画像の切り抜き、グラフ、CAPTCHAの描画にCanvasを利用しています。無効化するとページ機能が壊れ、そのこと自体が新たな異常要因になります。

別の方法として、アクセスのたびにランダムな値へ変えるやり方があります。しかしこれにも同じ問題があります。実機のフィンガープリントは安定しているため、毎回変化する環境は一般的な端末とは異なる挙動を示し、むしろ個別に抽出されてマークされやすくなります。ランダム化そのものが識別可能なシグナルになり得ます。

目指すべきは環境内の整合性

毎回すべてを変えるよりも、環境内の各特性が互いに一致し、全体として不自然でない状態を目標にするほうが実際の端末に近づきます。

具体的には、各特性が相互に裏付け合う必要があります。タイムゾーン、言語、出口IPの地理的位置は対応しているべきで、UAが申告する端末とCanvasやWebGLが示すグラフィック能力も同じ程度のクラスにあるべきです。同じアカウントの環境は長期的に安定し、再訪時に大きな変化が出ないことが望まれます。単に特定機能を無効化するプラグインに依存すると、より目立つ特性を生むことがあります。可能であればサードパーティースクリプトの実行を減らし、収集対象となる面を小さくします。

複数の環境を互いに区別する必要があるなら、それは環境分離で解決すべき問題です。PurpleMarkのようなツールが複数アカウントの環境を分離する場合、通常はパラメータをランダムに変動させるのではなく、アカウントごとに固定された環境を割り当てます。プラットフォーム側が実際に重視するのは、その特性群が安定しているか、全体として筋が通っているかだからです。

まとめ

Canvasが追跡に使えるのは、ハードウェアやソフトウェアの微細な差を、安定して比較できる文字列へ変換するからです。有効な対策はCanvasを無効化することでも、値を不規則に変えることでもなく、同じ環境内の他の特性と一貫した状態にすることです。特殊に見えるより、普通に見えるほうが安全です。