Hi Hannes,
Sorry for this late response. The SPICE BoF (and other activities) kept
me quite busy.
Hi Denis,
OAuth defines 4 roles, see Section 1.1 of RFC 6749.
A RO is a role supported by a (human) user.
In the three party model there is likely a human behind the holder as
well.
You can map the OAuth terms to the VC terms, if you like, as follows:
* Issuer: Authorization Server
* Holder: Client
* Verifier: Relying Party
The mapping you propose does not work. Section 2.1 from RFC 7636 states:
OAuth defines two client types, based on their ability to
authenticate securely with the authorization server
(i.e., ability to maintain the confidentiality of their client
credentials):
confidential
Clients capable of maintaining the confidentiality of their
credentials (e.g., client implemented on a secure server
with restricted access to the client credentials), or capable of
secure client authentication using other means.
public
Clients incapable of maintaining the confidentiality of their
credentials (e.g., clients executing on the device used
by the resource owner, such as an installed native application or a
web browser-based application), and incapable
of secure client authentication via any other means.
If a Holder were to be a client, would it be a private client or a
public client ? The response is: none of them.
In W3C VCDM 2.0, the Holder is defined as:
holder
A role an entity might perform by possessing one or more verifiable
credentials and generating verifiable presentations from them.
Example holders include students, employees, and customers.
Students, employees or customers SHOULD NOT be confused with applications.
TEEs, Trusted Applications, etc. are implementation specific details.
You can use them in OAuth, and other protocols as well.
TEEs, Trusted Applications, etc. are NOT implementation details. They
are fundamental components in the design, but are not considered
in OAuth 2.0 and neither in the OAuth 2.1 draft. TAs are slightly
similar to confidential clients but are fundamentally different
since they must support additional security properties.
There is a need to consider the existence of TAs (Trusted Applications)
which are separate from the RichOS (e.g., Android or iOS)
thanks to the existence of a TEE (Trusted Execution Environment). A TA
needs to be downloaded into a TEE, hence both TEE Issuers
and TA Issuers also need to be part of the model.
The model has three *roles*, i.e., Holder, Issuer and Verifier and at
least supports the following additional *entities*:
TA, TA Issuer, TEE, TEE Issuer, RichOs, RichOS Issuer and the user agent.
user agent
software and hardware used by a natural person to interact with
the World Wide Web
Note: a user agent should not be confused with a client as defined in
RFC 6947:
client
An *application* making protected resource requests on behalf of the
* resource owner* and with its authorization. The term "client" does
not imply any particular implementation characteristics (e.g.,
whether the application executes on a server, a desktop, or other
devices).
draft-ietf-oauth-sd-jwt-vc-00 is unable to support the three *roles*
(i.e., Holder, Issuer and Verifier) and does not distinguish the
previous additional *entities*
Considering "client implemented on a secure server with restricted
access to the client credentials" is outdated. We are now all using
smart phones.
Smart phones need to be considered, which means that digital identity
wallets also need to be considered.
As an example, Trusted APs are supported on iPhone beginning with iOS
16, but do not work on IPad. More information is available here:
https://developer.apple.com/documentation/passkit/wallet/requesting_identity_data_from_a_wallet_pass
Trusted APs do not currently exist on desktops or laptops.
Regarding the question: "What the IETF should do (or not do) in this
area ?"
The answer is: We are working in the IETF on these topics already, see
Web Authorization Protocol (oauth) (ietf.org)
<https://datatracker.ietf.org/wg/oauth/documents/>.
There are exactly 48 documents listed in the link you provided.
Most of them are unrelated to the topic of "OAuth and JWT/VC documents",
but two of them are attempting to make a bridge between VCs and JWTs:
* SD-JWT-based Verifiable Credentials (SD-JWT VC)
draft-ietf-oauth-sd-jwt-vc-00
* Selective Disclosure for JWTs (SD-JWT)
draft-ietf-oauth-selective-disclosure-jwt-05
The example in section 4.3 from draft-ietf-oauth-sd-jwt-vc-00 is rather
innovative, since this draft (and its companion draft) attempts to define
age limit attributes such as : Claim is_over_21 or Claim is_over_65.
{
"type": "IdentityCredential",
"given_name": "John",
"family_name": "Doe",
"email": "john...@example.com",
"phone_number": "+1-202-555-0101",
"address": {
"street_address": "123 Main St",
"locality": "Anytown",
"region": "Anystate",
"country": "US"
},
"birthdate": "1940-01-01",
"is_over_18": true,
"is_over_21": true,
"is_over_65": true
}
Some observations:
1) The last items should rather be:
"is_over_18": null,
"is_over_21": null,
"is_over_65": null
null describes the absence of a value.
A JWT shall never contain a line like "is_over_21": false.
2) Since age limits are most often country dependent and it would not be
appropriate to define a set of Claims "is over_XX" with XX between 7 and 77
and the same set for Claims "is under_XX" between 7 and 77. Instead of
registering to IANA around 140 claims, it would be simpler to register
to IANA
only two claims: "age_over" and "age_under" able to contain one or more
age values.
This is possible by ignoring the following sentence placed in section 4
of JWT (RFC 7519):
"The Claim Names within a JWT Claims Set MUST be unique".
... which means using a JSON structure _that will NOT be conformant to
RFC 7519 (JWT)_.
The "privacy considerations" section of draft-ietf-oauth-sd-jwt-vc-00 is
nearly empty. :-(
Since RFC 7519 indicates that all of the claims are OPTIONAL, is there a
set of claims that SHALL be present in the VC issued by the Issuer to
the Holder ?
Same question for a VP presented by an Holder to a Verifier ?
Even if no claim is been disclosed, the use of a JWT does not allow to
support the Unlinkability property between verifiers.
Both this section and the Introduction should indicate that this
solution *by design* does not permit to support the unlinkability
property between verifiers.
Note that the W3C data model, which is rather flexible, allows to
support the unlinkability property between verifiers.
Using a JWT does not only mean that its data structure shall be
compliant to RFC 7519 but also to its processing requirements,
i.e. to section 7. "Creating and Validating JWTs". None of these two
sections (i.e., 7.1 and 7.2) allows to create and verify a JWT-VC as
intended.
draft-ietf-oauth-sd-jwt-vc-00 is currently unable to conform to section
7 from RFC 7519 (JWT).
The OAuth 2.1 Framework states:
"Access tokens are credentials used to access protected
resources. An access token is a string representing an authorization
issued to the client.
The string is considered opaque to the client, even if it has
a structure".
This is consistent with the OAuth 2.0 Framework, but a client CANNOT
consider a JWT-VC to be *opaque* when it receives it from the Issuer.
Nor the OAuth 2.0 Framework or the OAuth 2.1 Framework is able to
support the draft-ietf-oauth-sd-jwt-vc-00.
Regarding the question: "The protocols between an holder and a
verifier are rather different from those defined in OAuth, since in
many cases they support Zero-Knowledge proofs (ZKPs).
The answer is: No, not necessarily. That's what the whole SD-JWT is
about.
A zero-knowledge proof is a method involving one or more exchanges
between a prover and a verifier where the prover is able to convince the
verifier
that a statement is true, without revealing to the verifier any
additional information beyond that knowledge.
draft-ietf-oauth-sd-jwt-vc-00 supports selective disclosure, but reveals
more information about the prover than the disclosed claims.
It discloses information that allows different verifiers to link the
proofs they receive. By design, draft-ietf-oauth-sd-jwt-vc-00 is unable
to support the Unlinkability property between verifiers. ZKP cannot be
supported. That's what the whole SD-JWT *VC* is about.
Denis
Ciao
Hannes
*Von:*OAuth <oauth-boun...@ietf.org> *Im Auftrag von *Denis
*Gesendet:* Samstag, 9. September 2023 15:44
*An:* Roman Danyliw <r...@cert.org>
*Cc:* oauth <oauth@ietf.org>
*Betreff:* Re: [OAUTH-WG] OAuth and JWT/VC documents
Historically, the OAuth WG has been using a model including five
components: the user, the Client, the AS, the RO and the RS.
The model applicable in the context of the "three part model (issuer,
holder, verifier)" is rather different since there is no AS, nor RO.
An AS should not be confused with an Issuer. An Issuer has no
relationship with a verifier.
In the "three part model", a Credential is issued by an Issuer to an
holder who may then derive himself from it one or more Verifiable
Presentations
without any call-back to the Issuer. The holder may then present to a
RS one or more Verifiable Presentations derived from Credentials issued
by the same or different Issuers. It is implicit that the "three part
model" shall support selective disclosure of the holder's attributes.
The "three part model (issuer, holder, verifier)" involves more
entities / components: the user, the TEE (Trusted Execution Environment)
supported by the smart phone or tablet manufacturer, Trusted
Applications (TAs) placed into the TEE, the providers of these Trusted
Applications (TAs)
and the RichOS supported by the smart phone or tablet. Security and
privacy concerns can only be achieved while considering the whole chain.
The protocols between an holder and a verifier are rather different
from those defined din OAuth, since in many cases they support
Zero-Knowledge proofs (ZKPs).
Before designing an architecture, it is important to raise the
following questions:
* Is it desirable to support linkability between verifiers and/or
unlinkability between verifiers ?
* How to bind a Verifiable Presentation to its legitimate holder
while also supporting the unlinkability property between verifiers ?
IMO, bridging the architectural narrative used in the core OAuth
framework (AS, RS, RO) and three part model (issuer, holder, verifier)
is not desirable.
This would add confusion. Extending the OAuth charter to address the
"three part model" is not desirable.
Some committees and foundations are already addressing this topic,
e.g., W3C, OpenID, DIF (Decentralized Identity Foundation) and
GlobalPlatform (for the TEE).
The key question is: what the IETF should do (/or not do)/ in this area ?/
/
A BoF should be opened to continue this discussion.
Denis
Thanks for kicking off the conversation!
Inline:
On Fri, Sep 8, 2023 at 2:08 PM Roman Danyliw <r...@cert.org> wrote:
Hi!
We've observed growing energy around JWT, selective disclosure
and VC related topics in the WG in recent meetings. We spent
almost all of the third OAuth meeting at IETF 117 on related
topics. The initial SD-JWT
(draft-ietf-oauth-selective-disclosure-jwt) has been followed
up with SD-JWT-VC (draft-ietf-oauth-sd-jwt-vc). There is also
work like draft-looker-oauth-jwt-cwt-status-list being proposed.
As promised at IETF 117, we would like to start a conversation
about the direction the WG would like to take at a strategic
level rather than continuing to deal this topic in one
document increments of additional scope.
** What's the body of work around SD/JWT/VC that should be
done and how much work will that be? What needs to be done
first? What unknown about the direction and needed tasks?
There are building blocks that "look like VC" but are actually
vanilla JWT / relevant outside the 3 party model. I would
recommend keeping them at OAuth (status list cwt is an example of
this IMO).
It's possible that a document at OAuth recognizing the data model
elements of the 3 party model (iss, sub, cnf, kid, etc) might help
enable documents outside of OAuth to better defer to OAuth for
"moving tokens, or leveraging successful protocols"... this could
help reduce the data model reinvention everywhere else, and it
could drive the common understanding of registered claim names to
be interpreted consistently across JWT / CWT (and their SD friends).
** For whatever that work might be, how should the OAuth
charter evolve to support the work?
I don't know, but I am happy to help : )
One thing that seems worth unpacking is why DCP at OIDF is leaving
the OIDC part behind (paraphrasing, kristina probably has a better
take): https://openid.net/wg/digital-credentials-protocols/
Are there things DCP might need from OAuth WG, how might the
charter align to that work?
** Is there work to be done around bridging the architectural
narrative used in the core OAuth framework/RFC6749 (AS, RS,
RO) and three part model (issuer, holder, verifier) used in
draft-ietf-oauth-selective-disclosure-jwt?
I think so? but it depends on the comment above.
Personally I would like to see the OAuth WG tackle this head on,
especially because of the wallet / client / subject / holder
confusion.... Starting with the people we are here to serve seems
like a safe way to progress through the technical sugar (which I
love).
OS
Thanks,
Roman, Hannes, and Rifaat
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth
--
*ORIE STEELE *Chief Technology Officer www.transmute.industries
<http://www.transmute.industries/>
<https://transmute.industries/>
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth