-
Notifications
You must be signed in to change notification settings - Fork 7
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
added wallet attestation scheme #52
Changes from 2 commits
9b5d2c2
74b182a
20adc96
2d10a1b
dfbe1e4
c5214b7
1f479dc
27450a8
72ed205
78ba68c
1ca5b6d
c2def75
794a339
c0a7c6a
8cb4f35
d9e263c
1ae5b33
e778c55
8095800
4f88057
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
@@ -139,7 +139,42 @@ Note: Issuers should be mindful of how long the usage of the refresh token is al | |||||||||
|
||||||||||
### Wallet Attestation Schema {#wallet-attestation-schema} | ||||||||||
|
||||||||||
[Section 3.1 of wallet attestation draft would define the basics, and this profile will define the details.] | ||||||||||
Wallets MUST use attestations following the definition given in [!I-D.ietf-looker-key-attestation-client-authentication]. | ||||||||||
|
||||||||||
In addition, the Wallet Attestation MUST contain the following claims: | ||||||||||
|
||||||||||
* `key_type`: this claim asserts the security mechanism the wallet can use to manage private keys. This capability is based on the capabilities of the execution environent of the wallet, this might be a secure element (in case of a wallet residing on a smartphone) or a Cloud-HSM (in case of a cloud wallet). This specification defines the following values for `key_type`: `STRONGBOX`, `TEE`, `SecureEnclave`, `Software`. | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. are the values taken from somewhere or defined in HAIP? If the latter, why not use snake case? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We define it in HAIP. I'm neutral on the style. Snake case would be consistent with https://fidoalliance.org/specs/common-specs/fido-registry-v2.2-rd-20210525.html#key-protection-types. |
||||||||||
* `user_authentication`: this claim asserts the security mechanism the wallet can use to authenticate access to private keys. This specification defines the following values for `user_authentication`: `APP_PIN_6_DIGITS`, ... | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Again, where are the values being defined..? If not in HAIP should it point somewhere? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would prefer to reuse WebAuthn values. Let's discuss. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if WebAuthn values are used I'm ok with that, we then need a ref to them |
||||||||||
|
||||||||||
These additional claims inform the issuer about the security capabilities of the wallet and allows the issuer to refuse credential issuance if the achievble security level of a certain wallet does not fulfil the issuer's requirements. | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we have to defined error codes and messages for that? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you mean in the credential issuance response? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. yes, do we have to give a ref to openid4vc? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. once this PR goes in (https://github.com/openid/OpenID4VCI/pull/64/files), we should probably add There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||||||||||
|
||||||||||
Wallet attestions MUST support web-based key resolution as defined in Section 5 of [@!I-D.terbu-sd-jwt-vc]. The JOSE header `kid` MUST be used to identify the respective key. | ||||||||||
tlodderstedt marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
||||||||||
This is an example of a wallet attestation: | ||||||||||
Sakurann marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
||||||||||
```json | ||||||||||
{ | ||||||||||
"typ": "wallet-attestation+jwt", | ||||||||||
"alg": "ES256", | ||||||||||
"kid": "1" | ||||||||||
} | ||||||||||
. | ||||||||||
{ | ||||||||||
"iss": "https://wallet.example.com", | ||||||||||
"sub": "https://wallet.example.com", | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not in favor of duplicating iss to sub I have the strong assumption that the wallet provider and the wallet instance are different entities In my current implementation we have decided to use the jwk thumbprint to identify the wallet instance and then we use this value in the sub there's a good agreement to simply remove the sub claim, WDYT about this? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's not a duplication. It represents the fact that the wallet provider issues an attestation about itself. Whatever component uses this attestation with a valid proof of possession of the key in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. With regard to eIDAS terms: There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. yes, anonymous instances should be RECOMMENDED in my opinion There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. According to the underlying draft-looker-oauth-attestation-based-client-auth, the Does this sound reasonable? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm in favor of having sub as optional and without any constraint about its value the current proposal is concerning to me There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. in the call yesterday we came to the conclusion that the fundamental question is: Indeed, we have already seen the reality that wallet providers may not have the capacity/willingness to run an attestation service on their own. And nobody will force an wallet provider to use a different attestation service. But we should keep this option open. Therefore I am voting to use:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @peppelinux making the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. in the implementation I'm working on the
Sakurann marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think that you found the best editorial compromise for this annoying issue of the sub There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would also like to add to this discussion that we agreed that the claim client_id represents the unique client identifier, even if there are divisions about who is the real client: the wallet solution or the wallet instance. I'm in favour of the latter, by having the distinction between However, "client_id" is not always used to specify a client identifier since there are many way in OAuth2 to uniquely identify a client within a flow, below I mention for instance methods like:
even if these are not relevant for the wallet solution, I'd try to not mandate too many details within the specs at this current phase, by giving more flexibility in the material implementations on the way. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. incorporated Kristina's suggestion |
||||||||||
"exp": 1516247022, | ||||||||||
"key_type": "STRONGBOX", | ||||||||||
"user_authentication": "APP_PIN_6_DIGITS", | ||||||||||
"cnf": { | ||||||||||
"jwk": { | ||||||||||
"kty": "EC", | ||||||||||
"crv": "P-256", | ||||||||||
"x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc", | ||||||||||
"y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ" | ||||||||||
} | ||||||||||
} | ||||||||||
} | ||||||||||
``` | ||||||||||
|
||||||||||
## Credential Endpoint | ||||||||||
|
||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In addition to what? To the claims defined in draft-ietf-looker?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In addition to "the definition given in [!I-D.ietf-looker-key-attestation-client-authentication]"