Per-SHC Revocation #204
Replies: 5 comments 12 replies
-
I suggest the above text be modified as follows:
I suggest that the above bullet and sub-bullets be modified as follows:
I feel the base proposal adequately addresses the needs of both online and offline validator apps and I don't see much value in the support for dynamic update. |
Beta Was this translation helpful? Give feedback.
-
We are converging on a design. I'd like to have a discussion next week with those interested, to mark PR #198 as "ready for review". Those who can't make it will have the opportunity to comment on the final proposal before it is merged. Please let me know of your availability here: https://www.when2meet.com/?13543272-5VH8Z |
Beta Was this translation helpful? Give feedback.
-
Tuesday Nov 9th at 2:30pm Eastern Time is the only availability that everyone can make; let's meet then. Teams meeting link sent to those with known email addresses; for others (@pvillela), use this link. |
Beta Was this translation helpful? Give feedback.
-
Alternative Proposal for Individual SHC Revocation: FHIR Bundle Revocation (Tentative Outline)Following is a tentative outline of an alternative revocation scheme for individual SHCs roughly based on what was discussed during the 2021-11-09 meeting. This scheme is comparable to the With this scheme, what is specifically revoked is a FHIR bundle, with the consequence that an SHC containing that FHIR bundle gets revoked. An important feature of this revocation approach (shared by its official proposal counterpart) is that it enables the effective revocation of SHCs even when the issuer does not keep track of previously issued SHCs. Although this scheme does not require issuers to keep track of previously issued SHCs, it supports a simpler and more efficient revocation process for issuers that do keep track of previously issued SHCs. The checking of revoked SHCs by verifiers is the same in either case and can be performed in an efficient manner. Issuer ComponentsAn issuer that has revoked individual SHCs needs to implement the following to make the revoked SHCs known:
Issuer ActionsWhenever a FHIR bundle is to be revoked by the issuer, the following steps are taken:
Verifier ActionsThe process followed by all verifiers is similar.
Revocation without Tracking Issued SHCsFollowing is a use case that has been brought-up by multiple issuers and the revocation procedure to be followed:
Revocation with Tracking of Issued SHC TimestampsWhen the issuer keeps track of the issue timestamp for each issued SHC then the revocation process for the above use case is simplified as follows:
|
Beta Was this translation helpful? Give feedback.
-
Please see the updated forward-looking proposal in PR #205, superseding the original #198. Also see the new discussion #207 where we can continue discussing the backward-compatible scheme needed for currently issued cards. |
Beta Was this translation helpful? Give feedback.
-
SHC revocation discussion
We are starting to hear interest in revocation schemes from jurisdictions that are detecting fraud in their own issuance history. In order to promote interoperability, the framework should specify an optional mechanism to enable this.
PR #198 proposes a mechanism to achieve this. This page is to discuss the design, constraints, and different proposed ideas.
Requirements
Executive summary
The proposed solution is quite simple: issuers create and update Card Revocation Lists (CRL, a useful backcronym) containing unique fingerprints of revoked SHCs. Verifiers reject a SHC if its fingerprint is listed on the issuer's CRL.
Revocation value
The first question is what can be used to recognized SHCs to revoke. The suggestion is to use the cryptographic digest of a card's JWS. This acts as a unique fingerprint of the SHC.
Some comments:
nbf
field: this requires extra logic on the verifierCard Revocation List
The proposed solution is to associate CRLs with individual issuer keys (identified by their
kid
), rather than with an issuer itself. This gives control to the issuer to cap the size of the CRLs by rotating keys, and wiping the slate clean if they revoke the key itself.The proposal is as follows:
https://"<<Issuer URL>>"/.well-known/crl/kid/"<<kid>>".json
CRL file, for each of its keyskid
crl#ctr
field with the CRL's counter value to the corresponding JWK object in the issuer'sjwks.json
file.Trust frameworks (such as the VCI) could help package, distribute, aggregate these CRLs, and provide further capabilities to help verifiers determining the revocation status of a SHC.
Some comments:
nbf
values).Open questions
The above could be called a v1: easy to build and deploy. Some open questions remain.
Support for dynamic update
For online-with-caching verifiers, it would be desirable to only download the CRL updates. One question is: do we really want this? This only saves bandwidth at verification time, as the aggregated CRL still needs to be stored on the verifier side after the update(s). Does it make such a big difference for verifiers to download thousand 16-byte fingerprints (~1k file) vs a dozen?
This section describes different proposals for dynamic updates. Many of these refer to a CRL update, which is a CRL files only listing the revoked value since a particular version.
Dynamic response from issuer
The verifier could request a specific CRL update using the counter (or timestamp) in a query parameters. This requires dynamic handling on the issuer side, who would generate the require CRL or pick from a set of files.
Etags
HTTP ETags could be used on the CRL request. Sending cached ETag headers allow verifiers to only get an updated CRL if it has changed (If-None-Match, If-Modified-Since). Hosting and CDN services (including GH Pages) should support out of the box.
Static CRL update files
Every time the CRL is updated, the issuer updates the
kid.json
file, but also creates a siblingkid-ctr.json
file with the counter value, containing only the newly revoked digests. This way, a verifier could either request the full CRL, or only the deltas since the lastctr
it saw.Append-only CRLs
HTTP range requests could be used to only retrieved updates from append-only CRLs (e.g., a list of kids separated by newlines). Many static hosting services support out of the box. The JWK could advertise the current file length + hash, and clients could request a range to catch up. See these PR comments for details: 1, 2, 3.
Beta Was this translation helpful? Give feedback.
All reactions