-
Notifications
You must be signed in to change notification settings - Fork 13
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
What should be in the spec to support a Resolver Client verifying signatures using "old" keys #153
Comments
@peacekeeper -- would love to get your thoughts on this. Particularly item 2 in the description, and if there is something in the metadata that says "Hey, I resolved this thing, but it is not part of the current DIDDoc". Does that exist? |
Great questions, here are some thoughts.. Re 1. The DID specs don't say anything about the structure of Somehow I have a feeling that this is not a good idea, because then I think there would be no way of telling if two different DID URLs identify the same version of the DID document or a different version. In addition, it's not clear to me how certain metadata properties in the resolution result would work in this case, such as the Regarding Re 2. Not sure what you mean by "the most recent requested fragment". The fragment will return a part of the DID document that is the result of dereferencing the DID URL without fragment. Examples: The result of the first example may be different from the result in the last example, if Due to the way how fragments work in URIs in general, there is nothing we can do in either the DID specs or DID methods specs to change this behavior. Re 3. There are services out there that can do all this (I can show you), but I think it's out of scope of the DID Resolution spec, which should only cover resolving/dereferencing of single DIDs and DID URLs. I guess such advanced queries could potentially be defined in a separate spec. Re 4. I agree, seems trivial. I would however question if there are really many scenarios where you would want to enumerate all DID documents or keys. E.g. for verification of a VC, shouldn't the proof point specifically to the DID URL of the verification method that must be used for verification? And this DID URL could contain both a |
Verification methods in the Controller Documents spec have an |
Re 1: Re 2: The question was slightly different, but your response needs clarification. From your example, I was thinking more about if the DID URL being resolved was just I guess would could put in a requirement that all fragment identifiers MUST have identical content if they appear in multiple versions of the DIDDoc, but that is extra verification work. Re 1 Part 2: The bigger question I was asking was if the DID URL was
Thanks! |
Re 1: Hmm I don't understand. First you said "The Re 2: I don't really understand what you are trying to accomplish or what's the problem... To me it's a feature that the result of
In this case, dereferencing |
Re 1: Sorry I wasn’t clear. The DID Controller MUST create the versionId as Re 2: It’s unfortunate that the result is a The obvious answer is that when signing a credential, the Issuer in that situation (all issuers?) would use reference the key via the DID URL: Either way, it would also be nice to be able to say in a later DIDDoc version that |
Re 1: See my earlier comment #153 (comment), somehow I feel it's better to have only a single valid Re 2: What you are asking for is like saying that when you open One solution is to reference the version explicitly, as you said e.g. Another solution is to keep all keys in the DID document and mark them as revoked instead of removing them, this will be supported via controller documents, see my earlier comment #153 (comment). |
Good example: One hopes that the |
Re 1: What Stephen has said here isn't quite what I have been picturing / implementing in the typescript implementation.
I have implemented it thinking we would be doing Re 2: I think what the reality of how hash fragments works means to me is that we have to suggest in the spec that if you are looking for a verification method (to verify a proof) you will likely need to query the |
Re 1: Interesting. There’s no such thing as Re 2: I think the |
for exactly that reason.. It is a "hack" as you've said. The
Why is that? The versionTime in the log won't change so a resolver will always return the same document given a time query |
This thread is spinning a little but we haven't really talked about what happens when you actually revoke (or just rotate) a key. It's not necessary to remove the entity referenced by the Importantly, removing all verification relationships means that associated proofs MUST NOT verify as-is, although it is up to the verifier if they want to take extra steps. I believe this step should only be taken for compromised keys, or keys for which all associated proofs are considered expired. If the controller wants to allow verification for historical proofs, then don't remove the key definition or the verification relationships. I imagined something like a Referencing a specific
|
@brianorwhatever and this comment. Good points — thanks. I think being able to resolve via Re: versionTime: I guess it is — reasonable. It doesn’t feel great, but you are right, in the majority of use cases we should expect, it is sufficient. I’ll scan through to see if this should be in the spec or just in the implementation guide. |
@andrewwhitehead and this comment. Let me understand what you are proposing:
Is that right? Assuming so — I really hate the idea that we have both the full history of the DID AND we keep an extra copy of that data in an ever growing current DIDDoc. If Since I’m a fan of the DID Controller making the key reference the active key at the time of signing (e.g.
Either way, in using an old key, the resolver would have to check one more place — either the external file or the latest DIDDoc. |
@swcurran It's also possible to remove a revoked key entirely, in fact the DID core spec says that's the only unambiguous way to do it. I was just suggesting another option for discoverability, but for short term keys that are single-purpose and frequently rotated I don't think there's any need to maintain them all in the current document.
If this method means inventing an external revocation mechanism then maybe it's not worth it? An issuer is always free to do it that way, but I don't like the trade-off. It's not at all clear how and when the external revocation would be applied for a verifier that is considering this just another DID method (perhaps using the universal resolver) and parsing the document for keys. Is the resolver meant to rewrite the old document to remove them? |
@brianorwhatever -- see the commit I just added to the PR. Need to add it to the log as well, but what do you think? |
A major benefit of this DID Method is that a signature from a not-current version of the DIDDoc can be found. What features do we want to support in the spec to support a client to a resolver in doing that. In thinking about this, what guidance and aid is there in the DID Core and DID Resolution specs that can help us?
Things the resolver will and could do:
versionId
andversionTime
query parameter. Adid:webvh
resolver MUST (right?) return the corresponding version of the DID. TheversionId
can be either just the version number (1, 2, 3, ...) or it can be the fullversionId
with theentryHash
. TheversionTime
does not have to be exact (does it?). It would be the DID version active based onversionTime
in the log entries.did:webvh
resolver MUST (or not?) return the most recent requested fragment -- even if it is from a DID version that is not current.did.jsonl
) file and extract out all of the DID Docs and keys.It seems to me:
Note: It would be great if the DID Core had a way to indicate the status of a key. The presence of a key in anything other than the current DIDDoc implies that nothing will be signed by that key. It would be nice if the DID Controller could indicate if any key ** SHOULD NOT** be used for verification. But I don't think we should do that unilaterally in the did:webvh spec.
The text was updated successfully, but these errors were encountered: