Legacy SHC revocation #207
Replies: 9 comments 21 replies
-
What is the model for those issuers that can neither (with confidence) reconstitute the FHIR bundle issued, nor the Patient resource, and has not yet adopted the revocation ID concept?
… On Nov 17, 2021, at 11:30 AM, Christian Paquin ***@***.***> wrote:
Pre v1.2.0 SHC revocation (to be specified externally)
Starting from specification v1.2.0, SMART Health Cards can be revoked using a revocation ID rid encoded in their Verifiable Credential object. Health Cards issued using an older specification version, or Health Cards issued without a revocation ID can use the following schemes to calculate a dynamic identifier from the Health Cards content. Issuers sets up their Card Revocation Lists as specified in the SMART Health Card Framework, using the specified method identifier.
Revocation ID schemes
FHIR Bundle digest
Method identifier: hash-fhir
To use this scheme, an issuer needs to be able to recreate the FHIR bundle for the revoked Health Cards. If this is not possible, multiple FHIR bundle “candidates” can be created (e.g., using the various immunization events), from which multiple revocation IDs are calculated and added to the revocation list.
Given a FHIR bundle, the revocation ID rid is computed as the base64url encoding of the first 64 bits of the SHA-256 digest of the base64url encoding of the UTF-8 encoding of the minified FHIR bundle.
Privacy considerations
This mechanism could allow a sophisticated attacker to brute force the data needed to match a published CRL entry. For n bit of entropy contained in the bundle (which varies depending on the issuer), 2^n hash calculations are needed to match a CRL digest. An issuer should be comfortable with the disclosure risk before using this method.
Patient resource digest
Method identifier: hmac-patient
To use this scheme, an issuer needs to be able to recreate the patient resource for the revoked Health Cards. The issuer creates a random 256-bit secret revocation key, that it privately shares with trusted verifiers.
Given a FHIR patient resource, the revocation ID rid is computed as the base64url encoding of the first 64 bits of the HMAC-SHA-256 output of the base64url encoding of the UTF-8 encoding of the minified FHIR bundle, using the issuer revocation key.
Because of the low-entropy in a patient resources, publishing their hash digests is almost equivalent to publishing their content. Therefore, this method uses the HMAC message authentication code with SHA-256 and a secret key shared between the issuer and a set of trusted verifiers. This prevents brute-forcing the matching patient resources, but can only be used in closed systems where verifiers have a back-channel to the issuer.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub <#207>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AJHJ3N6TQMBNZZWNLBSRQWDUMP7ERANCNFSM5IHZYRUQ>.
Triage notifications on the go with GitHub Mobile for iOS <https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675> or Android <https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
|
Beta Was this translation helpful? Give feedback.
-
We generate SHCs on the fly and cache until the source data mutates. We do not journal/log the SCH generated nor do we journal any hash of it. Citizens can fetch self-service any time. The Source data may change including the patient resource at any time. Since the patient resource has no identifier in it we also cannot rely on a hash of it since it too may have mutated.
Excuse the typos. Sent from my iPhone,
… On Nov 17, 2021, at 12:03 PM, Christian Paquin ***@***.***> wrote:
There are little that can be done for issuers that don't have any state for previously-issued SHC. Can you elaborate on the situation? When and how such an issuer be made aware of a fraudulent SHC being issued? What minimal information would such issuer have to potentially identify the card?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.
|
Beta Was this translation helpful? Give feedback.
-
Time range based with the caveat that we are able to reconstitute Patient resource as a set of possible values over time then use a tuple of ( kid, patient resource hash(es) + time range) , with patient hash as an Or-ed collection of possible values to cover off the mutations .
Excuse the typos. Sent from my iPhone,
… On Nov 17, 2021, at 12:24 PM, Christian Paquin ***@***.***> wrote:
Let me flip the question around: given your situation, can you propose a revocation mechanism that would work? (either in a closed system with specific verifiers, or for the broader SHC ecosystem)? How would you (or the source data provider) 1) determine that a card (or person? or immunization?) would need revoking, and 2) how could you achieve this?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.
|
Beta Was this translation helpful? Give feedback.
-
@christianpaquin, #207 describes the FHIR bundle digest legacy revocation scheme at a very high level. Where will additional details (such as in #204 (comment)) and pending decisions be described, e.g., use of |
Beta Was this translation helpful? Give feedback.
-
If I read this correctly this allows us to revoke any specific FHIR bundle, not the actual SHC around it. Is this desirable? This means it's impossible to re-issue the same FHIR bundle (e.g. a |
Beta Was this translation helpful? Give feedback.
-
I'm confused about the SHC version numbering. This discussion mentions v1.2.0 but, as far as I can see in the repo's tags and releases, the current version is still v1.0.0-RC. This begs the question -- where can I find v1.1.0? |
Beta Was this translation helpful? Give feedback.
-
SHC CRL Brute Force Attack ScenariosFollowing are some brute force attack scenarios against the two legacy revocation methods. Some assumptions are made and a rough summary assessment is presented for each scenario. Feedback is much appreciated. Assumptions
1. Attack on
|
Beta Was this translation helpful? Give feedback.
-
I think you mean |
Beta Was this translation helpful? Give feedback.
-
Moving this proposal as a spec RFC; see PR #215. |
Beta Was this translation helpful? Give feedback.
-
Pre v1.2.0 SHC revocation (to be specified externally)
Starting from specification v1.2.0 (per PR #205), SMART Health Cards can be revoked using a revocation ID
rid
encoded in their Verifiable Credential object. Health Cards issued using an older specification version, or Health Cards issued without a revocation ID can use the following schemes to calculate a dynamic identifier from the Health Cards content. Issuers sets up their Card Revocation Lists as specified in the SMART Health Card Framework (including support for revocation time ranges), using the specified method identifier.See discussion #207 for background; some ideas proposed there could still apply to what's proposed here.
Why multiple scheme proposals?
Two methods are proposed, one that works well in closed ecosystems (e.g., a single state or province), vs one that works for all the SHC ecosystem. An issuer could potentially support both, one to prevent fraud in its own jurisdiction (more common in term of SHC usage), and one for out-of-jurisdiction SHC use.
Revocation ID schemes
FHIR Bundle digest
Method identifier:
hash-fhir
To use this scheme, an issuer needs to be able to recreate the FHIR bundle for the revoked Health Cards. If this is not possible, multiple FHIR bundle “candidates” can be created (e.g., using the various immunization events), from which multiple revocation IDs are calculated and added to the revocation list.
Given a FHIR bundle, the revocation ID
rid
is computed as the base64url encoding of the first 64 bits of the SHA-256 digest of the base64url encoding of the UTF-8 encoding of the minified FHIR bundle.Privacy considerations
This mechanism could allow a sophisticated attacker to brute force the data needed to match a published CRL entry. For
n
bit of entropy contained in the bundle (which varies depending on the issuer),2^n
hash calculations are needed to match a CRL digest. An issuer should be comfortable with the disclosure risk before using this method.Patient resource digest
Method identifier:
hmac-patient
To use this scheme, an issuer needs to be able to recreate the patient resource for the revoked Health Cards. The issuer creates a random 256-bit secret revocation key, that it privately shares with trusted verifiers.
Given a FHIR patient resource, the revocation ID
rid
is computed as the base64url encoding of the first 64 bits of the HMAC-SHA-256 output of the base64url encoding of the UTF-8 encoding of the minified FHIR patient resource, using the issuer revocation key.Because of the low-entropy in a patient resources, publishing their hash digests is almost equivalent to publishing their content. Therefore, this method uses the HMAC message authentication code with SHA-256 and a secret key shared between the issuer and a set of trusted verifiers. This prevents brute-forcing the matching patient resources, but can only be used in closed systems where verifiers have a back-channel to the issuer.
Beta Was this translation helpful? Give feedback.
All reactions