Mahesh Jethanandani has entered the following ballot position for
draft-ietf-oauth-sd-jwt-vc-23: No Objection

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to 
https://www.ietf.org/about/groups/iesg/statements/handling-ballot-positions/ 
for more information about how to handle DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/



----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Thanks to the authors for the work since Last Call. Most of the
directorate and LC feedback has visibly landed in -20 through -23.

Section 2.2.2.3, note on RFC 7800:

494 >    Note that Section 3 of [RFC7800] requires that a JWT containing a cnf
495 >    claim also contain either the sub or iss claim.  This specification
496 >    explicitly overrides that requirement, as there are valid and
497 >    legitimate uses of key-bound SD-JWT VCs without either of those
498 >    claims.

I support Mike's DISCUSS. I checked RFC 7800 Section 3, and the text
being overridden is a plain MUST:

 >    At least one of
 >    the "sub" and "iss" claims MUST be present in the JWT.

RFC 9901 doesn't make this departure, so this document is the first to
do it. "Explicitly overrides" a MUST in another Standards Track RFC needs
either an Updates: relationship or a rewording that makes it clear this
is a profile-specific exception that leaves RFC 7800 alone for everyone
else.

---

Section 7.1, URL validation:

1824 >    Before making a request to any of these URLs, including every
1825 >    redirect target as described in Section 3, the Consumer MUST validate
1826 >    the URL to ensure that it is a valid HTTPS URL and that it does not
1827 >    point to resources an issuer cannot access (e.g., resources internal
1828 >    to the Consumer).  Such resources include, in particular, hosts with
1829 >    addresses from the IANA Special-Purpose Address Registries [RFC6890]
1830 >    that are not globally reachable (such as loopback, link-local, and
1831 >    private-use address ranges) as well as hosts that are only reachable
1832 >    from within the Consumer's network.

IonuČ› Mihalcea asked in his SECDIR review whether this requirement
assumes SD-JWT VCs are used only on the open Internet. Brian answered
that it isn't meant to preclude other deployments, and the fix was to
reword the first sentence to "resources an issuer cannot access". That
helps, but the very next sentence still names private-use ranges and
hosts reachable only from within the Consumer's network as forbidden,
unconditionally. Consider an enterprise or closed-ecosystem deployment
where the Issuer, its JWT VC Issuer Metadata and its Type Metadata all
live on internal addresses and the Verifiers are internal too. As
written, a conforming Consumer can't retrieve any of it. Could the text
allow destinations that local policy has explicitly configured as
permitted (for example, a configured allow-list of Issuers or hosts),
while keeping the default prohibition for everything else? That keeps
the SSRF protection and makes the intended flexibility real.

---

Section 2.5, Inline X.509 Certificates, and Section 7.3:

854 >    *  Inline X.509 Certificates: A mechanism to retrieve the Issuer's
855 >       public key using the X.509 certificate chain in the SD-JWT header.
856 >       When the protected header of the Issuer-signed JWT contains the
857 >       x5c parameter (Section 4.1.6 of [RFC7515]), the recipient uses the
858 >       public key from the end-entity certificate of the certificates
859 >       from that x5c header parameter and validates the X.509 certificate
860 >       chain accordingly against a trust anchor permitted for the Issuer
861 >       according to policy.  In this case, the Issuer of the Verifiable
862 >       Digital Credential is the subject of the end-entity certificate.
863 >       If the iss claim is also present, there is no requirement that its
864 >       value directly correspond to a subject name in the end-entity
865 >       certificate.

1862 >    When defining ecosystem-specific rules for resolution and
1863 >    verification of the public key, as outlined in Section 2.5, it is
1864 >    critical that those rules maintain the integrity of the relationship
1865 >    between the iss value of the SD-JWT, if present, and the public keys
1866 >    of the Issuer.

Nas Til raised three points on this section during Last Call, from
verifying live EUDI reference credentials that carry both an HTTPS iss
and x5c. The -20 change (lines 863-865) settles the first. Two loose ends
remain.

First, the two sections now pull in different directions. Section 2.5
says iss needn't correspond to the certificate when x5c is used, while
Section 7.3 says the relationship between iss and the Issuer's keys is
critical to maintain. I'm left unsure what relationship a Verifier is
meant to preserve in the x5c case. Relatedly, when a credential triggers
both mechanisms (HTTPS iss and x5c), nothing says which applies, beyond
"permitted ... according to policy". Nas Til reported that
implementations have already reached opposite conclusions here. A
sentence saying that the mechanism is selected by Verifier policy per
Issuer, and not by what the credential happens to carry, would line
Section 2.5 up with the MUST in Section 7.3.

Second, "validates the X.509 certificate chain accordingly" doesn't say
according to what. RFC 7515 Section 4.1.6 already requires validation
per RFC 5280, so citing that here (and saying that the certificates in
x5c are never themselves trust anchors) would close Nas Til's third
point at little cost.

---

Section 5.4 and Section 3, bounding extends chains:

1208 >    The extended type MAY itself extend another type.  This can be used
1209 >    to create a chain or hierarchy of types.  The security considerations
1210 >    described in Section 7.4 apply in order to avoid problems with
1211 >    circular dependencies.

912 >    Consumers MUST perform each retrieval in a time-bound and size-bound
913 >    manner to prevent resource exhaustion and denial-of-service attacks,

Section 3 bounds each retrieval and Section 7.4 catches cycles, but
nothing bounds how many retrievals a single credential can trigger. A
non-circular extends chain of arbitrary length, each document small and
fast, together with the logos, background images and SVG templates
referenced at each level, passes both checks. I'd suggest that Consumers
limit the depth of an extends chain (and perhaps the total number of
retrievals per credential) and treat exceeding it as a Type Metadata
processing failure.

---

Operational considerations:

The document introduces discovery endpoints, remote metadata and
caching behaviour that operators will have to run, but it has no
Operational Considerations section. draft-ietf-opsawg-rfc5706bis (still
a WG document) recommends one placed before Security Considerations.
Much of the material already exists. Section 3, Section 5.3.4 and
Section 7.5 cover retrieval, caching and offline use. The authors may
want to gather those there, together with a word on Issuer key rotation
as seen through cached JWT VC Issuer Metadata (how a freshness lifetime
interacts with rollover, and what a Verifier does when metadata is
unreachable). Entirely at the authors' discretion.

---

Section 10.1, Status List reference, and the shepherd writeup:

2161 >    [I-D.ietf-oauth-status-list]
2162 >               Looker, T., Bastian, P., and C. Bormann, "Token Status
2163 >               List (TSL)", Work in Progress, Internet-Draft, draft-ietf-
2164 >               oauth-status-list-21, 21 June 2026,

The shepherd writeup was written for -16 and still answers questions
17 and 18 as if there were no normative references to I-Ds.
It also predates the aka_vcts claim registration (-18), the new HTTP
retrieval section (-19) and the post-LC changes. A refresh of the
shepherd writeup before approval would be desirable.

----------------------------------------------------------------------
NIT
----------------------------------------------------------------------

All comments below are about very minor potential issues that you may
choose to address in some way - or ignore - as you see fit. Some were
flagged by automated tools (via
https://github.com/larseggert/ietf-reviewtool), so there will likely
be some false positives. There is no need to let me know what you did
with these suggestions.

Section 1.2, paragraph 2:

187 >    Selective Disclosure JWT (SD-JWT) [RFC9901] is a specification that

Section 1.4 and RFC 9901 itself use "Selectively Disclosable JWT".

s/Selective Disclosure JWT (SD-JWT)/Selectively Disclosable JWT (SD-JWT)/

---

Section 1.2, paragraph 5:

206 >    key referenced in the cnf claim.  What the credential means, that is,
207 >    the semantics of its claims, is identified by its type, which is
208 >    conveyed in the vct claim Section 2.2.2.1.  Type Metadata Section 5

Same missing-parentheses pattern Mike flagged in Section 3. It also
appears at line 210 and in Section 2.2.2.2 (line 428).

s/vct claim Section 2.2.2.1/vct claim (Section 2.2.2.1)/
s/Type Metadata Section 5/Type Metadata (Section 5)/

---

Section 9.1, vct registration:

2100 >    *  Claim Description: Verifiable digital Credential Type identifier

s/Verifiable digital Credential Type identifier/Verifiable Digital Credential 
Type identifier/

---

Section 5.1, Figure 17, and Appendix A.2, Figure 30:

1103 >      "name":"Betelgeuse Education Credential - Version 42",

2855 >      "name": "Betelgeuse Education Credential - First Version",

Both are Type Metadata for the same vct
(https://betelgeuse.example.com/education_credential/v42), but they
differ in name, description and hash. Given that Section 2.2.2.1 says
the vct value identifies the version, the examples would read better if
they agreed, or if one used a different vct.

---

Appendix A.2, note on degrees, item 4:

3056 >    4.  The date_awarded property of each degree object is marked as sd:
3057 >        always, meaning it can be selectively disclosed.

Per Section 5.6.4, always means the Issuer MUST make it selectively
disclosable, not merely that it can be.

s/meaning it can be selectively disclosed/meaning it is always selectively 
disclosable/



_______________________________________________
OAuth mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to