-
Notifications
You must be signed in to change notification settings - Fork 112
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
notTransferable
property not defined in @context
#731
Comments
notTransferable
property not defined in @context
Is there any update on this issue? Section C.1.1 of the VC data model defined the nonTransferable property, but the |
|
Good point. The text "This section is non-normative." should be removed from section C.1.1 |
@brentzundel wrote:
We shouldn't add it to the v1 context at this point as it could break things. It's highly unlikely that people have issued VCs with the IF, we want to add this property -- and I'd argue very strongly against it as it was not a popular concept in the time of the WG, we would have to do it to a future, breaking context... like the v2 context. @David-Chadwick wrote:
Absolutely not, we had no consensus in the group to make that a mandatory property. The only reason that text survived was because it was in a non-normative appendix (authored by @David-Chadwick). If there had been an attempt to normatively define that text [edit: the original text accidentally said 'non-normatively'], Digital Bazaar would have objected strongly (as would have a number of other WG participants, I expect). |
As the VCWG is currently operating on an extremely limited scope (bug fixes and editorial changes), it does not seem to me that there is anything we can currently do to address it. In my view, producing a normative V2 context document would be interpreted as describing a collection of normative features, therefore it is not in scope for us while in maintenance mode. Until we are able to add I propose we label this issue with |
Adding 'nontranserrable' to issuer contexts was the only practical solution available today, so this is what conforming implementations were forced to do. Having multiple different @context definitions for the same property is hardly conducive to interworking. Therefore the best solution would be to create a delta verifiable credentials context containing just this item. Then everyone who is using this property can migrate their local @context to the new standard defined one, and this does not break any implementation that is not using it (nor any implementation that is using it) |
I agree that the current situation is not ideal. The next VCWG chairs meeting is set for 28 July 2021. During that meeting the chairs will come to an official decision regarding whether any of the proposed solutions are in scope while the WG is in maintenance mode. The proposed solutions we will discuss:
Are there other proposals folks would like the chairs to consider in response to this issue? |
One more to consider:
This really does need the concentrated attention of the VCWG and I'm not sure we have that concentrated attention in Maintenance mode. I'd be fine w/ @David-Chadwick publishing his own context that supports the features that he wants (this is the extensibility that the VC data model provides... we can't stop him from doing that). However, when it comes to updating the core spec with dangerous language like this, I expect us to hit a higher bar (consensus). For the record:
-1, this is a dangerous practice for any missing/future property.
+1 to discuss this, however, I expect there to be objections to standardizing
-1 for the same reasons above, it's a dangerous property that does not do what people think it does (security theatre).
+1 |
@msporny -- I think you meant, fwiw, I'd be voting -1, -0.9, -1, +1, for the 4 proposals as listed in #731 (comment). |
@msporny can you please further elaborate this assertion. What are the promised protections that are broken? The current text simply says that a VP is invalid if it is not signed by the subject. That is a statement of fact. It does not make any promises to anyone does it? Verifiers can accept invalid, non-verified or non-verifiable credentials. We do not make any promises that they won't do this do we? So what is the difference? |
Yes, I did, apologies, I've corrected the original with an editorial mark. |
At this point, the general rule of thumb I've been operating under is that any changes to the context are going to be left out of scope for V1.1. At best we'll get to them when we work on V1.2. However, my current assumption is that's unlikely to be a consensus opinion to do these changes in V1.2. Instead, I'm thinking V1.2 will be used to make clarifying normative text changes which won't break V1 implementations. In V2, then we can go for more changes depending on what we achieve consensus on. In the mean time, the operating assumption that MATTR has been using is to define our own extension context for changes we'd like to go into V2 context updates. |
That's the way to do it at present, IMHO. A couple of pieces of feedback on the extension context:
|
No, you DO need to realias. The reason is because your type-scoped context could be pulled in underneath some other nested term that has, for example, redefined your To see this in action in a simple example: {
"@context": [{
"@protected": true,
"id": "@id",
"type": "@type",
"nested1": "example:nested1",
"VerifiableCredential": {
"@id": "example:VerifiableCredential",
"@context": {
// this is intentionally commented to show it is missing here;
// without it, the output will be undesirable
// "id": "@id",
"description": "example:description"
}
}
}, {
"@protected": true,
"nested2": {
"@id": "example:nested2",
"@context": {
"id": "example:id"
}
}
}],
"nested1": {
"id": "urn:example:1",
"type": "VerifiableCredential",
"description": "vc with proper @id"
},
"nested2": {
"id": "urn:example:2",
"nested1": {
"id": "urn:example:3",
"type": "VerifiableCredential",
"description": "vc with improper @id"
}
}
} Would produce this expanded output: [
{
"example:nested1": [
{
"example:description": [
{
"@value": "vc with proper @id"
}
],
"@id": "urn:example:1",
"@type": [
"example:VerifiableCredential"
]
}
],
"example:nested2": [
{
"example:id": [
{
"@value": "urn:example:2"
}
],
"example:nested1": [
{
"example:description": [
{
"@value": "vc with improper @id"
}
],
// *** this is undesirable, we want `"@id": "urn:example:3` here ***
"example:id": [
{
"@value": "urn:example:3"
}
],
"@type": [
"example:VerifiableCredential"
]
}
]
}
]
}
] JSON-LD playground link: https://tinyurl.com/uzz7duve If you were to uncomment the realiasing above it would fix the problem as shown here in the JSON-LD playground: JSON-LD playground link: https://tinyurl.com/58zdwt6s
Unfortunately, they can't be. Specifically, you can't "add" to a term's scoped context without fully redefining the whole term which usually runs afoul of For now, if you want to do something additive with scoped-contexts, you have to create a new type like is being done with this extension and include that new type in your data. It gets the job done, but is more verbose. |
I actually advocated against doing that. The primary reason for defining a separate ID was because semantically the name and description properties are more specific than what's defined at schema.org. This is not to say that schema.org definitions couldn't be used, but rather that the semantic definitions are more specific. Specifically, Then afterwards, we came to find out that schema.org likely could encounter semantic drift and so I'm feeling like it was wise not to build on their ontology. |
Issue to track: w3c/json-ld-syntax#361 |
Why do they have to be more specific than "The name of the item." and "The description of the item."? Remember, these things are associated with a I expect that this is not a good direction for "credential-specific terms". The other issue here is that these are MATTR-specific terms in a MATTR controlled vocabulary... not a community work item, so the broader world has no guarantee that semantic drift will not occur with the MATTR vocab. Or to put it another way, semantic drift is far less likely to occur in schema.org than it is a private company controlled vocab (even with the best of intentions). wrt. the other two items, I stand corrected... @dlongley highlighted why I'm wrong on two of those items... so, only these suggestions remain:
|
After meeting and discussing this issue, the chairs have determined that either the proposed actions are not within scope for the working group in maintenance mode or would require significant discussion before non-normative changes would be found acceptable. |
Given the agreement at the WC VC WG meeting on 11 Aug that the example context definition can be updated in V1.1 and given that Example 40 contains the nonTransferrable property then it would be inexcusable to not include this in the revised example context definition. |
I'm concerned that the Even the people arguing for the To be clear: I'm objecting strongly to putting |
When the current Recommendation was published, then either the nonTransferrable property was missed from the example context definition by a simple mistake, since all the other example properties are there (in which case it should simply be added in now), or it was purposefully missed out by the editor without informing the group that this was being done on purpose (presumably because the editor did not like this feature). Its sounds by the protestation of @msporny above that the latter was more likely to be the case. |
The example context shouldn't be used by anyone in a production system. It only has terms in it that are "bogus", for lack of a better term. All the terms we created and put in there are in the "examples" namespace (with That's why |
@David-Chadwick wrote:
OR, I honestly didn't think you wanted it in the examples If you wanted it in the examples Instead, you now seem to be accusing me of acting in bad faith... which is really not ok. Bad form. Even assuming that this was something the WG intended to do (which it didn't), remember that I'm also a fallible human being, was under an incredible amount of pressure at the end of that working group, and was doing my best. You're now insinuating that I purposefully missed a detail in an appendix, even though if I had done what you wanted, it would have worked against your own interests. That "feature" in a non-normative appendix was not my sole responsibility to get right. Remember, there was an entire WG (60+ people), multiple Editors, AND Authors (you were one of them) that could've pushed/fixed/done work to address your concern... and no one did. Why is that? |
@David-Chadwick I have never known him to be disingenuous and have always been impressed with his professionalism in regards to keeping separate his personal or business interests from his editorial duties. To make such insinuations in a public forum is not appropriate. If working group members have concerns about possible editorial bias, the proper course of action is to reach out privately to the chairs for a discussion. |
Could it help to change "Example 40: Usage of the nonTransferable property" to define notTransferable in the local context? Then at least the example would be closer to being valid JSON-LD.
|
(Quote edited by @TallTed, to change Thank you, @David-Chadwick, I very much appreciate that. Would @clehner's proposal address your concern? The fundamental question is going to become "What is the vocabulary URL for the My suggestion would be the option 3, although I really urge you to take input from the VCWG before doing that. I do think the feature has a non-trivial chance of making for good security theatre in some scenarios. What might be best is to outline the use case, requirements, and then let a significant portion of the VCWG weigh in (possibly via the CCG) for options before pushing forward. |
@msporny There is no vocabulary for the nonTransferrable property as it is essentially a boolean switch. It could be present with a null value, or a true value (on reflection I think null would be simplest, but don't mind either way). I do not see different shades of nonTransferrability. Existing plastic cards such as my Mastercard contain this issuer's policy statement quote: "This card is not transferrable and is for use only by the authorised signatory". |
There is no need for this property, as it misframes the semantics of VCs and will lead to errors. The misframing is the expectation that VCs give someone a particular privilege and that privilege might be transferred to someone else. However, VCs are not an authorization architecture. The semantics of a VC is that the Issuer attests to the factual accuracy of the claim and stands by it (via the status property). In short, VCs are statements. Statements are not transferable. Take that last statement that "Statements are not transferable" from me, so "Joe says 'Statements are not transferable'" There is no interpretation where it has any meaning to transfer that to someone or something else. In contrast, anyone could add a statement about transferability into the claims of a VC, if they wanted to implement an authorization mechanism using statements in VCs. Totally viable, but that is an action at a different semantic layer (in the claims) than the properties describing the VC. |
The issue was discussed in a meeting on 2022-09-07
View the transcript3.2.
|
+1 @jandrieu I'm not even sure what transferability would look like. Re-issuance from the holder to a new holder? This brings up a question of trust. Why would you trust the holder to now be an issuer? Even if there was such a property, how would it be enforced? I guess the same can be asked for most other properties -- like how can an IMO this should be handled in a 'trust framework' and is out of scope here. |
The For those reasons, I'm marking this issue as pending close in 7 days unless there are objections. If there are objections, please provide an argument for why you think this issue needs to say open vs. continuing the discussion in #930. |
The discussion in #930 is not a replacement for this issue as it is a much broader discussion about delegation, and this issue is not. |
Today's plastic cards are typically stamped "not transferrable" as a legal CYA maneuver by the issuers of those plastic cards, as shorthand for reminding the issuee that they cannot change the party responsible for the charges made on the associated credit line granted by the issuer, related to the requirement (by the card issuers) that selling parties accepting the plastic-based payment cannot ask for additional identification beyond that piece of plastic. It's not an enforcement mechanism, as such. |
I keep seeing this line of reasoning in the working group and it always leaves me a little confused. Is an |
IMO, the I'd also vote against putting the |
There seems to be two conversations going on:
There is nothing we can do about point 1, v1.1 is published. I created a new issue on point 2 (#1037), so that the discussion continues there - closing this issue since the original issue was about point 1. |
the notTransferable property is missing from the "https://www.w3.org/2018/credentials/v1"
@context
definitionThe text was updated successfully, but these errors were encountered: