ITP2.1対策!? ブラウザフィンガープリントによるユーザトラッキング

ハウツー

ITP2.1により、Safariブラウザでファーストパーティクッキーの利用が制限されるようになりました。ユーザトラッキング技術として既にクッキー(cookie)は広く認知されていますが、今回は「ブラウザフィンガープリント」という技術を紹介します。

以前の記事(ITP2.1 ~サードパーティだけでなくファーストパーティクッキーにも影響?~) 

ブラウザフィンガープリントとは?

ブラウザフィンガープリントとは、その名の通りWebブラウザを一意に認識するためのフィンガープリント(指紋)です。HTML5のCanvasという機能を利用しているため、「Canvas Fingerprint」とも呼ばれます。

JavaScriptで取得できるブラウザ名やインストールしているプラグイン、使用言語、OS、CPU情報などさまざまな情報からハッシュ値を生成することで、ブラウザフィンガープリントを作成します。一つひとつの値は多くのユーザで共通する値になりますが、それらの組み合わせは膨大な数になりユーザごとに異なる値になるという発想からこの技術が生まれました。ブラウザフィンガープリントによるユーザトラッキングには以下の特徴があります。

メリット

・ITPが適用される環境でも影響を受けない

・比較的簡単に実装することが可能

デメリット

・クッキーより精度が低くなる

ブラウザフィンガープリントはクッキーを利用しないため、ITPの影響を受けるSafariブラウザでも現在制限されていません。また、特定のJavaScriptを埋め込むだけで取得できるため、技術的なハードルは低くなっています。しかし、クッキーを利用するより個人を特定する精度が落ちるデメリットもあります。同じ端末でもブラウザのバージョンやブラウザの設定を少し変えるだけで違う値(異なるユーザとみなされる)となってしまいます。

ブラウザフィンガープリントを利用してみる

実際にITPの影響下にあるSafariブラウザ(端末:iPhoneX)を使って、フィンガープリントの値を確認してみます。今回はGithubで公開されているライブラリ「FingerPrint2」を利用しています。同ライブラリを利用したフィンガープリントの取得用テストページ(https://valve.github.io/fingerprintjs2/)も用意されており、以下の図のように簡単に取得できます。実際にフィンガープリントを取得しているWebサイトを確認したところ、同ライブラリを利用していました。

img2-m.png

同じ端末でブラウザを変えた結果

同じ端末でブラウザを変えて取得したところ、以下の値が取得できました。

img3-m.png

SafariとChromeでは異なる値になります。アプリ内ブラウザ(※)で取得したフィンガープリントは、それぞれのアプリによって異なりました。アプリ内ブラウザAはSafariを利用してブラウザの機能を実装していたようなので、Safariと同じ値が取得できましたが、アプリ内ブラウザBはSafariともChromeとも違う値となっています。今回はuserAgent(ブラウザ名やバージョンを識別するための情報)を利用しているため、ユーザトラッキングするなら、この項目は使わないほうが良さそうです。

※アプリ内ブラウザとは、スマホのアプリ上でURLリンクをタップした際に、アプリ上にWebサイトを表示する機能のことです。アプリ内で起動するため、SafariやChromeなどのブラウザアプリに切り替わることなく、Webサイトを表示できます。

 

同じ種類の端末2台でブラウザを揃えた結果

今度は同じ端末(iPhoneX)を2台用意して、OSやブラウザのバージョンはすべて同じにして結果を確認してみます。

img4-m.png

どのブラウザでも全く同じ値ですね・・・。いろんな種類の端末や条件で検証したかったのですが、用意できなかったためで検証はここまです。少なくとも「iPhoneXで同じブラウザ」のユーザが複数いた場合、フィンガープリントの値が一致して区別できませんでした。

結局ユーザトラッキングできそうか?

今回の結果から、ブラウザフィンガープリント単体でのユーザ特定は難しそうです。特に今回はITPの影響下にあるSafariでの検証でご覧の通りの結果になりました。今回利用していない設定や他のライブラリ、独自の方法でブラウザフィンガープリントを取得したり、他のデータとひも付けることでユーザトラッキングの精度を上げれば実サービスでも利用できそうです。