Geminiとお話ししたことをメモする。
嘘を言っているかもしれないので気をつけましょう。
今回はCookieと広告IDについて。
Web解析をするにあたり、ユーザを識別する際、Cookieや広告IDが重要になる。
まずは、サーバがユーザを識別するとこんなに便利だよ、という話。
サーバはユーザを識別してそのユーザに最適なコンテンツを提供する。
例えば、あるユーザがECサイトで商品を買い物かごに入れたまま離脱したとする。
サーバがユーザを識別することで、再度ユーザがサーバにアクセスしすると、離脱した時の状況、つまり買い物かごに商品が入った状況をユーザに提供できる。
Cookieや広告IDを使用することで、こんなことができる。
Cookieの仕組み。
CookieはWebの世界で使用される。(アプリの場合は広告ID)
以下画像のように、まずブラウザはサーバに対してページ見せてよ、とリクエストを送信する。
するとサーバはそれに応える形で、ページの情報をブラウザにレスポンスする。
この際にCookieもブラウザに渡される。
ブラウザは受け取ったCookieをユーザのコンピュータのローカルストレージに保存する。
そして、2回目以降はブラウザがサーバにアクセスする際には、以前もらったCookieをサーバに示すことで、サーバは「以前来たあいつか!」という感じでブラウザを識別することができる。
広告IDの仕組み。
広告IDはiOSやAndroidなどのアプリの世界で使用される。
iOSの場合はIDFA(Identifier for Advertisers)、Androidの場合はGAID(Google Advertising ID)、と呼ばれる。
アプリの場合は、登場人物が、デバイスのOS、アプリ、サーバの3つになる。
まず、アプリがデバイスのOSに対して広告ID教えてよ、という感じで依頼する。
iOSの場合は初回はユーザに同意を求めるポップアップが表示され、ユーザの同意を得られない限りは広告IDを取得することができない。
Androidの場合はそういう認証が行われることはない。
その後(iOSの場合はユーザの許可が降りたら)デバイスのOSからアプリに広告IDが渡される。
アプリは受け取った広告IDをサーバに送信し、サーバ側で照合が取れれば、以前来たことがあるということで、そのユーザに最適なページが表示され、照合できなければ新規ユーザとして取り扱われる。
同じ値の広告IDが発行されてしまうことはないの?
同じ広告IDが発行されてしまった場合、例えばデバイスAの広告IDがXXXでデバイスBの広告IDもXXXだった場合、サーバは見分けがつかないので、デバイスAに提供していたコンテンツをデバイスBに提供してしまう可能性がある。こうなると個人の重要な情報が漏洩しかねない。
さらに、Cookieの場合はサーバによってのみCookieが発行されるが、広告IDは各デバイスに搭載されているOSが広告IDを発行する。
大学と生徒に例えると、Cookieの場合は大学側が学生番号を発行しているが、広告IDの場合は生徒が自分で生徒番号を発行しているようなものだ。
これだと同じ広告IDをもったデバイスが世界で1台くらい存在してもおかしくないように思える。
ただ、実際にこのようなことは起きないようになっている。
広告IDは、36文字で構成されており、$2^{128}$ものパターンがあり得る。
パターンが無数にありすぎるが故に、同じ文字列が発行される可能性がほぼ0という理屈。
ものすごくパワープレーな気がするが、この仕組みにより、同じ文字列が発行されないようになっている。
このように書くと、Cookieは同じ値が発生しないように今まで発行されたCookieがチェックされていて、同じ値が発行されないように管理されているように思うかもしれないが、Cookieも別にチェックされているわけではない。広告IDと同じように、無数のパターンがあり得るから同じCookieが発行される可能性がほぼ0という理屈で、サーバから発行されている。ものすごく機密性の高いものに関しては、サーバが既存のCookieを調査し、どれとも異なるCookieを発行する、ということが行われている場合もあるようだ。