Skip to content

Sketching an architecture that uses issuer blinding #1

@bvandersloot-mozilla

Description

@bvandersloot-mozilla

The PACT problem statement hints at techniques to hide the issuer of a credential among a group of issuers as being one way to provide desired properties. I'm not a PrivacyPass native, so I sketched out a shape that allows that mechanism to be of use for my own understanding. Feedback encouraged.

Architectural assumptions:

  1. We have two new functions: navigator.pact.issue(issueOptions) and navigator.pact.redeem(redeemOptions). We could hide these inside of FetchOptions, but for now we can keep these as explicit calls.
  2. Attestation is done in a first-party web context, then issue is called.
  3. The issuer and attestor may be different origins, but they are in the same informational context.
  4. We store unified, unpartitioned state for the tokens.
  5. Challenges are made by the Origin's client-side script via redeem.
  6. We have the messages from PrivacyPass architecture (TokenChallenge, etc.). Swapping these for ACT messages isn't too hard.
  7. We have a new operation IssuerHide, that hides the issuer of a credential
  8. We can reliably obtain a set of all other issuers a credential may be mutually hidden as from an issuer
  9. We have a magical BlindedOriginator message that the Client can give to the Origin. The properties of this message are undefined, but it could be useful to help enable the feedback mechanism.

Actors

  1. Originating Issuer
  2. Verifying Issuer
  3. Attester
  4. Origin
  5. Client Script (from Origin, running in the browser)
  6. Browser (behind the API)

Note: The Client Script and Browser are both running on the client.
An Issuer and Attester may be sharing information.
There are two Issuers invlolved, the originating issuer (at issuance time) and the verifying issuer (at redemption time).

Feedback:

The maximally effective feedback mechanism I see is has two properties:

  1. the Verifying Issuer learns failure rates for (Originating Issuer, Origin) pairs
  2. the Origin learns failure rates for Verifying Issuers on its own Origin.

We can get the latter for "free".

The former is hard!
The client should assume the Origin and Verifying Issuer are colluding.
I think this means that the magical BlindedOriginator message can't be something the Verifying Issuer can unblind themselves, otherwise the Origin can bring them into the loop before accepting a Token, defeating issuer blinding.
Even if we move a reveal at the end of each epoch to allow a once-per-epoch computation of reputation, we allow users to have their issuer blinded at the end of the first epoch. That also isn't good.

What could work is some (handwave mpc?) solution where every issuer in the group gets together with their own feedback on failures from the Origins, including the BlindedOriginator messages, and computes the desired feedback.

Message flow diagrams

Issuance

sequenceDiagram 
box Client
participant C as Client Script (Provider)
participant B as Browser
end
participant P as Originating Issuer
C<<->>P: Attestation in webpage
C->>B: navigator.pact.issue({tokenChallenge})
B->>P: TokenRequest, request peer issuer list
P->>B: TokenResponse, return peer issuer list
B->>C: Token (many)
Loading

Redemption

sequenceDiagram 
box Client
participant C as Client Script (Origin)
participant B as Browser
end;
participant P as Validating Issuer
participant O as Origin
O->>C: Token requirement communicated 
C->>B: navigator.pact.redeem(listOfAcceptedIssuers)
break with small probability
B->>C: wait randomly and return error
end
B->>B: Join issuer list against peer lists in storage,<br/> selecting one (Validating Issuer, Originating Issuer) pair,<br/> returning a Token from that Originating issuer.
B->>P: request peer issuer list
P->>B: return peer issuer list
B->>B: IssuerHide(Validating Issuer, Token)
B->>C: return Token, BlindedIssuer
C->>O: Use Token, BlindedIssuer
O->>P: Report abuse or not w/ BlindedIssuer
Loading

Computing feedback

All of the issuers get together on occasion and compute total abuse rates for originating issuers using all BlindedIssuers they receive as feedback from origins.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions