-
Notifications
You must be signed in to change notification settings - Fork 24
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
Incorporate revocation best practices from Aries RFCs #132
Comments
Having a "from" of "0" makes little sense as it implies the holder can use the revocation entry active at the time of issuance and that would be "OK". That sounds like a big disconnect between ACA-Py and AFJ. The "encoding" issue is talked about in the spec and the REQUIRED encoding algorithm is defined. An implementation of AnonCreds could ignore the encoded data from the issuer or error if the encoded data from the issuer doesn't match the required. |
It could mean "Prove you ever had a non-revoked cred for this cred def". But now you that say it, it may not make too much sense. @JamesKEbert Any ideas on why we support the |
This took a second to figure out the logic, but the AFJ implementation is actually conformant with the best practices. The following code block is what is used to determine if we should throw an error or not:
What this code does is that if So, it doesn't actually explicitly support the
It's also worth noting that when querying Indy, I wonder if we can just re-name the proof request revocation interval to be a single value (if it's going to be combined anyways), such as |
@JamesKEbert -- definitely agree that the fact that there is an "interval" in the presentation request that means one thing ("I will accept a non-revocation proof from between The goal of the 1.0 spec. is to define what exists today, with only changes being to support ledger-agnostic AnonCreds. As such, I'd say we can't make a change about interval in this version of the spec, but we should in the future. |
@swcurran I'd very much so agree with that--I didn't have the context to know what stage the spec is at (whether it be 1.0 or 2.0). Followup question--does the current scope of the spec take into account the ledger read/write calls, or is that outside the scope of AnonCreds (meaning, read/write calls are more specific to the ledger being utilized, Indy being one such example)? |
Re:
The spec. defines the inputs to and outputs from the AnonCreds operations. The AnonCreds Methods specs define how the specific implementations provide the inputs. So the AnonCreds Method for Indy describes how it will provide the inputs. For example, the spec. says what must be provided to the Presentation generation process from a revocation registry — including the current state of all of the credentials (revoked or not). It is up to the AnonCreds Method to interact with the ledger as needed to get the required information and format as expected. So for Indy, the AnonCreds method must merge the deltas and construct the full state. For Cheqd (where the full state is on the ledger), the method just needs to get the state via a ledger read and get it into the correct state. BTW — In order to support both full state and delta implementations, issuers will need to track the full bit array so that the AnonCreds method writing the Revocation Transactions can support either type of implementation. For example, the “last write” bit array, plus a pending revocations list. When a revocation registry write is done — the needed transaction can be created and written to the ledger. |
I've got a presentation to use for the meeting Monday to discuss this. @whalelephant @TimoGlastra -- could either of you check with what CredX (and/or Indy SDK) did about interval checking so we know the state before we started this round of refactoring? |
Thought through what is needed, and I think interval could be accurately checked with only one VDR request. Assumptions/Prerequisites
CalculationWith that, we know that to meet the interval requirement the RevRegEntry used by the holder must be in the range, or it is the one active at time
@TimoGlastra @whalelephant @blu3beri --- does that work for you? I assume that the AnonCreds method must make the right call to the VDR using the right method. |
Assuming I have the logic right in the previous comment, the next question is who does what in the flow? There is AFAIK, two (or three) pieces of code involved -- the verifier (which I would include for Aries to be both the Aries framework and the business logic), AnonCreds, and perhaps, the AnonCreds Method. Of those participants -- who makes the call to the VDR (via the AnonCreds Method) to get the RevRegEntry needed?
In that last case, we are back to AnonCreds not having an opinion on whether or not the Holder provided timestamp is within the Interval. If the verifier wants a verification after retrieving the right RevReg, it must think that the "In Interval?" question has already been decided. |
To summarise the discussion on the call and follow ups with @TimoGlastra , on the Anoncreds side, the verifier will optionally be able to provide override interval
|
I believe this has been incorporated sufficiently in the spec. Closing. |
Not sure if this has been discussed, but should we incorporate some of the best practices from the Aries RFC (https://github.com/hyperledger/aries-rfcs/blob/main/concepts/0441-present-proof-best-practices/README.md) into the AnonCreds spec?
Specifically about revocation intervals, date encodings, etc?
E.g. In AFJ we don't support requests where the
from
key is not0
or equal to theto
value (andto
MUST always be defined in specifying a revocation interval)The text was updated successfully, but these errors were encountered: