You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
Attestation is done in a first-party web context, then issue is called.
The issuer and attestor may be different origins, but they are in the same informational context.
We store unified, unpartitioned state for the tokens.
Challenges are made by the Origin's client-side script via redeem.
We have the messages from PrivacyPass architecture (TokenChallenge, etc.). Swapping these for ACT messages isn't too hard.
We have a new operation IssuerHide, that hides the issuer of a credential
We can reliably obtain a set of all other issuers a credential may be mutually hidden as from an issuer
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
Originating Issuer
Verifying Issuer
Attester
Origin
Client Script (from Origin, running in the browser)
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:
the Verifying Issuer learns failure rates for (Originating Issuer, Origin) pairs
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.
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:
navigator.pact.issue(issueOptions)andnavigator.pact.redeem(redeemOptions). We could hide these inside of FetchOptions, but for now we can keep these as explicit calls.issueis called.redeem.Actors
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:
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)Redemption
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.