
2026/09/21 0:18
広告収集機能により、ChatGPT は他のウェブサイトでのあなたの行動を知るようになりました
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
改善されたサマリー: OpenAI の広告収集システムが、第三者の広告主サイトにわたるユーザーの閲覧活動と ChatGPT のアイデンティティを秘密裡に結びつけることを示す最も重要な発見は、
__obi という専用のクッキーを利用している点にあります。この仕組みは、ChatGPT 上でアカウントのアイデンティティをバインドした JWT を生成し、標準的な広告ピクセルを通じてサイト間へ送信することで機能します。これにより、ユーザーがログインしていなくても、OpenAI はユーザーの行動をプロファイルできます。「__obi」はセキュリティ設定によりほとんどのブラウザでブロックされていますが、Android の Chrome などサポートされているブラウザでは、その独自の構成(SameSite=None、「HttpOnly」、特定のドメインスコーピング)によってこれらの保護を回避することが可能です。その結果、広告主はターゲティングのためにユーザーのアイデンティティに直接アクセスでき、明示的なマーケティング同意なしにスクレイピングによって収集されたフォームやページテキストから医療歴や債務の詳細など機密データを露見するリスクが生じます。公開された問い合わせを受けて OpenAI はこの問題を確認し内部審査を開始しましたが、Intelligent Tracking Prevention により iOS/Safari ではこの仕組みが機能しないため、限界が存在します。本文
OpenAI による広告追跡システム「__obi」の仕組みと影響
OpenAI は ChatGPT のアカウント識別子を第三者ウェブサイトへ送信する仕組みを実装しています。具体的には、ドメイン
bzr.openai.com からクッキー __obi を設定し、ユーザーの活動情報を広告主に紐付ける構造になっています。
このシステムの詳細、観測結果、および OpenAI への問い合わせについて整理します。
1. システム全体の概要
- 基本原理
ドメイン内のクッキー.openai.com
は、ChatGPT 上での利用状況に基づいて生成され、ユーザーの ChatGPT アカウントと紐付けられます。__obi- ユーザーが訪れた通常のウェブサイト(広告主サイト)から、このクッキーが OpenAI に送信されます。
- 広告表示の仕組み
- 広告主は自社サイトに OpenAI のスクリプトを設置します。
- スクリプト読み込み時に、閲覧中のページ情報と
クッキー(検索履歴、記事内容、購入行動など)が OpenAI へ送信されます。__obi
- 結果
- これにより、OpenAI はウェブサイトでのユーザーの活動情報を ChatGPT アカウントに紐付けることが可能になります。
2. 検証方法
- 著者は自身のスマートフォン上で完全な再現を行いました。
- 2 つの独立したキャプチャ方法を採用し検証しました。
- 936 社の異なる広告主(計 1,029 のホスト名)を対象に、数ヶ月間のトラフィックデータを分析・クロスチェックしています。
3. システムの詳細プロセス
ステップ 1: 識別子の生成と署名
chatgpt.com でクライアントは 16 バイトのランダムデータを生成し、以下のように送信します。
- サインアウト時:
/backend-anon/ - サインイン中:
POST /backend-api/bazaar/obi/sync-token
レスポンス(RS256 署名付き JWT)
{ "iss": "chatgpt-wadi", "aud": "bzr.openai.com", "purpose": "obi_sync", "operation": "set", "consent_decision": "analytics_allowed", "consent_policy_version": "user_granular_consent_v1", "sub": "<<redacted: アカウント識別子>>", "subject_type": "account_user", "obi": "<<redacted: 識別子>>", "exp": "<<iat + 60 秒>>" }
: アカウントを指します。sub
: 追跡識別子を指します。obi- このトークンは両者を結び、収集サーバーに限定されます(有効期限:60 秒)。
は OpenAI 内の広告プラットフォーム「bazaar」の略称です。bzr
ステップ 2: クッキーへの変換
クライアントは横断サイト送信(cross-site POST)により、トークンを以下のエンドポイントに送信します。
- URL:
bzr.openai.com/v1/obi/sync - Body:
{"token": "<<JWT>>"}
レスポンスヘッダー
Set-Cookie: __obi=<<redacted>>; Domain=.openai.com; HttpOnly; Max-Age=31536000; Path=/; SameSite=none; Secure
- Cross-Site 送信対応:
とSameSite=none
の設定により、他サイトからでもクッキーが送信されます。Secure - 有効期間:
は 1 年(31,536,000 秒)に設定されています。Max-Age - 値の一致: JWT 内の
値とクッキー値は同一です。obi
ステップ 3: 広告主サイトからの逆方向送信
広告主のページから OpenAI ホストへのリクエストで、以下の 3 パターンがあり、いずれもスマートフォンの Cookie Jar に
__obi が存在すれば送信されます。
| リクエスト内容 | クッキー | 備考 |
|---|---|---|
| あり | スクリプト自身を読み込みます。 |
( 付き) | あり | コンバージョンイベント用です。 |
(ボディなし) | あり | SDK の「認証不要」パスです。 |
| なし | コントロールリクエストです。 |
- 重要な漏洩経路: 1 行目のスクリプト読み込みが最も重要です。SDK は認証情報を省略する仕組みを持っており、ブラウザが
で SDK を読み込む時点でクッキーを付与しています。OpenAI のコード実行前にもかかわらず、識別子が既に漏洩している状態です。<script src>
4. 収集される情報源と内容
アイデンティティ情報の取得
SDK は広告主サイトから以下の 4 つの情報源を区別して収集します。
: 広告主が意図的に渡す値。in
: フォームフィールドからの入力値。fm
: ページテキストから読み取る値。ht
: タグマネージャーバスの情報からスクレイピングした値。js
観測結果: スクレイピングされたアイデンティティが、広告主提供の情報の数倍以上(685 対 255)多いことが確認されました。
データ取得の詳細
- 最大供給源: タグマネージャーバスがメールアドレスの最大の供給源です。
を書き換えたり、window.dataLayer.push
を読み取ることで発見されます。adobeDataLayer- 現在のバージョンでは、GTM スクリプトの
パラメータからメールアドレスと電話番号を取得します。l= - 過去: バージョン 0.1.31(8/27 前)には名前や地理情報も取得していました。
- ハッシュ化処理:
- メールアドレス、電話番号、姓・名は SHA-256 ハッシュ化されて送信されます。
- 平文で送信される情報: 国、地域、都市、郵便番号(最も頻繁に収集されたフォームフィールド)。
- URL の処理:
- オリジンとパスのみを残し、クエリ文字列は削除されます。
- 保持されたパスには、医療状態や債務解決のファネル情報なども含まれます。
- 除外リスト (Denylist):
- パスワード、ワンタイムコード、カード番号、社会保険番号、生年月日、病歴、裁判関連フィールドなどは除外されます(既知の設定を持つ 881 のピクセルのうち 638 で有効化)。
5. クッキーのクロスサイト特性
他の OpenAI クッキーはブラウザによってブロックされ、
__obi のみが送信されました。
| クッキー名 | 結果 | 理由 |
|---|---|---|
, | ブロック済み | |
, セッションクッキー | ブロック済み | ドメイン不一致 |
| 送信済み | 唯一の 設定 |
は OpenAI の識別子の中で、横断サイト送信に設定されている唯一のクッキーです。__obi
6. 観測された到達範囲
- デバイス内での確認:
- Chewy, Wayfair, ThriftBooks, Eventbrite, HelloFresh, Coursera, SeatGeek など、12 の商業ウェブサイトから 13 つの異なるピクセル ID を経由して
が送信されました。__obi - すべてのリクエストはステータスコード 202 で受け入れられています。
- Chewy, Wayfair, ThriftBooks, Eventbrite, HelloFresh, Coursera, SeatGeek など、12 の商業ウェブサイトから 13 つの異なるピクセル ID を経由して
- 広範なトラフィック分析:
- 30 の異なる
値のうち、12 個が複数の広告主に観測されました。__obi - そのうち 1 つの値は 10 社の異なる広告主にまたがっていました。
- 30 の異なる
7. ログアウト時にも追跡可能か?
932 のデコード済みシンクトークンを分析した結果:
- アカウント主体:
(736 件)。subject_type: account_user - 匿名主体: アナモニス(196 件)。
- 匿名主体でも安定しており、デバイスごとに最低限27日間持続します。
8. OpenAI の公開ポリシーとの乖離
- 政策上の記載:
とchatgpt.com
ともに、「Analytics クッキー(1 年有効)」としてopenai.com
がリストされています。__obi- 説明:OpenAI がサービスのパフォーマンスや利用状況を理解するために使用される旨。
- 同意選択の実態:
- OpenAI は「解析」と「マーケティング」を別々の同意選択に分離しています(
/oai_consent_analytics
)。oai_consent_marketing - 問題点: デコードされたすべてのシンクトークンが
となっています。consent_decision: analytics_allowed - つまり、「解析には同意したが、マーケティングには拒否した」ユーザーでも、このクッキーを受信して追跡対象になっています。
- OpenAI は「解析」と「マーケティング」を別々の同意選択に分離しています(
9. OpenAI への対応と限界点
問い合わせ経緯
- 日時: 2024 年 9 月 14 日
- 宛先:
,press@openai.comprivacy@openai.com - 質問内容:
- なぜ
が Analytics クッキーとして分類されるのか?__obi - 解析同意あり/マーケティング拒否のユーザーにも送信される理由か?
- なぜ
- 回答: OpenAI サポートからの返信は問い合わせ承認のみであり、質問への具体的な回答はありませんでした。
- ※「スクリプト読み込みによる漏洩」の観測はこの問い合わせ送信後に発見されています。
システムの限界と条件
- ブラウザ環境:
- Android の Chrome 上で観測可能。
- iOS では動作しない: Safari は Intellgent Tracking Prevention がサードパーティクッキーをブロックするため、Chrome for iOS も同じです(WebKit 使用)。
- デスクトップ版 Chrome は未テスト。
- 発火確率 (Gate):
- およそ 5 セッションに 1 回でシンクトークンが生成されます。
- ChatGPT モバイル Web クライアントは広告を表示しますが、完全に同期(sync)しない場合があります。
- ステータス 202 は「クッキー付帯でのイベント受領が完了」を意味しますが、アカウントへの紐付け処理そのものは観測できません(設計上の後段処理)。
業界との比較とリスク
- Meta の実装: Meta は数年前から同様の構造(ログイン済みアカウント・サードパーティクッキー・オフサイトコンバージョンの紐付け)を実装しています。これは標準的な広告技術(adtech)です。
- 本件の特殊性: これまでの例がないのは、AI チャット製品上でこの仕組みを実行している点にあります。ユーザーはソーシャルネットワークとは異なる内容を開発者に語り、製品が次第に本人の代理人として行動するようになります。
- 広告主側の制限:
- 広告主は
を直接読むことができません(属さずドメイン)。__obi - 彼らはコンバージョンピクセルを設置していますが、訪問者が ChatGPT アカウントとして解決されていることを知る手段を持っていません。
- 広告主は
- 他のクッキーとの違い:
は各サイトで異なる値を持ち、相互参照できません(観測値の 2,828/2,860 が単一サイト限定)。__obref