bokken.io
作成日
2022-12-30
更新日
2022-12-30
author
@bokken_
tag
Web, Privacy, Security, Cookie

サードパーティ Cookie をブロックする制限を緩和する CHIPS という仕様について

はじめに

3rd Party Cookie をブロックする制限を緩和するための仕様である CHIPS が策定されている。

近年、ユーザの Privacy の向上を目的として 3rd Party Cookie をブロックする流れがある。cross site でユーザトラッキングを提供する多くのツールは 3rd Party Cookie を使っているため、3rd Party Cookie をブロックすることで解決しようとするものだ。すでにいくつかのブラウザではこういった動きが見られる(Firefox, Safari)。

しかし、一部のサイトでは 3rd Party Cookie が有効に使われているケースもある。こういったケースで、Privacy の問題を解決しつつ、3rd Party Cookie を利用できるようにするための仕様が CHIPS (Cookies Having Independent Partitioned State) だ。 本記事ではこの CHIPS について、なぜ必要なのか、どうやって有効にするのかなどを 2022/12/30 時点の情報でまとめる。

もくじ

(click で開く)

CHIPS (Cookies Having Independent Partitioned State)

Chromium チームからのアナウンスがある通り、今後、3rd Party Cookie はデフォルトでブロックされるようになることが予想される。CHIPS (Cookies Having Independent Partitioned State) は、その 3rd Party Cookie を Opt-in 形式で使えるようにするための仕様だ。

これを Opt-in する方法は簡単で 下記のように Set-Cookie ヘッダに Partitioned attribute をつけるだけである。

Set-Cookie: __Host-locationid=187; SameSite=None; Secure; HttpOnly; Path=/; Partitioned;

これらの対応は 3rd Party の埋め込まれる側のサイトが対応しなければいけない点に注意する。

Partitioned attribute をつけることで、3rd Party Cookie についてはトップレベルサイトで Cookie を分離する代わりに、ブロックされなくなる。

トップレベルサイトで分離されるとは?

Cookie をトップレベルサイトで分離すると、どういった事が起こるのか?

現状、Cookie は hostname かドメイン名を key として Cookie ストレージを分離していた。CHIPS では、 トップレベル URL のsite (schema とドメイン) と Cookie 送付先の site の両方を使った double key を利用する。

下記のようなレスポンスでは Partitioned attribute がないため、 3rd Party Cookie はブロックされる。

しかし、下記のような Partitioned attribute がある場合では 3rd Party Cookie はブロックされず、top level のサイトで Cookie が分離されて保存されることになる(example.commap.example.text には foo=barexample.netmap.example.test には foo=baz がそれぞれ別途 Cookie として保存される)。

分離されていると、下記のように別のトップレベルサイトからのリクエストに先述したレスポンスで付与された Cookie は送付されず、該当するトップレベルサイトの Cookie が送付される。(example.com のフレームにある map.example.test には foo=bar;example.net のフレームにある map.example.test には foo=baz)

どのように Cookie が分離されていることを把握するか

保存された Cookie がトップレベルサイトで分離して保存されているかどうかを確認するためには、リクエストヘッダを確認すればよい。

分離して保持されている Cookie については下記のようにリクエストヘッダに Sec-CH-Partitioned-Cookies: ?0 が付与される。

Sec-CH-Partitioned-Cookies: ?0
Cookie: __Host-name=value

簡単なデモ

Third-party store-finder service を参考にして CHIPS に関わるデモを用意した。動作については Chrome のバージョン 108.0.5359.124chrome://flags/#partitioned-cookieschrome://flags/#partitioned-cookies-bypass-origin-trial を有効にした状態の シークレットウィンドウ で確認している。

内容としては、ショップ系サイトに組み込むことができる map ツールを模したデモだ。

もしも挙動がおかしい場合は今一度フラグが設定されているか、シークレットウィンドウを使っているかを確認し、Cookie を削除してから試していただきたい。

デモ動画

上記のデモを筆者の環境で動かしたデモ動画を下記に掲載する。

この動画ではまず x.bokken.io にあるサイトから Simple Map App の位置情報をカーソルで更新する(赤い色が真ん中に)。 次に Simple Map App を利用している別のサイトである negibokken.github.io にて、同様に Simple Mapp App を確認すると、初期位置である左上に赤い印がある。ここで negibokken.github.io で位置情報を更新する(右下まで)が、もともとの x.bokken.io では位置情報は更新されていない。 また、最後の exp.bokken.dev では同様に Simple Map App を読み込んでいるが、 Cookie に Partitioned 属性がないため Cookie がブロックされて位置情報が初期位置から変わらない。

このようにトップサイトごとに Cookie が分離されることで異なるサイト間では情報を共有しないようになる。

同じサイトを再訪問した際には情報が保持されているため、ユーザ体験を維持できる。

その他のシナリオ

今回は Third-party store-finder service に沿って紹介したが、その他、サポート用の組み込みチャット、ロードバランサによる Cookie の利用などのシナリオが掲載されいてる。その他のシナリオについては Key Scenario を参照されたい。

各ブラウザベンダのこれまでの動き

これまで Firefox や Safari は独自の仕組みで Cookie を分離し、ユーザの Privacy を保護してきた。

Firefox では ETP Strict mode という機能によってデフォルトで Cookie をトップサイトごとに分離したり、 Safari ではヒューリスティックな手法による分離手法を試し、最終的にはデフォルトで 3rd Party Cookie をブロックするようになった。

一方、デフォルトで分離をしたり、ブロックするということは、これまで動いていたサイトを壊してしまう可能性がある。CHIPS 関連でいうと、例えば、Key Scenario に記載されているようなケースだ。 SmooshGate の事例に見るように、 Web は後方互換性を大事にしているため、後方互換性を壊すような変更は受け入れがたいことがある。

ユーザの Privacy を守ることも大事だが、Web の互換性やエコシステムを破壊しないためにもゆるやかで地道な活動が必要である。Chromium Blog には下記のように、「3rd Party Cookie の制限を緩和する方法を提供してから 3rd Party Cookie を廃止する。しかしこれは我々だけではできない。エコシステムによる協力が不可欠である」、「現在の広告つきの Web サイトのモデルを損なうことは、fingerprinting などのような不透明な技術への誘導になりかねず、それはユーザの Privacy を損なうことになる。だからコミュニティとしてうまくやる必要があるし、うまくやれる」と。

Once these approaches have addressed the needs of users, publishers, and advertisers, and we have developed the tools to mitigate workarounds, we plan to phase out support for third-party cookies in Chrome. Our intention is to do this within two years. But we cannot get there alone, and that’s why we need the ecosystem to engage on these proposals.

--- Building a more private web: A path towards making third party cookies obsolete

By undermining the business model of many ad-supported websites, blunt approaches to cookies encourage the use of opaque techniques such as fingerprinting (an invasive workaround to replace cookies), which can actually reduce user privacy and control. We believe that we as a community can, and must, do better.

--- Building a more private web: A path towards making third party cookies obsolete

これは、3rd Party Cookie の廃止によって壊れる Web サイトを生まないためには埋め込み側や埋め込まれる側の対応が必須であり、協力が必要であることを訴えているものである。そして、Web という世界を壊さないことや、コミュニティを重視する姿勢が見て取れる。

2020年1月14日に記載されたこの記事の中には、Chrome チームはこれを 2 年以内に実現したいという記載がある。しかし、2022年12月30日現在ではまだ 3rd Party Cookie の廃止は実現に至っていない。COVIT-19 による影響があったことも関係してるが、この計画を慎重に進めていることが伺える。

おわりに

今回、現在仕様が策定されている CHIPS という仕様や 3rd Party Cookie の流れについてまとめた。 3rd Party Cookie は一概に悪とは言えず、ユースケースを考えればユーザにとって非常に有益な技術である。 CHIPS 関連ドキュメントを読んでそのことが理解できた。また、Web を発展させていくためにはエコシステム全体の協力や、忍耐が必要なことを知れた。 対応されている方々には頭が下がる思いである。

CHIPS については、Intent to Ship が出されているため、近いうちに機能がリリースされるものと思われる。また次の発表を待ちたい。

もしも、この記事についてコメントや誤りがあれば、 @bokken_ か、issue までいただけると嬉しい。

参考・関連リンク

  1. privacycg/CHIPS: A proposal for a cookie attribute to partition cross-site cookies by top-level site
  2. Cookies Having Independent Partitioned State (CHIPS) - Chrome Developers
  3. Cookies Having Independent Partitioned State (CHIPS) origin trial - Chrome Developers
  4. Enhanced Tracking Protection in Firefox for desktop | Firefox Help
  5. Enhanced Tracking Protection in Firefox for Android | Firefox for Android Help
  6. SmooshGate FAQ - Chrome Developers
  7. 牧歌的 Cookie の終焉 | blog.jxck.io
  8. WICG/first-party-sets
  9. Intent to Prototype: Cookies Having Independent Partitioned State (CHIPS)
  10. Intent to Experiment: Cookies Having Independent Partitioned State (CHIPS)
  11. Intent to Ship: Cookies Having Independent Partitioned State (CHIPS)
  12. Chromium Blog: Building a more private web: A path towards making third party cookies obsolete
Tweet このエントリーをはてなブックマークに追加
Subscribe via RSS
TOP