※日経ソフトウエア 2019年3月号の記事を再構成

インターネット上のトラッキング技術「ブラウザーフィンガープリント」は、どうやってユーザーを特定するのか。その仕組みを説明する。執念すら感じるほど、技術上の工夫が凝らされている。

ブラウザーフィンガープリントは端末の膨大な数の特徴を総合して、端末を識別する (c)Shutterstock
ブラウザーフィンガープリントは端末の膨大な数の特徴を総合して、端末を識別する (c)Shutterstock

※「ネット広告配信事業者はCookieをいかに利用しているか」の続きです。

 Cookieによるユーザーの特定が、ITP(Intelligent Tracking Prevention)やサードパーティークッキーへの制限で難しくなってくる中で、Cookieを使わないでユーザーを特定する方法が使われ始めている。それが本稿のテーマである「ブラウザーフィンガープリント」だ。その名の通り、“Webブラウザーの指紋”を利用して個々のユーザーを特定する技術である。

 Cookieは、端末やWebブラウザー上に任意のCookie情報を保存し、Webサーバーにアクセスする際に送信することで利用する。一方、ブラウザーフィンガープリントは、Webブラウザーから得られる情報だけで、個々のWebブラウザー(すなわち個人)を特定する方法だ(図1)。

図1●ブラウザーフィンガープリントの仕組み
図1●ブラウザーフィンガープリントの仕組み

 そのため、ブラウザーフィンガープリントも前述したGDPRの対象になると考えられている。Cookieの代替えとしてブラウザーフィンガープリントを使うとGDPRを回避できるというわけではない。Cookieの利用に強い制限がかかってくる中で、ブラウザーフィンガープリントは当面はCookieとの共存関係になると考えられている。

 ブラウザーフィンガープリントを解説するために、まずはJavaScriptについて解説する。端末のWebブラウザーからは、JavaScriptプログラムを通じて、非常に多くのデータを引き出すことができる。ブラウザー名(User Agent)をはじめとして、登録されているプラグイン、WebブラウザーやWebブラウザーが動作しているPCのOSなど、多くのデータを得られる。

 つまり、JavaScriptプログラムを用いてこれらのデータを取得し、これらデータををマージしてHash(ハッシュ)値が取れないか、というのがブラウザーフィンガープリントの発想だ。Hash値を取り、各Webブラウザー固有のフィンガープリント(当該Webブラウザー固有の値)が取れれば、どのWebブラウザーがどういった挙動をしているかがわかる。つまり、Cookieと同様に、ネット上でユーザーを特定することができる。ありとあらゆる情報と手段を使ってユーザーを特定しようという執念すら感じる。

 Cookieの利用が難しくなってきた時代に、ブラウザーフィンガープリントは非常に適した技術だと思われる。しかし、弱点もある。

 第1に、Webブラウザーや動作している端末情報を利用するため、ブラウザーフィンガープリントを取得するWebブラウザーや端末を変更すると、同じユーザーであっても異なるHash値になってしまう。つまり、あくまでもブラウザーをトレースする技術だということ。

 第2に、Webブラウザーの設定を変えてしまうとHash値も変わってしまうという点だ。プラグインを追加するだけでも、Webブラウザーから取得できる値は変わってしまう。つまり、ブラウザーフィンガープリントで取得できる値は、必ずしも恒久的に変わらないというわけではない点は理解して使わないとならない。

JavaScriptを書くだけでブラウザーフィンガープリント取得

 ブラウザーフィンガープリントを取得できる有名なJavaScriptライブラリに、「Fingerprintjs2」がある(https://github.com/Valve/fingerprintjs2 図2)。これを使えば、簡単なJavaScriptを書くだけで、ブラウザーフィンガープリントを取得することができてしまう。

図2●ブラウザーフィンガープリント(Fingerprintjs2のWebサイト)
図2●ブラウザーフィンガープリント(Fingerprintjs2のWebサイト)

 このライブラリが利用している、Webブラウザーから取得可能な項目は表1で示した。28項目ものデータをWebブラウザーから取得して、ブラウザーフィンガープリントとして利用しているのだ。

表1●Fingerprintjs2で取得できるデフォルトの値
表1●Fingerprintjs2で取得できるデフォルトの値

 面白いのは、WebGLを利用している点だ。端末上のGPUドライバーの値まで取得できる。CPUのコア数を利用している点も面白い。

 これら28項目のデータを用いて作成したHash値は、ほぼユニークな値になる。全世界のWebブラウザーすべてを個別に認識できるようになるのだ。つまり、「Hash値が衝突する可能性はとても低い」ということになる。