-
Notifications
You must be signed in to change notification settings - Fork 250
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Creative pre-registration strategies #792
Comments
One thing we need to be careful with here is about leaking data - renderURLs haven't been checked for k-anonymity, and so requesting them can leak data (e.g., if we send them only when offered in a bid, then they could pass in a user ID for the publisher page that could be correlated with a user ID on the joining origin. 32 IGs could provide one bit of publisher page ID each, like: https://foo.test/bit-0-is-1?user=FreddyPharkas, https://foo.test/bit-1-is-0?user=FreddyPharkas, etc. Each URL has the full user ID in the joining origin, and one ordered bit from the top-level-site where the auction is running). Sending renderURLs on IG join would be more practical, but we don't know the seller origin to send the information to, and we'd need the IG to opt-in to sending the information (normally, offering a bid is considered to provide that permission). So I think we need to figure out the privacy story here on how we can implement this without creating a new cross-top-level-origin information leak. |
Can you elaborate? As per https://github.com/WICG/turtledove/blob/main/FLEDGE.md#33-metadata-with-the-ad-bid, I wasn't expecting
|
Sending on IG join would be great, from the privacy POV. If only IGs declared which sellers they were willing to bit with, this would be the preferred approach. But that hasn't been a required part of IG metadata until now. I suspect that if we propose it we will hear push-back, but maybe I'm being too pessimistic? Roni, want to pop my bubble quickly?
We do pass bids along to |
Only render URLs that win auctions (or rather, that would have won auctions) are registered with the k-anon server for the purposes of calculating k-anonymity, as otherwise, an ad could only be show to a single user, despite appearing in IGs for a lot of users. So if you're blocking ads that you've never seen before, they'll never reach the k-anon threshold. Therefore, this would need to be done for non-k-anon ads. |
And just to be clear - I mean the ads need to have won the top-level auction, in an environment that doesn't know whether they've met the k-anon threshold or not. My understanding is that you'd want to know the URL so it can be scanned before showing it anywhere. If that's not the case, and this can all be done after the ad has hit the k-anon threshold and we've already started showing the ad to users, this becomes much easier to do. We may need some sort of k-anon <renderURL, seller, component auction bool> check on how often an ad has won auctions, and once it's hit, have some way of conveying it to sellers, whether directly, or through an aggregation server of some sort. |
Correct.
To be clear, there's no desire to trigger this registration under the k-anon threshold; in other words, if a creative won't be shown to N devices, then there's no need to register it "before" it reaches this threshold. |
IMHO it isn't immediately obvious that from the explainer that this ever reaches
|
Agree that the explainer could be clearer on this point. I think this is the first case that's come up where the distinction really matters. |
That would add complexity if an existing buyer/IG wanted to start working with a new seller, correct? Would That being said, even if IG seller declaration were in place, that doesn't address the challenge of being able to leverage the metadata provided by |
Just so that I fully understand the privacy concern -- doesn't that situation arise the first time the ad across the k-anon threshold already? |
I think we could pass along renderURLs to new sellers when fetching the updateURL without any major new privacy issues, though that would potentially add a bunch of network requests and overhead (We'd need up update new sellers about renderURLs, and update old sellers about new renderURLs, so if we inform sellers directly from Chrome, that could be a lot of extra traffic). I don't think sending extra metadata specified by the IG affects the privacy characteristics here if we send the information on join (as opposed to on win on a 3P site, where it would need to be added to the k-anon check, at least). We are putting more complexity and overhead on the browser here for something that the browser doesn't really need to care about, unfortunately. Ideally we'd keep the browser API surface for this as minimal as possible. |
So, ideally the DSP and SSP don't know when the ad reaches the k-anon threshold for the first time, so can't alter behavior based on that. It can only get so much information from loss reports, and auctions are run in a manner that limits information it can get out of them. Only doing the k-anon counting after it wins the auction is done in part to protect against exactly that sort of gaming the system. |
I'm still wondering whether we can find a safe way to make this happen at IG Join and Update time. Really this is kind of about the browser mediating a direct flow of information from DSP to SSP, if both of them are OK with us doing so. I'm thinking something like: (1) Suppose SSP X has run auctions in the past [period of time] in which X has invited DSP Y to be a buyer and some Y IG has placed a bid. (Each browser instance could keep track of this.) (2) Suppose the IG object on which DSP Y calls Join includes a new field If both of those are true, then at the moment of IG Join, it seems to me like it would be OK for the browser to contact that SSP's KV server — if we knew the base URL somehow — and ask for the associated KV signals for each renderURL in the IG. And then if no KV signals came back, we could send the renderURL to some SSP-chosen scan-queueing endpoint, maybe as identified by the SSP in the KV response. This could even be one instead of two round-trips, since I don't think there's any need for the first one to go to a trusted server, this is just a question of what endpoints are set up to receive a lot of traffic (KV expecting calls on each auction) vs only a little (scan-queueing expecting traffic only when a new renderURL appears). |
As per the new guidance in https://github.com/WICG/turtledove/blob/main/FLEDGE.md#14-buyer-security-considerations :
This confirms that there will be no a priori method to be able to associate a |
In this situation, DSPs should tell SSP partners which domain they will use in the renderingURL so that SSP can keep track of it on their KV server to recognize the DSP partner from the renderingURL. |
Agreed -- but it's also not clear that there will only be a single such render domain per DSP. |
[I read through all the comments and think I understand what's being discussed/proposed, but apologies in advance if I rehash something or miss a point already made.] I think @michaelkleber is on the right track when he says that we're looking for someone to mediate between the SSP and the DSP. However, the challenge with having it be the browser was already pointed out by @rdgordon-index in the initial description, as I think this still results in a "significant volume of unregistered created API calls from each device, for each such creative." Could the K/V server be the point of coordination? It could provide an endpoint that can be queried for a list of renderURLs that have no data associated with them. It's effectively a list of cache misses. When the endpoint gets queried, it could take the extra step of filtering by checking which keys are still misses, though it doesn't have to. Depending on how lookups get distributed geographically, it might help segment the data by region (assuming K/V servers are deployed in multiple regions and probably see different keys). This could help SSPs know which values need to be pushed to which K/V servers. |
https://developers.google.com/display-video/protected-audience/ssp-guide#metadata_with_ad_bid -- some recent updates from DV3 regarding ad metadata |
Hi all. We've been exploring this issue, and have prepared a document that details a proposed solution, including a chronicle of several options considered and their respective pros/cons. Please take a look: Thanks. |
Given the length of the document linked above, I believe it would be helpful to convey a high-level summary of that document here. The design expressed in this document attempts to balance a few competing objectives:
To this end, the design proposed has the following properties. The document explains each of these properties and their motivation in far greater detail.
The majority of the document focuses on the question of when the browser would send ads to sellers' creative scanning entrypoints. The design alternative the document recommends proposes sending the ads of an interest group anytime that interest group is joined or updated, except that the browser would also keep track of which ads it already sent to each seller, so that it could reduce the volume of traffic sent to sellers' creative scanning entrypoint by sending each ad to each seller only once. To protect privacy, this deduplication would be partitioned by the joining site of the interest group. Please see the document for more details, and provide your comments here on GitHub issue. Thanks. |
question: can we include |
Can you elaborate on the "potential leak" here? A buyer submitting a bid is effectively "allowing" the seller to scan their creatives. |
Yes, that sounds like a good idea. I've modified the document to reflect it. I've also added a change log at the bottom of the document to record any changes made from when the document was first posted here.
This is a good question. The privacy risk described here would not be part of normal operation, but a malicious party could cause a leak in the following way. An auction is run on the user's device for which the seller is |
Technically true, but attestation also requires the ad tech vendor to indicate that they're not going do this kind of thing -- and because it's on the |
Thanks for the well-written and thought out proposal, @orrb1. |
Suggestion to please use a consistent root path component for all Protected Audience .well-known URIs as Attribution Reporting has. We find this helpful for request routing. |
Buyers' Config Publishing Since Chrome proposes to commit to fetching and persisting the new creative scanning config and you intend to extend For example,
An interest group can override the settings on any IG join, otherwise these are used. Same caveat mentioned in the explainer applies, that creative scanning cannot have a catch-all. The nifty new scanning declarations are yet another thing to hang onto every IG registration that counts against the size constraints. |
Seller Configs Same might apply on the seller side along with picking up the For example,
|
Submitting Creatives
Chrome isn't consuming anything from the response, right? You can ditch the URL encoding by POSTing,
Also free to send multiple creatives identified at the IG joining site as suggested in your perferred Option 2b. |
question: when would |
Excellent.
If I've understood correctly, this still requires it to be part of IG join/update, and cannot be dynamic at
This was more about the seller-specific nature of bidding, and hence metadata associated with the bid -- and when these values are known -- but this is probably a better question for the buy-side who will need to manage setting and updating these values. Today, we've asked for all of this information via
Understood.
I think that speaks to the generic "string field whose URL-encoded value" of |
Follow-up question: will |
With the current proposed system we, as a buyer, will be unable to provide the ad size to the seller via this |
#1088 is relevant here -- originally, there was no mechnaism for knowing what the size actually would be for a given auction -- |
Thank you all for your thoughtful responses. I'll address your questions inline below.
Yes, this matches my understanding. As long as the extra data being included in the KV request for creative scanning comes from the interest group, we aren't exposing more information by sending that data, since it could otherwise be part of the renderURL.
I believe this question was asked in the October 30 WICG call and someone representing a DSP said it wouldn't be an issue, though the call's notes don't seem to mention it. I think adomain and SeatID for each ad should be known at join/update time. If the concern is selecting the one appropriate for a specific seller, then the
This seems entirely reasonable. We could add a
The proposal above recommends taking the ad size as returned from Thanks again for the helpful feedback. |
See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I0fb23266c12a20046976c7a1b723136499a59a44 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6084483 Reviewed-by: Caleb Raitto <[email protected]> Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: Dave Tapuska <[email protected]> Reviewed-by: Cammie Smith Barnes <[email protected]> Reviewed-by: Giovanni Ortuno Urquidi <[email protected]> Cr-Commit-Position: refs/heads/main@{#1401439}
This is needed to get to creative_scanning_metadata for them; it's not really used in this CL on its own. See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I2cdb645c066914418220b012a322b7d346c8a6e9 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6158410 Reviewed-by: mmenke <[email protected]> Commit-Queue: Maks Orlovich <[email protected]> Cr-Commit-Position: refs/heads/main@{#1404201}
Thanks for the update, @orrb1. Some feedback after discussion in the adtech wg:
Can you confirm that you will plumb PA's Deals implementation introduced Proposal currently specifies |
See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I9df5d3ca4f03e1d57a162e7981bab824331c2460 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6165448 Reviewed-by: mmenke <[email protected]> Commit-Queue: Maks Orlovich <[email protected]> Cr-Commit-Position: refs/heads/main@{#1406780}
(As part of V1 trusted scoring signals fetch). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I27e2a3357c3897edd1d1c612186a39a0afa91cc4
(As part of V1 trusted scoring signals fetch). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I27e2a3357c3897edd1d1c612186a39a0afa91cc4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6149249 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: mmenke <[email protected]> Reviewed-by: Giovanni Ortuno Urquidi <[email protected]> Cr-Commit-Position: refs/heads/main@{#1410923}
(As part of V1 trusted scoring signals fetch). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I27e2a3357c3897edd1d1c612186a39a0afa91cc4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6149249 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: mmenke <[email protected]> Reviewed-by: Giovanni Ortuno Urquidi <[email protected]> Cr-Commit-Position: refs/heads/main@{#1410923}
(As part of V1 trusted scoring signals fetch). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I27e2a3357c3897edd1d1c612186a39a0afa91cc4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6149249 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: mmenke <[email protected]> Reviewed-by: Giovanni Ortuno Urquidi <[email protected]> Cr-Commit-Position: refs/heads/main@{#1410923}
…when enabled, a=testonly Automatic update from web-platform-tests FLEDGE: Send creative scanning metadata when enabled (As part of V1 trusted scoring signals fetch). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I27e2a3357c3897edd1d1c612186a39a0afa91cc4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6149249 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: mmenke <[email protected]> Reviewed-by: Giovanni Ortuno Urquidi <[email protected]> Cr-Commit-Position: refs/heads/main@{#1410923} -- wpt-commits: 4bf37c1b68359e880958eba87ec6223d8e0c1424 wpt-pr: 50247
(This required disabling the optimization of not sending it to the worklet if sendCreativeScanningMetadata is off, since it's now passed to the JS in that case). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I7b40f47c102a0e9d8160ab33cb9e4eb7553ab02a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6190108 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: Orr Bernstein <[email protected]> Cr-Commit-Position: refs/heads/main@{#1412359}
(This required disabling the optimization of not sending it to the worklet if sendCreativeScanningMetadata is off, since it's now passed to the JS in that case). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I7b40f47c102a0e9d8160ab33cb9e4eb7553ab02a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6190108 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: Orr Bernstein <[email protected]> Cr-Commit-Position: refs/heads/main@{#1412359}
(This required disabling the optimization of not sending it to the worklet if sendCreativeScanningMetadata is off, since it's now passed to the JS in that case). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I7b40f47c102a0e9d8160ab33cb9e4eb7553ab02a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6190108 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: Orr Bernstein <[email protected]> Cr-Commit-Position: refs/heads/main@{#1412359}
…when enabled, a=testonly Automatic update from web-platform-tests FLEDGE: Send creative scanning metadata when enabled (As part of V1 trusted scoring signals fetch). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I27e2a3357c3897edd1d1c612186a39a0afa91cc4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6149249 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: mmenke <[email protected]> Reviewed-by: Giovanni Ortuno Urquidi <[email protected]> Cr-Commit-Position: refs/heads/main@{#1410923} -- wpt-commits: 4bf37c1b68359e880958eba87ec6223d8e0c1424 wpt-pr: 50247
See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: Ia3bd88a16ffa3cb0ef94f3b1987e3fd131682b64 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6208175 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: Orr Bernstein <[email protected]> Cr-Commit-Position: refs/heads/main@{#1413028}
…to scoreAd, a=testonly Automatic update from web-platform-tests FLEDGE: Pass creative scanning metadata to scoreAd (This required disabling the optimization of not sending it to the worklet if sendCreativeScanningMetadata is off, since it's now passed to the JS in that case). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I7b40f47c102a0e9d8160ab33cb9e4eb7553ab02a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6190108 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: Orr Bernstein <[email protected]> Cr-Commit-Position: refs/heads/main@{#1412359} -- wpt-commits: dcd3048a444e6cd2221e150189ee6a88a8a5c627 wpt-pr: 50341
Thanks for the follow-up questions, and for the discussion at the recent PA WICG Call. Responses inline.
Yes, we will pass
In PA WICG Call, we discussed how There's another important distinction between Is it safe to assume that the seat expressed in
While |
Adds buyerAndSellerReportingId (BSRID) to the query parameters of the BYOS scoring signals request URL for use in creative scanning when `sendCreativeScanningMetadata` is set to true on the auction config. See WICG/turtledove#792 (comment) for more context (along with following comments) Bug: 383513677 Change-Id: I77dced8bb39a55cf7b7ad9fb80c91fed8c9dad00 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6219861 Reviewed-by: Orr Bernstein <[email protected]> Commit-Queue: Maks Orlovich <[email protected]> Cr-Commit-Position: refs/heads/main@{#1414406}
Adds buyerAndSellerReportingId (BSRID) to the query parameters of the BYOS scoring signals request URL for use in creative scanning when `sendCreativeScanningMetadata` is set to true on the auction config. See WICG/turtledove#792 (comment) for more context (along with following comments) Bug: 383513677 Change-Id: I77dced8bb39a55cf7b7ad9fb80c91fed8c9dad00 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6219861 Reviewed-by: Orr Bernstein <[email protected]> Commit-Queue: Maks Orlovich <[email protected]> Cr-Commit-Position: refs/heads/main@{#1414406}
Adds buyerAndSellerReportingId (BSRID) to the query parameters of the BYOS scoring signals request URL for use in creative scanning when `sendCreativeScanningMetadata` is set to true on the auction config. See WICG/turtledove#792 (comment) for more context (along with following comments) Bug: 383513677 Change-Id: I77dced8bb39a55cf7b7ad9fb80c91fed8c9dad00 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6219861 Reviewed-by: Orr Bernstein <[email protected]> Commit-Queue: Maks Orlovich <[email protected]> Cr-Commit-Position: refs/heads/main@{#1414406}
…g metadata in TSS request., a=testonly Automatic update from web-platform-tests FLEDGE: Include BSRID w/creative scanning metadata in TSS request. Adds buyerAndSellerReportingId (BSRID) to the query parameters of the BYOS scoring signals request URL for use in creative scanning when `sendCreativeScanningMetadata` is set to true on the auction config. See WICG/turtledove#792 (comment) for more context (along with following comments) Bug: 383513677 Change-Id: I77dced8bb39a55cf7b7ad9fb80c91fed8c9dad00 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6219861 Reviewed-by: Orr Bernstein <[email protected]> Commit-Queue: Maks Orlovich <[email protected]> Cr-Commit-Position: refs/heads/main@{#1414406} -- wpt-commits: 280743fe51500ca43b4162605270f965452dfb9a wpt-pr: 50420
…to scoreAd, a=testonly Automatic update from web-platform-tests FLEDGE: Pass creative scanning metadata to scoreAd (This required disabling the optimization of not sending it to the worklet if sendCreativeScanningMetadata is off, since it's now passed to the JS in that case). See WICG/turtledove#792 (comment) for more context. Bug: 383513677 Change-Id: I7b40f47c102a0e9d8160ab33cb9e4eb7553ab02a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6190108 Commit-Queue: Maks Orlovich <[email protected]> Reviewed-by: Orr Bernstein <[email protected]> Cr-Commit-Position: refs/heads/main@{#1412359} -- wpt-commits: dcd3048a444e6cd2221e150189ee6a88a8a5c627 wpt-pr: 50341
…g metadata in TSS request., a=testonly Automatic update from web-platform-tests FLEDGE: Include BSRID w/creative scanning metadata in TSS request. Adds buyerAndSellerReportingId (BSRID) to the query parameters of the BYOS scoring signals request URL for use in creative scanning when `sendCreativeScanningMetadata` is set to true on the auction config. See WICG/turtledove#792 (comment) for more context (along with following comments) Bug: 383513677 Change-Id: I77dced8bb39a55cf7b7ad9fb80c91fed8c9dad00 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6219861 Reviewed-by: Orr Bernstein <[email protected]> Commit-Queue: Maks Orlovich <[email protected]> Cr-Commit-Position: refs/heads/main@{#1414406} -- wpt-commits: 280743fe51500ca43b4162605270f965452dfb9a wpt-pr: 50420
As suggested in the explainer, sellers have the ability to fetch additional real-time signals based on a combination of
renderURL
andhostname
(representing the publisher’s domain) that can be used duringscoreAd()
when scoring creatives. Specifically:In today’s programmatic ecosystem, buyers communicate their creative markup via the
bid.adm
during RTB, alongside other key bid metadata (advertiser domain, seat ID, IAB category, creative format, creative & campaign identifiers, etc.); however, no creative URL (akarenderURL
) containing the markup is provided. As a result, there is no existing mechanism by which SSPs can obtain this URL for all existing creatives submitted in contextual auctions.This necessarily means that all existing creatives are unable to be served in PA auctions, since creatives have to be pre-approved in order to be scored with a desirability > 0. Otherwise, the
rejectReason
for all PA creatives returned byscoreAd()
would bepending-approval-by-exchange
.This also necessitates a mechanism to initiate such PA creative registration via
renderURL
, which poses some challenges, as outlined below.The most naïve such mechanism, available today, would leverage the
forDebuggingOnly.reportAdAuctionLoss()
endpoint – that is, for anyrenderURL
not found in the seller’s K/V server, initiate an API call to a seller endpoint to indicate that saidrenderURL
has not yet been approved. According to #632 (comment), this function will be available until the end of 3PCD, and should suffice for short-term testing as well as during the 1% 3PCD time horizon.Challenges with this approach:
A significant volume of unregistered created API calls from each device, for each such creative submitted via
generateBid()
the K/V call doesn’t include a buyer origin - and the
renderURL
need not utilize the buyer origin – so there is no guaranteed way to map a URL to a given buyer (aka DSP)Other key signals available in OpenRTB – such as
adomain
andseat
– are not guaranteed to be made available toscoreAd()
(and hence able to be passed into this debugging endpoint), despite them being required for creative registration. As quoted hereAs such, without an IAB standard for parameters like
seat
inrenderURL
, it’s unclear how buyers will be able to ensure that their creatives are being registered for all sellers.Another alternative approach would be to somehow leverage the Private Aggregation API, but this shares all of the challenges above, as well as it being unclear how to bucket the fields required for registration (e.g.
renderURL
,seat
,adomain
). Furthermore, this also requires the immediate adoption of this API (and its requirement for TEE) in order to be able to start registering creatives, and as such, this does not seem like a short-term solution.The text was updated successfully, but these errors were encountered: