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

Add normative DID URL Dereferencing section. #264

Closed

Conversation

msporny
Copy link
Member

@msporny msporny commented Apr 21, 2020

This adds the normative text related to DID URL Dereferencing.

This is a WIP, do not merge.


Preview | Diff

@msporny msporny changed the base branch from master to jricher-resolution-normative April 21, 2020 02:07
@philarcher
Copy link
Contributor

Same comment as for PR 263. This:

"The general process of DID URL dereferencing is described in § 10.2 DID URL Dereferencing . The details of implementing a DID URL dereferencer are described in the DID Resolution specification [DID-RESOLUTION]."

is out of order IMO. From a normative POV, the DID-RESOLUTION doc does not exist. I know it does and I dearly wish it were in scope of the WG - that would make life a lot easier, but it isn't. So we can't treat it as if it is.

Again, write the normative sections without any ref to DID-RESOLUTION, then create one simple, short informative section in the doc, somewhere, pointing to it.

@jandrieu
Copy link
Contributor

IMO, dereferencing is out of scope. Resolving a DID to a DID Document is one thing--that's the whole point of the architecture: separating the identifier from associated cryptographic material.

However, once the spec moves into how we use that DID Document to dereference a specific resource OTHER than the DID Document, it extends beyond the minimum necessary for decentralized identifiers, with privacy implications that I believe are currently underexamined or dismissed to date.

Copy link
Contributor

@jricher jricher left a comment

Choose a reason for hiding this comment

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

Suggest changes to terms and some pieces of content.

</p>

<p>
<code>dereference ( did-url, input-options ) -> ( content, did-document-metadata, did-dereference-metadata )</code>
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
<code>dereference ( did-url, input-options ) -> ( content, did-document-metadata, did-dereference-metadata )</code>
<code>dereference ( did-url, input-metadata ) -> ( resource, did-document-metadata, did-dereference-metadata )</code>

index.html Outdated Show resolved Hide resolved
index.html Outdated Show resolved Hide resolved
The input metadata are a map of key-value string pairs as
described in <a href="#resolution-metadata"></a>. The input metadata are REQUIRED but
the map MAY be empty. Concrete <a>bindings</a> MUST NOT define additional
inputs to this function.
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
inputs to this function.
inputs to this function but MAY define additional functions with different input and output definitions.
Specification of such additional functions is outside the scope of this document.

index.html Outdated Show resolved Hide resolved
index.html Outdated Show resolved Hide resolved
index.html Outdated Show resolved Hide resolved
index.html Outdated Show resolved Hide resolved
</p>

<p>
The <code>content</code> of this function's output is a byte stream of data. This byte stream MAY
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
The <code>content</code> of this function's output is a byte stream of data. This byte stream MAY
The <code>resource</code> of this function's output is a byte stream of data. This byte stream MAY

Copy link
Member

Choose a reason for hiding this comment

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

If this gets revived somewhere, The <code>resource</code> of this function's output ... would read better as The <code>resource</code> output by this function ....

</p>

<p>
If the returned <code>content</code> is a <a>DID document</a>, the <a>DID URL dereferencer</a> MAY
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
If the returned <code>content</code> is a <a>DID document</a>, the <a>DID URL dereferencer</a> MAY
If the returned <code>resource</code> is a <a>DID document</a>, the <a>DID URL dereferencer</a> MAY

@iherman
Copy link
Member

iherman commented Apr 22, 2020

Same comment as for PR 263. This:

"The general process of DID URL dereferencing is described in § 10.2 DID URL Dereferencing . The details of implementing a DID URL dereferencer are described in the DID Resolution specification [DID-RESOLUTION]."

@philarcher where did you find this quote in this PR? The "style" of this PR text is something like this quote:

The DID resolution function resolves a DID into a DID document by using the "Read" operation of the applicable DID method. (See § 9.2.2 Read/Verify .) The details of how this process is accomplished is outside the scope of this specification, but all implementations MUST implement a function in the form:

resolve ( did, input-metadata ) -> ( did-document, did-document-metadata, did-resolution-metadata )

Which sounds perfectly fine for me in separating what is normative and what is not.

@iherman
Copy link
Member

iherman commented Apr 22, 2020

However, once the spec moves into how we use that DID Document to dereference a specific resource OTHER than the DID Document, it extends beyond the minimum necessary for decentralized identifiers, with privacy implications that I believe are currently underexamined or dismissed to date.

The only logical conclusion from this is that the spec MUST NOT include the DID URL as a notion. This is a consistent view but, at this moment, we do have this notion. If we have, then we are supposed to define what it is...

@peacekeeper
Copy link
Contributor

@jandrieu are you also objecting to having DID URLs in the spec? Or are you fine with having DID URLs, but you just object to talking about dereferencing them?

@jandrieu
Copy link
Contributor

@peacekeeper That's a great question.

My preference would be a much stripped down spec, with a MVP that cleanly and clearly supports decentralized proof of control of identifiers. The mapping of those identifiers to resources and verification methods is, IMO, better handled at a different level, mainly because of concerns over privacy implications of current approaches.

That said, I expect that some way to go from a DID to a particular resource (treating a DID as a URL) is going to be important to too many participants and we should figure that out. I just don't think we've figured it out yet. In particular, I believe the fragility caused by merging parameters to be so confusing to most developers that many who experiment with DIDs will find they don't work very well--in the same sense that XHTML didn't work very well because it was overfragile.

So, clarifying that resolution means returning a DID Document, to me, is absolutely in scope.

What is done with that DID Document to get to a non-DID Document resource is a bigger problem that we have not yet figured out and many of the proposed solutions give me considerable pause because of layer violations, such as multiple service endpoints and embedding resources in the DID Document.

IMO, we don't need these features to ship a viable solution for DIDs that enable cryptographic proof of control without relying on a trusted third party.

So, IMO, resolution is in scope for DID-Core, but I'm struggling to see how dereferencing is--AND I see more problems than consensus in the myriad of options currently under discussion.

@msporny msporny force-pushed the jricher-resolution-normative branch from b790d30 to 5c839b1 Compare May 1, 2020 16:51
peacekeeper and others added 2 commits May 14, 2020 16:40
To be consistent with #204

Co-authored-by: Justin Richer <[email protected]>
@peacekeeper
Copy link
Contributor

@jandrieu to follow up on this thread, sorry it took so long to respond

That said, I expect that some way to go from a DID to a particular resource (treating a DID as a URL) is going to be important to too many participants and we should figure that out. I just don't think we've figured it out yet.

I completely agree that we haven't figured out all the details of what a DID URL can potentially dereference to, but I also think that there is overwhelming support for having DID URLs per se (at a minimum, super-simple DID URLs such as did:ex:123#key-1). Therefore, I think it is only logical that we define the dereferencing contract in addition to the resolution contract, would you agree?

However, having said that..

What is done with that DID Document to get to a non-DID Document resource is a bigger problem

I agree with your concerns that we haven't fully understood what types of non-DID document resources a DID URL can potentially dereference to, if any at all. The PR currently says this:

"This content MAY be a DID document, a portion of a, a service endpoint, or some other data. The details of the implementation of this function are outside the scope of this specification"

Is there perhaps some way to rephrase this part to address your concerns? I do think we need to define dereferencing for the reasons stated above, but perhaps we can do that in a way that avoids the "other data" language?

@OR13
Copy link
Contributor

OR13 commented May 26, 2020

I'd rather not be tackling dereferencing and resolution at the same time, I feel like we should focus on PRs not marked as Draft that address DID Resolution first.

@jandrieu
Copy link
Contributor

To my mind, what we absolutely need to specify is the expectation (aka contract) regarding the retreival of a DID Document given a DID. That's resolution.

How one then processes that DID Document further, is, IMO, out of scope. First, because we don't need to solve the DID URL problem to solve the decentralized identifier problem. So let's solve the simple, required use first, then see if there is consensus to build further capabilities.

Second, because dereferencing is still an unsolved puzzle. How do we aggregate DID URLs with service endpoints when both have multiple query and path parts? There is no consensus on this.

Third, all of the dereferencing conversations I've been in to-date have serious privacy implications as they turn DID Ledgers into directories with insufficient controls for privacy and regulatory compliance. I've stated before I believe the directory problem is fundamentally at a different layer than decentralized proof of control over an identifier. And it is this decentralized proof of control that is fundamentally what is new in this work. Directories aren't new and I've heard no concrete proposals about how such directories would handle the range of issues that are particular to their function.

So, strong +1 for leaving de-referencing to a future work item. What we MUST have is resolution. Anything more is not only risky, today we don't have consensus on how to approach it.

@peacekeeper
Copy link
Contributor

@jandrieu

Second, because dereferencing is still an unsolved puzzle.

I would say it's a partially unsolved puzzle. We see a lot of DID URLs such as did:ex:123#keys-1 out there. Resolving the DID, and looking up the public key by fragment, that is dereferencing. So I don't think the simple fact that there are DID URLs that can be dereferenced, or the contract for doing that, should be problematic. But I do agree that certain parts of dereferencing, e.g. when it involves paths or query strings, could be problematic.

Just wanted to make this distinction.

@msporny
Copy link
Member Author

msporny commented May 29, 2020

Closing since the group is now converging on attempting to get PRs #295, #296, #297, #298, #299, and #300 into the spec.

@msporny msporny closed this May 29, 2020
@jricher
Copy link
Contributor

jricher commented May 29, 2020

PRs #295, #296, #297, #298, #300, and #299 do not cover or include this material.

@msporny
Copy link
Member Author

msporny commented Jun 1, 2020

PRs #295, #296, #297, #298, #300, and #299 do not cover or include this material.

Hmm, right... overzealous closing of PRs in an attempt to streamline to yours.

I'm going to leave this closed as your other PR that you have requested be left open has Dereferencing in it, and we don't need two separate PRs (at this point) doing so.

@msporny msporny deleted the jricher-dereferencing-normative branch July 3, 2020 15:49
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.

9 participants