Bit by Bit Refreshing

Overview

Here we demonstrate a way to refresh an identity across context without ever fully revealing that identity in the given context. Please note it is an interesting question whether this means you have "re-identified across site".

Prereqs

I haven't gotten back to Chrome yet on getting my attestation down, so for now see here.

Idea

The idea here is to demonstrate a way to keep an IG based identity refreshed, and therefore available in IG storage, without either a) the user having to revisit the authenticating site or b) exporting the identity across context or c) knowing anything about that ID other than the number of bits it contains. At a high level we'll do this by:

  1. Encoding a 64 bit identity as 64 one bit IGs with known names.
  2. Using an auction to determine the 0/1'ness of a particular known IG.
  3. Rejoin that IG to extend its TTL.

Steps

In more detail we will:

  1. Visit an authenticating site where we will log in and have our 64 bit user ID be returned.
  2. We will create 65 IGs:
    1. an IG for each bit, where the bidding function will in effect not bid if its bit is 0 and bid if its bit is 1.
    2. An IG to indicate whether the user has opted out of targeted advertising for their ID.
  3. When we visit another unrelated site, we will use an auction to detect

Steps

  1. First we visit the authenticating site, where we "log in", in this case by clicking a button and having our user_id be randomly generated. When the "log in" is complete, we will join the bit-IGs, one for each position that has a 1 in it. We'll join with constant values so that re-joining in the future can be completely deterministic across all attributes:
    1. A name that is simply bit-n, where n is the bit number.
    2. A long TTL...
    3. ...But some priorityVector entries to help us filter based on the bit number and the time since we joined the IG.
  2. Next, for the sake of the demo, we'll visit a publisher page, be entertained for 1 minute, and then run an auction in which we can see that none of the IGs are included because they were not joined in the last 1 minute.
  3. Now we will run a refresh-process, using the auction to determine the 0/1'ness of a given bit position, to refresh the bit-IGs.
  4. Followed immediately by running the auction again and seeing the bit-IGs bid.