Attribution レベル 1

W3C 作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-attribution-20260514/
最新公開バージョン:
https://www.w3.org/TR/attribution/
編集者草案:
https://w3c.github.io/attribution/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/attribution/
フィードバック:
public-patwg@w3.org 件名行「[attribution] … メッセージのトピック …」で送信(アーカイブ
GitHub
編集者:
(Google)
(Mozilla)
(Meta)
(Meta)
(Google)
(Mozilla)

概要

これは、広告パフォーマンスを測定するためのブラウザー API を定義する。目標は、広告がどのようにコンバージョンにつながるかについて、 個々の Web ユーザーのプライバシーに対するリスクを生じさせることなく、集計統計を生成することである。この API は複数の Web オリジンから人々に関する情報を照合するため、プライバシーに対する重大なリスクとなる可能性がある。このリスクを管理するため、 収集される情報は、厳格な制限内で集計を行うことをユーザーエージェントに信頼された集計サービスを用いて集計される。このサービスが 生成する集計には、差分プライバシーを提供するためにノイズが追加される。Web サイトは、ユーザーエージェントが提供する承認済み 集計サービスのリストから集計サービスを選択できる。

この文書の位置付け

この節は、この文書の公開時点における位置付けを説明する。現在の W3C 出版物およびこの技術報告の最新改訂版の一覧は、 W3C 技術報告索引にある。

本仕様に対するフィードバックおよびコメントを歓迎する。 本仕様に関する議論には GitHub Issues が推奨される。 あるいは、PAT ワーキンググループのメーリングリスト public-patwg@w3.orgアーカイブ)へコメントを送ることもできる。 この草案では、ワーキンググループでまだ議論される予定の保留中の課題の一部を強調している。 これらの課題の結果については、有効であるかどうかも含め、まだ決定されていない。

この文書は、Private Advertising Technology ワーキンググループにより、勧告 トラックを用いた作業草案として公開された。

作業草案としての公開は、 W3C およびそのメンバーによる支持を意味しない。

これは草案文書であり、いつでも他の文書により更新、置換、または廃止される可能性がある。この文書を、 作業中のもの以外として引用することは不適切である。

この文書は維持管理され、随時更新される。この文書の一部は作業中である。

この文書は、W3C 特許ポリシーの下で活動するグループによって作成された。 W3C は、当該グループの成果物に関連して行われた特許開示の公開一覧を維持しており、そのページには特許を開示するための手順も含まれている。 ある個人が、その個人が必須請求項を含むと考える特許について実際の 知識を有する場合、その情報をW3C 特許ポリシーの第 6 節に従って開示しなければならない。

この文書は、2025年8月18日 W3C プロセス文書に準拠する。

1. 導入

この文書は、集約された差分プライバシー付きメトリクスの収集を可能にする、 ブラウザー向けの API を定義する。

この API の目標は、広告のアトリビューションを可能にすることである。

1.1. Attribution

広告における attribution とは、関心対象の結果に先行する行動を 識別し、それらの行動に価値を割り当てる処理である。

広告主が関心を持つ行動は、 主に広告の表示 (インプレッションとも呼ばれる)である。 その他の行動には、広告クリック(またはその他のインタラクション)や、 利用されなかった広告表示の機会が含まれる。

広告における望ましい結果は、 広告主が広告表示を通じて改善しようとする任意の結果を含むため、 より多様である。 望ましい結果は コンバージョンとも呼ばれることがあり、 これは潜在顧客を顧客へと「転換」することを指す。 コンバージョンに該当するものには、 販売、購読、ページ訪問、問い合わせなどが含まれ得る。

この API では、行動結果はいずれも イベント、すなわち一度だけ発生する物事である。 広告における attribution に特有なのは、 これらのイベントが同じサイト上で発生しない場合があることである。 広告は、広告主のサイト以外のサイトで表示されることが最も多い。

attribution における主な課題は、プライバシーを維持することである。 Attribution は異なるサイト上の活動を結び付ける。 attribution の目標は、コンバージョンが発生する前に同じ人物に表示された インプレッションを見つけることである。

attribution 情報が直接明らかにされた場合、 望ましくない コンテキスト横断認識を可能にし、 それによりトラッキングを可能にする。

この文書は、attribution 情報が集計サービスを用いて集計されることを保証することで、 コンテキスト横断認識を回避する。 集計サービスは、各人物がその集計に寄与した値を明らかにすることなく 集計を計算すると信頼される。

各ブラウザーインスタンスが特定のサイトの集計に寄与する情報量には 厳格な制限が設けられる。 差分プライバシーは、各寄与に追加のプライバシー保護を提供するために用いられる。

集計サービスの動作の詳細は § 7 集計 に含まれる。 使用される差分プライバシー設計は § 8 差分プライバシー で概説される。

1.2. 背景

Web の初期から、 広告はサイト作成を財政的に支援するため広く用いられてきた。

Web を他の広告媒体と区別する特徴の一つは、 広告キャンペーンの効果に関する情報を取得できることであった。

Web 広告主は、リーチ(広告を見た人数)、 フリークエンシー(各人が広告を見た頻度)、 およびコンバージョン(広告を見た人のうち、 その後その広告が促そうとしていた行動を取った人数)といった主要なメトリクスを測定できた。 比較すると、これらの測定は他のどの媒体よりもはるかに迅速かつ正確であった。

測定性能の代償はプライバシーであった。 正確で包括的な情報を生成するために、 広告事業者はすべての Web ユーザーの活動を広範に追跡した。 各ブラウザーには追跡識別子が与えられ、 多くの場合、サイト横断コンテンツにより記録される Cookie が用いられた。 関心対象のすべての行動がこの識別子に対して記録され、 個人のオンライン活動に関する包括的な記録が形成された。

個人の行動に関する詳細な記録を持つことで、広告主は人々の特徴を推論できた。 それらの特徴により、広告に適したオーディエンスを選びやすくなり、 その効果が大幅に向上した。 これにより、より多くの情報を収集する強い動機が生じた。

オンライン広告は非常に競争が激しい。 広告を表示するサイトは、各広告枠からできるだけ多くの収益を得ようとする。 広告主は、費用に対して最も効果がある場所に広告を掲載しようとする。 これらの主体—​およびその代理として活動する仲介者—​が得る競争上の優位性は、 潜在的なオーディエンスについてより包括的な情報を持つことに依存する。

時間の経過とともに、関心対象の行動はオンライン活動のほぼあらゆる側面を含むように拡大した。 その情報を Web 外の活動と相関させる方法が考案された。 活発な取引が形成され、 さまざまな目的で取引される個人情報を扱う複数の業者が存在するようになった。

1.3. 目標

この文書の目標は、トラッキングを可能にしない形で広告の attributionを実行する手段を定義することである。

1.4. エンドユーザーの利益

広告パフォーマンスの測定は、サイト横断の新たな情報フローを作り出す。 その情報フローは、コンテキスト横断認識というプライバシーリスクまたはコストを生じさせるため、 エンドユーザーに対する利益の観点から正当化される必要がある。

attributionの使用を通じてエンドユーザーが得る利益は間接的である。

Web サイトを訪問するエンドユーザーは、 そのサイトが表示する広告に対する主として自らの注意を通じて、 「無料」のコンテンツまたはサービスの代価を支払う。 この「価値」は広告主に生じ、 広告主はその対価としてサイトに支払う。 サイトはこの資金を、 コンテンツまたはサービスの提供を支援するために使用することが期待される。

| 広告主 | | | 注意 | | +-------------+ +-----+------+ ^ | | コンテンツと | お金 | サービス | | v .----+------. +------------+ | コンテンツ | | | | 制作 | 投資 | | 利益, | / |<-----------+ Web サイト +-------> | サービス | | | 費用, | 改善 | | | など... '-----------' +------------+ ]]> ユーザー 広告主 注意 コンテンツと お金 サービス コンテンツ 制作 投資 利益, / Web サイト サービス 費用, 改善 など...
広告支援型コンテンツおよびサービスにおける価値交換

attribution 測定システムへの参加は、 Web ユーザーにとって二次的なコストを構成する。

attribution のサポートは、 主としてどの広告がどのような状況で最も効果を発揮するかを広告主に知らせることにより、 より効果的な広告を可能にする。 そのような状況には、 広告が表示された時刻と場所、 広告が提示された人物、 そして広告自体の詳細が含まれ得る。

その情報を結果に結び付けることで、 広告主は、自らが最も重視する結果に最も頻繁につながる状況を知ることができる。 これにより、広告主は効果的な広告により多く支出し、 効果の低い広告への支出を減らすことができる。 これにより、得られる価値に対する広告の総費用が低下する。 [ONLINE-ADVERTISING]

コンテンツ出版社やサービス提供者など、広告在庫を提供するサイトは、 より効率的な広告から間接的に利益を得る。 広告主が求める結果につながる広告をより適切に表示できる広告媒体は、 広告枠に対してより高い料金を請求できる。

広告の掲載を通じて支援を得るサイトは、 質の高いコンテンツまたはサービスをよりよく提供できる。 重要なのは、その支援がオーディエンスから不均等に得られることである。 これは、他の形態の財政的支援よりも公平であり得る。 広告対象の商品に支出する傾向または能力が低い人々も、 支払う余裕のある人々と同じ広告支援型コンテンツおよびサービスを利用できる。 [EU-AD][COPPACALYPSE]

広告に支えられた「無料」サービスを提供する能力には、 それらのサービスの価値に由来する測定可能な経済的利益がある。 [FREE-GDP]

1.5. 集合的プライバシー効果

集計の使用は、適切に実装されている場合、サイトに提供される情報が個人ではなくグループに関するものとなることを保証する。

したがって、この機構の導入は、集合的プライバシーの考え方に沿った、集合的意思決定を表す。

attribution 測定への参加は、 参加するグループが大きいほどプライバシーコストが低くなる。 これは、集計が、 サイトが集計から個人に関する情報を抽出する能力に与える影響による。 これは特に、この仕様で使用されるプライバシー設計の数学的基盤である 中央型差分プライバシーに当てはまる。

参加者のより大きなコホートは、測定されている広告について、 より代表性が高く、したがってより有用な統計も生成する。

attribution が正当化される場合、 これら二つの要因はいずれも、すべてのユーザーに対して attribution を有効にする動機となる。

ユーザーエージェントが attribution 測定を有効にすることは、 一部の人々には好意的に受け止められない。 広告に関与することで生じるコストと利益の受け止め方は、人によって異なる。 提案されている設計では、人々がその選択をサイトに明らかにすることなく attribution に参加しているように見せる選択肢を可能にしている。§ 10.2 Attribution API の無効化を参照。

1.6. ヒストグラムを用いた Attribution

Attribution は、 一つ以上の広告掲載(インプレッション)と、 広告主が望む結果との相関を測定しようとする。

集計として考える場合、 個人に関する情報は有用ではない。 行動と結果はグループ化される必要がある。

attribution の最も単純な形式は、 広告の属性に従ってインプレッションをいくつかのグループに分割し、 コンバージョン数を数える。 グループは、広告が表示された場所、 表示された内容(「クリエイティブ」)、 広告が表示された時刻、 または誰に表示されたかといった属性から形成され得る。

これらのグループ化と、 それぞれに attribution されたコンバージョンの集計が ヒストグラムを形成する。 ヒストグラムの各バケットは、 広告グループのコンバージョンを数える。

example.com news.example classified.example search.example
インプレッションが表示されたサイト別にグループ化された、 コンバージョン数のサンプルヒストグラム

異なる目的には異なるグループ化が用いられ得る。 たとえば、クリエイティブ(広告の内容)によるグループ化は、 どのクリエイティブが最も効果的かを知るために用いられ得る。

各コンバージョンで 1 より大きい値を追加すると、 単なる件数以上のものが可能になる。 ヒストグラムは値も集計でき、 これは異なる結果を区別するために用いられ得る。 インプレッションに割り当てられる値は、 コンバージョン 値と呼ばれる。 より高いコンバージョン値は、より大きな購入や、 より高く評価される任意の結果に用いられ得る。 コンバージョン値は、信用を分割するために複数のインプレッション間で分割されることもある。

2. 動作の概要

Attribution API は、 インプレッションコンバージョンという二つのイベントクラス間の関連について、 集計情報を提供する。

インプレッションとは、 広告主が任意の Web サイト上で行う任意の行動である。 API は、何をインプレッションとして記録できるかを制約しない。 広告主が測定しようとする典型的な行動には、次のものが含まれる。

API において、コンバージョンは、 測定対象となる結果である。 API は、何が結果と見なされ得るかを制約しない。 広告主が測定しようとする典型的な結果には、次のものが含まれる。

この節の残りでは、 Attribution API が集計サービスと連携して 集計 attribution 測定を生成する方法を説明する。 その動作は次の図に示される。

| | | 広告主 | | 集計 | | サーバー | | サービス | | |<-----------+ | +--------------+ ヒストグラム +-------------+ ^ ^ ^ コンバージョン | | | レポート | | '-----------. | '-----------. | | | | +-------------+-+-+ +---------+----+ | | | | | | | | 他のユーザー | パブリッシャー | | | | 広告主 | | サイト | | | | サイト | | | | | | | +------+------+-+-+ +-----+--------+ | | ^ saveImpression | measureConversion | | コンバージョン | | | レポート v v | +-------------------------------------+---------+ | | | Private Attribution API | | | +-----------------------------------------------+ ^ | v .-----------. | | | インプレッション | | ストア | | | '-----------' ]]> コンバージョン レポート 広告主 集計 サーバー サービス ヒストグラム コンバージョン レポート 他のユーザー パブリッシャー 広告主 サイト サイト saveImpression measureConversion コンバージョン レポート Private Attribution API インプレッション ストア
Attribution 動作の概要

インプレッションが発生すると、 saveImpression() メソッドを使用して、 ブラウザーに情報の保存を要求できる。 これには、インプレッションの識別子と、 インプレッションについての追加情報が含まれる。 たとえば、広告主は追加情報を使用して、 インプレッションが広告ビューであったか広告クリックであったかを記録する可能性がある。

コンバージョン時に、コンバージョンレポートが 作成される。 コンバージョンレポートは、 ブラウザーが以前に保存した任意のインプレッションからの情報を含む、 暗号化されたヒストグラム寄与である。

measureConversion() メソッドは、 コンバージョンレポートを構築する方法をブラウザーに伝えるために使用される、 制限付きクエリを受け入れる。 これには、ブラウザーが保存したインプレッションから選択する値、 選択されたインプレッションに割り当てられるコンバージョン値、 およびコンバージョンレポートを構築するために必要なその他の情報が含まれる。

コンバージョンレポートにより作成されるヒストグラムは、次のように構築される。

ブラウザーは、報告されたコンバージョンを反映するようにプライバシー予算ストアを更新する。

結果のヒストグラムは、選択された集計サービスの要件に従って集計用に準備され、サイトに返される。 これには少なくともヒストグラムの暗号化が含まれる。

この API を呼び出すサイトは、常に有効なコンバージョンレポートを受け取る。 その結果、サイトはこのインタラクションから他のサイトで何が起きたかについて何も知ることがない。

サイトは、この API の呼び出しから受け取る暗号化されたヒストグラムを収集し、 それらを集計サービスに提出できる。

サイトから暗号化されたヒストグラムの集合を受け取ると、集計サービスは次を行う。

  1. 提供された入力から以前に集計を計算しておらず、 十分な数のコンバージョンレポートがあることを確認する、

  2. 十分なノイズを含めてヒストグラムを加算し、 差分プライバシー付きの集計ヒストグラムを生成する、そして

  3. 集計をサイトに返す。

最終出力を attribution result と呼ぶ。

3. API の使用

Attribution API を使用するサイトは、通常、 インプレッションまたはコンバージョンのいずれかを登録するが、 場合によっては同じサイトが 両方を行うこともある。

インプレッションを登録するには、サイトは saveImpression() を呼び出す。この API を使用するために、 パラメーター値を収集する以外の準備は必要ないが、 Attribution API を使用するかどうかを判断する際に、サポートされている aggregationServices を調べることは有用な場合がある。

ユーザーエージェントにリソースを提供する際、HTTP レスポンスに `Save-Impression` ヘッダーを含めることによってインプレッションを登録することも可能である。

コンバージョンレポートを要求するには、サイトは measureConversion() を呼び出す。 この API を呼び出す前に、サイトはサポートされている集計サービスを選択しなければならない。 ページは、 aggregationServices にあるサポート済みサービスのいずれかを選択できる。 選択されたサービスの名前は、 measureConversion() メソッドを呼び出す際に、 AttributionConversionOptions 辞書の aggregationService メンバーとして指定しなければならない。

3.1. サイト識別子

この API は、動作の主なスコープとして、HTML におけるサイトの定義に依存する。 三種類のサイトが認識される。

この API はオリジンではなくサイトを使用する。 これは、プライバシー上の影響を持ち得るすべての活動を単一の主体に関連付けることに依存しているためである。 Cookie のような機能は、プライバシーに関連する情報を同一サイトオリジン間で自由に交換できるようにし、 それがなければプライバシー予算を超過するために使用され得る。

この API のすべての機能は、 navigator.attribution 属性に接続される。

partial interface Navigator {
  [SecureContext, SameObject] readonly attribute Attribution attribution;
};

これは三つの主要な機能を提供する。

3.3. サポートされる集計サービスの検索

aggregationServices 属性は、 ユーザーエージェントがサポートする集計サービスの集合を含む。 ページは、 measureConversion() メソッドを呼び出す際に、 これらのサービスの一つを選択して指定しなければならない。 インプレッションを登録する前にサポートされるサービスを照会することも有用な場合があるが、 これは必須ではなく、 インプレッションは単一の集計サービスにスコープされない。

サイトには、使用する集計サービスについて優先順位がある場合がある。 次のコードは優先リストを反復処理し、 ユーザーエージェントがサポートするものを見つける。

const preferredServices = [
  "https://aggregator.example/tee",
  "https://aggregator.example/dap",
  "https://example.com/aggregator",
];
const supportedServices = navigator.attribution?.aggregationServices;
const serviceUrl = preferredServices.find(url => supportedServices?.has(url));

ユーザーエージェントがその URL をサポートし、 かつそれが優先サービスの一つを含む場合、 最初の優先サービスが serviceUrl という名前の変数に保存される。 それ以外の場合、serviceUrlundefined のままとなる。

enum AttributionAggregationProtocol { "dap-18-histogram" };

dictionary AttributionAggregationService {
  required AttributionAggregationProtocol protocol;
};

[SecureContext, Exposed=Window]
interface AttributionAggregationServices {
  readonly maplike<USVString, AttributionAggregationService>;
};

[SecureContext, Exposed=Window]
interface Attribution {
  readonly attribute AttributionAggregationServices aggregationServices;
};

aggregationServices 属性は、 集計サービスを識別する URL から、 そのサービスに関するメタデータへのマッピングである。

protocol, 型は AttributionAggregationProtocol
集計サービスが使用する protocol。 同じプロトコルの異なるバージョンは異なる値を使用する。 単一のサービスプロバイダーが複数のプロトコルをサポートする場合であっても、 それぞれは異なる URL を使用する必要がある。 これにより、プロトコルの選択も指定することなく、 各サービスを URL により一意に識別できることが保証される。

識別された集計サービスを選択するために、 URL は measureConversion() への aggregationService パラメーターとして渡される。

AttributionAggregationProtocol は、 異なる集計サービスで使用される提出プロトコルを記述する。 この文書は二つのプロトコルを定義する。

dap-18-histogram
MPC を使用する DAP ベースのプロトコル [DAP]§ 7.1 マルチパーティ 計算集約を参照。

3.4. インプレッションの保存

saveImpression() メソッドは、 ユーザーエージェントに、インプレッションインプレッションストアに記録するよう要求する。

広告主の広告を表示するサイトは、 インプレッションを保存できる。

この場合、サイトはインプレッションを直接保存し、 広告主(advertiser.example)を識別し、 広告主によって取り決められた情報を含める。 次の例では、 これには、広告主が後でこの広告を選択するために使用する可能性のある matchValue 値(2)、 attribution された値を含める先のヒストグラムのインデックス(histogramIndex = 3)、 および広告主が必要とする期間以上の保持期間(lifetimeDays = 7) が含まれる。

navigator.attribution.saveImpression({
  histogramIndex: 3,
  matchValue: 2,
  conversionSites: ["advertiser.example"],
  lifetimeDays: 7,
});

あるいは、Supply-Side Platform(SSP)や Demand-Side Platform(DSP)などの仲介者が、 iframe から同じ API を呼び出す場合がある。 フレームから同じ API 呼び出しを行うと、 仲介サイトの識別子がインプレッションとともに保存される。

dictionary AttributionImpressionOptions {
  required unsigned long histogramIndex;
  unsigned long matchValue = 0;
  sequence<USVString> conversionSites = [];
  sequence<USVString> conversionCallers = [];
  unsigned long lifetimeDays = 30;
  long priority = 0;
};

dictionary AttributionImpressionResult {
};

[SecureContext, Exposed=Window]
partial interface Attribution {
  Promise<AttributionImpressionResult> saveImpression(AttributionImpressionOptions options);
};

saveImpression() への引数は次のとおりである。

histogramIndex, 型は unsigned long
measureConversion() が、この インプレッションを後続のコンバージョンと照合した場合、コンバージョン値は、 このインデックスで識別されるヒストグラムバケットに追加される。
matchValue, 型は unsigned long、デフォルトは 0
インプレッションに関連付けられた任意のメタデータ片。この値は、 どのインプレッションがコンバージョンから attribution を受け得るかを識別するために使用できる。
conversionSites, 型は sequence<USVString>、デフォルトは []
このインプレッションに対するコンバージョンが 発生し得るトップレベルのコンバージョン サイトであり、 それらのドメイン名によって識別される。 measureConversion() メソッドは、 示されたサイトの一つによって呼び出された場合にのみ、このインプレッションに attribution する。 空の場合、任意のコンバージョン サイトが一致する。
conversionCallers, 型は sequence<USVString>、 デフォルトは []
このインプレッションをコンバージョンのために 選択できる仲介サイトまたはコンバージョンサイトであり、 それらのドメイン名によって識別される。 measureConversion() メソッドは、 示されたサイトの一つによって呼び出された場合にのみ、このインプレッションに attribution する。 このオプションには、コンバージョンサイト仲介サイトの両方が含まれる。 空の場合、API を呼び出す任意のサイトが一致する。
lifetimeDays, 型は unsigned long、デフォルトは 30
正の「有効期間」(日数)であり、その経過後はインプレッションが attribution を受けられなくなる。 ユーザーエージェントは有効期間に上限を課すべきであり、 ここで指定された値がその上限を超える場合は、その値を黙って減らすべきである。
priority, 型は long、デフォルトは 0
attribution 中にインプレッションをソートするために使用される整数。

3.5. コンバージョンに対する Attribution の要求

measureConversion() メソッドは、 ユーザーエージェントに、コンバージョンに対してattributionを実行し、 コンバージョン レポートを返すよう要求する。

measureConversion() メソッドは、 一致するインプレッションが見つかるかどうかに関係なく、 常にコンバージョンレポートを返す。 一致がない場合、または差分プライバシーが attribution の報告を許可しない場合、返されるコンバージョンレポートは ヒストグラムに寄与しない、すなわち一様にゼロとなる。

コンバージョンを観測したサイトは、 異なる保存済みインプレッションの効果の測定を 要求することを選択する場合がある。

暗号化された測定の作成を要求するために、 サイトは measureConversion() メソッドを呼び出す。

この関数は四つの異なる種類の入力を受け取る。

  1. 選択された集計サービス。 これは URL を使用して識別される。 集計サービスを選択するための例の手順は、 ブラウザーがサポートするサービスを選択する方法を示している。

    const serviceDetails = {
      aggregationService: serviceUrl,
    };
    
  2. 集計測定の詳細。 これらの値は、複数のブラウザーにわたる API のすべての呼び出しで一貫している。 これには、ヒストグラムのサイズと、 費やされる可能性のあるプライバシー予算の量が含まれる。

    const aggregatedMeasurementDetails = {
      histogramSize: 20,
      epsilon: 1,
    };
    
  3. 考慮するインプレッションを選択する、 すべて任意の属性の集合。 これには、インプレッションがどれだけ古くてもよいか (lookbackDays)、 インプレッションを保存した可能性のあるインプレッション サイトimpressionSites)、 インプレッションを保存した可能性のある仲介サイトimpressionCallers)、 および matchValues の選択が含まれる。

    const selectionDetails = {
      lookbackDays: 14,
      impressionSites: ["publisher.example", "other.example"],
      impressionCallers: ["ad-tech.example"],
      matchValues: [2],
    };
    
  4. attribution ロジックのパラメーター。

    const attributionDetails = {
      // top impression's histogram index gets 50% of value, the next two 25% each
      credit: [.5, .25, .25],
      value: 3,
      maxValue: 7,
    };
    

これらの値が決定されたら、 サイトは API を呼び出して、暗号化されたコンバージョンレポートを取得する。

const measurement = await navigator.attribution.measureConversion({
  ...serviceDetails,
  ...aggregatedMeasurementDetails,
  ...selectionDetails,
  ...attributionDetails,
});
sendReportToServer(measurement.report);

このレポートは、 このブラウザーおよび他のブラウザーからの他のレポートとともに 収集できる。 収集されたレポートはすべて集計サービスに提出して、 集計ヒストグラムを取得できる。

dictionary AttributionConversionOptions {
  required USVString aggregationService;
  double epsilon = 1.0;

  required unsigned long histogramSize;

  unsigned long lookbackDays;
  sequence<unsigned long> matchValues = [];
  sequence<USVString> impressionSites = [];
  sequence<USVString> impressionCallers = [];

  sequence<double> credit;
  unsigned long value = 1;
  unsigned long maxValue = 1;
};

dictionary AttributionConversionResult {
  required Uint8Array report;
};

[SecureContext, Exposed=Window]
partial interface Attribution {
  Promise<AttributionConversionResult> measureConversion(AttributionConversionOptions options);
};

measureConversion() への引数は次のとおりである。

aggregationService, 型は USVString
aggregationServices にある 集計サービスからの選択。
epsilon, 型は double、デフォルトは 1.0
このコンバージョンレポートに費やすプライバシー 予算の量。
histogramSize, 型は unsigned long
コンバージョンレポートで使用するヒストグラムバケットの数。
lookbackDays, 型は unsigned long
正の整数日数。過去 lookbackDays 以内に発生したインプレッションのみが、 このコンバージョンと一致し得る。 省略された場合、最大ルックバックと等価である。
matchValues, 型は sequence<unsigned long>、デフォルトは []
このインプレッションを選択するために使用できる match value の 集合
impressionSites, 型は sequence<USVString>、デフォルトは []
インプレッションサイトの集合インプレッションサイトが この集合に含まれる場所で記録されたインプレッションのみが、 このコンバージョンと一致する資格を持つ。 空の場合、任意のサイトが一致する。
impressionCallers, 型は sequence<USVString>、デフォルトは []
saveImpression() API を呼び出した可能性のある、 インプレッションサイト仲介 サイトの両方を含むサイトの集合。 空でない場合、 一覧にあるサイトの一つによって記録されたインプレッションのみが、 このコンバージョンと一致する資格を持つ。
credit, 型は sequence<double>
数値のリスト
value, 型は unsigned long、デフォルトは 1
コンバージョン 値。attribution が行われ、プライバシー 制限が満たされる場合、この値はコンバージョンレポートにエンコードされる。
maxValue, 型は unsigned long、デフォルトは 1
集計に含まれるすべての寄与にわたる最大のコンバージョン 値。 epsilon とともに、これは結果に追加されるランダムノイズの分布を較正するために使用される。 また、このコンバージョンレポートに費やすプライバシー予算の量を 決定するためにも使用される。

3.6. 仲介者の役割

この API は、仲介者トップレベルサイトに代わって 動作することをサポートしている。 広告は、掲載、入札、および測定を担当する独立した事業者に委任されることが多い。

仲介者によって保存されるインプレッションは、 仲介サイトの識別子を記録する。 コンバージョン測定のために インプレッションを選択する際、 仲介サイト 識別子を使用してインプレッションを選択できる。

3.7. ヒストグラム構築

概念的には、保存された各インプレッションは、 単一のヒストグラム定義を持つ。 各インプレッションは、 そのインプレッションに割り当てられる 結果のヒストグラムのどこに現れるかを決定する、単一のHistogram Index 属性を持つ。

したがって、measureConversion() の各呼び出しは、同じヒストグラム定義を持つインプレッションを選択する必要がある。 これは API のすべての使用に適用されるが、 ヒストグラムの一貫した定義は、インプレッションが 複数の仲介者によって保存され、 測定される場合に特に重要である。

measureConversion() の呼び出し時に選択され得る すべてのインプレッションは、 同じヒストグラム定義を使用する必要がある。 API は、適切なインプレッションだけが選ばれることを保証するための いくつかの手段を提供する。

保存されたインプレッションについては、次のとおりである。

コンバージョン時点の共通 照合ロジックの一部として、次のとおりである。

これらのオプションは、attribution がヒストグラムを選択する方法についてサイトに柔軟性を提供する。 これは、コンバージョンサイトによる異なるヒストグラムの使用を妨げない。 複数のインプレッションは、 measureConversion() の呼び出しが、 異なるヒストグラム定義を持つインプレッションを 決して選択しない限り、 異なるヒストグラム定義とともに保存できる。 これにより、measureConversion() を複数回呼び出すことで、 コンバージョンを複数のヒストグラムに attribution できることが保証される。

3.8. Permissions Policy 統合

仲介者へ委任する能力は、 Permission Policyによって制御される。

この仕様は二つのポリシー制御機能を定義する。

これら両方の機能に対するデフォルト許可リスト* である。

saveImpression()measureConversion() に別々の権限を持たせることで、両方を行うページは、 サブリソースを想定される種類の活動に制限できる。

デフォルトで権限を有効にすることで、 外部サービスを統合する作業が簡素化される。

Permissions policy は、全か無かの制御のみを提供する。 プライバシー予算の一部を委任することは可能にしない。

4. API 内部構造

4.1. インプレッションストア

インプレッションストアは、 measureConversion() メソッドによって、一致する インプレッションを見つけるために使用される。

この API はサイトによるデータの保存を可能にするが、 インプレッションストアストレージキーを使用しない。

4.1.1. 内容

インプレッションストアは、 集合であり、インプレッションからなる。

Match Value: saveImpression() に渡された matchValue
Impression Site: saveImpression() が呼び出された インプレッション サイト
Intermediary Site: saveImpression() を呼び出した仲介サイト、 または API がインプレッションサイトによって呼び出された場合は undefined
Conversion Sites: saveImpression() に渡された コンバージョンサイト集合
Conversion Callers: measureConversion() を呼び出す際に、 このインプレッションを選択できるサイト、すなわち コンバージョンサイトまたは仲介サイト集合
タイムスタンプ: saveImpression() が呼び出された時刻。
有効期間: インプレッションが attribution の対象として残る期間saveImpression() の呼び出しによるもの、 またはユーザーエージェント定義の制限によるもの。
Histogram Index: saveImpression() に渡されたヒストグラムインデックス。
優先度: attribution 中にインプレッションをソートするために使用される整数。

4.1.2. 保守

ユーザー エージェントは、 タイムスタンプおよび 有効期間の値を 定期的に使用し、インプレッションストア内の、期限切れとなったインプレッションを識別して削除すべきである。

measureConversion() が、期限切れのインプレッションattributionから 除外する限り、 インプレッションを期限切れと同時に削除する必要はない。 しかし、 ユーザー エージェントは期限切れのインプレッションを無期限に保持すべきではない。

4.1.3. Clear-Site-Data 統合

`Clear-Site-Data` フィールド [CLEAR-SITE-DATA] は、 サイトに対し、ユーザーエージェントによって維持される状態を削除する能力を与える。 `"impressions"` 型は、 Clear Site Data § 3.1 The Clear-Site-Data HTTP Response Header Field で定義される、認識される型の一覧に追加される。

レスポンスについてサイトデータを消去する アルゴリズムが呼び出された場合、 型のリストが `"impressions"` を含むなら、 サイトについてインプレッションを消去するが呼び出され、 origin を渡す。

origin origin を与えられ、 サイトについて インプレッションを消去するには、 次の手順を実行する。
  1. originタプルオリジンでない場合、戻る。

  2. originhost 部分を渡して、 登録可能ドメインを取得するを呼び出すことで返される値を site とする。

  3. インプレッション ストアの各インプレッション impression について反復する

    1. impressionIntermediary Siteundefined であり、 そのImpression Sitesite と等しい場合、 remove impression from the インプレッションストア and continue.

    2. impressionsite と等しいIntermediary Siteを持つ場合、 remove impression from the インプレッションストア and continue.

    3. impressionConversion Sitessite含む場合:

      1. impressionConversion Sitesから site削除する

      2. impressionConversion Sites空である場合、 impressionインプレッションストアから削除して、 continue

    4. impressionConversion Callerssite含む場合:

      1. impressionConversion Callersから site削除する

      2. impressionConversion Callers空である場合、 impressionインプレッションストアから削除して、 continue

この処理は、 空の集合Conversion Sitesで保存されたインプレッションを削除しない。

4.1.4. サイト名

インプレッションストアは、 三種類のサイトに関する情報を保存する。 インプレッションサイト、 任意の仲介サイト、 およびコンバージョンサイト集合である。

これらのサイトはすべて、 "https" のスキームを持つ scheme-and-host 形式でなければならない。 これは、hostの 単純な文字列シリアライズが、サイトを識別するのに十分であることを意味する。 したがって API は、単純な文字列を使用して サイトを表すことができる。

実装が内部的に、タプルのhost 部分だけを使用してサイトを表すことも可能である。

文字列 input を与えられ、 siteまたは失敗を返す サイトを解析するには、 次の手順を実行する。
  1. host を、input を渡してホストパーサーを呼び出すことにより返される値とする。

  2. host が failure である場合、failure を返す。

  3. site を、host を渡して登録可能ドメインを取得するにより返される値とする。

  4. site が null である場合、failure を返す。

  5. site が "localhost" である場合、または site が ".localhost" で終わる場合、 failure を返す。

  6. ("https", site) のscheme-and-host タプルを返す。

このアルゴリズムは、登録可能ドメインよりも多くの ドメインラベルを含む文字列からも、 site を正常に生成する。 たとえば、"extra.example.com" は "example.com" として解析される。

このアルゴリズムは localhost ドメイン [RFC6761] を受け入れない。 そのため、サイト名の抽出に依存する任意のアルゴリズムは、 localhost ドメインが言及された場合、 または現在のサイト(トップレベルまたはフレーム内)が localhost ドメインである場合に失敗する。 これは、テストおよび開発にローカルサーバーを使用することを困難にする可能性がある。 実装は、テストおよび開発を支援するために localhost チェックを無効化する設定を提供してもよい。

4.2. プライバシー予算管理のための状態

ユーザー エージェントは、 プライバシー予算の消費を管理するために使用される、いくつかの状態を維持する。

プライバシー予算 ストアグローバルプライバシー予算ストア、 およびインプレッションサイトクォータストアは、 プライバシーおよび安全予算を控除するによって更新される。

インプレッション ストアと同様に、 プライバシー予算 ストアおよび関連ストアはストレージキーを使用しない。 これらのストアには、情報の消去方法に関する追加の制約がある。 詳細は § 10.7 API 状態の消去 を参照。

attribution budget lock を真偽値フラグとして定義する選択は、 仕様上の便宜によるものである。 実装には代替構造の方が適している可能性がある。 実装は、競合の範囲を狭めるために、 エポックごとなどにこの値を分割できる可能性がある。

4.2.1. プライバシー予算ストア

プライバシー予算キーは、 次の項目からなるタプルである。

エポックインデックス

エポックインデックス

サイト

サイト

プライバシー予算 ストアは、キーが プライバシー予算キーであり、 値が32 ビット符号なし整数であるマップである。 これらの整数は、 microepsilon単位の値を格納する。 microepsilonは、 差分プライバシー [DP] で使用される 単位 epsilon 値の 100 万分の 1 である。

32 ビット整数の選択は、epsilon の設定を 最大 epsilon 4294 以下に制限する。 これは実装にとって十分すぎるはずである。

グローバル プライバシー予算ストアは、キーが エポックインデックスであり、値が 32 ビット符号なし整数であるマップであり、 microepsilon単位である。

グローバルプライバシー予算ストアは、 すべてのサイトにまたがって適用され、 各エポックで更新される単一の プライバシー予算の消費を追跡する。 これは、同じ人物の活動を複数のサイトにまたがって相関させることができる 敵対者に対する安全制限を提供する。

サイトごとのプライバシー予算ストアとは異なり、 グローバルプライバシー予算ストアエポックインデックスのみによってキー付けされ、 サイトによってはキー付けされない。

インプレッション サイトクォータストアは、キーが プライバシー予算キーであり、 値が32 ビット符号なし整数であるマップであり、 microepsilon単位である。

インプレッションサイトクォータストアは、 単一のインプレッション サイトが一つのエポックで寄与できる「在庫」 (インプレッションに関連するプライバシー予算)の量を制限する。 これは、単一のインプレッションサイトが、 悪意をもって引き起こされ得るグローバル制限から過剰な量を消費することを防ぐ。

プライバシー予算 キー keyインプレッション集合 impressionsdouble epsilon、 integer value、 integer maxValue、 boolean isSingleEpoch、 integer l1Normプライバシー予算キー集合 deductedImpressionQuotas およびエポックインデックス集合 deductedGlobalBudgetsを与えられ、 プライバシー および安全予算を控除するには:
  1. isSingleEpoch の場合は l1Norm、そうでない場合は 2 * valuel1NormSensitivity とする。

  2. 2 * valuevalueSensitivity とする。

  3. 2 * maxValue / epsilonnoiseScale とする。

  4. l1NormSensitivity / noiseScalel1NormDeductionFp とする。

  5. valueSensitivity / noiseScalevalueDeductionFp とする。

    単一エポックの attribution は、 エポックをまたぐ連鎖的影響を生じさせない。 複数エポックに関与する Attribution は、 1 つの変更がエポックをまたいで attribution に影響する可能性があるため、 2 倍の予算を消費する。 控除を 2 倍にすることは、 maxValue / epsilon に比例するラプラスノイズが 集計ヒストグラムに追加されることを前提としている。

  6. l1NormDeductionFp * 1000000 を正の無限大方向に丸めたものを l1NormDeduction とする。

  7. valueDeductionFp * 1000000 を正の無限大方向に丸めたものを valueDeduction とする。

  8. attribution budget lock が true の場合、 その値が false になるまで待機し、 その後その値を true に設定する。

  9. keyl1NormDeductionvalueDeductionimpressions、および isSingleEpochを指定して 利用可能なプライバシー予算を確認するを 呼び出した結果が false の場合、次の手順を実行する。

    1. attribution budget lock を false に設定する。

    2. false を返す。

  10. すべての予算確認に合格したので、控除を実行する。

    1. isSingleEpoch の場合は l1NormDeductiondeduction とし、そうでない場合は valueDeductiondeduction とする。

    2. プライバシー予算ストア内で key値を取得する結果を、 サイトごとのプライバシー予算をデフォルトとして、 currentValue とする。

    3. プライバシー予算ストア内の key の値を currentValuededuction設定する

    4. keyエポックインデックス要素を epoch とする。

    5. deductedGlobalBudgetsepoch含まない場合、 deductedGlobalBudgetsepoch追加し、 グローバルプライバシー予算 ストア[epoch] を valueDeduction だけ減算する。

    6. impressions 内の各 impression について反復する

      1. impressionimpression siteimpressionSite とする。

      2. epoch および impressionSite を項目とする プライバシー予算 キーimpressionQuotaKey とする。

        以下は、そのサイトに対して複数のインプレッションがある場合に、 同じインプレッションサイトクォータから複数回予算を控除しないことを保証する。

      3. deductedImpressionQuotasimpressionQuotaKey含まない場合:

        1. deductedImpressionQuotasimpressionQuotaKey追加する。

        2. エポックごとのインプレッションサイトクォータを デフォルトとして、 エポックごとのインプレッションサイトクォータ内の impressionQuotaKey値を取得する結果を currentImpressionQuotaValue とする。

        3. エポックごとのインプレッションサイトクォータ[impressionQuotaKey\] の値を currentImpressionQuotaValuevalueDeduction設定する

  11. attribution budget lock を false に設定する。

  12. true を返す。

プライバシー予算 キー key、integer l1NormDeduction、 integer valueDeductionインプレッション集合 impressions および boolean isSingleEpochを与えられ、 利用可能な プライバシー予算を確認するには:
  1. isSingleEpoch の場合は l1NormDeductiondeduction とし、そうでない場合は valueDeductiondeduction とする。

  2. プライバシー予算ストアから key値を取得する値を、 サイトごとのプライバシー予算をデフォルトとして、 currentValue に設定する。

  3. deductioncurrentValue より大きい場合、false を返す。

  4. keyエポックインデックス要素を epoch とする。

  5. グローバルプライバシー予算ストアから epoch値を取得する値を、 エポックごとのグローバルプライバシー予算をデフォルトとして、 currentGlobalValue に設定する。

  6. valueDeductioncurrentGlobalValue より大きい場合、false を返す。

  7. impressions 内の各 impression について反復する

    1. impressionimpression siteimpressionSite とする。

    2. epoch および impressionSite を項目とする プライバシー予算キーimpressionQuotaKey とする。

    3. インプレッションサイトクォータストアから impressionQuotaKey値を取得する値を、 エポックごとのインプレッションサイトクォータを デフォルトとして currentImpressionQuotaValue に設定する。

    4. valueDeductioncurrentImpressionQuotaValue より大きい場合、 false を返す。

  8. true を返す。

4.2.2. Attribution API の有効化

The Attribution API は、一時的アクティベーション消費 APIを おおよそのモデルとしている。 そこでは、ユーザーアクティベーションが 一時的に API を利用可能にする。 いくつかの違いにより、この設計は 一時的アクティベーション消費 APIと区別される:

これは効果として、広く一時的アクティベーションに似ている。 しかし、attribution activation は一時的アクティベーションとは別個の状態を使用し、 その状態は異なる方法で追跡される。 Attribution activation 状態は、影響を受ける Window ではなく、 トップレベル traversable上で追跡される。 その結果、attribution activation はナビゲーションをまたいで持続し、 アクティベーションがナビゲーションにつながる場合に、 新しいページの読み込み後の短い期間、 API の使用を可能にする。

別個の状態を持つことで、 attribution activation が一時的アクティベーション消費 APIと相互作用しないことが保証される。 アクティベーションを消費する API は、 Attribution API が利用可能になることを妨げない。 同様に、Attribution API を使用しても、 一時的アクティベーション消費 APIが利用可能になることを妨げない。

別個の状態追跡により、ユーザーアクティベーションを消費するユーザー操作を、 Attribution API により独立して測定できることが保証される。

ナビゲーションをまたいでアクティベーションを保持することで、広告における一般的なパターンが可能になる。 サイトは Attribution API を使用して、 インタラクションが発生した site から、 または後続の site 上で、 アクションを調べることができる。

これを実装するために、 各トップレベル traversableは、Attribution API について 2 つの状態を追跡する:

  1. attribution enabled flag は、API が有効であるかどうかを追跡する boolean 値である。 この値は false に初期化される。

  2. attribution activation timestamp は、 最後のユーザーアクティベーションを追跡する momentである。 この値はunix epochに初期化される。

実装は、attribution activation duration も、 実装定義durationとして設定する。 これは一時的アクティベーション期間以上であるべきだが、 ナビゲーションによる遅延が Attribution API をアクセス不能にしないことを保証するため、 より大きな値が望ましい場合がある。

実装は、ページ読み込み時間に伴う遅延を考慮するため、 許容される時間を延長することを選んでもよい。 固定値では、デバイスや使用されるネットワークにおける性能差を 考慮できない可能性がある。 実装は、性能特性の理解に基づいて、 attribution activation duration の値を 延長してもよい。 あるいは、実装はページ読み込み中に任意のタイマーを一時停止してもよい。

ユーザー操作により、Document document 内でアクティベーションを引き起こす入力イベントが発火する場合、 ユーザーエージェントは、イベントを配送する前に、 アクティベーション通知手順に加えて、以下の手順を 実行しなければならない。 この場合、navigable navigable を null に設定する。

あるいは、ナビゲーションが開始するとき、 ユーザーナビゲーション関与"browser UI" である場合、 navigable を影響を受けるnavigableに設定し、 document を null に設定して、 以下の手順を実行する。

手順は次のとおりである:

  1. navigable が null でない場合、nnavigable とする。

  2. そうでなければ、n を、documentノード navigableを取得した結果とする。

  3. top を、nトップレベル traversableを取得した結果とする。

  4. topattribution activation timestamp現在の高解像度時刻に設定する。

トップレベル traversable top が、ナビゲートされるとき、 navigate アルゴリズムの一部として、 document state documentState が確定された後、 かつresponseorigin responseOrigin が既知になった後、 次の手順を実行する:
  1. documentStateinitiator originresponseOriginsame siteである場合、返す。

  2. topattribution enabled flagを false に設定する。

Document document が与えられ、 失敗時に "NotAllowedError" DOMException を投げるものとして、 attribution API activation を確認するには:
  1. n を、documentノード navigableを取得した結果とする。

  2. top を、nトップレベル traversableを取得した結果とする。

  3. topattribution enabled flagが true である場合、返す。

  4. lastActivationtopattribution activation timestampとする。

  5. lastActivationattribution activation duration を加えたものが、現在の高解像度時刻より小さい場合、 "NotAllowedError" DOMException を投げる。

  6. topattribution enabled flagを true に設定する。

4.2.3. エポック開始時刻

プライバシーバジェットエポック(またはエポック)は、 ある期間を識別する。 エポックの長さは、1 週間、すなわち 7 に固定される。 ここで、は 86400 秒として定義される。

エポック開始時刻は、 壁時計からの時点である。 エポックは、 各ユーザーエージェントについて、 週の中からランダムに選択された時刻に開始する。 これにより、プライバシー バジェットがゼロに達することで生じる集計の偏りが、 すべてのユーザーからのすべての貢献全体に 平均化されることが保証される。

同一デバイス上では、 すべてのプライバシーバジェットおよびクォータは、 エポック開始時刻に基づいて同時に更新される。

開始時刻は、 現在の エポックを取得するアルゴリズムを呼び出した副作用として、エポックが最初に必要になったときに ユーザーエージェントによってランダムに選択される。

エポックインデックスは、 与えられたエポックを参照する整数である。 エポックインデックスは、 インプレッション およびエポック開始時刻に アクセスするために使用される。

時点が抽象的な概念であり、 別の時点に相対的な期間としてしか表現できないのと同様に、 エポックは 抽象的である。

エポックインデックスは、 設定された参照点に相対的な 整数として保存される。 この仕様におけるエポックインデックスは、 エポック開始 時刻 を参照点として使用する。 ユーザーエージェントは、別の時点を使用して、 “ゼロ”または参照エポックを示すことを選択してもよい。

この仕様のアルゴリズムはすべて、より抽象的なエポックではなく、 具体的なエポックインデックスを使用する。 時点は、 現在の エポックを取得するアルゴリズムを使用して、 対応するエポックエポックインデックスへ変換される。

時点 t が与えられ、 エポックインデックスを返して、 現在の エポックを取得するには:
  1. period を、1 エポック期間 とする。

  2. エポック 開始時刻が設定されていない場合、 次のように、直近のエポック 内からランダムに選択された時刻に設定する:

    1. rand を、0(含む)から period(含まない)の間で ランダムに選択された期間t から差し引いた値とする。

    2. ms を、Unix エポックから rand までの 期間に含まれるミリ秒数とする。

    3. hour を、ms を 3600000 (1 時間のミリ秒数)で割り、 ゼロ方向に丸めた後、 3600000 を掛けた値とする。

    4. エポック開始時刻を、Unix エポックhour期間として加えた値に設定する。

  3. startエポック開始時刻とする。

  4. elapsed を (tstart) / period とする。

  5. elapsed を、負の無限大方向に丸めた整数として返す。

4.2.4. 最後の閲覧履歴消去時刻

直近の閲覧履歴消去は、 閲覧履歴が最後に消去された時刻を追跡する、 壁時計を使用する時点である。 直近の閲覧履歴消去値は、 ユーザーの要求により いずれかのサイトレベル状態が消去されたときに、 現在の粗化された壁時計時刻 に更新される。 この値は最初は未設定である。

任意の最適化として、 次のすべてが true である場合、直近の閲覧履歴消去の更新を省略できる:

3 つの条件がすべて true である場合、 直近の閲覧履歴消去は更新する必要がない。 代わりに、影響を受けるすべてのサイトおよびエポック対応するエポックインデックスを使用する) から形成できるすべてのプライバシーバジェット キーの組み合わせについて、 値 0 を設定することで、 プライバシー バジェットストアを更新しなければならない。

この最適化は、ユーザーエージェントが、 影響を受けるサイトとのインタラクションに関する情報を、 影響を受けるエポック内で保持していることに依存する。 これは、保持されているインタラクションのいずれもが バジェットの枯渇をもたらした可能性があるためにのみ機能する。 閲覧履歴の空白に関する情報が 露出しないようにするには、バジェットをリセットする必要がある。

時点 now が与えられ、 エポックインデックスを返して、 attribution 用の開始エポックを取得するには:
  1. earliestEpochIndex を、 now最大 lookback 日数現在のエポックを取得する 結果とする。

    これにより、可能なすべてのインプレッションを照会できることが保証される。

  2. startEpochearliestEpochIndex とする。

  3. 直近の閲覧履歴消去が設定されている場合、 次の手順を実行する:

    1. clearEpoch を、直近の閲覧履歴消去の値で 現在の エポックを取得する 結果とする。

      この現在のエポックを取得する の使用は、負の値を返すことがある。 これは、エポック開始時刻 が、履歴が最後に消去された後の時刻に設定される可能性が高いためである。

    2. clearEpochclearEpoch + 1 に設定する。

      1 を加えることは、attribution 用のエポック範囲が、 閲覧履歴が消去される前のエポック と重ならないようにするために必要である。

    3. clearEpochstartEpoch より大きい場合、 clearEpoch を返す。

  4. startEpoch を返す。

集合であるサイト sitesブール値 forgetVisits、 および時点 now が与えられ、 attribution 用に閲覧履歴を消去するには:
  1. forgetVisits が false の場合:

    1. 表明するsites空で ない

    2. sites 内の各 site について反復する

      1. startingEpoch を、 now が与えられてattribution 用の開始エポックを 取得するを呼び出した結果とする。

      2. currentEpoch を、 now が与えられて現在のエポックを取得する を呼び出した結果とする。

      3. startingEpoch から currentEpoch までの包括範囲 内の各 epoch について反復する

        1. key を、siteepoch から形成される プライバシー バジェットキーとする。

        2. プライバシー バジェットストア[key] を 0 に設定する

    3. 返る。

  2. sites空である場合:

    1. インプレッションストア消去する

    2. プライバシーバジェット ストア消去する

    3. インプレッションサイトクォータストア消去する

    4. グローバル プライバシーバジェットストア消去する

  3. sites空でない場合:

    1. インプレッションストア内の各 impression について反復しsitesimpressionインプレッションサイト含む場合、 impressionインプレッションストアから削除する

    2. プライバシーバジェットストアキー 内の各 key について反復しsiteskeyサイト構成要素を含む場合、 プライバシーバジェット ストア[key] を削除する

    3. インプレッションサイトクォータストアキー 内の各 key について反復しsiteskeyサイト構成要素を含む場合、 インプレッションサイトクォータ ストア[key] を削除する

      この処理はグローバル プライバシーバジェットストアには触れない。 主として、これはプライバシーバジェットが、 いったん消費されたら忘れられないことを保証するためである。

  4. 直近の閲覧履歴消去now に設定する。

    一部のサイトについてのみ状態を消去している間 (すなわち、sites空で ない場合)に 直近の閲覧履歴消去を設定すると、 その集合に含まれていないサイトについて、一部のインプレッションに到達できなくなる。 実装は、その結果として使用できなくなる 使用不能なインプレッションや バジェット記録 (グローバルプライバシーバジェットストア内のものなど) も削除できる。

4.3. インプレッション保存アルゴリズム

saveImpression(options) メソッド手順は 次のとおりである。
  1. this から 暗黙の API 入力を取得する結果を implicitInputs とする。

  2. Assert: implicitInputs は null でない。

  3. options および implicitInputs を指定して インプレッションを保存するを実行した結果を返す。

AttributionImpressionOptions options および暗黙的 API 入力 implicitInputs が与えられ、 インプレッションを 保存するには:
  1. documentimplicitInputs関連付けられた文書とする。

  2. realmdocument関連するレルムとする。

  3. document が "save-impression" という名前のポリシー制御機能使用することを許可されていない場合、 realm 内の "NotAllowedError" DOMException却下された promiseを返す。

  4. document が与えられて、 attribution API activation を確認する。 投げられた理由があれば、その理由で却下された promiseを返す。

  5. ページから供給される API 入力を検証する:

    1. options.histogramIndex実装定義最大ヒストグラムサイズ以上である場合、 realm 内の RangeError却下された promiseを返す。

    2. options.lifetimeDays が 0 である場合、 realm 内の RangeError却下された promiseを返す。

    3. options.lifetimeDays最大 lookbackに丸め込む。

    4. options.conversionSitesサイズが、 実装定義インプレッションあたりの 最大 conversion site 数より大きい場合、 realm 内の RangeError却下された promiseを返す。

    5. conversionSites を、options.conversionSites 内の各値について サイトを解析する を呼び出した結果である集合とする。

    6. conversionSites 内のいずれかの結果が failure である場合、 realm 内の "SyntaxError" DOMException却下された promiseを返す。

    7. options.conversionCallersサイズが、 実装定義インプレッションあたりの 最大 conversion caller 数より大きい場合、 realm 内の RangeError却下された promiseを返す。

    8. conversionCallers を、options.conversionCallers 内の各値について サイトを解析する を呼び出した結果である集合とする。

    9. conversionCallers 内のいずれかの結果が failure である場合、 realm 内の "SyntaxError" DOMException却下された promiseを返す。

  6. 次の手順を並列に実行する:

    1. impression を、次から構成される保存済みインプレッションとして構築する:

      Match Value

      options.matchValue

      Impression Site

      implicitInputsトップレベルサイト

      Intermediary Site

      implicitInputs中間サイト

      Conversion Sites

      conversionSites

      Conversion Callers

      conversionCallers

      Timestamp

      implicitInputstimestamp

      Lifetime

      options.lifetimeDays

      Histogram Index

      options.histogramIndex

      Priority

      options.priority

    2. Attribution API が有効である場合、 impressionインプレッションストアに保存する。

  7. result を新しい AttributionImpressionResult とする。

  8. realm 内の result解決された promiseを返す。

saveImpression() は、インプレッションが記録されたかどうかを示すステータスを返さない。 これにより、Attribution API が無効であるときを検出する能力が最小化される。

実装は、API 状態を明らかにしうるサイドチャネル を軽減することを試みなければならない。例えば、返される promise の解決は、 impressionインプレッションストアに保存することを前提にしない。 これは、解決にかかる時間が、既存の インプレッション数や API が有効かどうかに依存しないことを保証するためである。

暗黙的 API 入力は、次のフィールドを持つ構造体である:

トップレベルサイト: サイト
中間サイト: サイトまたは undefined
タイムスタンプ: 時点
関連付けられた文書: Document
レルム realm から、 任意のオリジン(既定値 null)を伴って 暗黙的 API 入力を取得するには:
  1. windowrealmグローバルオブジェクトとする。

  2. windowWindow でない場合、null を返す。

  3. settingsrealm設定オブジェクトとする。

  4. timestampsettings現在の壁時計時刻とする。

  5. topLevelOriginsettingsトップレベルオリジンとする。

  6. origin が null の場合、originsettingsオリジンに設定する。

  7. topLevelSite を、topLevelOrigin からサイトを取得する結果とする。

  8. intermediarySite を次の値とする:

    1. origintopLevelOrigin同一サイト である場合、undefined の値、

    2. そうでない場合、origin からサイトを取得する結果。

  9. 次のフィールドを持つ暗黙的 API 入力を返す:

    トップレベルサイト

    topLevelSite

    中間サイト

    intermediarySite

    timestamp

    timestamp

    関連付けられた文書:

    window関連付けられた文書

4.4. コンバージョン測定アルゴリズム

measureConversion() メソッドは 非同期に完了し、Attribution タスクソース上に作業をキューする。

measureConversion(options) メソッド 手順は次のとおりである:
  1. implicitInputs を、this から暗黙的 API 入力を取得する結果とする。

  2. 表明するimplicitInputs は null でない。

  3. options および implicitInputsconversion を測定するを実行した結果を返す。

AttributionConversionOptions options および暗黙的 API 入力 implicitInputs が与えられ、 conversion を 測定するには:
  1. documentimplicitInputs関連付けられた文書とする。

  2. realmdocument関連するレルムとする。

  3. document が "measure-conversion" という名前のポリシー制御機能使用することを許可されていない場合、 realm 内の "NotAllowedError" DOMException却下された promiseを返す。

  4. 帰属 API の有効化をチェックdocument を受け取り、投げられた任意の理由で拒否されたプロミスを返す。

  5. validatedOptions を、 options検証する結果とする。 投げられた理由があれば、その理由で却下された promiseを返す。

  6. promiserealm 内の新しい promiseとする。

  7. 次の手順を並列に実行する:

    1. report を、validatedOptionsヒストグラムサイズ全ゼロヒストグラムを作成するを呼び出した結果とする。

    2. Attribution API が有効である場合、 report を、validatedOptionsimplicitInputsトップレベルサイトimplicitInputs中間サイト、および implicitInputstimestampattribution を行いヒストグラムを埋める結果に設定する。

    3. aggregationServicevalidatedOptionsaggregation serviceとする。

    4. aggregationService.protocol の値で分岐する:

      dap-18-histogram

      次の手順を実行する:

      1. encryptedReport を、validatedOptionsimplicitInputsトップレベル siteimplicitInputs仲介 siteimplicitInputstimestamp、および report が与えられたうえで、 DAP レポートを構築するを呼び出した結果とする。

    5. result を、次の項目を持つ AttributionConversionResult とする:

      report

      encryptedReport

    6. promiseresult解決するため、 タスクをキューする。 これはAttribution タスクソース上で行う。

  8. promise を返す。

実装は、API 状態を明らかにしうるサイドチャネル を軽減することを試みなければならない。例えば、理想的には、返される promise の解決にかかる時間は、 保存または一致したインプレッション数や API が有効かどうかに依存しないことになる。

検証済み conversion optionsは、次のフィールドを持つ構造体である:

Aggregation Service: AttributionAggregationService のインスタンス。
Epsilon: 有限の正の数。
Histogram Size: 32 ビット符号なし整数
Lookback: 正の期間
Match Values: 32 ビット符号なし整数集合
Impression Sites: サイト集合
Impression Callers: サイト集合
Credit: 数値のリスト
Value: 32 ビット符号なし整数
Max Value: 32 ビット符号なし整数
optionsAttributionConversionOptions を検証するには:
  1. aggregationServices が、 options.aggregationServiceキーを持つ entry含まない場合、 ReferenceError を投げる。

  2. aggregationService を、 options.aggregationService が与えられて、 AttributionAggregationServices から値を取得する結果とする。

  3. options.epsilon が 0 以下、またはmaximum epsilonより大きい場合、 RangeError を投げる。

  4. options.histogramSize が 0、または実装定義最大ヒストグラム サイズより大きい場合、 または options.aggregationService について、存在するならmaximum aggregation-service histogram sizeより大きい場合、 RangeError を投げる。

  5. options.value が 0 である場合、 RangeError を投げる。

  6. options.valueoptions.maxValue より大きい場合、 RangeError を投げる。

  7. credit を、options.credit存在する場合はそれ、そうでない場合は «1» とする。

  8. credit空である場合、RangeError を投げる。

  9. credit項目のいずれかが 0 以下である場合、RangeError を投げる。

  10. creditサイズが、実装定義maximum number of credit valuesを超える場合、 RangeError を投げる。

  11. lookback を、options.lookbackDays存在する場合はその値とし、 そうでない場合は最大 lookback とする。

  12. lookback がその最大値より大きい場合、 lookback最大 lookback に設定する。

  13. lookback が 0 である場合、 RangeError を投げる。

  14. options.matchValuesサイズが、 実装定義maximum number of match valuesより大きい場合、 RangeError を投げる。

  15. matchValues を、 options.matchValues集合を作成するを実行した結果とする。

  16. options.impressionSitesサイズが、 実装定義conversion 用の最大 impression site 数より大きい場合、 RangeError を投げる。

  17. impressionSites を、options.impressionSites 内の各値についてサイトを 解析するを呼び出した結果である集合とする。

  18. impressionSites 内のいずれかの結果が failure である場合、"SyntaxError" DOMException を投げる。

  19. options.impressionCallersサイズが、 実装定義conversion 用の 最大 impression caller 数より大きい場合、 RangeError を投げる。

  20. impressionCallers を、options.impressionCallers 内の各値についてサイトを 解析するを呼び出した結果である集合とする。

  21. impressionCallers 内のいずれかの結果が failure である場合、"SyntaxError" DOMException を投げる。

  22. 次のフィールドを持つ検証済み conversion optionsを返す:

    Aggregation Service

    aggregationService

    Epsilon

    options.epsilon

    Histogram Size

    options.histogramSize

    Lookback

    lookback

    Match Values

    matchValues

    Impression Sites

    impressionSites

    Impression Callers

    impressionCallers

    Credit

    credit

    Value

    options.value

    Max Value

    options.maxValue

4.4.1. Attribution ロジック

Attribution ロジックは、 コンバージョン値をヒストグラムバケットにどのように割り当てるかを決定する。

attribution を行いヒストグラムを埋めるには、 検証済み conversion options optionsサイト topLevelSiteサイトまたは undefined intermediarySite、および 時点 now が与えられた場合:
  1. now を指定して現在のエポックを取得する結果を currentEpoch とする。

  2. now を指定してattribution の開始エポックを 取得する結果を startEpoch とする。

  3. (nowoptionsルックバック) を渡して、 現在のエポックを取得するを 呼び出した結果を earliestEpoch とする。

  4. currentEpochearliestEpoch と等しい場合は true、 そうでなければ false を isSingleEpoch とする。

  5. l1Norm を 0 とする。

  6. isSingleEpoch が true の場合:

    1. optionstopLevelSiteintermediarySitecurrentEpoch、および nowを指定して共通照合 ロジックを呼び出した結果を impressions とする。

    2. impressions空で ある場合、optionsヒストグラムサイズを指定して 全ゼロヒストグラムを作成するを 呼び出した結果を返す。

    3. impressionsoptionsヒストグラムサイズoptions、および optionscreditを指定して last-n-touch attribution で ヒストグラムを埋めるを実行した結果を histogram とする。

    4. histogram 内の項目の合計を l1Norm とする。

    5. Assert: l1Normoptions以下である。

  7. 新しい集合deductedImpressionQuotas とする。

  8. 新しい集合deductedGlobalBudgets とする。

  9. 集合matchedImpressions とする。

  10. startEpoch から currentEpoch までの各 epoch について、両端を含めて:

    1. optionstopLevelSiteintermediarySiteepoch、および nowを指定して共通照合 ロジックを呼び出した結果を impressions とする。

      単一エポックの場合、これは matchedImpressionsを再計算している。 実装は、その作業を二度行わないようにしたいだろう。

    2. impressions空で ない場合:

      1. epoch および topLevelSiteを項目とする プライバシー予算キーkey とする。

      2. keyimpressionsoptionsepsilonoptionsoptions最大値isSingleEpochl1NormdeductedImpressionQuotas、および deductedGlobalBudgetsを指定して プライバシーおよび安全予算を 控除するを呼び出した結果を budgetAndSafetyOk とする。

      3. budgetAndSafetyOk が true の場合、 matchedImpressionsimpressions拡張する

  11. matchedImpressions空で ある場合、 optionsヒストグラムサイズを指定して 全ゼロヒストグラムを作成するを 呼び出した結果を返す。

  12. matchedImpressionsoptionsヒストグラムサイズoptions、および optionscreditを指定して last-n-touch attribution で ヒストグラムを埋めるを実行した結果を histogram とする。

  13. histogram を返す。

integer size を与えられ、 全ゼロ ヒストグラムを作成するには、次を実行する。
  1. サイズsizeであり、その項目がすべて 0 であるリストを返す。

4.4.2. 共通インプレッション照合ロジック

共通 マッチングロジックを実行するには、 検証済み conversion options optionsサイト topLevelSiteサイトまたは undefined intermediarySiteエポックインデックス epoch、および 時点 now が与えられた場合:
  1. 集合matching とする。

  2. インプレッションストア内の 各 impression について反復する

    1. impressionタイムスタンプを渡して、 現在の エポックを取得するを呼び出した結果を impressionEpoch とする。

    2. impressionEpochepoch と等しくない場合、 continueする。

    3. now が、impressionタイムスタンプimpression有効期間を加えた時刻より後である場合、 continueする。

    4. now が、impressionタイムスタンプoptionsルックバックを加えた時刻より後である場合、 continueする。

    5. impressionコンバージョンサイト空でなく、 かつ topLevelSite含まない場合、 continueする。

    6. intermediarySiteundefined でない場合は intermediarySite を、そうでなければ topLevelSiteconversionCaller とする。

    7. impressionコンバージョン呼び出し元空でなく、 かつ conversionCaller含まない場合、 continueする。

    8. optionsmatch value空でなく、 かつ impressionmatch value含まない場合、 continueする。

    9. optionsインプレッションサイト空でなく、かつ impressionインプレッションサイト含まない場合、 continueする。

    10. impression仲介サイトundefined でない場合はそれを、 そうでなければ impressionインプレッションサイトimpressionCaller とする。

    11. optionsインプレッション呼び出し元空でなく、 かつ impressionCaller含まない場合、 continueする。

    12. impressionmatching追加する

  3. matching を返す。

4.4.2.1. Last-N-Touch Attribution
double のリスト credit と integer valueを与えられ、 credit を公平に 割り当てるには、次を実行する。
  1. Assert: creditでない。

  2. credit項目の合計を sumCredit とする。

  3. 新しいリストroundedCredit とする。

  4. credit の各 item について反復する

    1. value * item / sumCreditnormalizedCredit とする。

    2. normalizedCreditroundedCredit追加する

  5. idx1 を 0 とする。

  6. roundedCreditインデックスを取得するから、最初の項目を除いた各 n について反復する

    1. idx2n とする。

    2. roundedCredit[idx1] − floor(roundedCredit[idx1]) を frac1 とする。

    3. roundedCredit[idx2] − floor(roundedCredit[idx2]) を frac2 とする。

    4. frac1frac2 の両方がゼロに等しい場合、 continueする。

    5. frac1 + frac2 が 1 より大きい場合、 incr1 を 1 − frac1 とし、 incr2 を 1 − frac2 とする。

    6. そうでなければ、incr1 を −frac1 とし、 incr2 を −frac2 とする。

      incr1 は、 roundedCredit[idx1] が整数になるよう増分する量を表し、 incr2 および idx2 についても同様である。 これらの値は負になり得ることに注意。

    7. incr2 / (incr1 + incr2) を p1 とする。

      p1 の値は、idx1 内の項目が整数へ丸められる確率を表す。 incr1 + incr2 が 0 のときにゼロ除算が発生するが、 これは frac1frac2 の両方が整数である場合 (両方が 0、または正確に 1 のいずれか)にのみ可能である。 この場合、idx2 を丸める必要はないため、単にスキップする。

    8. 0 から 1(含む)の間のランダムな double を r とする。

    9. rp1 より小さい場合、 incrincr1 とし、 idx1idx2 の値を交換する。

    10. そうでなければ、incrincr2 とする。

    11. roundedCredit[idx2] を incr だけ増分する。

    12. roundedCredit[idx1] を incr だけ減分する。

  7. roundedCredit から項目すべて 最も近い整数へ丸めることで整数に変換し、 ちょうど中間の場合はゼロから離れる方向に丸めた結果を integerCredit とする。

  8. integerCredit を返す。

    この最後の丸め手順は、微小な浮動小数点の 加算および減算誤差によって、 roundedCredit[idx1] の小数部分が完全には取り除かれない場合のためだけにある。 半分のときの丸めモードが実際に発生することはなく、実装を容易にするため C++ の std::round の挙動と一致するよう選択されている。

    このアルゴリズムの目的は、 1) 割り当て全体にわたって正確に value の総値を割り当てること、 2) integerCredit の期待値が正規化された credit (すなわち、credit * value / sumCredit。 ここで * は要素ごとの乗算を表す)と正確に等しいという性質を維持すること、 3) どの割り当てにも 1 を超える誤差を生じさせないことである。

インプレッション集合 matchedImpressions、integer histogramSize、integer value、および double のリスト creditを与えられ、 last-n-touch attribution でヒストグラムを 埋めるには、次を実行する。
  1. Assert: matchedImpressions空で ない

  2. matchedImpressions を、優先度、次にタイムスタンプ降順にソートしたものを sortedImpressions とする。

  3. creditサイズと、 sortedImpressionsサイズの最小値を N とする。

  4. sortedImpressions の先頭 N 個のエントリーを lastNImpressions とする。

  5. credit の先頭 N 個を除くすべてのエントリーを削除する

  6. credit および valueを指定してcredit を公平に 割り当てる結果を normalizedCredit とする。

  7. histogramSize を指定して全ゼロ ヒストグラムを作成するを呼び出した結果を histogram とする。

  8. lastNImpressionsインデックスの各 i について反復する

    1. lastNImpressions[i] を impression とする。

    2. normalizedCredit[i] を value とする。

    3. impressionヒストグラムインデックスindex とする。

    4. indexhistogramサイズより小さい場合、 histogram[index] を value だけ増分する。

  9. histogram を返す。

4.5. 実装定義値の設定

この仕様はいくつかの実装定義値を識別する。 この節では、実装がそれらの値を最適に設定する方法についての いくつかの推奨事項を含む。

実装は、lifetimeDays および lookbackDays について、実装定義最大 lookback を設定する。 最大 lookbackは、 正の整数個のである。 これらの値について異なる最大値を持たせても意味はない。 2 つのうち小さい方の値が、 どの保存済みインプレッションが conversion に利用できるかを決定するためである。

実装は、少なくとも 30 日の最大 lookbackを設定しなければならない。 この期間内に、実装はインプレッションサイトごとに少なくとも 1000 個のインプレッションを保持するよう 試みるべきである

実装は、可能な場合、 時間および個数に関するこれらの推奨される制限を超えてインプレッションを保持するべきである。 インプレッションを保存するために利用可能な容量は、 インプレッションデータを保持するために必要なストレージと、 conversion report を生成するために必要な処理時間の両方に依存する。 実装は、サイトが利用可能な容量を超えてインプレッションの保存を要求した場合、 ユーザーに要求された場合(§ 10.2 Attribution API の無効化を参照)、 または実装定義の理由により、 これらの制限に達する前にインプレッションを破棄してもよい

実装がインプレッションを保持しないことを選択しうる理由の 1 つは、 そのサイトが十分なユーザーエンゲージメントを受けていないことである。

saveImpression() および measureConversion() に渡されるサイトのリストについて、実装定義値が選択される。 インプレッションあたりの最大 conversion site 数 は、conversionSites の値の個数に対する制限であり、 実装はこの値を少なくとも 5 に設定しなければならないインプレッションあたりの最大 conversion caller 数 および conversion 用の最大 impression caller 数 は、それぞれ conversionCallers および impressionCallers の値の個数に対する制限であり、 実装はこれらの値をそれぞれ少なくとも 10 に設定しなければならないconversion 用の最大 impression site 数 は、impressionSites の値の個数に対する制限であり、 実装はこの値を少なくとも 30 に設定しなければならない

credit の値の個数に対する制限である 最大 credit 値数について、実装定義値が選択される。 実装はこの値を少なくとも 10 に設定しなければならないmatchValues の値の個数に対する制限である 最大 match value 数について、実装定義値が選択される。 実装はこの値を少なくとも 30 に設定しなければならない

measureConversion() によって生成されるヒストグラムのサイズは、 実装定義最大ヒストグラムサイズmaximum aggregation-service histogram size の両方の対象となる。 最大ヒストグラムサイズには最小値は設定されない。 集計技術の選択によって制限が設定されることが期待されるためである。 maximum aggregation-service histogram size は、aggregation serviceで使用される技術の選択によって決定される 固定値となる。 これは実装定義ではない。

4.5.1. プライバシーおよび安全制限パラメーター構成

ユーザー エージェントは、次について値を定義することで、 プライバシーバジェットおよび安全上の制限を構成する:

安全上の制限サイトごとのバジェットの倍数として構成することで、 複数のサイトによって API をどのように使用できるかが決まる。 この倍数を設定する際に、 実装は、バジェットを使用する可能性のあるサイト数として どの程度を想定するかを考慮する必要があり、 バジェットを完全には使用しないサイトを考慮して 下方修正することもある。

安全上の制限サイトごとのバジェットの倍数として設定することで、 共有制限を使い尽くすには多くのサイトによる協調が必要になることが保証され、 それらは主たるプライバシー機構としてではなく、 濫用から保護する手段として主に有用になる。

5. HTTP API

5.1. インプレッションの保存

`Save-Impression` は、 Dictionary Structured Headerであり、 ユーザーエージェントに saveImpression() API を呼び出すよう要求する応答に設定される。

これは、JavaScript の saveImpressionに相当する HTTP である:
Save-Impression: histogram-index=3, match-value=2, conversion-sites=("advertiser.example"), lifetime-days=7

次のキーが定義されており、 saveImpression() に渡される AttributionImpressionOptions 辞書のメンバーに対応する。省略された 任意キーの既定値は、対応する AttributionImpressionOptions フィールドと同じ方法で扱われる。不明な辞書キーは無視され、 不明なパラメーターも同様に無視される。

conversion-sites
conversionSites の値。 文字列を含む 内部リストである。 各文字列値は A-label のみを使用するドメイン名を含む。 したがって、国際化 ドメイン名punycodeを使用する必要がある。 このキーは任意である。
conversion-callers
conversionCallers の値。 文字列を含む 内部リストである。 各文字列値は A-label のみを使用するドメイン名を含む。 したがって、国際化 ドメイン名punycodeを使用する必要がある。 このキーは任意である。
histogram-index
histogramIndex の値。 32 ビット符号なし整数範囲内の 整数である。このキーは必須である。
priority
priority の値。 32 ビット符号付き整数範囲内の 整数である。このキーは任意である。
match-value
matchValue の値。 32 ビット符号なし整数範囲内の 整数である。このキーは任意である。
lifetime-days
lifetimeDays の値。 正の整数である。このキーは任意である。
ヘッダー値 input を与えられ、 Save-Impression ヘッダーを解析するには、次の手順を実行する。
  1. input_bytesinput に設定し、 field_type を "dictionary" に設定して structured fields を 解析する結果を dict とする。

  2. 解析が失敗した場合、エラーを返す。

  3. dict["histogram-index"] を、undefined をデフォルトとして取得したものhistogramIndex とする。

  4. histogramIndex32 ビット符号なし整数範囲内の整数でない場合、 エラーを返す。

  5. 次の項目を持つ新しい AttributionImpressionOptionsopts とする。

    histogramIndex

    histogramIndex

  6. dict["conversion-sites"] が存在する場合:

    1. そのconversionSites とする。

    2. conversionSites内部 リストでない場合、または conversionSites項目のいずれかが 文字列でない場合、 エラーを返す。

    3. opts.conversionSitesconversionSites に設定する。

  7. dict["conversion-callers"] が存在する場合:

    1. そのconversionCallers とする。

    2. conversionCallers内部 リストでない場合、または conversionCallers項目のいずれかが 文字列でない場合、 エラーを返す。

    3. opts.conversionCallersconversionCallers に設定する。

  8. dict["match-value"] が存在する場合:

    1. そのmatchValue とする。

    2. matchValue32 ビット符号なし整数範囲内の 整数でない場合、 エラーを返す。

    3. opts.matchValuematchValue に設定する。

  9. dict["lifetime-days"] が存在する場合:

    1. そのlifetimeDays とする。

    2. lifetimeDays が正の整数でない場合、 エラーを返す。

    3. opts.lifetimeDayslifetimeDays に設定する。

  10. dict["priority"] が存在する場合:

    1. そのpriority とする。

    2. priority32 ビット符号付き整数範囲内の 整数でない場合、 エラーを返す。

    3. opts.prioritypriority に設定する。

  11. opts を返す。

5.2. コンバージョンの測定

`Measure-Conversion` は、 Dictionary Structured Headerであり、 ユーザーエージェントに measureConversion() API を呼び出すよう要求する応答に設定される。

これは、JavaScript の measureConversionに相当する HTTP であり、 生成されたレポートが POST される report-url が追加されている:
Measure-Conversion: aggregation-service="https://aggregator.example/tee", histogram-size=20, epsilon=1.0, lookback-days=14, impression-sites=("publisher.example" "other.example"), impression-callers=("ad-tech.example"), match-values=(2), credit=(0.25 0.25 0.5), value=3, max-value=7, report-url="https://report-handler.example/foo"

次のキーが定義されており、 measureConversion() に渡される AttributionConversionOptions 辞書のメンバーに対応する。省略された 任意キーの既定値は、対応する AttributionConversionOptions フィールドと同じ方法で扱われる。不明な辞書キーは無視され、 不明なパラメーターも同様に無視される。

aggregation-service
aggregationService の値。 文字列である。このキーは必須である。
epsilon
epsilon の値。 正のdecimalまたはintegerである。 このキーは任意である。
histogram-size
histogramSize の値。 正の整数である。このキーは必須である。
lookback-days
lookbackDays の値。 正の整数である。このキーは任意である。
match-values
matchValues の値。 非負の整数を含む 内部リストである。 このキーは任意である。
impression-sites
impressionSites の値。 文字列を含む 内部リストである。 各文字列値は A-label のみを使用するドメイン名を含む。 したがって、国際化 ドメイン名punycodeを使用する必要がある。 このキーは任意である。
impression-callers
impressionCallers の値。 文字列を含む 内部リストである。 各文字列値は A-label のみを使用するドメイン名を含む。 したがって、国際化 ドメイン名punycodeを使用する必要がある。 このキーは任意である。
credit
credit の値。 正のdecimalまたは 正のintegerを含む 内部リストである。このキーは任意である。
value
value の値。 正の整数である。このキーは任意である。
max-value
maxValue の値。 正の整数である。このキーは任意である。
report-url
結果のレポートが、存在する場合に POST される先の 潜在的に信頼できる URLを含む 文字列。 URL はレスポンス URL に対して相対でもよい。そのスキームは "https" でなければならない。 このキーは必須である。
ヘッダー値 input およびURL baseUrlを与えられ、 Measure-Conversion ヘッダーを解析するには、次の手順を実行する。
  1. input_bytesinput に設定し、 field_type を "dictionary" に設定して structured fields を 解析する結果を dict とする。

  2. 解析が失敗した場合、エラーを返す。

  3. dict["aggregation-service"] を、undefined をデフォルトとして取得したものaggregationService とする。

  4. aggregationService文字列でない場合、 エラーを返す。

  5. dict["histogram-size"] を、undefined をデフォルトとして取得したものhistogramSize とする。

  6. histogramSize32 ビット符号なし整数範囲内の正の整数でない場合、 エラーを返す。

  7. dict["report-url"] を、undefined をデフォルトとして取得したものreportUrlString とする。

  8. reportUrlString文字列でない場合、 エラーを返す。

  9. baseUrl を伴って reportUrlStringURL パーサーを適用した結果を reportUrl とする。

  10. reportUrl が失敗の場合、エラーを返す。

  11. reportUrl潜在的に信頼できる URLでない場合、エラーを返す。

  12. reportUrlスキームが "https" でない場合、エラーを返す。

  13. 次の項目を持つ新しい AttributionConversionOptionsopts とする。

    aggregationService

    aggregationService

    histogramSize

    histogramSize

  14. dict["epsilon"] が存在する場合:

    1. そのepsilon とする。

    2. epsilondecimalまたは integerでない場合、エラーを返す。

    3. opts.epsilonepsilon に設定する。

  15. dict["lookback-days"] が存在する場合:

    1. そのlookbackDays とする。

    2. lookbackDays が正の整数でない場合、 エラーを返す。

    3. opts.lookbackDayslookbackDays に設定する。

  16. dict["match-values"] が存在する場合:

    1. そのmatchValues とする。

    2. matchValues内部 リストでない場合、または matchValues項目のいずれかが 32 ビット符号なし整数範囲内の整数でない場合、エラーを返す。

    3. opts.matchValuesmatchValues に設定する。

  17. dict["impression-sites"] が存在する場合:

    1. そのimpressionSites とする。

    2. impressionSites内部 リストでない場合、または impressionSites項目のいずれかが 文字列でない場合、 エラーを返す。

    3. opts.impressionSitesimpressionSites に設定する。

  18. dict["impression-callers"] が存在する場合:

    1. そのimpressionCallers とする。

    2. impressionCallers内部 リストでない場合、または impressionCallers項目のいずれかが 文字列でない場合、 エラーを返す。

    3. opts.impressionCallersimpressionCallers に設定する。

  19. dict["credit"] が存在する場合:

    1. そのcredit とする。

    2. credit内部 リストでない場合、または credit項目のいずれかが decimalまたは integerでない場合、エラーを返す。

    3. opts.creditcredit に設定する。

  20. dict["value"] が存在する場合:

    1. そのvalue とする。

    2. value32 ビット符号なし整数範囲内の正の整数でない場合、 エラーを返す。

    3. opts.valuevalue に設定する。

  21. dict["max-value"] が存在する場合:

    1. そのmaxValue とする。

    2. maxValue32 ビット符号なし整数範囲内の正の整数でない場合、 エラーを返す。

    3. opts.maxValuemaxValue に設定する。

  22. (opts, reportUrl) を返す。

バイト シーケンス reportURL url、および環境設定オブジェクト settings が与えられたとき、 レポートを送信するには:
  1. アサート: url潜在的に信頼できる URLである。

  2. アサート: urlスキームは "https" である。

  3. headers を、 "Content-Type" という名前を持ち、その値が "application/dap-report" であるヘッダーを含む、 新しいヘッダーリストとする。

    注: AttributionAggregationProtocoldap-18-histogram 以外の値を得ることがあれば、これは更新する必要がある。

  4. request を、次のプロパティを持つ新しいリクエストとする:

    メソッド

    "POST"

    URL

    url

    ヘッダーリスト

    headers

    本体

    report

    クライアント

    settings

    モード

    "cors"

    キャッシュモード

    "no-store"

    keepalive

    true

    資格情報モード

    "omit"

    リファラー

    url

  5. requestフェッチする。エラーが発生した場合は任意で再試行する。

5.3. Fetch monkey patch

リクエスト request およびレスポンス responseを与えられ、 Attribution ヘッダーを処理するには、次の手順を実行する。
  1. requestdestinationが次のいずれでもない場合、 戻る: "", "audio", "image", "script", "track", "video".

  2. requestclient安全なコンテキストでない場合、戻る。

  3. responseURL潜在的に信頼できる URLでない場合、戻る。

  4. responseURLスキームが "https" でない場合、戻る。

  5. requestclientから、 responseURLオリジンを伴って、 暗黙の API 入力を取得する結果を implicitInputs とする。

  6. implicitInputs が null の場合、戻る。

  7. responseヘッダーリストから `Save-Impression`取得する結果を saveImpressionHeader とする。

  8. saveImpressionHeader が null でない場合:

    1. saveImpressionHeader解析する結果を impressionOptions とする。

    2. impressionOptions がエラーでない場合、 implicitInputs とともに impressionOptions保存する

  9. responseヘッダーリストから `Measure-Conversion`取得する結果を measureConversionHeader とする。

  10. measureConversionHeader が null でない場合:

    1. measureConversionHeader解析する結果を parseConversionResult とする。

    2. parseConversionResult がエラーでない場合:

      1. parseConversionResult を (conversionOptions, reportUrl) とする。

      2. conversionOptions および implicitInputs を用いてコンバージョンを 測定するを実行した結果を reportPromise とする。

      3. 並列に:

        1. reportPromise履行時に、履行値を result とする。

        2. result.reportreportUrl、および requestclientを用いて レポートを送信する

HTTP-network fetch を次のように変更する:

次の手順の後に、

includeCredentials が true の場合、ユーザーエージェントは request および response を与えて、レスポンスの Set-Cookie ヘッダーを解析して保存すべきである。

次の手順を追加する

  1. request および response を用いて Attribution ヘッダーを処理する

6. 実装上の考慮事項

7. 集計

集計 サービスは、複数の attribution 情報を受け取り、 集計メトリクスを生成する。

ユーザーエージェント実装は、集計に関して異なる要件を持つ。 しかし、集計処理にはいくつかの共通要素がある。

第一に、ユーザーエージェントは、集計サービスに関する情報を 設定されているか、または他の方法で取得する必要がある。 これには、サポートされる集計方法と、 必要な任意の構成が含まれる。

各集計方法は、ヒストグラムがどのように次を行うかを 定義する必要がある:

集計方法は、サイトが集計結果をどのように取得するかも定義する必要がある。

7.1. マルチパーティ計算集計

マルチパーティ計算 (MPC)システムとは、複数の独立した主体が関与し、 合意された関数を協調して計算するシステムである。

この仕様は、Prio [PRIO] および Distributed Aggregation Protocol (DAP) [DAP] に基づく MPC システムを使用する。 これは二者 MPC システムであり、 入力に対するクライアント提供の正当性証明に依存することによって特徴付けられる。 これにより、システムへの提出サイズがやや増えるという控えめなコストで、 非常に効率的な MPC 動作が可能になる。

MPC を使用する集計サービスは、 定義済み関数を計算するために協調する、 二つ以上の独立したサービスから構成される。

MPC によって提供される基本的な保証は、 関数の定義済み出力と、明確に定義された漏洩のみが どの主体にも明らかにされるということである。

MPC の保証は、参加する主体の部分集合が正直である範囲でのみ成立する。 Prio で使用される二者 MPC では、 プライバシー、すなわち入力の機密性は、 いずれかの MPC オペレーターが正直であり続ける限り維持される。 この MPC 構成は、いずれかの MPC オペレーターによる 出力の破壊からは保護しない。

7.1.1. Prio および DAP

dap-18-histogram 集約メソッドは、Prio [PRIO] および Distributed Aggregation Protocol (DAP) [DAP] を使用する。 具体的には、この集約メソッドは、 Prio3 Verifiable Distributed Aggregation Function (VDAF) [VDAF]Prio3L1BoundSum インスタンス化 [PRIO-L1] を使用する。

DAP および Prio3L1BoundSum インスタンス化は、レポートがどのように準備され、 暗号化され、集計のために提出されるかを定義する。 DAP はまた、集計がどのように取得されるか、 およびユーザーエージェントが集計サービスについて取得する必要のある構成を定義する。

Prio3L1BoundSum を 使用する場合、 レポートには分散ゼロ知識証明が含まれ、 MPC に参加するノードが、提出されたヒストグラムの合計が設定値未満であることを確認できる。 Prio3L1BoundSum は、 ヒストグラム合計が 2 の累乗より真に小さいことだけを検証できる。 つまり、証明は、正の整数値 n について 合計が 2n 未満であることを確認する。

レポートを構築するために、 証明は、maxValue より大きい次の 2 の累乗である値に基づいて生成される。 これは、集計サービスが、 maxValue と次の 2 の累乗の間のレポートを拒否できないことを意味する。 したがって、悪意のあるユーザーエージェントは、 集計ヒストグラムに maxValue の最大 2 倍の値を寄与するレポートを生成する可能性がある。 証明は、maxValue が 2n − 1 に等しい場合、 過剰な寄与の機会が存在しないことを保証する。 そのような攻撃の相対的影響は、他の制約が許す限り maxValue を 2n − 1 にできるだけ近く設定することで低減できる。

7.1.2. DAP 拡張

DAP への拡張 [DAP-ATTRIBUTION] は、このアプリケーションに必要である:

ユーザーエージェントは、生成するレポートを構築するために これらの拡張を使用する。

7.1.3. DAP 用のレポート暗号化

検証済みコンバージョンオプション optionssite topLevelSitesite または undefined intermediarySitemoment now、 およびリストである整数histogram が与えられ、 バイトシーケンス report を生成するものとして、 DAP レポートを構築するには:
  1. field を、 [VDAF]Section 6.1.3 で定義される Field128 とする。

  2. length を、 histogramサイズとする。

  3. maxValueoptions最大値とする。

  4. chunkLength を、(Math.ceil(log2(maxValue + 1)) + 1) * length の平方根を 最も近い整数に丸めたものとする。

  5. vdaf を、fieldlengthmaxValue、および chunkLength を渡して作成される、 新しい PrioL1BoundSum VDAF [PRIO-L1] インスタンスとする。

  6. microEpsilon を、optionsepsilon に 1,000,000 を乗算し、正の Infinity 方向へ丸めたものとする。

  7. caller を、intermediarySiteundefined でない場合は intermediarySite、 そうでなければ topLevelSite とする。

  8. taskConfig を、 [DAP]Section 4.2 で定義される TaskConfiguration インスタンスを 次の値でエンコードすることにより生成されるバイト シーケンス群とする:

    1. 空の task_info

    2. DAP Leader の URL に設定された leader_aggregator_endpoint。 これは、options.Aggregation Service における、選択された集約サービス実装定義の定義から取得される。 エンコードされた値は、設定された URL と falseフラグメントを除外するため)を用いて URL シリアライザーを呼び出すことにより生成される。

    3. DAP Helper の URL に設定された helper_aggregator_endpoint。 これは、options.Aggregation Service における、選択された集約サービス実装定義の定義から取得され、 leader_aggregator_endpoint 値と同じ処理を使用して生成される。

    4. time_precision 値 5。

    5. min_batch_size 値 20。

    6. batch_mode 値 TBD(Distributed Aggregation Protocol (DAP) Extensions for the Attribution API § batch-mode を参照)。

    7. 空の batch_config

    8. vdaf_type 値 7(A Prio Instantiation for Vector Sums with an L1 Norm Bound on Contributions § dap を参照)。

    9. lengthmaxValue、および chunkLength を用いて、 PrioL1BoundSum A Prio Instantiation for Vector Sums with an L1 Norm Bound on Contributions § dap に従って エンコードされた vdaf_configuration

    10. タスク拡張の集合 extensions。 これは、16-bit unsigned integers からバイトシーケンスへのマップである:

  9. taskID を、 taskConfig を渡して Task Binding and In-Band Provisioning for DAP § task-id で説明される処理により生成されるバイト シーケンスとする。

  10. ctx を、 [DAP]Section 4.4.2.1 で定義されるように、 文字列 dap-18エンコードされた値と taskID を連結して形成されるバイト シーケンスとする。

  11. reportID を、暗号学的に安全なランダムソース [RFC4086] からサンプリングされた 16 バイトとする。

  12. rand を、暗号学的に安全なランダムソース [RFC4086] からサンプリングされた 128 バイトとする。

  13. publicShareinputShares を、 [VDAF]Section 4.1 で定義されるように、ctxhistogramreportID(VDAF の "nonce" パラメーターとして)、 および rand を用いて、vdaf.shard() を呼び出した結果とする。

  14. time を、 Unix epoch から now までの期間を 5 秒のdurationで割り、 負の Infinity 方向へ丸めた結果の整数とする。

  15. extensions を、 16-bit unsigned integers からバイトシーケンスへのマップであり、 次から構成されるものとする:

    • privacy budget の拡張コードポイント。 microEpsilon の値にマップされ、 UINT32、 値 microEpsilon、 および falseisLittleEndian 用)を用いて NumericToRawBytes を呼び出すことでエンコードされる。

  16. reportMetadata を、reportIDtime、および extensions から生成される、 エンコード済み DAP ReportMetadata とする。

  17. encryptedInputSharesリストとする。

  18. inputShares の各 share について反復しSection 4.4.2.1 で説明される、share を暗号化するための方法に従う:

    1. pkR を、 options.Aggregation Service により示される集約サービスについて取得された、 集約サービス HPKE configuration からの対応するロールの公開鍵とする。

      "dap-18-histogram" の URL は、 DAP Leader ロールを識別することが期待される。 実装は、両方の Aggregator について HPKE configuration を静的に取得する必要がある。 HPKE configuration はオンデマンドでフェッチしてはならない。 そのためにかかる時間が、 measureConversion() の呼び出し元へ 情報を漏洩するためである。

    2. serverRole を、最初の項目(Leader)については 2、 2 番目(Helper)については 3 とする。

    3. info を、次を連結して形成されるバイト シーケンスとする: 文字列 dap-18 input shareエンコードされた値、 値 0x01 を持つバイト、および serverRole

    4. inputShareAAD を、 InputShareAad の構造に従い、 taskIDreportMetadatapublicShare、および taskConfig から構築する。

    5. plaintextShare を、 PlaintextInputShare の構造に従い、 空の集合(private_extensions 用)および sharepayload 用)から構築する。

    6. hpke を、同じHPKE configurationに基づく HPKE [RFC9180] configuration とする。

    7. encryptedShare を、pkRinfoinputShareAAD、および plaintextShare を渡して、 hpke.Seal<mode_base>() を呼び出した結果とする。

    8. encryptedShareencryptedInputShares追加する

  19. report を、reportMetadatapublicShareencryptedInputShares (2 つの値はそれぞれ leader および helper の暗号化された input share)、 および DAP aggregators から取得された集約サービス HPKE configuration から生成される、エンコード済み DAP Report とする。

  20. report を返す。

7.2. 再生攻撃防止要件

ブラウザーにより生成されるコンバージョンレポートは、 レポートを要求した site により消費されたプライバシー バジェット の量に結び付けられる。

集約 サービスは、 同じレポートを複数回受け入れないことを保証しなければならない。

8. 差分プライバシー

この設計は、そのプライバシー設計の基礎として差分プライバシーの概念を使用する。 [PPA-DP]

差分プライバシーは、 システムによって明らかにされる私的情報の量を保証できる、 プライバシーの数学的定義である。 [DP] 差分プライバシーは、このシステムでプライバシーを保護する唯一の手段ではないが、 最も厳密に定義および分析されている。 そのため、最も強いプライバシー保証を提供する。

差分プライバシーは、集計データセットへの私的データの寄与を 隠すためにランダム化されたノイズを使用する。 ノイズの効果は、データセットへの個々の寄与を隠しつつ、 任意の集計分析の有用性を保持することである。

差分プライバシーを適用するには、 どの情報が保護されるかを定義する必要がある。 このシステムでは、保護される情報は、 単一のユーザーエージェント上の単一のユーザープロファイルについて、 単一のエポックにわたり、 コンバージョンを登録する単一の Web サイトに対する インプレッションである。 § 8.1 プライバシー単位では、この設計の含意を より詳しく説明する。

この attribution 設計は、 個別差分プライバシーと呼ばれる 差分プライバシーの一形式を使用する。 このモデルでは、ユーザーエージェントはそれぞれ、 寄与される情報を制限することを個別に保証する責任を負う。

この API の個別差分プライバシー設計には、 三つの主要な構成要素がある:

  1. ユーザーエージェントは、コンバージョンレポートを通じてデバイスから出る インプレッションについての情報量を、 (プライバシーバジェットを使用して) 制限する。 § 8.2 プライバシーバジェットでは、これをより深く検討する。

  2. 集約 サービスは、任意のコンバージョンレポートが、 ユーザーエージェントによりそれに対して計上されたプライバシーバジェットに従ってのみ 使用されることを保証する。 § 7.2 リプレイ防止要件では、集約 サービスに対する要件を より詳細に説明する。

  3. ノイズは集約サービスにより追加される。 § 8.3 差分プライバシーメカニズムでは、使用される可能性があるメカニズムを 詳述する。

これらの措置を合わせることで、各プライバシー単位について公開される情報に制限が課される。

8.1. プライバシー単位

差分プライバシーの実装には、 何が保護されるかについて明確な定義が必要である。 これはプライバシー 単位として知られ、 プライバシー保護を受ける主体を表す。

このシステムは、三つの値の組み合わせであるプライバシー単位を 採用する:

  1. ユーザーエージェントプロファイル。 すなわち、単一の人物により使用されるユーザーエージェントのインスタンスである。

  2. siteであって、 インプレッションについての情報を要求するもの(conversion site)。

    インプレッションを登録する site(impression site)は 考慮されない。 それらの site は、このシステムから直接情報を受け取らない。

  3. 現在のエポック

これらの値のいずれかが変化すると、新しい privacy unit が生成され、 その結果、別個のプライバシーバジェットが生じる。 人物が訪問する各 site は、各エポックについて 境界付けられた量の情報を受け取る。

理想的には、privacy unit は 単一の人物である。 理想的ではあるが、人物との完全な対応を保証する有用なシステムを開発することは、 いくつかの理由により不可能である:

8.1.1. プライバシー特性およびその限界の形式的分析

Attribution におけるプライバシー保護は多層的である:

  1. サイトごとの予算は、任意の一つのコンバージョンサイトがユーザーについて学習できる量を制限する。

  2. グローバル予算は、すべてのサイトがユーザーについて学習できる量に対する後方安全装置としての制限を提供する。

  3. インプレッションサイトクォータは、コンバージョンサイトが任意の一つのインプレッションサイト上の ユーザーの活動について学習できる量を制限する。

  4. 各ユーザー行動の後に維持されるカウンターは、API にデータを保存できる、または API から学習できるサイト数を制限する。

この仕様における形式的プライバシー分析は、二つの論文に基づく。 一つ目 [PPA-DP] は、オンデバイスの個別 DP 会計の理論を確立する。二つ目 [PPA-DP-2] は、サイトごとの予算およびグローバル予算によって与えられる数学的プライバシー保証へ 分析を拡張する。

サイトごとの予算は、主要なプライバシー保護として捉えられるべきである。 サイトごとの予算は、意味のある DP 保証を提供するように構成されるべきである。 しかし、[PPA-DP-2] の分析では、これらの保証を制限する二つの仮定が特定された:

  1. データ生成におけるサイト横断の適応性がないこと。 サイトの照会可能なデータストリーム (インプレッションおよびコンバージョン)は、他のサイトからの過去の DP attribution 結果とは独立に生成されなければならない

  2. サイト横断の共有制限を通じた漏洩がないこと。 一つのサイトからのクエリは、 他のサイトにどのレポートが発行されるかに影響してはならない

要するに、どちらの仮定も実際には成立し得ない。

このシステムは、時間をかけて同じユーザーとインタラクションする可能性のある複数のサイトを含むため、 サイト横断の適応性がないという仮定が必要である。 サイトは、互いの DP 測定に基づいて、ユーザーに表示する広告を変更する。 たとえば、ある広告主がattribution 結果から、より良い広告を作る方法を学習した場合、 一部のユーザーは競合他社のサイトではなく、その広告主のサイトでコンバージョンする可能性がある。 この場合、あるサイトが学習した内容—そのサイト自身のサイトごとの予算にのみ計上される—は、 競合他社に見えるデータ(またはデータの欠如)を変化させるが、 これはそれらの競合他社のサイトごとの予算には計上されない。

継続的な測定を提供する任意のシステムはこの性質を持つため、 唯一の結論はこの制限を受け入れることである。 その制限は、グローバル DP 予算および共有クォータを持つことを正当化するものの一部であり、 それが二つ目の仮定につながる。

複数のサイトにまたがる共有制限がある場合、サイト横断の漏洩がないという仮定が必要である。 そのような共有制限の例として、グローバル DP 保証を提供することを目的とする グローバル安全制限がある。 一部のサイトからの measureConversion() 要求によって共有制限に 達した場合、他のサイトへのレポートが フィルターされる可能性がある。たとえば、あるサイトは、自分がインプレッションを持つことを知っている場合、 共有制限に達したかどうかについて何かを学習する。 この情報は集計されノイズが加えられているものの、予算を使い果たしたサイトに関する情報であり、 そのサイトのサイトごとの予算を超えるものである。

共有制限を通じた漏洩は、それらの制限を濫用を制限する手段としてのみ使用する動機となる。 共有制限をサイトごとの予算の大きな倍数として設定すると、 共有制限を悪用しようとするには、少なくともその数のサイトによる協調が必要になる。 倍数を大きくすると、共有制限はプライバシー保護の手段としては有用性が低くなり、 サービス拒否または類似の濫用形態から保護する手段としてより適したものになる。

対照的に、この分析は、グローバル予算を、これらの制限なしに 健全なグローバル個別 DP 保証を提供するよう実装できることを示している。 しかし、多数のサイトによる API の使用をサポートするには、 グローバル予算をサイトごとの予算のかなり大きな倍数として構成する必要がある。 これは、それが提供する DP 保証がどの仮定にも依存しない一方で、 単独では意味のある DP 保護を提供できないことを意味する。 したがって、サイトごとの予算が主要な DP 保証を提供する。 グローバル予算は、悪意のあるサイトによる協調攻撃の場合のフォールバックと見なすことができる。

グローバル DP 予算は、多数のサイトにまたがってユーザー識別情報をリンクし、 サイトごとの予算を結合できるサイトに対する防護にもなる。 サイトごとのモデルはこの可能性を考慮していないが、 一部のサイトがこの能力を持つことは一般的である。 特に、これにはアイデンティティプロバイダー、ユーザー識別子(メールアドレスや電話番号など)を 受け取るサイト、ナビゲーショントラッキング [NAV-TRACKING-MITIGATIONS] を 正常に使用するサイト、および何らかの理由でサイト横断 Cookie を使用できるサイト [WEB-WITHOUT-3P-COOKIES] が含まれる。 複数サイトにまたがって Attribution を使用することは、そのようなサイトにとって調整上の課題となり得るが、 活動を単一の人物にリンクする能力をサイトが持つ可能性は、 システムのプライバシーに関する包括的な分析において無視できない。

8.1.2. ブラウザーインスタンス

各ブラウザーインスタンスは、別個のプライバシー予算を管理する。

ブラウザーインスタンス間の協調は可能かもしれないが、 期待されてはいない。 その協調は、公開される情報の総量を減らすことで プライバシーを改善できる可能性がある。 また、一つのブラウザーインスタンス上のインプレッションを 別のブラウザーインスタンス上でコンバージョン可能にすることで、 attribution の有用性を改善する可能性もある。

異なる実装をまたぐ協調は、 現時点ではこの作業の範囲外である。 実装は、同じ人物のものとして知られているインスタンス間で 何らかの協調を行うことができるが、これは必須ではない。

8.1.3. サイトごとの制限

Web サイトへ公開される情報は、サイトを基準として行われる。 これは、他のプライバシー関連機能で使用される同じ境界に沿っている。

オリジンなど、より細かいプライバシー単位では、 追加情報を取得することが容易になる。 同じ人物に関する情報を複数のオリジンから収集できる。 その情報は、Cookie [COOKIES] などを用いて、 サイト内での情報の自由な流れを悪用することで結合できる。

§ 8.2.2 安全制限では、この制限を悪用する攻撃と、 それらの攻撃から保護するためにユーザーエージェントによって実装され得る追加の 安全制限について 議論する。

8.1.4. プライバシー予算エポック

サイトは、各プライバシー 予算エポック (またはエポック) に記録されたインプレッションを 照会するために使用される、別個の差分プライバシー予算を受け取る。

この予算は、ユーザーエージェントに登録され、後で照会される インプレッションに適用されるものであり、 コンバージョンには 適用されない。

分析 [PPA-DP] の観点からは、インプレッションの 各エポックは 別個のデータベースを形成する。 有限のプライバシー予算が、 各データベースに対して行われるすべてのクエリにわたって強制される。

複数のエポックにまたがるインプレッションからコンバージョン レポートを生成することには、プライバシー上の影響がある。 Web サイトへの単一の訪問により、そのサイトは多くのエポックにわたる活動について情報を得ることができる。 これには、その期間全体にわたって コンバージョンサイトインプレッションの宛先として 識別されていることだけが必要である。 照会できるエポックの数は、ユーザーエージェントによって制限される。

目標は、実行可能な範囲でできるだけ大きなエポックを設定することである。 より長い期間は、任意の時点でサイトにより大きな総予算を割り当てられるため、 プライバシー/有用性のより良いバランスを可能にしつつ、 全体的なプライバシー損失率を低く保てる。 しかし、間隔が長くなると、プライバシー予算を完全に使い果たしやすくなり、 次の更新まで情報が得られなくなる。

エポック期間を 1 週間に設定するという決定は、 おおむね任意である。 1 週間は、将来数日または数週間に起こり得る変化を考慮した慎重な計画なしに、 サイトがプライバシー予算の使い方を決定する柔軟性を持つのに 十分であると期待される。

§ 8.2 プライバシー予算では、予算管理の処理をより詳しく説明する。

8.2. プライバシー予算

ブラウザーはプライバシー 予算を維持する。 これは、プライバシー損失の量を制限するための手段である。

この仕様は、その基礎として (ε, δ)-差分プライバシーの個別形式を使用する。 このモデルでは、プライバシー損失は ε の値を用いて測定される。 δ の値は、集計にノイズを追加するときに集計サービスによって扱われる。

各ユーザーエージェントインスタンスは、 プライバシー予算を管理する責任を負う。

要求される各コンバージョンレポートは、 そのレポートが消費するプライバシー予算の量を表す ε 値と、 コンバージョンレポートで返され得る値の最大値を指定する。

8.2.1. プライバシー予算の控除

コンバージョンレポートのためにインプレッションを 探索するとき、 ユーザーエージェントは、それらのインプレッションが保存されたプライバシー予算エポックの予算から、 指定された ε 値を控除する。 そのエポックプライバシー予算が 十分でない場合、 そのエポックからのインプレッションは使用されない。

コンバージョン サイトmeasureConversion() を呼び出すたびに、 attribution ロジックインプレッションを選択した エポックについて、 プライバシー予算が控除される

次の図では、 さまざまなサイトからインプレッションが記録されており、 円で示されている。
時間 `--. .--' `--. .--' `--. .--' `--. .--' ^ | | | | | 週 1 週 2 週 3 週 4 現在 ]]> サイト A サイト B サイト C サイト D サイト E 時間 週 1 週 2 週 3 週 4 現在
時間にわたるインプレッションストアの例

コンバージョン レポートは、"now" と記された時点で要求される可能性がある。 そのコンバージョンレポートは、黒い円で示されたインプレッションを選択し、 Sites B、C、および E からのインプレッションに対応する。

その結果、conversion siteプライバシー バジェットは、 エポック 1、3、4、および 5 から差し引かれるエポック 2 にはインプレッションが記録されていなかったため、 そのエポックからバジェットは 差し引かれない。

ユーザー エージェントプライバシーバジェットの枯渇をどのように管理するかは、 選択されたattribution logicに依存する。

8.2.2. 安全制限

基本的なプライバシー単位は、 複数のサイトにまたがって同じ人物の活動を相関できる敵対者による攻撃に対して脆弱である。

サイトのグループは、共有所有権や強い合意がある場合など、 その活動を協調できることがある。 特定の訪問者が同じ人物であることを、FedCM [FEDCM] のようなものを含む任意の手段で 確信できるサイトのグループは、 この API から得た情報を結合できる。

これは、協調が発生するサイト数に比例して、 サイトが attribution から情報を得る速度を高めるために使用できる。 デフォルトのプライバシー単位は、 この方法で公開される情報に制限を設けない。

この影響に対抗するため、ユーザーエージェントは安全制限を実装できる。 これは、サイトを考慮しない追加のプライバシー予算である。 安全制限は、ほとんどの通常の閲覧活動では到達しないように、 サイトごとの予算より大幅に高く設定される場合がある。 目標は、集中的な活動または攻撃を受けている場合にのみ 有効になるようにすることである。

サイトごとのプライバシー予算と同様に、 コンバージョンレポートの要求が 安全制限を超過させたかどうかをサイトが判断できないことが重要である。

8.3. 差分プライバシーメカニズム

差分プライバシーメカニズム、すなわちノイズを追加する具体的な方法は、 集約 サービスにより選択できる。

ラプラスノイズを追加することは、 ノイズ全体の大きさと、 実装および分析の単純さとのバランスを取り、 良好な結果を生むことが期待される。 現在の設計は L1 ノルムに基づく DP 感度を使用しており、 集約で追加されるラプラスノイズをサポートする。 他のノイズメカニズムをサポートするには、 感度の計算および通知の方法に追加の変更が必要になる可能性がある。

これらの集約サービスのいずれについても定義されるように、 中央の場所でノイズを追加することにより、 レポートの総数が増加しても、 ノイズの総量が増加しないことが保証される。 これは、レポートが生成される時点でノイズを適用する 差分プライバシー設計 (すなわち、ローカル差分プライバシーモデル)に比べて、 有用性上の利点を提供する。 そのような設計では、ノイズはレポートの総数に比例して増加する。

9. セキュリティ考慮事項

9.1. インプレッションストア

Attribution API によって使用されるインプレッションストアは、 閲覧活動に関連する情報を保持し、 閲覧セッションをまたいで永続する。 インプレッションストアを通じる情報の流れは 厳格に制御されているが、 オリジンをまたいで一定量の情報を運ぶ。

次の措置により、インプレッションストアを通じた有害な情報フローの可能性が制限される:

9.2. 実装におけるサイドチャネルリスク

Attribution API は、必要なセキュリティおよびプライバシー特性を維持するために、 注意して実装されなければならない。 API を呼び出すサイトは、次を知ることができない:

明示的な返り値や投げられる例外だけが、 サイトが Attribution API から情報を得る手段ではないことに注意。 次のようなサイドチャネルから、 センシティブな情報を推論できる可能性がある:

API 内の関数の実行時間の変動は、 保証を維持するうえで主な考慮事項である。 実行時間について特に懸念される要因は二つある:

グローバルプライバシー予算ストアインプレッションサイトクォータストア、 およびエポック開始時刻内の 共有グローバル状態は、それらの値がアルゴリズムの実行時間に直接影響しないため、 リスクは低い。 実装は、それでも、任意のグローバル状態が フィンガープリントやその他の情報漏洩に 寄与しないことを保証する必要がある。

すべてのサイドチャネルを完全に除去することは現実的ではないが、 実装は attribution API からセンシティブ情報が漏洩するのを防ぐため、 合理的な努力を行わなければならない。 漏洩を防ぐ戦略には次が含まれる:

9.3. 集計サービス

Web プラットフォームの一部ではないが、 集計サービスのセキュリティは Attribution 機構全体のセキュリティにとって非常に重要である。 measureConversion() によって生成される コンバージョンレポートは、 集計サービスの暗号鍵を用いて暗号化される。 したがって、これらのレポートに含まれる情報が開示される可能性の多くは、 集計サービスの詳細に依存する。

ユーザー エージェント開発者は、 Attribution API のサポート対象サービスとして追加する前に、 集計サービスの設計と、集計サービス運用者の信頼性を慎重に検討すべきである。 これらの問題に関する追加の議論は、 § 7 集計および§ 10 プライバシー考慮事項にある。

9.4. 複数サイトからのレポートの結合

Attribution API におけるプライバシーメカニズムは、 主にsiteの粒度で動作する。 悪意ある運用者は、 複数の site についてインプレッションを 登録しようと試みる可能性があり、 それにより attribution を通じて本来解放される情報量を 超過する。 § 8.2.2 安全制限では、この可能性を緩和するための追加のクロスサイト プライバシーバジェットの確立について説明する。

9.5. 広告詐欺

多くの技術と同様に、 Web 上の広告はさまざまな種類の詐欺の対象となってきた。

インプレッションの不正な登録は、 Attribution API において特に懸念される。 インプレッションはデバイス上にのみ保存されるためである。 不正なインプレッションを識別して attribution から除外するために、 サーバー側の知見を適用することはできない。 逆に、コンバージョンレポートは暗号化されているものの、 レポートはサーバーに送信されるため、 サーバーはコンバージョンが不正である可能性が高いと判断し、 集計から除外できる。

Attribution API の悪意ある使用に対する重要な緩和策は、 インプレッションを登録する際に適格なコンバージョンサイトを明示的に指定し、 コンバージョンを登録する際に適格なインプレッションサイトおよびヒストグラムインデックスを明示的に指定することである。 これにより、任意の悪意あるサイト上のインプレッションが、 意図された候補インプレッション集合への attribution に干渉することを防ぐ。

10. プライバシー考慮事項

この API の主なプライバシー目標は、 サイトに attribution を実行する能力を提供することが、 サイト横断認識を実行する能力を向上させないことを保証することである。

この節は、この目標を達成するために必要な保護について、 より多くの情報を提供する。 追加の議論では、同一サイト認識の防止など、 二次的なプライバシー目標について述べる。

10.1. Attribution API によって公開される情報

インプレッションストアおよび プライバシー予算 ストアは、 閲覧活動の断面に関する情報を含む。 API の使用が増えるにつれて、 この情報の範囲も広がる。 しかし、これらのストアに書き込まれる情報の大半は 決して開示されない。 attribution はデバイス上で実行されるため (オンデバイス attribution)、 attribution されたコンバージョンに関する情報のみが Attribution API によって公開される。 これは、インプレッションとコンバージョンの両方に関する情報が、 オフデバイス attributionのために集計サービスへ送信される 他の方式とは対照的である。 後者の種類の方式では、集計サービスの侵害 (または集計サービスとの通信の侵害)において明らかになり得る情報量が 大幅に大きい。

Attribution API が attribution を行う場合、 その attribution に関する情報は、 差分プライバシーの制約が許す範囲でのみ、 デバイスから公開される。

Attribution API は、比較的まれなコンバージョンイベントと、 関連する限定されたインプレッション候補集合との関連を測定することを意図しているが、 API が大規模なデータ収集にどのように悪用され得るかを考慮することが重要である。 インプレッションが可能なコンバージョン サイトを列挙する(およびその逆)という要件は、 API の大量データ収集への悪用を防ぎ、 そのような悪用の試みをより可視化するうえで重要な役割を持つ。

10.2. Attribution API の無効化

ユーザーエージェントは、ユーザーが Attribution API を無効にするための制御を提供しなければならない

Attribution API は、集計情報のみを明らかにするよう設計されている。 差分プライバシーの使用は、 特定のユーザーが集計出力に寄与したかどうかを判定できる可能性を制限する。 しかし、一部のユーザーはそれでも attribution 測定に参加したくないと考える場合がある。

実装は、Attribution API 専用の制御、 または複数の機能に適用される統合プライバシー制御を用いて、 ユーザーにオプトアウトの選択肢を提供できる。

ユーザーエージェント開発者は、 他のプライバシーモードと Attribution API との相互作用を考慮すべきである。 たとえば、attribution はプライベートブラウジングモードで無効化される場合や、 ユーザーが診断データの収集をオプトアウトしている場合に無効化される場合がある。

設計上、ユーザーがオプトアウトしているかどうかは Web サイトから検出できない。

フィンガープリンティングのリスクを最小化し、 Attribution API を無効にすることを選択したユーザーへの差別を防ぐため、 サイトは API が無効であることを検出できてはならない。 具体的には、それ以外の点で有効な Attribution API へのすべての呼び出しは、 API が無効であっても正常に完了する。 挙動の唯一の違いは、API が無効であるときに返される コンバージョン レポートが、いかなるコンバージョン値も報告しないことである。 レポートは暗号化されているため、 この違いはコンバージョンレポートを受け取るサイトから検出できない。

10.3. 可視性

実装は、ユーザーがインプレッションストアの状態を表示し、 過去のレポート提出を確認する方法を提供すべきである

これらのインターフェイスは、 サイトによる Attribution API の集計使用を示す要約情報に限定される場合がある。 インプレッションおよび提出済みレポートの詳細を調べるためのインターフェイスは、 ユーザーと Web 開発者の両方による API の動作診断を可能にし得る。

10.4. 未構成のブラウザー

この API は、ユーザーエージェントインスタンスが、 measureConversion() への要求に応答するために 必要なすべての構成を持っていることを前提とする。

aggregation service の構成のうち、 measureConversion() を呼び出すために必要なものが存在しない、または古くなっている場合、 それはサイトから観測可能になりうる。

構成の取得が measureConversion() の呼び出しの解決を遅延させうる場合、 これはタイミングサイドチャネルを作り出す。 代わりに偽の応答が生成される場合、 適切に構成されたユーザーエージェント からの応答と偽の応答との差異が 観測可能になることがある。 これは、キー識別子や その他の暗号化されていないメタデータの使用である可能性がある。 暗号文の長さの違いも、暗号化される内容の変化や アルゴリズム選択の変化を明らかにしうる。

古い、または存在しない構成を検出することは、 フィンガープリントするために、 ユーザーエージェントに対して使用される可能性がある。

したがって、ユーザー エージェントは、 サイトから観測できない方法で、aggregation service 構成の取得を優先すべきである。 これは、コンテンツの読み込みを開始する前に、 起動時に構成を取得することで達成できる可能性がある。

必要な構成を取得できない場合、 または明らかに古くなっている場合、 実装は measureConversion() が呼び出されたときに ただちに却下することを選択してもよい。 これは情報を漏えいするが、 偽の値を生成しようとするよりも漏えいが少ない可能性がある。

10.5. 保存済みインプレッションへの識別情報の含有

サイトは、 matchValue または他のフィールドを使用して、 インプレッション内に一定量のデータをエンコードできる。 API は、サイトがこれらのフィールドにユーザー識別子をエンコードすることを防がない。 attribution 処理は、 コンバージョンレポートを構築する際にこのデータを使用でき、 これは、その識別情報がそのレポートを受け取るサイトに利用可能になる 一定のリスクを意味する。 次の措置がこのリスクを軽減する:

10.6. サードパーティコンテキストでの使用

Attribution API は、サードパーティコンテキストでも利用可能である。 特に、サードパーティ iframe は saveImpression() を呼び出せる。 ただし、インプレッションは iframe のオリジンではなく、 トップレベルナビゲーションコンテキストのサイト で記録されることに注意すること。

サードパーティコンテキストで API が利用可能であることは、 プライバシーリスクの一定の増加を伴うが、 iframe は広告表示に一般的に使用されるため、 このサポートは必要と見なされる。

10.7. API 状態の消去

ユーザー エージェントは、ストレージを消去する選択肢を提示する可能性がある。 これらは 2 つの理由で存在する:

プライバシーバジェットの支出を追跡する状態を消去すると、 site に対するプライバシーに悪影響がある。 その場合、site は attribution からより多くの情報を得られるようになる。

ユーザー エージェントは、API が無効化されたとき、 プライバシー バジェットストアおよびエポック開始時刻から データを消去してもよい。 その場合、API が再び有効化されても、 API が無効化される前に どのバジェットが消費されたかを判断する方法はない。 その場合、ユーザーエージェントは、 last browsing history clearの値を更新して、 プライバシー バジェットが意図せず超過されないようにできる。

10.7.1. サイトデータの消去

ユーザーの要求により site データを消去するが、 閲覧履歴を保持する場合、 ユーザー エージェントは、 影響を受けるsite集合、 false(forgetVisits 用)、 およびその操作が行われた時刻が与えられたものとして、 attribution 用に閲覧履歴を消去するを呼び出す。 これは、その site のプライバシーバジェットをゼロに設定し、 その site でのコンバージョン測定の使用を防ぐ。 これは、保存されたインプレッションをインプレッションストアから削除しない。 論理的には、インプレッションは保存された時点でconversion siteへ移転される。

siteの要求により、 `Clear-Site-Data` ヘッダーを使用して site データを消去する場合、 ユーザー エージェントは、 プライバシーバジェットストア またはエポック開始 時刻を変更することなく、 インプレッションを削除するだけである。

10.7.2. 閲覧履歴の消去

閲覧履歴を消去する場合、 プライバシー バジェットストアを更新するだけでは不十分である。 site に対するプライバシー喪失を防ぐために必要な siteごとの 情報を保持すると、 コンピューターの他のユーザーが発見できる site への訪問に関する情報が残る。

閲覧履歴を消去するユーザーエージェントは、 影響を受けるsite集合、 true(forgetVisits 用)、 およびその操作が開始された時刻が与えられたものとして、 attribution 用に閲覧履歴を消去するを呼び出す。

閲覧履歴を消去する場合、 ユーザー エージェントは、 siteごとのすべてのプライバシーバジェット情報を 削除する必要がある (すなわち、プライバシーバジェットストアからエントリーを削除する)。 ユーザー エージェントはまた、 その情報を失った結果として、 その後のプライバシー バジェット支出が、 設定された制限を超えるプライバシー喪失を引き起こせないことを保証する必要がある。

これは、閲覧履歴が破棄されたエポックについて、 attribution を無効化することで達成できる。 そうしない場合、履歴の消去の直前に バジェットを消費したsiteは、 状態の消去がない場合よりも多くを API を通じて知ることができる。

これは、影響を受けるsiteについて、 エポックの残りの期間 API を無効化する。 エポック開始 時刻は消去されないため、 エポックの タイムラインは連続したままである。

ユーザー エージェントは、履歴が最後に消去された時刻を last browsing history clear値に記憶する。 これは、siteが、 ユーザー エージェントが選択した最大許容プライバシーバジェットを超過できないことが保証されるまで、 バジェットの支出を防ぐために使用される。

attribution の開始エポックを取得する アルゴリズムは、 conversion siteが、 状態が消去された時点から 1 エポック duration以内に 開始するいずれのエポックからも、 インプレッションを照会できないことを保証する。

10.7.3. インプレッションの消去

インプレッションストアを消去するための仕組みを提供しなければならない。 たとえば、Attribution API を無効化するコントロールが アクティブ化されたときに、 インプレッションストアを消去できる。

ユーザーエージェントが 保存済みデータ(履歴、Cookie など)を消去するために提供する任意の仕組みは、 インプレッションストアにも適用されるよう拡張することが推奨される。 § 10.7 API 状態の消去は、保存済みデータの消去について より詳細な情報を提供する。

ユーザー エージェントsiteの状態を消去する場合、 影響を受ける期間中に保存されたすべての保存済み インプレッションのうち、 一致するimpression site またはconversion siteを持つものを 破棄しなければならない。 impression siteについては、 これらのインプレッションは 消去されたアクティビティに関係する。 状態が消去されたconversion siteは、 これらのインプレッションを使用できない。

インプレッションのうち、一致する intermediary siteを持つものは、 保持されてもよい。

10.8. 時計の選択

この API は、時刻の基盤として壁時計を使用する。 これは主に、この API が永続的な時刻の概念に依存するためである。 単調時計は、ユーザー エージェントの単一の実行中にのみ定義されるため、 ユーザーエージェントが再起動された場合、 一貫性の保証がない。

壁時計は、時計のドリフトにより蓄積し得る誤差を考慮して 調整できる。 したがって壁時計は、常に一貫した速度で進むことは保証されず、 場合によっては減少する可能性もある。

壁時計の減少は、 この API が提供するプライバシー保証に影響しない。 時計の増加のみが、 プライバシーに悪影響を及ぼし得る。 時間の通常の進行を超える増加は、 プライバシーバジェットが 意図より早く更新される結果をもたらす可能性がある。

エポック内で補正を受ける時計については、 時計の調整はプライバシー上の影響を持たない。 十分に大きい単一の補正は、 プライバシー バジェットを予定より早く更新させ、 プライバシー喪失の一回限りの増加をもたらす可能性がある。 継続的な大きな補正は、プライバシーに最も深刻な影響を及ぼす。 各エポック間の遷移により、追加のプライバシーバジェットが解放されるためである。

時刻が非常に大きく増加し、 エポック全体をスキップしても、 追加のプライバシー喪失は生じない。 インプレッション保存できない限り、 プライバシー喪失は起こり得ない。

もちろん、時計に対する大きな補正または継続的な補正を必要とする ユーザーエージェントは、 それが報告する時刻の結果として、 高い識別可能性を持つ可能性が高い。 それだけで、望ましくないcross-site recognitionを可能にするには十分である可能性が高い。

11. 謝辞

この仕様は、多くの人々による多大な作業の成果である。 このレベルの API の大まかな形は、Luke Winstrom のアイデアに基づいている。 プライバシーアーキテクチャは、[PPA-DP] の著者らによるものである。

適合性

文書の 表記規約

適合要件は、 記述的な表明と RFC 2119 用語の組み合わせで表現される。 この文書の規範的部分におけるキーワード “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” は、RFC 2119 で説明されるとおりに解釈される。 ただし、読みやすさのため、 この仕様ではこれらの語はすべて大文字では表示されない。

この仕様のすべてのテキストは、 非規範的と明示的に示された節、例、および注を除き、規範的である。 [RFC2119]

この仕様の例は、“for example” という語で導入されるか、 次のように、class="example" によって 規範的テキストから分離される:

これは参考例の一例である。

参考注記は “Note” という語で始まり、 次のように、class="note" によって 規範的テキストから分離される:

注: これは参考注記である。

適合する アルゴリズム

アルゴリズムの一部として命令形で表現される要件 (たとえば "strip any leading space characters" や "return false and abort these steps") は、そのアルゴリズムを導入する際に使用されたキーワード ("must", "should", "may" など)の意味で解釈される。

アルゴリズムまたは特定の手順として表現される適合要件は、 最終結果が同等である限り、 任意の方法で実装できる。 特に、この仕様で定義されるアルゴリズムは、 理解しやすいことを意図しており、 高性能であることを意図していない。 実装者は最適化することが推奨される。

索引

この 仕様で定義される用語

参照により定義される用語

参考文献

規範参考文献

[CLEAR-SITE-DATA]
Mike West. Clear Site Data. 2017年11月30日. WD. URL: https://www.w3.org/TR/clear-site-data/
[CSS-2025]
Chris Lilley; et al. CSS Snapshot 2025. 2025年9月18日. NOTE. URL: https://www.w3.org/TR/css-2025/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2024年3月12日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS2/
[DAP]
Tim Geoghegan; et al. Distributed Aggregation Protocol for Privacy Preserving Measurement. 2024-04-29. URL: https://datatracker.ietf.org/doc/html/draft-ietf-ppm-dap-16
[DAP-ATTRIBUTION]
Martin Thomson. Distributed Aggregation Protocol (DAP) Extensions for the Attribution API. 2025-01-15. URL: https://datatracker.ietf.org/doc/html/draft-thomson-ppm-dap-attribution-00
[DAP-TASKPROV]
Shan Wang; Christopher Patton. Task Binding and In-Band Provisioning for DAP. 2025-09-05. URL: https://datatracker.ietf.org/doc/html/draft-ietf-ppm-dap-taskprov-03
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[ECMASCRIPT]
ECMAScript Language Specification. URL: https://tc39.es/ecma262/multipage/
[FETCH]
Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/
[HR-TIME-3]
Yoav Weiss. High Resolution Time. 2026年3月24日. WD. URL: https://www.w3.org/TR/hr-time-3/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[PERMISSIONS-POLICY-1]
Ian Clelland. Permissions Policy. 2025年10月6日. WD. URL: https://www.w3.org/TR/permissions-policy-1/
[PRIO-L1]
Martin Thomson; David Cook. A Prio Instantiation for Vector Sums with an L1 Norm Bound on Contributions. 2024-10-21. URL: https://datatracker.ietf.org/doc/draft-thomson-ppm-l1-bound-sum/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SECURE-CONTEXTS]
Mike West. Secure Contexts. 2023年11月10日. CRD. URL: https://www.w3.org/TR/secure-contexts/
[URL]
Anne van Kesteren. URL Standard. Living Standard. URL: https://url.spec.whatwg.org/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

非規範参考文献

[COOKIES]
A. Barth. HTTP State Management Mechanism. 2011年4月. Proposed Standard. URL: https://httpwg.org/specs/rfc6265.html
[COPPACALYPSE]
Garrett Johnson; et al. COPPAcalypse? The Youtube Settlement's Impact on Kids Content. 2024-03-14. URL: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4430334
[DP]
Cynthia Dwork; Aaron Roth. The Algorithmic Foundations of Differential Privacy. 2014. URL: https://doi.org/10.1561/0400000042
[EU-AD]
Niklas FOURBERG; et al. Online advertising: the impact of targeted advertising on advertisers, market access and consumer choice. 2021-06. URL: https://www.europarl.europa.eu/thinktank/en/document/IPOL_STU(2021)662913
[FEDCM]
Nicolas Pena Moreno. Federated Credential Management API. 2024年8月20日. FPWD. URL: https://www.w3.org/TR/fedcm-1/
[FREE-GDP]
Leonard Nakamura; Jon D. Samuels; Rachel Soloveichik. Measuring the "Free" Digital Economy within the GDP and Productivity Accounts. 2017-10. URL: https://www.bea.gov/research/papers/2017/measuring-free-digital-economy-within-gdp-and-productivity-accounts
[NAV-TRACKING-MITIGATIONS]
Navigational-Tracking Mitigations. Editor's Draft. URL: https://privacycg.github.io/nav-tracking-mitigations/
[ONLINE-ADVERTISING]
Avi Goldfarb; Catherine Tucker. Online Advertising. URL: https://doi.org/10.1016/B978-0-12-385514-5.00006-9
[PPA-DP]
Pierre Tholoniat; et al. Cookie Monster: Efficient On-device Budgeting for Differentially-Private Ad-Measurement Systems. URL: https://arxiv.org/abs/2405.16719
[PPA-DP-2]
Pierre Tholoniat; et al. Big Bird: Privacy Budget Management for W3C's Privacy-Preserving Attribution API. URL: https://arxiv.org/abs/2506.05290
[PRIO]
Henry Corrigan-Gibbs; Dan Boneh. Prio: Private, Robust, and Scalable Computation of Aggregate Statistics. 2017-03-14. URL: https://crypto.stanford.edu/prio/paper.pdf
[RFC3492]
A. Costello. Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA). 2003年3月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc3492
[RFC4086]
D. Eastlake 3rd; J. Schiller; S. Crocker. Randomness Requirements for Security. 2005年6月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc4086
[RFC5890]
J. Klensin. Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework. 2010年8月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc5890
[RFC6761]
S. Cheshire; M. Krochmal. Special-Use Domain Names. 2013年2月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6761
[RFC9180]
R. Barnes; et al. Hybrid Public Key Encryption. 2022年2月. Informational. URL: https://www.rfc-editor.org/rfc/rfc9180
[STORAGE]
Anne van Kesteren. Storage Standard. Living Standard. URL: https://storage.spec.whatwg.org/
[UNSANCTIONED-TRACKING]
Mark Nottingham. Unsanctioned Web Tracking. 2015年7月17日. TAG Finding. URL: https://www.w3.org/2001/tag/doc/unsanctioned-tracking/
[VDAF]
Richard L. Barnes; et al. Verifiable Distributed Aggregation Functions. 2026-01-30. URL: https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-vdaf-18
[WEB-WITHOUT-3P-COOKIES]
A Web Without Third-Party Cookies. URL: https://www.w3.org/2001/tag/doc/web-without-3p-cookies/

IDL 索引

partial interface Navigator {
  [SecureContext, SameObject] readonly attribute Attribution attribution;
};

enum AttributionAggregationProtocol { "dap-18-histogram" };

dictionary AttributionAggregationService {
  required AttributionAggregationProtocol protocol;
};

[SecureContext, Exposed=Window]
interface AttributionAggregationServices {
  readonly maplike<USVString, AttributionAggregationService>;
};

[SecureContext, Exposed=Window]
interface Attribution {
  readonly attribute AttributionAggregationServices aggregationServices;
};

dictionary AttributionImpressionOptions {
  required unsigned long histogramIndex;
  unsigned long matchValue = 0;
  sequence<USVString> conversionSites = [];
  sequence<USVString> conversionCallers = [];
  unsigned long lifetimeDays = 30;
  long priority = 0;
};

dictionary AttributionImpressionResult {
};

[SecureContext, Exposed=Window]
partial interface Attribution {
  Promise<AttributionImpressionResult> saveImpression(AttributionImpressionOptions options);
};

dictionary AttributionConversionOptions {
  required USVString aggregationService;
  double epsilon = 1.0;

  required unsigned long histogramSize;

  unsigned long lookbackDays;
  sequence<unsigned long> matchValues = [];
  sequence<USVString> impressionSites = [];
  sequence<USVString> impressionCallers = [];

  sequence<double> credit;
  unsigned long value = 1;
  unsigned long maxValue = 1;
};

dictionary AttributionConversionResult {
  required Uint8Array report;
};

[SecureContext, Exposed=Window]
partial interface Attribution {
  Promise<AttributionConversionResult> measureConversion(AttributionConversionOptions options);
};