Skip to content
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

Guidance on securing application/credential+ld+json with "authorship that can be cryptographically verified." #51

Merged
merged 3 commits into from
Feb 22, 2023

Conversation

OR13
Copy link
Contributor

@OR13 OR13 commented Feb 11, 2023

@OR13 OR13 changed the title Guidance on securing application/credential+ld+json with "authorship that can be cryptographically verified."". Guidance on securing application/credential+ld+json with "authorship that can be cryptographically verified." Feb 11, 2023

<section>
<h2>Securing JSON-LD</h2>
<section>
Copy link
Contributor

@mprorock mprorock Feb 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<section>
<p>Enabling the use of semantics through [[json-ld]] to describe credentials is highly desirable for many use cases. The following items cover methods of allowing semantics to be present, but to utilize common signing approaches rather than requiring transformation of the content prior to signing.</p>
<p>This means that the underlying `n-quads` are not signed, and the user should be aware of this, in the event that what they wish to sign is a semantic representation of the data, rather than the data itself.</p>
<section>

Copy link
Contributor Author

@OR13 OR13 Feb 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can I resolve this comment?, seems we have found a better place to state this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@OR13 — Can you provide a link to that better place/statement?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 to a link ... and wherever that is, instead of saying "transformation of the content prior to signing" we should say "transformation of the content via canonicalization prior to signing" ... since the content will, in fact, be transformed prior to signing, but only by cryptographic hash.

We should also not say that the following items "cover methods" but rather "are methods"... wherever we're making these statements, so as not to preclude future / alternative methods.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See this comment: #51 (comment)

Basically, this document is not a good place to do this constraining, or talk about nquads, instead we should try to constrain the media type in the document that registers it... which is the core data model.

This document just refers to the core data model content types when securing them, best to not describe what data integrity proofs do here... since we are not using them here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On a related note, we talked about using this spec to "forbid proof" in the case the core data model allows it in credential+ld+json...

I think it is best for JWT representations to treat the header and claim set as JSON, and not do anything specific to data integrity proofs or any other JSON or JSON-LD specific formats...

From the view of JWS, JSON can have members, and if they are not understood, they are ignored.

There should be no special "edge cases" related to data integrity proofs in VC-JWT, the perspective should be that they are just JSON, regardless of how many proof sets or chains they have.

The place to constrain credential+ld+json is this pull request or related pull requests in the core data model:

w3c/vc-data-model#1014

@mprorock
Copy link
Contributor

added a suggestion (and am happy to update it) to make it abundantly clear that this path is signing the data as it "looks" to the developer or user, which is what the avg joe/jane developer thinks they are doing with verifiable credentials

This thread and others make it very clear that we should be highly explicit about what we are doing, and avoid any possible confusion regarding proofs and types.

I am highly supportive of this PR, and think that it takes us in a very positive direction where broadly adopted signing mechanisms can be used but where semantics can be readily leveraged as required for many use cases and to enhance the quality of the data.

<p><code>content type (3)</code> MUST be <code>application/credential+ld+json</code></p>
<p>See <a data-cite="rfc9052#section-3.1">Common COSE Header Parameters</a> for additional details.</p>
<p>See <a href="https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml">Concise Binary Object Representation (CBOR) Tags</a> for additional details.</p>
</section>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer direct citation to relevant specs and less rehashing them here.

index.html Outdated Show resolved Hide resolved
@TallTed is right about omitting the `application/` prefix.

Co-authored-by: Ted Thibodeau Jr <[email protected]>
Copy link
Collaborator

@selfissued selfissued left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@iherman
Copy link
Member

iherman commented Feb 15, 2023

The issue was discussed in a meeting on 2023-02-14

  • no resolutions were taken
View the transcript

2. Content Types.

See github pull request vc-data-model#1014.

See github pull request vc-jwt#51.

Ivan Herman: slides starting at: https://docs.google.com/presentation/d/128DHWSzVxPgAhB0mq-h23_iATnbVeA4Y-JhNLjpcXJE/edit#slide=id.g1f24e2c0aad_14_271.

Orie Steele: We're going to be talking about content types and media types..
… Why do people say media type, conent type? Go read the links about what they are. Browsers care about this concept. It's a fundamental component of web architecture, conent type from web server. APIs protocols refer to these types, accept header, server will try to satisfy content types, lots of background here..
… Mozilla warning, browsers use the media type, not the file extension, to determine how to process the URL. If this is not correctly configured, browsers will misinterpret, files may be mishandled..
… We should be cautious to heed these warnings....
… Where are media types registered? Look at previous examples, excellent IETF mailing list for every type of media types..
… You can learn a lot from those registrations..

Ted Thibodeau Jr.: Mozilla documentation errs. It refers to "MIME types" (I fixed this on the slide), and it should say browsers *primarily* use the media type, *supplemented by* the file extension, to determine how to process the URL..

Orie Steele: They typically register because they want to distinguish content... there is a registry, it has useful entries, large number of existing registry entries..
… As a technical recommendation, you can register -- in W3C you can see IANA considerations, that's where you register stuff (initiate the registration of stuff).
… A few that you might be familiar with... application/did+ld+json ... application/credential+ld+json ... usually, you only see one plus, suffixes that come at the end, an RFC making its way through IETF that talks about how to interpret pluses (suffixes)..

Brian Campbell: there's also the Structured Syntax Suffixes registry.

Kristina Yasuda: time to register +ld.

Orie Steele: media types / content types -- looking at a few specifications, you should read them... in JSON Web Signatures, content type header parameter, in JWS, header and payload, one of the header parameters can be content type... secure CSV or JSON... declare cty using media type..
… oauth2 -- http endpoint using application/json -- might want to declare content type... might want to define HTTP.
… JSON-LD Link Header, application/ld+json media type... specifying that media type has all context information and normative requirement for the document, constraining document in some way, normatively..
… One of the useful things about media types and content types and describe constraints... naming can be hard..
… media types are a good way of describing content and attributing content w/o getting tied up....

Michael Jones: I'm excited about application/json because it does a lot of heavy lifting every day..

Orie Steele: one of the other places you see media types show up is in APis... developers and consumers tend to think more about APIs... APIs are a great place to see real value wrt. media types and content types..
… The swagger spec uses OAS now, rename was useful. Once you pick API shape, one endpoint HTTP endpoint, query parameters, required header parameters, post body arguments, you can define all of that with OAS 3. Valid response types... maybe endpoint returns JSON, maybe XML, maybe CSV, maybe you can ask... when you build an API, thinking about that is important... what will people request, what will they consume -- media types help here..
… Returning different content types for same resource can be helpful..
… Media tpe parameter is extra piece of information that can accompany a media type, text/html and charset is a parameter... utf-8 is a parameter..
… This is starting to get complicated... mozilla, content type... video/webm;codecs=vp8.0, browser API, inerested in video, concerned about video being processed consistently. Made use of the parameter, browsers can implement interfaces, implement different conent types, can manage complexity here -- nice text string to process can be valuable..
… application/credential+ld+json -- here's where the debate starts... is proof allowed? We haven't registered this yet, it's proposal at present..
… We could change the proposal at any point..

Mahmoud Alkhraishi: What's the timeline on te proposal?.

Orie Steele: This is in VC Data Model 2.0 -- has to go to CR first, that's timeline. It's up to us when it goes somewhere....

Ivan Herman: Formally speaking, W3C sends the request for media type when document is in CR, not before, right now nobody knows about this media type and won't know until we get to CR... if I'm still staff contact, this is the official process, I send it..

Michael Prorock: +1.

Brian Campbell: +1 can and does happen.

Michael Jones: One thing to add, it's good to send this when we're at CR because we can still make changes if IANA says we did something wrong. What we would be asking for at CR is a provisional recommendation, it does appear and it appears as "temporary"... once we have a REC, at that point we send another request to IANA to update registration from provisional to permanent..

Ivan Herman: +1 to Mike.

Ivan Herman: +1 to TallTed.

Michael Prorock: +1 ted.

Ted Thibodeau Jr.: One more wrinkle, because it has two plus signs at the right hand side, there is an RFC that is going through IETF, but indeterminate future, if it gets accepted then this media type is accepted, otherwise it gets rejected.
… then we'll have to figure that out at that point..

Samuel Smith: could't we use a specific parameter to provide the extra information that a double plus content type provides without having to wait for RFC to allow double pluses?.

Manu Sporny: rfc for multiple pluses is in good shape and getting ready for last call.

Shigeya Suzuki: FYI: https://datatracker.ietf.org/doc/draft-ietf-mediaman-suffixes/.

Orie Steele: Here we have our request, one of the questions that we've been asking is whether proof is a valid/expected member of this content type..
… What are the constraints, how can this be processed consistently, we want to be clear -- it's definitely alowed, or definitely disalloewd..
… There are content types where you might be more comfortable with membership being more optional, or where you might not be more comfortable. This PR was originally was very neutral, it didn't describe any constraints in our specification and we want to register a content type for it. We could say that proof is required, or we could say that proof is forbidden, what about "Verifiable Credential"? What will developers expect, what will browsers expect, what will people hat write government policy read this section for this particular type, will they agree with the normative statements or will they be frustrated?.
… We'll have to find consensus on these points, if you want to provide input, read #1014 -- it's long, it's getting longer, but the change set is not that large, just the threads can get long..
… This is a conversation about v2.0 and beyond, but there ar other pieces where we will talk abou tthe past. Talking about v1.1 vs. v2.0.

Samuel Smith: A problem with "proof" is that in general cryptographically proofs cannot be embedded in the thing being proven. So a a multi-part structure like a JWT makes explicit what is being proven. An embedding trick where the proof value is empty and then the proof is substitued later and stripped to validate fails when there is more thatn one proof..

Orie Steele: on to application/credential-claims-set-1.1+json ... maybe we want .v1+json -- those are questions, this one is requested to be registered in a different technical recommendation in our group..

Andres Uribe: +1.

Orie Steele: I'm referring to the credential-claims-set-1.1, the interesting piece is "claims-set" == in example you can see members of a payload, there's sub, jti, iat, exp, nonce -- all of those are registered claim names.... the one important to us is 'vc'.

Brian Campbell: see https://www.iana.org/assignments/jwt/jwt.xhtml.

Michael Jones: JWT Claims Set is defined by the JWT specification RFC 7519.

Michael Jones: The JWT Claims Registry is at https://www.iana.org/assignments/jwt/jwt.xhtml.

Orie Steele: For different registry than media types, for JOSE -- JSON Web Tokens Claims registry. VC, the member of this payload, has a structure that looks like a credential, ignoring proof for a second, it looks like JSON-LD... the claim set in vc, has the same sort of thing..
… In v1.1, the vc member has to have an @context, that's what v1.1 says -- if you look at implementations, they will have a VC member, VC member, @context is required, that's what v1.1 says..

Michael Jones: Some background, this term claims set is defined by the JWT specification, RFC7519 and it's just a name for the JSON that is the body of a JSON Web Token, it's a JSON object with a bunch of claim names as the field names, so iss, typ, jti, those are the claims set claims..

Kristina Yasuda: JWT Claims Set: A JSON object that contains the claims conveyed by the JWT..

Michael Prorock: There are some benefits for how claims sets are registered in -- JSON tends to get verbose, standardized way to say "these are things we say all the times"....

Orie Steele: Thanks for the point about the shortness, there is text that says "We like short names for payload/header" ... but why, it could be that being more verbose would be more semantically unambigouous..

Michael Jones: The reason why, JWTs can be used in browser query strings, for various reasons, there are still browser URL length restrictions that are small... 2k, 4k, 8k... It was fixed IE at one point, it's bigger than it used to be, you have systems truncating content..

Orie Steele: To make the token format, you can make a string encoding on top of another string encoding.

Michael Jones: By a factor of 33% larger.

Orie Steele: If these names get longer, those other names get longer, that's part of the design here. Part of the content type for the token themselves. After the break, we can see full token, token itself can be response from server, token can be encoded response..

Samuel Smith: For JSON Web Token, this would be the payload, adn then tunnelled within payload could have, content type, vc property could be JSON-LD formatted VC with proof included if proof is part of VC spec..
… What you're proposing is using contnet type to indicate that you're tunnelling something else inside claim set?.

Orie Steele: This particular registration request is also in VC-JWT today, to describe what we did in v1.1. We are working on v2.0, but we want to be able to refer to that object in v1.1 that concretely matches, shorer arguments about what we're doing in the future..
… Make it clear what our intenions are and what they should be in the future... VC format has external proof, you're only looking at payload, but there is a header/signature component..

Samuel Smith: This one is saying proof is externally attached..

Orie Steele: Yes...
… There is something in v1.1 that states presense of proof... it warns that that could be confusing... if proof is embedded inside a member of a thing that has an external proof..

Mahmoud Alkhraishi: https://w3c.github.io/vc-jwt/#jwt-encoding paragraph 2.

Kristina Yasuda: found the statement, if JWS is present, digital signature applies to issuer... or VP ... is a holder..:

If a JWS is present, the digital signature refers either to the issuer of the verifiable credential, or in the case of a verifiable presentation, to the holder of the verifiable credential. The JWS proves that the iss of the JWT signed the contained JWT payload and therefore, the proof property can be omitted.
If no JWS is present, a proof property MUST be provided..

Mahmoud Alkhraishi: https://w3c.github.io/vc-jwt/#jwt-encoding paragraph 3.

Orie Steele: It says "can be omitted", doesn't say "MUST" be omitted. What we would interpret that as is proof is optional..

Michael Prorock: +1 one of the many issues in 1.1.

Kristina Yasuda: This has caused a lot of confusion, to clarify vc claim does not contain entire VC, it only contains properties defined in VC Data Model that didn't have mapping into original JWT claims, but VC only should contain stuff about credential subject..

Orie Steele: At this point, we should read definition of credential and verifiable credential..

Joe Andrieu: I don't know if this is substantive, is type after @context, are they scoped by VC?.

Dave Longley: i wrote some examples of the difference between "instead of/in addition to" that shows the claim set with "vc" here: #42 (comment).

Kristina Yasuda: " a proof not based on digital signatures, such as Proof of Work" wow.

Michael Prorock: yeah. some things that really need professional improvements in 2.0.

Oliver Terbu: More background information, proof, why it can be omitted, to use it to express proofs other than what you can express w/ JWTs... you'd have VC JWT with proof with DI proof... those are things that are not great. Discussion over last few years, JWT claims repeated... instead of vs. in addition to -- intention was to focus on small size footprint ... use JWTs in query strings, that's why we decided to do that stuff..

Kristina Yasuda: > credential A set of one or more claims made by an issuer. A verifiable credential is a tamper-evident credential that has authorship that can be cryptographically verified. Verifiable credentials can be used to build verifiable presentations, which can also be cryptographically verified. The claims in a credential can be about different subjects..

Orie Steele: This is probematic language in v1.1, definition of credential and verifiable credential uncomfortable and confusing to readers..

Brent Zundel: A credential is a set of one or more claims made by an issuer. A verifiable credential is (reads from spec)....

Kristina Yasuda: can we please remove "authorship" from definition? it's weird...

Michael Prorock: i want to find the time to do a verbiage / editorial pass soo soo badly.

Kristina Yasuda: can we not user vc anymore in a vc-jwt....

Kristina Yasuda: in v2 i mean.

Orie Steele: What I heard Kristina to say is: This isn't verifiable, but we use verifiable name for it... there is no cryptographic authorship, this is secured with an external proof, maybe this should be called credential because it has no proof, or call it creential cause it has an external proof, but confusing ....

Oliver Terbu: +1 kristina.

Ted Thibodeau Jr.: Awareness note: VCWG folks may want to pay special attention to recording and/or minutes of today's CCG meeting, Noon-1pm ET, focused on SB786 — CA Vital Records in Verifiable Credentials — https://www.w3.org/events/meetings/80a1023e-569b-4714-8fab-d1b84f2c3478/20230214T120000..

Kristina Yasuda: (continue after break...).

Orie Steele: how many media types do we have defined right now? ... 0 in v1.1, 1 currently in the proposal.
… 1 defined so far. credential+ld+json ... see slide from earlier. if we add new media types to the core data model we want to secure them. we need to describe how we do that..
… have split out the 2 proof formats defined in 1.1. data integrity and vc jwt securing were defined in the same doc. in the current draft they're in separate documents.
… pull request debate in 1014 talking about this. been talking about vc data integrity a lot. thread is about whether "proof" is a legal/allowed/required value for ld+proof+json.
… underway in describing the relationship between the two. vc-jwt has a PR open. data integrity does not have a PR yet..
… secured by data integrity, has the content type 'riding along with it' - different approaches. we are required to describe both cleanly for good impls.

Joe Andrieu: at least a 3rd media type here we should understand as a group. media type we are securing, and two that are the secured version of them. the language here mushes them all together.

Orie Steele: the media type we're securing has the most consensus in the group. vc ld json. pull request 1014 is attempting to describe normative requirements for credential+ld+json. if we can gain consensus we can proceed to securing it. can be easy if the normative requirements are clear on how we do it.

Ted Thibodeau Jr.: w3c/vc-data-model#1014.

Orie Steele: new things! talking about v1.1 up until now. and core data model objects (credential). now, switching to talk about other concepts - proposals. pull request recently merged for vc+ld+jwt, but no FPWD for vc-jwt. there is plenty of time to object..
… we talked about cty in the intro to media types. the content type of the payload. there is another - typ - which can be confusing. why do we have two? why cty and typ? typ is about the type of the token (the entire thing) - header, payload, signature.

Michael Jones: typ is what you would put in a browser if you were to transmit.

Orie Steele: cty is about the payload alone, not header or signature.
… if you have typ do you need cty? PR #51 (merged?) is about typ being allowed. the proof property is constrained by the cty. is proof a member of the payload? see PR #1014.

Kristina Yasuda: PR 51 in vc-jwt, not merged yet.

See github pull request vc-jwt#51.

Michael Prorock: a note on cty. referring to payloads is important for business logic processing. seeing this at IETF. #1014 - not whether a proof is allowed in the payload. whether it's allowed with credential+ld+json. or, should we say: if there is a proof embedded in the payload should we use a different cty to describe it, along with a different media type for the browser, etc. not saying whether you can have an embedded proof. just the rules around it..

Orie Steele: that's right. spice from the first slide!.

Ted Thibodeau Jr.: editing others slides. adding the / to the cty, for both cty and typ attrs. these values are shortened because people like to shorten things. specifically to delete "application/" from the beginning. it should be interpreted as if this were present..
… not the standard use of media types. will cause confusion if trying to use them now.

Orie Steele: can someone read the section that describes the removing of the application prefix? TallTed is right..

Kristina Yasuda: See https://www.rfc-editor.org/rfc/rfc7515#section-4.1.9.

David Waite: from RFC 7515 - section 4.1.10. - to keep messages compact, recommend you omit prefix when no other slash appears in the media type value. must treat it as if there application/ were prepended...

Manu Sporny: part that's concerning. can't remember having to think this hard about other media types. general concern: all media types we're considering, how will they work combinatorially? lots to understand and learn. developers will get this wrong..

Ted Thibodeau Jr.: the key question is "what happens if devs get it wrong?".

Manu Sporny: "we will make important decisions around media types" -- slightly misguided. we will do our best for media types. devs will get it wrong, because it's difficult. what do we do then?.
… expecting to get something that's secured. and you don't, or maybe you do -- just checking the media type alone isn't sufficient. need to do other types of testing to see what you got and whether it's what you expect.
… is there a combinatorial matrix? let's figure out a way to make it simple. misguided to say that media types alone will let us know whether something is secured or not.

Orie Steele: the point about "going into the thing to determine whether it's secured or not" is important. one thing dlongley has been saying...can have an intermediary processing a cty that has no ability to verify - just relay. all that it's able to do is to send along a cty. don't make any intermediary responsible for parsing..

Ivan Herman: A warning about the practicalities of media types is in https://mimesniff.spec.whatwg.org/#introduction ....

Orie Steele: what manu_ is saying: be careful writing normative requirements that mandate parsing. envs that cannot dig in won't be able to handle normative requirements. an important part of considering this..

Dave Longley: browser vendors probably won't parse any of these media types in the near future :).

Orie Steele: second part: as a developer. don't like being told I'm going to make mistakes, even if I know that I will make them. here for simplicity as much as we can. remember the warning from browser vendors about handling ctys. browser vendors know that mistakes will be made. they try to warn, we should too.

Dmitri Zagidulin: clarifying question about what mprorock said about #1014: what is the usefulness of embedding an embedded proof json-ld proof in a JWT? what's the benefit of a proofs section inside a jwt.

Dmitri Zagidulin: ok, so that's a great explanation, mprorock. but it does sort of point to the awkwardness of VC-JWT... (that it's a transform).

Michael Prorock: there is a case I can foresee. not advocating for it. with a JWS you are not signing the same thing that you're signing with a data integrity proof. inherently signing two different things. with a JWS what you're signing is what you see (what the system sees at first glance). with a data integrity proof, signing over the semantics of the data in the credential -- signing a transformation, the nquads. different thing.

Ivan Herman: +1 to mprorock.

Dmitri Zagidulin: (n/m, I take back that comment. it's all transforms.).

Michael Prorock: at a top level you can ask "is this data tampered with?" that's the use of JWS - the external signature. what's coming with the proof...let me run URDNA2015 and verify the signature. what that tells you is what is the intention of the semantics tied back to the vocba. was that itself modified? different than just signing the bytes.
… is this possible? is it valuable in certain cases?.

Michael Prorock: +1 kristina.

Kristina Yasuda: 2 things - to manu_: agree we have a job to make it clear to readers which cty to use depending on which direction we want to go. to that extent, the current spec gives us those options already. heard a lot of feedback people want to do different things. codification is useful. maybe could be different than cty and typ..

Dave Longley: +1 to there being value in both signing "the presentation bytes" and in signing "the semantic bytes".

Michael Prorock: 1+ to point out what typ and cty are saying in this example.

Dave Longley: different use cases need one or perhaps even both.

Kristina Yasuda: 2nd point - reacting to mprorock -- made a comment on the PR, explanation makes me thing if we want to sign JWT with an embedded proof it should be a separate media type. could be dangerous security wise.

Samuel Smith: Isn't also a middle ground where the over the wire includes a schema that is additionally validated in addition to the signature. This is a different way o verifying the semantic intent. Not the same and maybe to a different degree but not devoid of samantic verification..

Michael Prorock: yes.

Michael Prorock: +1 selfissued.

Michael Jones: agree with kristina. appreciate what Orie, mprorock and others have advocated. starting to separate and cleanly advocate for things that are separated but distinct. in vc 1.0 spec we had the vcdm representation of content types. now we have a media type for that. also had 1 or more jwt claim sets for vc-jwts. depending on 'in addition to' or 'depends on' option - 2.0 now codifies that. delineation is important. th.

Gabe Cohen: ere will be sets that don't make sense - need to validate one's inputs always, that's always true.

Michael Jones: appreciate how differentiating things that are actually different has enabled us to make progress.

Joe Andrieu: something to be learned/looked at for how gzip is handled on the web. not clean either. media type could be gzip, could be content encoding as gzip. in a future universe would like an integrity type. do not have a way to do that yet. stuck with multiplicity. we also have verifiable presentations. have the same multiplicity there..

Dmitri Zagidulin: (to Joe's point -- I think Orie's earlier point was -- we /could/ specify integrity separately, as a Content Type param).

Joe Andrieu: however things get secured, will need to add it for both VCs and VPs..

Ted Thibodeau Jr.: maybe consider a media type parameter, like Content-Type: application/vc+ld+jwt; integrity="whatever".

Samuel Smith: to Gabe's comment, there can be a way of communicating other steps. not only does the signature need to validate, there needs to be validation against some schema. additional level of validation. can be useful to constrain semantics. need some discussion of how we can convey that.
… can say as a part of normative requirements. need to do validation for semantics/schema.

Ted Thibodeau Jr.: I don't know if multiple parameters are viable....

Dmitri Zagidulin: @SamSmith - we do have that right now, no? with the credentialSchema claim?.

Michael Prorock: I think manu_'s on to something important. here be dragons areas. let's be careful of what we're defining and how. what do we actually mean by typ and cty? what typ is saying -- we are expecting the overall body of the JWT to be a verifiable credential and have LD (as indicated) and expecting a JWT format. what the CTY is saying about the payload -- expecting it to be a credential with LD.

Samuel Smith: @dmitriz But what are the normative rules for applying that credentialSchema claim. And should that be in the header metadata?.

Michael Prorock: this has been of the reasons I've been stubborn about 'when we start adding additional modifiers ...' many CVEs around this. openSSL had a typ confusion thing because x509 has badly handled this stuff. we should learn. even if it prevents us from doing some stuff. let's be explicit when there's a divergence..
… put out a couple of suggestions if this cty has an embedded proof...if we have that, let's indicate the payload has something special about it. it has been extended out and has an additional capability called 'proof' - today URDNA, tomorrow who knows.

Orie Steele: dmitriz asked the use case for proof being in claim set. mprorock answered, but want to repeat processing comment. can think of it as tunneling. I'm tunneling my embedded proof through the cty header..

Dmitri Zagidulin: @SamSmith - re that second question -- I think the content-type/media-type question is at a different layer than the schema. content type is at the browser or routing layer. and once it's correctly routed and parsed, then the schema kicks in.

Orie Steele: e.g. constrained environment. it's a good thing, can forward content with different values for typ and cty. the concept of being allowed to tunnel one security format to another is a thing we see in the wild. should be careful of how that will be interpreted by browsers. allowing for tunneling could be a thing they like or don't - let's make a case for tunneling.

Gabe Cohen: Orie could be relevant to devices that are constrained, don't have libs to process, or just forwarders.

Michael Prorock: +1 orie - valid use case - note that what is indicated if you embed a proof is that there is a higher order of what is signed that the issuer feels is important (in this case signing the semantics).

Orie Steele: can close door to some use cases being affected if we do this.

Dave Longley: tunneling is one of the cases, yes. have left many comments. let's only have as many media types as we need and not any more. always another place to draw a typ boundary. let's make sure the boundaries we draw solve concrete problems. e.g. places that use binary data. does not mean the same concerns will apply to a json format, parsing, or browser parsing.

Ted Thibodeau Jr.: +1 dlongley -- only as many media types as necessary.

Dave Longley: if we have too many media types we can have more problems for ourselves. can lead to vulns. let's have concrete examples of threads/problems we can analyze to see if we can add more media types. then we should add them. let's not jump ahead and add all the types today. can cause problems.

Manu Sporny: +1 to dave. trying to see what type of problems we're solving. yes, specific media types we want in this group. nobody's saying we shouldn't have them if they're paired with a good use case, paired with good security practices. that's good - no objections heard. objection -- let's create media type patterns. we could have 20-30 media types based on these patterns, that's where I get shaky..

Kristina Yasuda: what is "media type pattern"..?.

Manu Sporny: ... typ, yes. cty, yes. let's figure out if we want to add the word 'verifiable' in front of it. what do we want to do with the proof thing? is there anyone objecting to having the typ field (#51)?.

Dave Longley: typ field is recommended best practice these days for JWTs.

Samuel Smith: @dmitriz I agree that schema validation is at a different layer than signature validation (which the content type is conveying) but schema validation is yet at a different layer than claims validation in the sense of semantic inference that URDNA-2015 is validating. that why its a middle ground. We should at least place it precisely in our definitions and not lump schema with somthing that is validating something else..

Manu Sporny: I expect that to happen (typ field). for a content type, that's a separate discussion. is it a subtype of credential? if it isn't there's a can of worms. see PR #1014..
… just about #51 and #1014. let's take other proposals as they come. caveat: let's understand where we're going. let's not end up in a mess with 50+ media types with all sorts of normative language attached. next step: what should we do? make decisions about just 51 and 1014?.

Orie Steele: intention not to make any decisions during the f2f, just to inform.

Brent Zundel: let's make decisions!.

Michael Prorock: awesome question.

Andres Uribe: considerations for using the typ parameter for the media type defined that specifies how the credential is secured? anything that has 'verifiable' should have a typ param that specifies how it's secured. does this avoid the need for cty? as someone who's coming in relatively new. very different when you talk about a verifiable cred vs cred. verifiable = must have a proof whether embedded or external. would clarify a lot for devs.

Orie Steele: parameterization of media types..beginning said 'careful!' yes it's an option, can propose it on any of the open PRs. if we do that we need to describe these parameters in registration requests. less opaque. have to ask questions-is param present? what does it have? think if we can avoid parameterization we should.

Mahmoud Alkhraishi: to understand...the cty saying credential+ld+json indicates to me that the object vc will or will not have a proof (determined on #1014), if not a proof, will know whether the object is signed or not based on the typ?.

Orie Steele: current spec has a section called 'proofs' which says proofs can be embedded or external. one of the most confusing parts - with media types, can have a media type with an external proof. content wouldn't have a proof..

Michael Prorock: all of this discussion is only really in the context of JWTs.

Orie Steele: jwt uses external proofs. the type vc+ld+jwt indicates the presence of an external proof. the cty param credential+ld+json (let's pretend it's verifiable+credential+ld+json), proof would be in the payload. we won't know until we constrain the payload.

Michael Prorock: typ isn't really a thing you can assume exist in other presentation or exchange methods.

Mahmoud Alkhraishi: when I'm processing vc+ld+jwt am I expected to process two signatures?.

Orie Steele: that's the warning!.

Joe Andrieu: advocate for parameter use. have an underlying data model which is being delivered. if we had an integrity type in the header I'd be arguing for using that. the integrity mechanism feels like a parameter to me. if we have two media types they don't have to be related at all. part of the confusion is about tunneling. the idea that you can tunnel is something we should not encourage - have to check different proofs.
… checking multiple = creating problems.

Brent Zundel: what decisions do we want to make here? PR #1014 proposes to say proof is not included, right?.

Orie Steele: yes, dlongley and I had a discussion. he suggested proof is allowed in credential+ld+json. my original intention was to forbid that from being possible..

Dave Longley: that's correct, a verifiable credential is also a credential, it is a subclass of it..

Dave Longley: not to mention that proof may have many different kinds of proofs in it and so on..

Orie Steele: merged that since it was within my original intention. merging intentions into PR does not mean consensus! there is currently no consensus on #1014. most accurately captured by whether the cty can have a proof in it. can make that decision today.

Brent Zundel: also a decision to be made for #51?.

Orie Steele: yes, for #51 we are requesting the registration for typ parameter in vc-jwt. it is JWT specific. #1014 is core data model specific.

Dave Longley: for everyone here: is a square a rectangle? if you have a square, should you be able to say it's also a rectangle so you can give it to a rectangle processor or not?.

Brent Zundel: in addition to those two decisions, what other proposals could/should be on the table for the group for the next 30m?.

Ivan Herman: +1 to dlongley.

Orie Steele: other proposal: application/vc+ld+cwt..

Dave Longley: we get to decide if it makes sense if squares are rectangles in this case :).

Andres Uribe: I would propose adding a media type: application/vc+ld+json;proof={embedded,jwt,cwt}.

Dave Longley: decentralgabe: they already are :) ... we'd have to change the VCDM. ... and it would be very confusing to decide the opposite..

Dmitri Zagidulin: @andres - nice, +1.

Ted Thibodeau Jr.: dlongley -- Squares are a subclass/subtype of rectangles. All squares are rectangles. Many rectangles are not squares. We should be able to declare and/or infer multiple types..

Dave Longley: +1 to TallTed.

Michael Prorock: assumption from devs coming in that you're just living in a JOSE/COSE world. but have two different ways of exchanging info beyond that. if I as an issuer send this, if I believe there's a high degree of value in the embedded proof then I should signal it..
… when we say that cty (payload) and just see credential-json, assumption is not that I need to do additional verification steps. don't want to put us in a position where a developer encounters this and has to do multiple verifications (semantics and bytes modifications).
… want to be very clear about the intentions here. if I see another proof inside it's another bit of bytes that I'm ignoring. the problem is that we've created a situation where that proof means something to someone and something else to someone else -- now we've created confusion.
… this kind of confusion is what we'll get into. get into weird stuff.

Manu Sporny: the other thing at play -- we have two different philosophies. the JWT philosophy, and embedded proof, and they don't make the same decisions. for media types let me propose we only have two media types forever: credential+ld+ and verifiable+credential+ld+.

Kristina Yasuda: i think this is the current situation: https://hackmd.io/Q8EOfbzYTZK_jHH-BJcfKA?view.

Kristina Yasuda: wrt all of the media types proposed.

Manu Sporny: specifically not saying it has "proof" because that's just how we do it today. I'm concerned about us fixating on whether proof is there or not, we should focus on whether there's an embedded proof or not. from the DI side there will not be a +di for a while. we won't make that decision any time soon. will wait for impl feedback..
… from the LD side, just need those two media types: credential+ld+ and verifiable+credential+ld+ -- think dlongley disagrees with me on this and thinks we just need 1. everything else is JWT stuff.
… the two coming in contact is causing confusion.

David Waite: it is a little bit weird. the way things are structured at the JSON level are not how they're processed at the LD level, since being an RDF graph. a lot closer than you think. in my opinion, we've defined multiple proofs only in the context of the proof parameter can we have multiple values.

Dmitri Zagidulin: @SamSmith` - so if I'm understanding correctly what you're saying earlier, you're saying 1) specs should have normative language about the credentialSchema property. (and I think they do, at least for json schema. and if it's not clear, we should fix it). and 2) you'd like to see schema treated at basically the same layer as the Media Type? (to help routing/parsing?) - which I can sort of see the argument for. But then it introduces yet a third.

Dmitri Zagidulin: type-related property, and we already have 2, which is too many :).

David Waite: the semantics of a data integrity proof and a proof inside a JWT are quite different. e.g. protecting someone else's proof with my own (today it is chains). the only interpretation I can think of is that the proofs are independent. if there are multiple, choose between them. any intermediary could remove proofs, and have no way to know that happened.
… if someone gave me the inside of the message w/o the wrapping JWT, what's the interpretation? people may go with the alternative and that's not right. if they are proof chaining, I could trick people to accept a smaller part of the chain. semantics of multiple proofs that haven't been defined.

Joe Andrieu: the parameter still resonates with me. not talking yet about the API used to send a proto-vc (unsigned) to be signed by another component. to me that is credential+ld+json, parameters used to specify the type of proof embedded in the VC, instead of the VC embedded in the proof.

Gabe Cohen: +1 JoeAndrieu.

Kristina Yasuda: reviewing document posted above (https://hackmd.io/Q8EOfbzYTZK_jHH-BJcfKA?view).

Orie Steele: do not have any merges for typ in the core data model just yet.

Kristina Yasuda: Manu's proposal in typ not cty.

Samuel Smith: q.

Michael Jones: we can also provide guidance in the spec on the use of credential+ld data type if used with an external proof--must not also contain an internal proof. whereas; if used within a context with internal proofs it may contain one. that would be OK with me..
… coming at this from how you normally process json. can add a new member and processing won't break. it's fine to write down intended usage. will add this to #1014.

Samuel Smith: q.

Orie Steele: [new slide - 25] Pull #51 in vc-jwt has both vc+ld+cwt and vc+ld+jwt.
… interesting part.. cwt varies on the suffix, the typ does no. the core data model could say that cty has a proof, but securing could say they can't - they can content. we don't want that. noting that typ registration is in vc-jwt, cty usage is defined in vc-jwt, but in the core data model.

Andres Uribe: concrete proposal to make sure there are parameters. not just add credential+ld+json but specify how it is proved, e.g. ?proof=[jwt, cwt, etc.]. similar to what Joe was saying / and adding to Manu was saying.

Joe Andrieu: FWIW, I added a concrete parameter suggestion in the PR w3c/vc-data-model#1014 (comment).

Dave Longley: every VC is a C. every square is a rectangle. already have a model where you look at JSON properties - you look at the ones you understand, ignore the ones you don't. also understand whether they care about these proofs/properties. if you don't care - fine - does not mean a sender should explicitly remove it, should not need to explicitly remove it because it's there. providing guidance around processing is fine. sh.

Gabe Cohen: ould not be too prescriptive. can harm legitimate use cases and violate expectations around subclasses.

Ted Thibodeau Jr.: +1 Use Cases -> Requirements -> satisfy those requirements.

Dave Longley: -1 the openssl and x.509 CVEs are not a concrete use case, it does not apply, this is not binary data.

Orie Steele: responding to dlongley. let's surface legitimate use cases. let's make sure use cases are driving our spec development. without these normative statements, we have trouble satisfying. tunneling is a real use case. "type confusion attack" mprorock mentioned. is that a concrete use case for forbidding proof being in the payload?.

Michael Prorock: want to call out. parameterization - have experience around media stream handling. there is a parameterization to be had, maybe not in 2.0 but in future versions of LD. how do we indicate at the header layer what signature am I expecting? same notion of parameterization in cryptography..
… credential+ld+json = what goes in to get signed. verifiable is what comes out. <-- that notion is important to me. rolls back into type inheritance question.
… have a dog and have a tiger. fine to put a leash on a dog, but put a leash on a tiger and you get bit. if we don't have good guidance on things like embedded proofs, how do we know what takes precedence? someone will think they have a whole, but just have a part. need to avoid this..

Samuel Smith: one use case not seen discussed - prevalent in business/legal world: endorsements. have a party create something. other parties lend credibility via endorsements. can have threshold structures for issuance. can also have threshold structures for receiving. should support things that are really prevalent in the business world.
… receipting is a type of stacked proof. missing an important use case by not explicitly dealing with receipts/endorsements as a proof mechanism. have most of the elements needed with what we're talking about.

Manu Sporny: clarification there is no +ld media type. does not exist. it is only ld+json. would need to figure out something....
… there is a media type suffixes discussion. how do you unwrap all that stuff. there is a spec that exists to unwrap it all. can be complex to go that way. if we have crazy permutations and need to read normative statements, we may want to go look at suffixes. we fail if we hit that level of complexity. need to figure out what +ld turns into. maybe just vc+jwt.

Brent Zundel: Dave mentioned squares and rectangles. Let's talk about the accurate labeling of squares and rectangles..
… how bad would it be if credential+ld+json remained how it is (could have a proof, or not). but the typ field one could add specificity. e.g. say you're not allowed to secure the typ with a proof section.

Mahmoud Alkhraishi: had a similar question. if we separate credential+ld+json to state there will be no proof and have vc+ld+json and say there will be a proof, will allow us, when we use the cty field, if the typ field says ld+jwt, can say process the internal signature as well or do not.

Dave Longley: +1 that the processing rules for vc+ld+jwt could say you may not have the proof is fine / or define whatever.

Mahmoud Alkhraishi: can make it very clear when I receive a vc+ld+json I should process a proof. normative requirement would be straightforward. allows us on the JWT side to say I care or don't..
… what are the downsides to this approach?.

Dave Longley: if we're deciding to add a prohibitive statement let's be clear about what problem it's solving with a concrete use case..
… what brent suggested would be a good approach. if proofs are not allowed in this case, throw an err. may not be the best idea, but do not encroach on the media type and do not violate the shape problem.

Dmitri Zagidulin: so did somebody propose media type param approach, for proofs?.

Orie Steele: unbounded number of content types that are relevant to software development. that's why cty is liked. can treat as opaque bytes with a cty that informs the strucutre.
… in scitt if you're talking about a claim (which we call a VC) there would be a helm chart JSON in both places, but without a typ parameter.
… this structure isn't out of nowhere. others are talking about doing this.

Mahmoud Alkhraishi: first here means ctyp second here means right side of the screen.

Orie Steele: dlongley asking for concrete use cases. proof being present in a credential. mprorock has said openSSL type confusion as an example. another place it could be a problem: if the @context returns different content than what it was when the canonicalized proof was created, the outer external proof will verify, the inner won't until the URL in the context change(s/d).
… having both present leads to a behavior with mixed verifiability.

Michael Prorock: two concrete problems: one - what Orie mentioned. second -- crawling and parsing massive amounts of data...what went into models...could be cases where I want to embed different types of proofs. don't want that knowledge to be confused for any of my users. e.g. for web archive, need to maintain the state of the internet at different times. how we begin to do this?.
… work here and at scitt will inform how we do this stuff. only adding when 'absolutely necessary' - what manu_ is getting at. let's not end up with 50+. would be simpler if everything had typ, doesn't though. that's why for scitt switching over cty is important, especially if it contains sec parameters..

Joe Andrieu: there is an unstated presumption that's conflating the signature on a JWT with a signature on a proof. no reason it needs to be on the same issuer..

Manu Sporny: going back to what selfissued said. maybe we can add language to not outright forbid in the base class. start out with softer language in the beginning - not outright "don't do x" - then we can either go to "now it's forbidden" or we realize the guidance goes against real use cases..

Kristina Yasuda: why can't we prohibit, and wait until people tell us they need it?.

Manu Sporny: where the JWT stuff can be very explicit: do not do it. the base spec can say "this is what people are expecting" . see VC-JWT for more information on this.

Dave Longley: +1 to manu's approach.

Samuel Smith: echo Orie's statement. if I sign a receipt. if someone purchases from me, it's signed, it has a proof. I give a receipt on the proof that I sign, referencing what they sign. liability on issuing receipt is on me..
… don't have to impose on receipter any requirements - already have the liability. different from assumptions in other parts of the web. receipting is a powerful use case. what does it mean to sign something as a proof? legal construct not just cryptographic..

Ivan Herman: is it verifiable+credentials+ld+json or verifiable-credentials+ld+json ? These are very different.

Michael Prorock: +1 ivan very different.

Gabe Cohen: The use case for tunnelling, at TBD, transport credentials over DWNs. Use cases on status list, different signature methods, blob might be signed as a VC itself, might have many different types -- tunnelling is real..

Kristina Yasuda: why would you send those statusList VCs in a VC(?) tho.

Brent Zundel: it is vc+ld+son.

Kristina Yasuda: in the spec rn - verifiable-credentials+ld+json.

Brent Zundel: +1 kristina.

Kristina Yasuda: i mean verifiable-credential+jwt.

Michael Prorock: different between verifiable+credential and verifiable/credential.
… should get agreement.

Ivan Herman: I am talking about jwt, but about, say, cty.

Michael Prorock: sure on jwt space - but then what about things like vc-api and "what am i asking to sign and what am i returning".

Dave Longley: need to know what you care about a priori. need to decide what you're verifying and make decisions there. let's make sure we know where the knowledge is coming from. verifier should know ahead of time what it's looking for and willing to verify.

Michael Prorock: that also implies that we may not want this stuff in the browser.

Michael Prorock: i certainly do.

Orie Steele: queued to comment on verifiable+credential or verifiable-credential - have been comments on #1014. if the dash were changed to a plus it would say there's a direct relation to credential...only a content type when ld+json, different than verifiable-credential+otherstuff. what Ted said: verifiable-credential and credential are at the same level.
… don't have to be related at all. they have a repeated word, but it is misleading. application/foo and application/baz, normative constraints on both. see and think they're the same structure, but they don't have to be at all.
… verifiable-credential and credential can be wildly different in ways that are horrendously confusing.
… they can be related...or we can explicitly not register verifiable-credential because it's confusing. review comments on #1014!.

Michael Prorock: just do this in 'vc-jwts': if this is a W3C....we eat this up in the browser. we need to think about what I, as a browser, see application/??? - do I know how to verify it?.
… especially re: eu product passes. coming up more and more. must be very well defined at the core data model. say one is the input (goes and gets signed) the other is the output (signed thing). if we are not careful we will end up with problems down the line. Mozilla, Google, Apple, etc will object if we do not give them clear direction of what to do with this data when they get it.

Kristina Yasuda: @decentralgabe are you sending those in a VP or a VC?.

Dave Longley: -1 to everything is Mike saying :) ... credential+ld+json will just not have any proofs processed by default by browsers, the end :).

Kristina Yasuda: if in a VP, no need for tunneling, no?.

Kristina Yasuda: each VC is signed using its own way, and VP is signed using one way.

Dmitri Zagidulin: @manu - do you think Google et al will support using media type parameters, for proof types?.

Manu Sporny: all vendors support application/ld+json. tell vendors do things as you've always been doing..

Dmitri Zagidulin: don't VPs need their own media types?.

Manu Sporny: yes, probably :).

Ivan Herman: (lunch break.

1 similar comment
@iherman
Copy link
Member

iherman commented Feb 15, 2023

The issue was discussed in a meeting on 2023-02-14

  • no resolutions were taken
View the transcript

2. Content Types.

See github pull request vc-data-model#1014.

See github pull request vc-jwt#51.

Ivan Herman: slides starting at: https://docs.google.com/presentation/d/128DHWSzVxPgAhB0mq-h23_iATnbVeA4Y-JhNLjpcXJE/edit#slide=id.g1f24e2c0aad_14_271.

Orie Steele: We're going to be talking about content types and media types..
… Why do people say media type, conent type? Go read the links about what they are. Browsers care about this concept. It's a fundamental component of web architecture, conent type from web server. APIs protocols refer to these types, accept header, server will try to satisfy content types, lots of background here..
… Mozilla warning, browsers use the media type, not the file extension, to determine how to process the URL. If this is not correctly configured, browsers will misinterpret, files may be mishandled..
… We should be cautious to heed these warnings....
… Where are media types registered? Look at previous examples, excellent IETF mailing list for every type of media types..
… You can learn a lot from those registrations..

Ted Thibodeau Jr.: Mozilla documentation errs. It refers to "MIME types" (I fixed this on the slide), and it should say browsers *primarily* use the media type, *supplemented by* the file extension, to determine how to process the URL..

Orie Steele: They typically register because they want to distinguish content... there is a registry, it has useful entries, large number of existing registry entries..
… As a technical recommendation, you can register -- in W3C you can see IANA considerations, that's where you register stuff (initiate the registration of stuff).
… A few that you might be familiar with... application/did+ld+json ... application/credential+ld+json ... usually, you only see one plus, suffixes that come at the end, an RFC making its way through IETF that talks about how to interpret pluses (suffixes)..

Brian Campbell: there's also the Structured Syntax Suffixes registry.

Kristina Yasuda: time to register +ld.

Orie Steele: media types / content types -- looking at a few specifications, you should read them... in JSON Web Signatures, content type header parameter, in JWS, header and payload, one of the header parameters can be content type... secure CSV or JSON... declare cty using media type..
… oauth2 -- http endpoint using application/json -- might want to declare content type... might want to define HTTP.
… JSON-LD Link Header, application/ld+json media type... specifying that media type has all context information and normative requirement for the document, constraining document in some way, normatively..
… One of the useful things about media types and content types and describe constraints... naming can be hard..
… media types are a good way of describing content and attributing content w/o getting tied up....

Michael Jones: I'm excited about application/json because it does a lot of heavy lifting every day..

Orie Steele: one of the other places you see media types show up is in APis... developers and consumers tend to think more about APIs... APIs are a great place to see real value wrt. media types and content types..
… The swagger spec uses OAS now, rename was useful. Once you pick API shape, one endpoint HTTP endpoint, query parameters, required header parameters, post body arguments, you can define all of that with OAS 3. Valid response types... maybe endpoint returns JSON, maybe XML, maybe CSV, maybe you can ask... when you build an API, thinking about that is important... what will people request, what will they consume -- media types help here..
… Returning different content types for same resource can be helpful..
… Media tpe parameter is extra piece of information that can accompany a media type, text/html and charset is a parameter... utf-8 is a parameter..
… This is starting to get complicated... mozilla, content type... video/webm;codecs=vp8.0, browser API, inerested in video, concerned about video being processed consistently. Made use of the parameter, browsers can implement interfaces, implement different conent types, can manage complexity here -- nice text string to process can be valuable..
… application/credential+ld+json -- here's where the debate starts... is proof allowed? We haven't registered this yet, it's proposal at present..
… We could change the proposal at any point..

Mahmoud Alkhraishi: What's the timeline on te proposal?.

Orie Steele: This is in VC Data Model 2.0 -- has to go to CR first, that's timeline. It's up to us when it goes somewhere....

Ivan Herman: Formally speaking, W3C sends the request for media type when document is in CR, not before, right now nobody knows about this media type and won't know until we get to CR... if I'm still staff contact, this is the official process, I send it..

Michael Prorock: +1.

Brian Campbell: +1 can and does happen.

Michael Jones: One thing to add, it's good to send this when we're at CR because we can still make changes if IANA says we did something wrong. What we would be asking for at CR is a provisional recommendation, it does appear and it appears as "temporary"... once we have a REC, at that point we send another request to IANA to update registration from provisional to permanent..

Ivan Herman: +1 to Mike.

Ivan Herman: +1 to TallTed.

Michael Prorock: +1 ted.

Ted Thibodeau Jr.: One more wrinkle, because it has two plus signs at the right hand side, there is an RFC that is going through IETF, but indeterminate future, if it gets accepted then this media type is accepted, otherwise it gets rejected.
… then we'll have to figure that out at that point..

Samuel Smith: could't we use a specific parameter to provide the extra information that a double plus content type provides without having to wait for RFC to allow double pluses?.

Manu Sporny: rfc for multiple pluses is in good shape and getting ready for last call.

Shigeya Suzuki: FYI: https://datatracker.ietf.org/doc/draft-ietf-mediaman-suffixes/.

Orie Steele: Here we have our request, one of the questions that we've been asking is whether proof is a valid/expected member of this content type..
… What are the constraints, how can this be processed consistently, we want to be clear -- it's definitely alowed, or definitely disalloewd..
… There are content types where you might be more comfortable with membership being more optional, or where you might not be more comfortable. This PR was originally was very neutral, it didn't describe any constraints in our specification and we want to register a content type for it. We could say that proof is required, or we could say that proof is forbidden, what about "Verifiable Credential"? What will developers expect, what will browsers expect, what will people hat write government policy read this section for this particular type, will they agree with the normative statements or will they be frustrated?.
… We'll have to find consensus on these points, if you want to provide input, read #1014 -- it's long, it's getting longer, but the change set is not that large, just the threads can get long..
… This is a conversation about v2.0 and beyond, but there ar other pieces where we will talk abou tthe past. Talking about v1.1 vs. v2.0.

Samuel Smith: A problem with "proof" is that in general cryptographically proofs cannot be embedded in the thing being proven. So a a multi-part structure like a JWT makes explicit what is being proven. An embedding trick where the proof value is empty and then the proof is substitued later and stripped to validate fails when there is more thatn one proof..

Orie Steele: on to application/credential-claims-set-1.1+json ... maybe we want .v1+json -- those are questions, this one is requested to be registered in a different technical recommendation in our group..

Andres Uribe: +1.

Orie Steele: I'm referring to the credential-claims-set-1.1, the interesting piece is "claims-set" == in example you can see members of a payload, there's sub, jti, iat, exp, nonce -- all of those are registered claim names.... the one important to us is 'vc'.

Brian Campbell: see https://www.iana.org/assignments/jwt/jwt.xhtml.

Michael Jones: JWT Claims Set is defined by the JWT specification RFC 7519.

Michael Jones: The JWT Claims Registry is at https://www.iana.org/assignments/jwt/jwt.xhtml.

Orie Steele: For different registry than media types, for JOSE -- JSON Web Tokens Claims registry. VC, the member of this payload, has a structure that looks like a credential, ignoring proof for a second, it looks like JSON-LD... the claim set in vc, has the same sort of thing..
… In v1.1, the vc member has to have an @context, that's what v1.1 says -- if you look at implementations, they will have a VC member, VC member, @context is required, that's what v1.1 says..

Michael Jones: Some background, this term claims set is defined by the JWT specification, RFC7519 and it's just a name for the JSON that is the body of a JSON Web Token, it's a JSON object with a bunch of claim names as the field names, so iss, typ, jti, those are the claims set claims..

Kristina Yasuda: JWT Claims Set: A JSON object that contains the claims conveyed by the JWT..

Michael Prorock: There are some benefits for how claims sets are registered in -- JSON tends to get verbose, standardized way to say "these are things we say all the times"....

Orie Steele: Thanks for the point about the shortness, there is text that says "We like short names for payload/header" ... but why, it could be that being more verbose would be more semantically unambigouous..

Michael Jones: The reason why, JWTs can be used in browser query strings, for various reasons, there are still browser URL length restrictions that are small... 2k, 4k, 8k... It was fixed IE at one point, it's bigger than it used to be, you have systems truncating content..

Orie Steele: To make the token format, you can make a string encoding on top of another string encoding.

Michael Jones: By a factor of 33% larger.

Orie Steele: If these names get longer, those other names get longer, that's part of the design here. Part of the content type for the token themselves. After the break, we can see full token, token itself can be response from server, token can be encoded response..

Samuel Smith: For JSON Web Token, this would be the payload, adn then tunnelled within payload could have, content type, vc property could be JSON-LD formatted VC with proof included if proof is part of VC spec..
… What you're proposing is using contnet type to indicate that you're tunnelling something else inside claim set?.

Orie Steele: This particular registration request is also in VC-JWT today, to describe what we did in v1.1. We are working on v2.0, but we want to be able to refer to that object in v1.1 that concretely matches, shorer arguments about what we're doing in the future..
… Make it clear what our intenions are and what they should be in the future... VC format has external proof, you're only looking at payload, but there is a header/signature component..

Samuel Smith: This one is saying proof is externally attached..

Orie Steele: Yes...
… There is something in v1.1 that states presense of proof... it warns that that could be confusing... if proof is embedded inside a member of a thing that has an external proof..

Mahmoud Alkhraishi: https://w3c.github.io/vc-jwt/#jwt-encoding paragraph 2.

Kristina Yasuda: found the statement, if JWS is present, digital signature applies to issuer... or VP ... is a holder..:

If a JWS is present, the digital signature refers either to the issuer of the verifiable credential, or in the case of a verifiable presentation, to the holder of the verifiable credential. The JWS proves that the iss of the JWT signed the contained JWT payload and therefore, the proof property can be omitted.
If no JWS is present, a proof property MUST be provided..

Mahmoud Alkhraishi: https://w3c.github.io/vc-jwt/#jwt-encoding paragraph 3.

Orie Steele: It says "can be omitted", doesn't say "MUST" be omitted. What we would interpret that as is proof is optional..

Michael Prorock: +1 one of the many issues in 1.1.

Kristina Yasuda: This has caused a lot of confusion, to clarify vc claim does not contain entire VC, it only contains properties defined in VC Data Model that didn't have mapping into original JWT claims, but VC only should contain stuff about credential subject..

Orie Steele: At this point, we should read definition of credential and verifiable credential..

Joe Andrieu: I don't know if this is substantive, is type after @context, are they scoped by VC?.

Dave Longley: i wrote some examples of the difference between "instead of/in addition to" that shows the claim set with "vc" here: #42 (comment).

Kristina Yasuda: " a proof not based on digital signatures, such as Proof of Work" wow.

Michael Prorock: yeah. some things that really need professional improvements in 2.0.

Oliver Terbu: More background information, proof, why it can be omitted, to use it to express proofs other than what you can express w/ JWTs... you'd have VC JWT with proof with DI proof... those are things that are not great. Discussion over last few years, JWT claims repeated... instead of vs. in addition to -- intention was to focus on small size footprint ... use JWTs in query strings, that's why we decided to do that stuff..

Kristina Yasuda: > credential A set of one or more claims made by an issuer. A verifiable credential is a tamper-evident credential that has authorship that can be cryptographically verified. Verifiable credentials can be used to build verifiable presentations, which can also be cryptographically verified. The claims in a credential can be about different subjects..

Orie Steele: This is probematic language in v1.1, definition of credential and verifiable credential uncomfortable and confusing to readers..

Brent Zundel: A credential is a set of one or more claims made by an issuer. A verifiable credential is (reads from spec)....

Kristina Yasuda: can we please remove "authorship" from definition? it's weird...

Michael Prorock: i want to find the time to do a verbiage / editorial pass soo soo badly.

Kristina Yasuda: can we not user vc anymore in a vc-jwt....

Kristina Yasuda: in v2 i mean.

Orie Steele: What I heard Kristina to say is: This isn't verifiable, but we use verifiable name for it... there is no cryptographic authorship, this is secured with an external proof, maybe this should be called credential because it has no proof, or call it creential cause it has an external proof, but confusing ....

Oliver Terbu: +1 kristina.

Ted Thibodeau Jr.: Awareness note: VCWG folks may want to pay special attention to recording and/or minutes of today's CCG meeting, Noon-1pm ET, focused on SB786 — CA Vital Records in Verifiable Credentials — https://www.w3.org/events/meetings/80a1023e-569b-4714-8fab-d1b84f2c3478/20230214T120000..

Kristina Yasuda: (continue after break...).

Orie Steele: how many media types do we have defined right now? ... 0 in v1.1, 1 currently in the proposal.
… 1 defined so far. credential+ld+json ... see slide from earlier. if we add new media types to the core data model we want to secure them. we need to describe how we do that..
… have split out the 2 proof formats defined in 1.1. data integrity and vc jwt securing were defined in the same doc. in the current draft they're in separate documents.
… pull request debate in 1014 talking about this. been talking about vc data integrity a lot. thread is about whether "proof" is a legal/allowed/required value for ld+proof+json.
… underway in describing the relationship between the two. vc-jwt has a PR open. data integrity does not have a PR yet..
… secured by data integrity, has the content type 'riding along with it' - different approaches. we are required to describe both cleanly for good impls.

Joe Andrieu: at least a 3rd media type here we should understand as a group. media type we are securing, and two that are the secured version of them. the language here mushes them all together.

Orie Steele: the media type we're securing has the most consensus in the group. vc ld json. pull request 1014 is attempting to describe normative requirements for credential+ld+json. if we can gain consensus we can proceed to securing it. can be easy if the normative requirements are clear on how we do it.

Ted Thibodeau Jr.: w3c/vc-data-model#1014.

Orie Steele: new things! talking about v1.1 up until now. and core data model objects (credential). now, switching to talk about other concepts - proposals. pull request recently merged for vc+ld+jwt, but no FPWD for vc-jwt. there is plenty of time to object..
… we talked about cty in the intro to media types. the content type of the payload. there is another - typ - which can be confusing. why do we have two? why cty and typ? typ is about the type of the token (the entire thing) - header, payload, signature.

Michael Jones: typ is what you would put in a browser if you were to transmit.

Orie Steele: cty is about the payload alone, not header or signature.
… if you have typ do you need cty? PR #51 (merged?) is about typ being allowed. the proof property is constrained by the cty. is proof a member of the payload? see PR #1014.

Kristina Yasuda: PR 51 in vc-jwt, not merged yet.

See github pull request vc-jwt#51.

Michael Prorock: a note on cty. referring to payloads is important for business logic processing. seeing this at IETF. #1014 - not whether a proof is allowed in the payload. whether it's allowed with credential+ld+json. or, should we say: if there is a proof embedded in the payload should we use a different cty to describe it, along with a different media type for the browser, etc. not saying whether you can have an embedded proof. just the rules around it..

Orie Steele: that's right. spice from the first slide!.

Ted Thibodeau Jr.: editing others slides. adding the / to the cty, for both cty and typ attrs. these values are shortened because people like to shorten things. specifically to delete "application/" from the beginning. it should be interpreted as if this were present..
… not the standard use of media types. will cause confusion if trying to use them now.

Orie Steele: can someone read the section that describes the removing of the application prefix? TallTed is right..

Kristina Yasuda: See https://www.rfc-editor.org/rfc/rfc7515#section-4.1.9.

David Waite: from RFC 7515 - section 4.1.10. - to keep messages compact, recommend you omit prefix when no other slash appears in the media type value. must treat it as if there application/ were prepended...

Manu Sporny: part that's concerning. can't remember having to think this hard about other media types. general concern: all media types we're considering, how will they work combinatorially? lots to understand and learn. developers will get this wrong..

Ted Thibodeau Jr.: the key question is "what happens if devs get it wrong?".

Manu Sporny: "we will make important decisions around media types" -- slightly misguided. we will do our best for media types. devs will get it wrong, because it's difficult. what do we do then?.
… expecting to get something that's secured. and you don't, or maybe you do -- just checking the media type alone isn't sufficient. need to do other types of testing to see what you got and whether it's what you expect.
… is there a combinatorial matrix? let's figure out a way to make it simple. misguided to say that media types alone will let us know whether something is secured or not.

Orie Steele: the point about "going into the thing to determine whether it's secured or not" is important. one thing dlongley has been saying...can have an intermediary processing a cty that has no ability to verify - just relay. all that it's able to do is to send along a cty. don't make any intermediary responsible for parsing..

Ivan Herman: A warning about the practicalities of media types is in https://mimesniff.spec.whatwg.org/#introduction ....

Orie Steele: what manu_ is saying: be careful writing normative requirements that mandate parsing. envs that cannot dig in won't be able to handle normative requirements. an important part of considering this..

Dave Longley: browser vendors probably won't parse any of these media types in the near future :).

Orie Steele: second part: as a developer. don't like being told I'm going to make mistakes, even if I know that I will make them. here for simplicity as much as we can. remember the warning from browser vendors about handling ctys. browser vendors know that mistakes will be made. they try to warn, we should too.

Dmitri Zagidulin: clarifying question about what mprorock said about #1014: what is the usefulness of embedding an embedded proof json-ld proof in a JWT? what's the benefit of a proofs section inside a jwt.

Dmitri Zagidulin: ok, so that's a great explanation, mprorock. but it does sort of point to the awkwardness of VC-JWT... (that it's a transform).

Michael Prorock: there is a case I can foresee. not advocating for it. with a JWS you are not signing the same thing that you're signing with a data integrity proof. inherently signing two different things. with a JWS what you're signing is what you see (what the system sees at first glance). with a data integrity proof, signing over the semantics of the data in the credential -- signing a transformation, the nquads. different thing.

Ivan Herman: +1 to mprorock.

Dmitri Zagidulin: (n/m, I take back that comment. it's all transforms.).

Michael Prorock: at a top level you can ask "is this data tampered with?" that's the use of JWS - the external signature. what's coming with the proof...let me run URDNA2015 and verify the signature. what that tells you is what is the intention of the semantics tied back to the vocba. was that itself modified? different than just signing the bytes.
… is this possible? is it valuable in certain cases?.

Michael Prorock: +1 kristina.

Kristina Yasuda: 2 things - to manu_: agree we have a job to make it clear to readers which cty to use depending on which direction we want to go. to that extent, the current spec gives us those options already. heard a lot of feedback people want to do different things. codification is useful. maybe could be different than cty and typ..

Dave Longley: +1 to there being value in both signing "the presentation bytes" and in signing "the semantic bytes".

Michael Prorock: 1+ to point out what typ and cty are saying in this example.

Dave Longley: different use cases need one or perhaps even both.

Kristina Yasuda: 2nd point - reacting to mprorock -- made a comment on the PR, explanation makes me thing if we want to sign JWT with an embedded proof it should be a separate media type. could be dangerous security wise.

Samuel Smith: Isn't also a middle ground where the over the wire includes a schema that is additionally validated in addition to the signature. This is a different way o verifying the semantic intent. Not the same and maybe to a different degree but not devoid of samantic verification..

Michael Prorock: yes.

Michael Prorock: +1 selfissued.

Michael Jones: agree with kristina. appreciate what Orie, mprorock and others have advocated. starting to separate and cleanly advocate for things that are separated but distinct. in vc 1.0 spec we had the vcdm representation of content types. now we have a media type for that. also had 1 or more jwt claim sets for vc-jwts. depending on 'in addition to' or 'depends on' option - 2.0 now codifies that. delineation is important. th.

Gabe Cohen: ere will be sets that don't make sense - need to validate one's inputs always, that's always true.

Michael Jones: appreciate how differentiating things that are actually different has enabled us to make progress.

Joe Andrieu: something to be learned/looked at for how gzip is handled on the web. not clean either. media type could be gzip, could be content encoding as gzip. in a future universe would like an integrity type. do not have a way to do that yet. stuck with multiplicity. we also have verifiable presentations. have the same multiplicity there..

Dmitri Zagidulin: (to Joe's point -- I think Orie's earlier point was -- we /could/ specify integrity separately, as a Content Type param).

Joe Andrieu: however things get secured, will need to add it for both VCs and VPs..

Ted Thibodeau Jr.: maybe consider a media type parameter, like Content-Type: application/vc+ld+jwt; integrity="whatever".

Samuel Smith: to Gabe's comment, there can be a way of communicating other steps. not only does the signature need to validate, there needs to be validation against some schema. additional level of validation. can be useful to constrain semantics. need some discussion of how we can convey that.
… can say as a part of normative requirements. need to do validation for semantics/schema.

Ted Thibodeau Jr.: I don't know if multiple parameters are viable....

Dmitri Zagidulin: @SamSmith - we do have that right now, no? with the credentialSchema claim?.

Michael Prorock: I think manu_'s on to something important. here be dragons areas. let's be careful of what we're defining and how. what do we actually mean by typ and cty? what typ is saying -- we are expecting the overall body of the JWT to be a verifiable credential and have LD (as indicated) and expecting a JWT format. what the CTY is saying about the payload -- expecting it to be a credential with LD.

Samuel Smith: @dmitriz But what are the normative rules for applying that credentialSchema claim. And should that be in the header metadata?.

Michael Prorock: this has been of the reasons I've been stubborn about 'when we start adding additional modifiers ...' many CVEs around this. openSSL had a typ confusion thing because x509 has badly handled this stuff. we should learn. even if it prevents us from doing some stuff. let's be explicit when there's a divergence..
… put out a couple of suggestions if this cty has an embedded proof...if we have that, let's indicate the payload has something special about it. it has been extended out and has an additional capability called 'proof' - today URDNA, tomorrow who knows.

Orie Steele: dmitriz asked the use case for proof being in claim set. mprorock answered, but want to repeat processing comment. can think of it as tunneling. I'm tunneling my embedded proof through the cty header..

Dmitri Zagidulin: @SamSmith - re that second question -- I think the content-type/media-type question is at a different layer than the schema. content type is at the browser or routing layer. and once it's correctly routed and parsed, then the schema kicks in.

Orie Steele: e.g. constrained environment. it's a good thing, can forward content with different values for typ and cty. the concept of being allowed to tunnel one security format to another is a thing we see in the wild. should be careful of how that will be interpreted by browsers. allowing for tunneling could be a thing they like or don't - let's make a case for tunneling.

Gabe Cohen: Orie could be relevant to devices that are constrained, don't have libs to process, or just forwarders.

Michael Prorock: +1 orie - valid use case - note that what is indicated if you embed a proof is that there is a higher order of what is signed that the issuer feels is important (in this case signing the semantics).

Orie Steele: can close door to some use cases being affected if we do this.

Dave Longley: tunneling is one of the cases, yes. have left many comments. let's only have as many media types as we need and not any more. always another place to draw a typ boundary. let's make sure the boundaries we draw solve concrete problems. e.g. places that use binary data. does not mean the same concerns will apply to a json format, parsing, or browser parsing.

Ted Thibodeau Jr.: +1 dlongley -- only as many media types as necessary.

Dave Longley: if we have too many media types we can have more problems for ourselves. can lead to vulns. let's have concrete examples of threads/problems we can analyze to see if we can add more media types. then we should add them. let's not jump ahead and add all the types today. can cause problems.

Manu Sporny: +1 to dave. trying to see what type of problems we're solving. yes, specific media types we want in this group. nobody's saying we shouldn't have them if they're paired with a good use case, paired with good security practices. that's good - no objections heard. objection -- let's create media type patterns. we could have 20-30 media types based on these patterns, that's where I get shaky..

Kristina Yasuda: what is "media type pattern"..?.

Manu Sporny: ... typ, yes. cty, yes. let's figure out if we want to add the word 'verifiable' in front of it. what do we want to do with the proof thing? is there anyone objecting to having the typ field (#51)?.

Dave Longley: typ field is recommended best practice these days for JWTs.

Samuel Smith: @dmitriz I agree that schema validation is at a different layer than signature validation (which the content type is conveying) but schema validation is yet at a different layer than claims validation in the sense of semantic inference that URDNA-2015 is validating. that why its a middle ground. We should at least place it precisely in our definitions and not lump schema with somthing that is validating something else..

Manu Sporny: I expect that to happen (typ field). for a content type, that's a separate discussion. is it a subtype of credential? if it isn't there's a can of worms. see PR #1014..
… just about #51 and #1014. let's take other proposals as they come. caveat: let's understand where we're going. let's not end up in a mess with 50+ media types with all sorts of normative language attached. next step: what should we do? make decisions about just 51 and 1014?.

Orie Steele: intention not to make any decisions during the f2f, just to inform.

Brent Zundel: let's make decisions!.

Michael Prorock: awesome question.

Andres Uribe: considerations for using the typ parameter for the media type defined that specifies how the credential is secured? anything that has 'verifiable' should have a typ param that specifies how it's secured. does this avoid the need for cty? as someone who's coming in relatively new. very different when you talk about a verifiable cred vs cred. verifiable = must have a proof whether embedded or external. would clarify a lot for devs.

Orie Steele: parameterization of media types..beginning said 'careful!' yes it's an option, can propose it on any of the open PRs. if we do that we need to describe these parameters in registration requests. less opaque. have to ask questions-is param present? what does it have? think if we can avoid parameterization we should.

Mahmoud Alkhraishi: to understand...the cty saying credential+ld+json indicates to me that the object vc will or will not have a proof (determined on #1014), if not a proof, will know whether the object is signed or not based on the typ?.

Orie Steele: current spec has a section called 'proofs' which says proofs can be embedded or external. one of the most confusing parts - with media types, can have a media type with an external proof. content wouldn't have a proof..

Michael Prorock: all of this discussion is only really in the context of JWTs.

Orie Steele: jwt uses external proofs. the type vc+ld+jwt indicates the presence of an external proof. the cty param credential+ld+json (let's pretend it's verifiable+credential+ld+json), proof would be in the payload. we won't know until we constrain the payload.

Michael Prorock: typ isn't really a thing you can assume exist in other presentation or exchange methods.

Mahmoud Alkhraishi: when I'm processing vc+ld+jwt am I expected to process two signatures?.

Orie Steele: that's the warning!.

Joe Andrieu: advocate for parameter use. have an underlying data model which is being delivered. if we had an integrity type in the header I'd be arguing for using that. the integrity mechanism feels like a parameter to me. if we have two media types they don't have to be related at all. part of the confusion is about tunneling. the idea that you can tunnel is something we should not encourage - have to check different proofs.
… checking multiple = creating problems.

Brent Zundel: what decisions do we want to make here? PR #1014 proposes to say proof is not included, right?.

Orie Steele: yes, dlongley and I had a discussion. he suggested proof is allowed in credential+ld+json. my original intention was to forbid that from being possible..

Dave Longley: that's correct, a verifiable credential is also a credential, it is a subclass of it..

Dave Longley: not to mention that proof may have many different kinds of proofs in it and so on..

Orie Steele: merged that since it was within my original intention. merging intentions into PR does not mean consensus! there is currently no consensus on #1014. most accurately captured by whether the cty can have a proof in it. can make that decision today.

Brent Zundel: also a decision to be made for #51?.

Orie Steele: yes, for #51 we are requesting the registration for typ parameter in vc-jwt. it is JWT specific. #1014 is core data model specific.

Dave Longley: for everyone here: is a square a rectangle? if you have a square, should you be able to say it's also a rectangle so you can give it to a rectangle processor or not?.

Brent Zundel: in addition to those two decisions, what other proposals could/should be on the table for the group for the next 30m?.

Ivan Herman: +1 to dlongley.

Orie Steele: other proposal: application/vc+ld+cwt..

Dave Longley: we get to decide if it makes sense if squares are rectangles in this case :).

Andres Uribe: I would propose adding a media type: application/vc+ld+json;proof={embedded,jwt,cwt}.

Dave Longley: decentralgabe: they already are :) ... we'd have to change the VCDM. ... and it would be very confusing to decide the opposite..

Dmitri Zagidulin: @andres - nice, +1.

Ted Thibodeau Jr.: dlongley -- Squares are a subclass/subtype of rectangles. All squares are rectangles. Many rectangles are not squares. We should be able to declare and/or infer multiple types..

Dave Longley: +1 to TallTed.

Michael Prorock: assumption from devs coming in that you're just living in a JOSE/COSE world. but have two different ways of exchanging info beyond that. if I as an issuer send this, if I believe there's a high degree of value in the embedded proof then I should signal it..
… when we say that cty (payload) and just see credential-json, assumption is not that I need to do additional verification steps. don't want to put us in a position where a developer encounters this and has to do multiple verifications (semantics and bytes modifications).
… want to be very clear about the intentions here. if I see another proof inside it's another bit of bytes that I'm ignoring. the problem is that we've created a situation where that proof means something to someone and something else to someone else -- now we've created confusion.
… this kind of confusion is what we'll get into. get into weird stuff.

Manu Sporny: the other thing at play -- we have two different philosophies. the JWT philosophy, and embedded proof, and they don't make the same decisions. for media types let me propose we only have two media types forever: credential+ld+ and verifiable+credential+ld+.

Kristina Yasuda: i think this is the current situation: https://hackmd.io/Q8EOfbzYTZK_jHH-BJcfKA?view.

Kristina Yasuda: wrt all of the media types proposed.

Manu Sporny: specifically not saying it has "proof" because that's just how we do it today. I'm concerned about us fixating on whether proof is there or not, we should focus on whether there's an embedded proof or not. from the DI side there will not be a +di for a while. we won't make that decision any time soon. will wait for impl feedback..
… from the LD side, just need those two media types: credential+ld+ and verifiable+credential+ld+ -- think dlongley disagrees with me on this and thinks we just need 1. everything else is JWT stuff.
… the two coming in contact is causing confusion.

David Waite: it is a little bit weird. the way things are structured at the JSON level are not how they're processed at the LD level, since being an RDF graph. a lot closer than you think. in my opinion, we've defined multiple proofs only in the context of the proof parameter can we have multiple values.

Dmitri Zagidulin: @SamSmith` - so if I'm understanding correctly what you're saying earlier, you're saying 1) specs should have normative language about the credentialSchema property. (and I think they do, at least for json schema. and if it's not clear, we should fix it). and 2) you'd like to see schema treated at basically the same layer as the Media Type? (to help routing/parsing?) - which I can sort of see the argument for. But then it introduces yet a third.

Dmitri Zagidulin: type-related property, and we already have 2, which is too many :).

David Waite: the semantics of a data integrity proof and a proof inside a JWT are quite different. e.g. protecting someone else's proof with my own (today it is chains). the only interpretation I can think of is that the proofs are independent. if there are multiple, choose between them. any intermediary could remove proofs, and have no way to know that happened.
… if someone gave me the inside of the message w/o the wrapping JWT, what's the interpretation? people may go with the alternative and that's not right. if they are proof chaining, I could trick people to accept a smaller part of the chain. semantics of multiple proofs that haven't been defined.

Joe Andrieu: the parameter still resonates with me. not talking yet about the API used to send a proto-vc (unsigned) to be signed by another component. to me that is credential+ld+json, parameters used to specify the type of proof embedded in the VC, instead of the VC embedded in the proof.

Gabe Cohen: +1 JoeAndrieu.

Kristina Yasuda: reviewing document posted above (https://hackmd.io/Q8EOfbzYTZK_jHH-BJcfKA?view).

Orie Steele: do not have any merges for typ in the core data model just yet.

Kristina Yasuda: Manu's proposal in typ not cty.

Samuel Smith: q.

Michael Jones: we can also provide guidance in the spec on the use of credential+ld data type if used with an external proof--must not also contain an internal proof. whereas; if used within a context with internal proofs it may contain one. that would be OK with me..
… coming at this from how you normally process json. can add a new member and processing won't break. it's fine to write down intended usage. will add this to #1014.

Samuel Smith: q.

Orie Steele: [new slide - 25] Pull #51 in vc-jwt has both vc+ld+cwt and vc+ld+jwt.
… interesting part.. cwt varies on the suffix, the typ does no. the core data model could say that cty has a proof, but securing could say they can't - they can content. we don't want that. noting that typ registration is in vc-jwt, cty usage is defined in vc-jwt, but in the core data model.

Andres Uribe: concrete proposal to make sure there are parameters. not just add credential+ld+json but specify how it is proved, e.g. ?proof=[jwt, cwt, etc.]. similar to what Joe was saying / and adding to Manu was saying.

Joe Andrieu: FWIW, I added a concrete parameter suggestion in the PR w3c/vc-data-model#1014 (comment).

Dave Longley: every VC is a C. every square is a rectangle. already have a model where you look at JSON properties - you look at the ones you understand, ignore the ones you don't. also understand whether they care about these proofs/properties. if you don't care - fine - does not mean a sender should explicitly remove it, should not need to explicitly remove it because it's there. providing guidance around processing is fine. sh.

Gabe Cohen: ould not be too prescriptive. can harm legitimate use cases and violate expectations around subclasses.

Ted Thibodeau Jr.: +1 Use Cases -> Requirements -> satisfy those requirements.

Dave Longley: -1 the openssl and x.509 CVEs are not a concrete use case, it does not apply, this is not binary data.

Orie Steele: responding to dlongley. let's surface legitimate use cases. let's make sure use cases are driving our spec development. without these normative statements, we have trouble satisfying. tunneling is a real use case. "type confusion attack" mprorock mentioned. is that a concrete use case for forbidding proof being in the payload?.

Michael Prorock: want to call out. parameterization - have experience around media stream handling. there is a parameterization to be had, maybe not in 2.0 but in future versions of LD. how do we indicate at the header layer what signature am I expecting? same notion of parameterization in cryptography..
… credential+ld+json = what goes in to get signed. verifiable is what comes out. <-- that notion is important to me. rolls back into type inheritance question.
… have a dog and have a tiger. fine to put a leash on a dog, but put a leash on a tiger and you get bit. if we don't have good guidance on things like embedded proofs, how do we know what takes precedence? someone will think they have a whole, but just have a part. need to avoid this..

Samuel Smith: one use case not seen discussed - prevalent in business/legal world: endorsements. have a party create something. other parties lend credibility via endorsements. can have threshold structures for issuance. can also have threshold structures for receiving. should support things that are really prevalent in the business world.
… receipting is a type of stacked proof. missing an important use case by not explicitly dealing with receipts/endorsements as a proof mechanism. have most of the elements needed with what we're talking about.

Manu Sporny: clarification there is no +ld media type. does not exist. it is only ld+json. would need to figure out something....
… there is a media type suffixes discussion. how do you unwrap all that stuff. there is a spec that exists to unwrap it all. can be complex to go that way. if we have crazy permutations and need to read normative statements, we may want to go look at suffixes. we fail if we hit that level of complexity. need to figure out what +ld turns into. maybe just vc+jwt.

Brent Zundel: Dave mentioned squares and rectangles. Let's talk about the accurate labeling of squares and rectangles..
… how bad would it be if credential+ld+json remained how it is (could have a proof, or not). but the typ field one could add specificity. e.g. say you're not allowed to secure the typ with a proof section.

Mahmoud Alkhraishi: had a similar question. if we separate credential+ld+json to state there will be no proof and have vc+ld+json and say there will be a proof, will allow us, when we use the cty field, if the typ field says ld+jwt, can say process the internal signature as well or do not.

Dave Longley: +1 that the processing rules for vc+ld+jwt could say you may not have the proof is fine / or define whatever.

Mahmoud Alkhraishi: can make it very clear when I receive a vc+ld+json I should process a proof. normative requirement would be straightforward. allows us on the JWT side to say I care or don't..
… what are the downsides to this approach?.

Dave Longley: if we're deciding to add a prohibitive statement let's be clear about what problem it's solving with a concrete use case..
… what brent suggested would be a good approach. if proofs are not allowed in this case, throw an err. may not be the best idea, but do not encroach on the media type and do not violate the shape problem.

Dmitri Zagidulin: so did somebody propose media type param approach, for proofs?.

Orie Steele: unbounded number of content types that are relevant to software development. that's why cty is liked. can treat as opaque bytes with a cty that informs the strucutre.
… in scitt if you're talking about a claim (which we call a VC) there would be a helm chart JSON in both places, but without a typ parameter.
… this structure isn't out of nowhere. others are talking about doing this.

Mahmoud Alkhraishi: first here means ctyp second here means right side of the screen.

Orie Steele: dlongley asking for concrete use cases. proof being present in a credential. mprorock has said openSSL type confusion as an example. another place it could be a problem: if the @context returns different content than what it was when the canonicalized proof was created, the outer external proof will verify, the inner won't until the URL in the context change(s/d).
… having both present leads to a behavior with mixed verifiability.

Michael Prorock: two concrete problems: one - what Orie mentioned. second -- crawling and parsing massive amounts of data...what went into models...could be cases where I want to embed different types of proofs. don't want that knowledge to be confused for any of my users. e.g. for web archive, need to maintain the state of the internet at different times. how we begin to do this?.
… work here and at scitt will inform how we do this stuff. only adding when 'absolutely necessary' - what manu_ is getting at. let's not end up with 50+. would be simpler if everything had typ, doesn't though. that's why for scitt switching over cty is important, especially if it contains sec parameters..

Joe Andrieu: there is an unstated presumption that's conflating the signature on a JWT with a signature on a proof. no reason it needs to be on the same issuer..

Manu Sporny: going back to what selfissued said. maybe we can add language to not outright forbid in the base class. start out with softer language in the beginning - not outright "don't do x" - then we can either go to "now it's forbidden" or we realize the guidance goes against real use cases..

Kristina Yasuda: why can't we prohibit, and wait until people tell us they need it?.

Manu Sporny: where the JWT stuff can be very explicit: do not do it. the base spec can say "this is what people are expecting" . see VC-JWT for more information on this.

Dave Longley: +1 to manu's approach.

Samuel Smith: echo Orie's statement. if I sign a receipt. if someone purchases from me, it's signed, it has a proof. I give a receipt on the proof that I sign, referencing what they sign. liability on issuing receipt is on me..
… don't have to impose on receipter any requirements - already have the liability. different from assumptions in other parts of the web. receipting is a powerful use case. what does it mean to sign something as a proof? legal construct not just cryptographic..

Ivan Herman: is it verifiable+credentials+ld+json or verifiable-credentials+ld+json ? These are very different.

Michael Prorock: +1 ivan very different.

Gabe Cohen: The use case for tunnelling, at TBD, transport credentials over DWNs. Use cases on status list, different signature methods, blob might be signed as a VC itself, might have many different types -- tunnelling is real..

Kristina Yasuda: why would you send those statusList VCs in a VC(?) tho.

Brent Zundel: it is vc+ld+son.

Kristina Yasuda: in the spec rn - verifiable-credentials+ld+json.

Brent Zundel: +1 kristina.

Kristina Yasuda: i mean verifiable-credential+jwt.

Michael Prorock: different between verifiable+credential and verifiable/credential.
… should get agreement.

Ivan Herman: I am talking about jwt, but about, say, cty.

Michael Prorock: sure on jwt space - but then what about things like vc-api and "what am i asking to sign and what am i returning".

Dave Longley: need to know what you care about a priori. need to decide what you're verifying and make decisions there. let's make sure we know where the knowledge is coming from. verifier should know ahead of time what it's looking for and willing to verify.

Michael Prorock: that also implies that we may not want this stuff in the browser.

Michael Prorock: i certainly do.

Orie Steele: queued to comment on verifiable+credential or verifiable-credential - have been comments on #1014. if the dash were changed to a plus it would say there's a direct relation to credential...only a content type when ld+json, different than verifiable-credential+otherstuff. what Ted said: verifiable-credential and credential are at the same level.
… don't have to be related at all. they have a repeated word, but it is misleading. application/foo and application/baz, normative constraints on both. see and think they're the same structure, but they don't have to be at all.
… verifiable-credential and credential can be wildly different in ways that are horrendously confusing.
… they can be related...or we can explicitly not register verifiable-credential because it's confusing. review comments on #1014!.

Michael Prorock: just do this in 'vc-jwts': if this is a W3C....we eat this up in the browser. we need to think about what I, as a browser, see application/??? - do I know how to verify it?.
… especially re: eu product passes. coming up more and more. must be very well defined at the core data model. say one is the input (goes and gets signed) the other is the output (signed thing). if we are not careful we will end up with problems down the line. Mozilla, Google, Apple, etc will object if we do not give them clear direction of what to do with this data when they get it.

Kristina Yasuda: @decentralgabe are you sending those in a VP or a VC?.

Dave Longley: -1 to everything is Mike saying :) ... credential+ld+json will just not have any proofs processed by default by browsers, the end :).

Kristina Yasuda: if in a VP, no need for tunneling, no?.

Kristina Yasuda: each VC is signed using its own way, and VP is signed using one way.

Dmitri Zagidulin: @manu - do you think Google et al will support using media type parameters, for proof types?.

Manu Sporny: all vendors support application/ld+json. tell vendors do things as you've always been doing..

Dmitri Zagidulin: don't VPs need their own media types?.

Manu Sporny: yes, probably :).

Ivan Herman: (lunch break.

@OR13
Copy link
Contributor Author

OR13 commented Feb 22, 2023

Open for 2 weeks, no objections, merging

@OR13 OR13 merged commit e095368 into main Feb 22, 2023
@TallTed
Copy link
Member

TallTed commented Feb 22, 2023

I see no conclusion in the discussion! This "open for 2 weeks, merging" declaration is capricious and has not been announced before becoming an action. I question whether "no objections" is accurate. This should not have been merged given the current state of discussion.

@brentzundel
Copy link
Member

@TallTed My read of this PR and the associated comments does not agree with your assertion that @OR13 was acting capriciously, nor that the PR should not have been merged.

@mprorock suggested a change, @OR13 responded. You and @dlongley sought clarification, to which @OR13 responded.
Two weeks passed with no indication from you or @dlongley that @OR13 's response was not acceptable.

I see two comments (which were addressed) and two approvals, followed by two weeks without further comments, with no stated objections or requests for changes. I see no reason to reverse this PR.
If there are concrete changes that folks feel are necessary, please open an issue.

johnandersen777 pushed a commit to intel/dffml that referenced this pull request Mar 31, 2023
…dataflow policy engine: README: Add inital sketch

Related: w3c/vc-jose-cose#51
Related: #1400
Related: #1315
Related: #476
Related: #349
Related: #382
Signed-off-by: John Andersen <[email protected]>
@OR13 OR13 deleted the feat/secure-json-ld branch June 7, 2023 17:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants