-
Notifications
You must be signed in to change notification settings - Fork 98
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
Example 19 (delegation) uses the same did's everywhere #812
Comments
You are correct. The capabilityDelegation in that example does not delegate to another DID subject. Rather, it defines a verification method for the delegation of capabilities issued to the subject. In other words, if you have a zCap issued to The other subject's DID, |
Thanks @jandrieu for explaining. As you may see from previous issues I raised over the last weeks, I'm having trouble understanding this specification. Some concepts are explained in detail, whereas (e.g. capabilities, controllers etc.) are not obvious to readers such as me. It seems to me that the standard has functionally 'progressed' (slipped) from what used to be a way to set up secure communications has evolved into something that also deals with all sorts of authorization-related matters, which I personally would rather see at the information/business level. I guess that's a fundamental discussion for SSI architects... |
I hear your frustration. I think much of it is because of the layered approach that advocates of DIDs and VCs have adopted (and I eventually came to appreciate and, in turn, advocate). By deferring some aspects to other specifications, VCs and DIDs were able to get through a consensus process at the data model level. The unfortunate result is that there's no fully published version of the grand vision, in large part because many of the pieces are still being defined. While several implementers have built and shipped DID and VC technology, the remaining layers still have much discussion and debate before we can canonicalize their boundaries and functionality. To wit: early versions of DIDs only imagined ledger-based identifiers. Now we have methods that embed the verifiable data registry in the DID itself. We're still figuring out the best way to do these decentralized things. THAT said, I'd make the case that this is more a miscommunication / undercommunication about how verification relationships and verification methods work. IMO, at its core, DID Documents most fundamentally represent the relationships between particular identifiers and specific cryptographic methods that can be used to verify certain actions. That is, its most fundamental role is to present the relationships between a given DID and associated verification methods. These "verification relationships" are represented as top line properties in the DID Document, as "authentication", "assertionMethod", "keyAgreement", "capabilityInvocation", and "capabilityDelegation" and each provides a way to specify verification methods to satisfy those relationships. As I understand it, these particular verification relationships have been defined in the JSON-LD signature work, but I can't speak authoritatively on that. However, I do understand that these relationships are intentionally limited in quantity. Unlike delegation--which may require extremely sophisticated rules for what is exactly delegated to whom under what circumstances and with what exceptions--verification relationships are limited precisely to reduce semantic ambiguity. They are, in effect, the way that you achieve better practices for key management, e.g., the NIST guidance on using different keys for different cryptographic functions:
And, because of the way that DID Documents work, it is possible to list multiple proof mechanisms for each relationship AND controllers are not just limited to public key based proof mechanisms. Any verification method can be specified in a DID Document from a specification standpoint (implementations vary). With those five relationships, you should be able to address just about any cryptographically verifiable operation. So, I wouldn't say In particular, I appreciate how delegation is deferred to a different layer, allowing competing options to innovate in that space. Authorization capabilities are one approach that works with capabilityInvocation and capabilityDelegation , but any system that understands a specific proof mechanism could use DIDs in the same way (including by defining a new proof mechanism). FWIW, I find this layered approach far more scalable and reliable than end-to-end monolithic designs where every layer has to be right for the entire system to hold together. By standardizing at the different layers, we get an ability to build technology stacks that are interoperable at each layer, similar to that enabled by the OSI model and its seven layers. p.s. I also think the "controller" property is ridiculously named given it does not identify the controller of the DID Document, but that ship has long since sailed. |
Thanks, @jandrieu, for hearing my frustration, and for clarifying and pondering. I like the idea behind verification relationships. Having different keys for different purposes has been around for a long time (authentication, integrity signatures, will-expressions), and DID-core added a few others. It is from this history that I think we haven't seen the last of them, and therefor - and also to be able to define the single concept 'Verification Relationship', I would rather see its intended purpose be a property of a generic (root)property 'Verification Relationship' than having 5 (I expect more to come in future) explicitly defined. Regarding the ridiculously named property of 'controller' (in the context of a verification relationship), I don't mind (so much) keeping it, but I do think it can be documented much better so that people that didn't witness 'the sailing of that ship' to at least understand it (see #806). |
We discussed on today's call and there was agreement that Example 19 can be updated to show the Verification Methods that would make this example clearer. Marking this as ready for PR. |
This was discussed during the #did meeting on 06 December 2024. View the transcriptw3c/did-core#812manu: We probably need to specify a more complete example, updated to show verificationMethods. decentralgabe: want to cover DID Resolution or keep going? |
This was discussed during the #did meeting on 19 December 2024. View the transcriptw3c/did-core#812Wip: anyone with experience in delegation, to adapt the examples? |
Discussed today, but with an erroneous conclusion. We don't need a new example. We need to explain what is happening better. The capabilityDelegation relationship is not delegating. It is specifying the verification method that will be used in delegation proofs. |
Yep, that makes sense. I attempt to add some clarifying text. Thx |
In my attempt to come to grips with the details of capabilities and their delegation, I noticed that example 19 uses
did:example:123456789abcdefghi
as the DIDdoc subject, in the controller property, and as the DID-part of all DID-URLs.I have trouble understanding how this could define a delegation to another DID subject. Can this be clarified?
The text was updated successfully, but these errors were encountered: