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

Updates re controller property #116

Merged
merged 34 commits into from
Nov 23, 2024
Merged
Changes from 4 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
a9f97a5
revised language describing the controller property
jandrieu Oct 12, 2024
eadc13c
removed extra spaces
jandrieu Oct 12, 2024
44a9c9d
incomplete edits. need to base on new intro opening
jandrieu Oct 12, 2024
76ce24f
revised language describing the controller property
jandrieu Oct 12, 2024
dcfc7ac
removed extra spaces
jandrieu Oct 12, 2024
e92d99e
minor merge edits
jandrieu Oct 31, 2024
7f54c71
clarified controller property language and discussed subject/controll…
jandrieu Oct 31, 2024
909f01d
Apply suggestions from code review
jandrieu Nov 12, 2024
1f32576
Update index.html
jandrieu Nov 12, 2024
7b8b533
Update index.html
jandrieu Nov 12, 2024
b085d30
Update index.html
jandrieu Nov 12, 2024
c02cf58
Update index.html
jandrieu Nov 12, 2024
229d7a1
Update index.html
jandrieu Nov 12, 2024
79227a6
Update index.html
jandrieu Nov 12, 2024
8db5053
Update index.html
jandrieu Nov 12, 2024
bd6dfd1
Update index.html
jandrieu Nov 12, 2024
f8ec6f2
Update index.html
jandrieu Nov 12, 2024
48fa8d4
Update index.html
jandrieu Nov 13, 2024
fb4aa43
Update index.html
jandrieu Nov 13, 2024
3e40b39
Update index.html
jandrieu Nov 13, 2024
9c1e39b
merge from upstream
jandrieu Nov 19, 2024
2d6248f
Added definitions for canonical URL and base identifier.
jandrieu Nov 19, 2024
303da6b
Update index.html
jandrieu Nov 19, 2024
c4338da
Update index.html
jandrieu Nov 20, 2024
124697a
Update index.html
jandrieu Nov 20, 2024
982605e
Update index.html
jandrieu Nov 20, 2024
515631c
Update index.html
jandrieu Nov 20, 2024
ec440ee
Update index.html
jandrieu Nov 22, 2024
17f99f2
Update index.html
jandrieu Nov 22, 2024
13696a2
Update index.html
jandrieu Nov 22, 2024
535f07e
Apply suggestions from code review
jandrieu Nov 23, 2024
7d450be
Update index.html
jandrieu Nov 23, 2024
98f1a59
Update index.html
jandrieu Nov 23, 2024
3e69af1
Update index.html
jandrieu Nov 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
186 changes: 137 additions & 49 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -300,9 +300,9 @@
<body>
<section id='abstract'>
<p>
A [=controller document=] contains cryptographic material and identifies
service endpoints that can be used to verify proofs from, and interact
with, the [=controller=] of an identifier.
A [=controller document=] contains cryptographic material and service
endpoints for the purposes of verifying proofs from, and interacting
with, the controller of an identifier.
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
</p>
</section>

Expand All @@ -319,7 +319,7 @@ <h2>Introduction</h2>
public cryptographic material, such as public keys, for verifying proofs created
by the controller of the identifier for specific purposes, such as
authentication, attestation, key agreement (for encryption), and capability
invocation and delegation. [=Controller documents=] also provide [=services=]
invocation and delegation. [=Controller documents=] also list [=services=]
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
related to the identifier, for example to request additional information for
verification.
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
</p>
Expand All @@ -330,12 +330,21 @@ <h2>Introduction</h2>
controller of an identifier, including material for cryptographic proofs and
service endpoints for additional communications.
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
</p>

<p>
It is expected that other specifications, such as [[[?DID-CORE]]], will profile
A [=controller document=] specifies one or more
[=verification relationships=] and [=services=] for a single,
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
identifier, for which the current controller document is taken as authoritative.
Copy link
Contributor

@wip-abramson wip-abramson Nov 4, 2024

Choose a reason for hiding this comment

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

The end of this sentence does not flow well for me. Perhaps we could reorder.

Suggested change
A [=controller document=] specifies one or more
[=verification relationships=] and [=services=] for a single,
identifier, for which the current controller document is taken as authoritative.
A [=controller document=] is taken as authoritative over a single identifier for which it specifies one or more
[=verification relationships=] and [=service endpoints=].

Copy link
Collaborator

Choose a reason for hiding this comment

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

This is incorrect. It should be zero or more service endpoints.

Copy link
Member

Choose a reason for hiding this comment

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

Lightly tweaking @wip-abramson's suggestion, incorporating @selfissued's comment

Suggested change
A [=controller document=] specifies one or more
[=verification relationships=] and [=services=] for a single,
identifier, for which the current controller document is taken as authoritative.
A [=controller document=] is taken as authoritative over a single identifier
for which it specifies one or more [=verification relationships=] and
zero or more [=service endpoints=].

Copy link
Contributor

Choose a reason for hiding this comment

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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is outdated, but please review to see if the current language works for you @wip-abramson

Every controller document is stored and retrieved according to the URL of the
document, which is also the canonical identifier of the document.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
identifier, for which the current controller document is taken as authoritative.
Every controller document is stored and retrieved according to the URL of the
document, which is also the canonical identifier of the document.
identifier, about which relationships the current controller document is taken
as authoritative. Every controller document is stored and retrieved according to
the URL of the document, which is also the canonical identifier of the document.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It not just the relationships. The entire document is authoritative or not.

</p>
<p>
It is expected that other specifications will profile
the features that are defined in this specification, requiring and/or
recommending the use of some and prohibiting and/or deprecating the use of
others.
others. For example, [[[?DID-CORE]]] is expected to define DID documents as a
profile of controller documents, where the DID is the identifier, DID documents
are controller documents, and resolution is the process of retrieving the
canonical DID document for a DID.
</p>

<section>
Expand Down Expand Up @@ -557,24 +566,66 @@ <h3>Terminology</h3>

<dt><dfn class="export" data-lt="controller(s)|Controllers">controller</dfn></dt>
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
<dd>
An entity that is [=authorized=] to perform an action with a specific resource,
such as update a [=controller document=] or use a cryptographic key to generate
a digital signature.
<p>
An entity that is capable of performing an action with a specific resource,
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
An entity that is capable of performing an action with a specific resource,
An entity that is capable of performing an action with a

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This suggestion would leave a broken sentence.

Can you try a new suggestion that addresses the flow of the remaining sentence?

Copy link
Contributor

Choose a reason for hiding this comment

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

Not sure what happened to my original proposal, but here is the revised one from PR#126

An entity that is [=authorized=] to perform any action on the associated resource such as updating the associated [=controller document=] or updating the associated [=verification method=].

such as updating a [=controller document=] or generating a [=proof=] using a [=verification method=].
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
</p>
</dd>

<dt><dfn class="export">controller document</dfn></dt>
<dd>
A set of data that specifies one or more relationships between a
[=controller=] and a set of data, such as a set of public cryptographic keys.
<p>
A document that contains cryptographic material and service
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
endpoints for the purposes of verifying proofs from, and interacting
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
with, the [=controller=] of an identifier.
</p>
</dd>

<dt><dfn data-lt="subjects">subject</dfn></dt>
<dd>
The entity identified by the `id` property in a [=controller document=].
Anything can be a subject: person, group, organization, physical thing, digital
thing, logical thing, etc.
<p>
An entity that is referred to by the `id` property in a [=controller document=]
when it is used as a subject in other contexts, such as authentication or
attestations, e.g., Verifiable Credentials. Anything can be a subject:
person, group, organization, physical thing, digital thing, logical thing, etc.
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
</p>
<p class="note">
It is expected that the subject referred to by the id of a controller document
be consistent over time, so that a set of credentials with a given identifer as
subject can be taken to be about the same entity. However, it *is* possible to
issue credentials with a subject identifier _without_ the subject even being
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
aware of it.
Copy link
Member

Choose a reason for hiding this comment

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

The latter sentence would fit in one of the following paragraphs, but it doesn't fit here, especially not as a "however" which isn't counter to the preceding sentence. (GitHub still refuses to properly highlight changes, so note the insertion of will and correction of identifer spelling.)

Suggested change
It is expected that the subject referred to by the id of a controller document
be consistent over time, so that a set of credentials with a given identifer as
subject can be taken to be about the same entity. However, it *is* possible to
issue credentials with a subject identifier _without_ the subject even being
aware of it.
It is expected that the subject referred to by the id of a controller document
will be consistent over time, so that a set of credentials with a given identifier
as subject can be taken to be about the same entity.

Copy link
Member

Choose a reason for hiding this comment

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

Note the repeated usage of "However" in the note which does not sound good to my ears...

Copy link
Member

Choose a reason for hiding this comment

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

I am not sure the "however" part should be removed. @TallTed is right that it is not a "however"; I could imagine something like:

subject can be taken to be about the same entity, although it is...


It is expected that credential issuers will ask the subject for identifiers
and that those subjects would demonstrate proof of control before the issuer
issues the credential. However, there are valid cases where issuers will
use identifiers that are not provably under the control of the subject.
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
use identifiers that are not provably under the control of the subject.
use identifiers that are not provably under the control of the subject, for example,
when a parent requests a verifiable credential for their child.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@David-Chadwick Marking this resolved, but please re-review to see if the updated language is good for you.


However, even in cases
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
However, even in cases

where the subject of the ID does prove control, the interpretation of the subject
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
where the subject of the ID does prove control, the interpretation of the subject

remains contextual and potentially ambiguous.
Copy link
Member

Choose a reason for hiding this comment

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

To my eyes, this does not increase clarity, and probably increases unclarity for new readers, about subjects vs. controllers, and how subjects and controllers are connected to DIDs, DID documents, controllers, controller documents, subjects, etc.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We need to stem the bleeding somehow.

@David-Chadwick Has been wrestling with this issue from the very beginning and he's not the only one.

In centralized systems people believe they can trust identifiers because there is some authority you can appeal to. But in a decentralized system, developers need to understand they don't have an authority to bail them out. What we do have have is cryptography and time. From that, we can build a usable intersubjectivity.

The other alternative would be to get rid of Controller documents altogether an return them to their decentralized form where these notions are primary and understandable. There's no reason the VCDM can't reference the W3C published standard.

Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
It is expected that credential issuers will ask the subject for identifiers
and that those subjects would demonstrate proof of control before the issuer
issues the credential. However, there are valid cases where issuers will
use identifiers that are not provably under the control of the subject.
However, even in cases
where the subject of the ID does prove control, the interpretation of the subject
remains contextual and potentially ambiguous.
It is expected that credential issuers will ask the controller for identifiers
and that those controllers would demonstrate proof of control before the issuer
issues the credential. However, there are valid cases where issuers will
use identifiers that are not provably under the control of the controller.
However, even in cases
where the controller of the ID does prove control, the interpretation of the subject
remains contextual and potentially ambiguous.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

In this case, the operative issue is the 'subject' proving control. Not the controller.

The controller, by definition, is someone who can prove control.

The problem is that DIDs can be used as subjects without the controller being involved at all.

So, the expectation is that issues will ask the subject to prove control. They may not. For good reasons or bad.

But only if the subject does prove control do we have any reason to expect the controller == subject.

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
remains contextual and potentially ambiguous.


For example, the White House might issue a credential about the president of the United States
using did:example:abc as a subject identifier, saying in effect "The President
likes fried chicken." Then, the US National Parks Service might issue their own
credential about the president, using the same identifier, saying "The President authorizes
the creation of new National Parks."
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
jandrieu marked this conversation as resolved.
Show resolved Hide resolved

However, the White House meant "President Joe Biden", who is a physical person who
happened to be in office at the time the credential was issued. In contrast,
the park service meant "the current president, aka POTUS, whoever he is"; this second VC is not
about the Joe Biden as a human individual, it's about the role of President of
Copy link
Member

Choose a reason for hiding this comment

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

Do we want to explicitly refer to Joe Biden under the current circumstances? Just saying... 😉

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, I'm open to a different story. Maybe a "spouse of Kelly Smith" could work.

Copy link
Contributor

Choose a reason for hiding this comment

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

I suggest we remove this example because it does not clarify anything.

Copy link
Member

Choose a reason for hiding this comment

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

Agreed, this amount of exposition belongs in a Security Considerations section, not in a terminology section. The terminology definitions are, ideally, 1-3 sentences at most.

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'll move it to security considerations

Copy link
Contributor Author

@jandrieu jandrieu Nov 19, 2024

Choose a reason for hiding this comment

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

Moved and restated to refer to a teacher in an ambiguous manner.

the United States.
Copy link
Member

Choose a reason for hiding this comment

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

This is problematic. URLs are specified as always denoting the same entity. DIDs are URLs. did:example:abc should be described as either "President Joe Biden" or "the current POTUS".

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is a problem with RDF, not with the example.

Copy link
Member

Choose a reason for hiding this comment

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

I encourage you to log your issue with RDF soon, such that it might be taken up, or at least noted, by the currently active RDF-star WG.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

RDF knows about this issue. It is called HttpRange14.

As long as RDF retains a global context for all identifiers such that any use of that identifier necessarily refers to a subject other than the identifier itself, then it is impossible, within RDF to have a statement about the identifier using that identifier.

In the real world, we clarify by context which usage is appropriate. In one context we understand that we are making statements about the subject referred to by an identifier, in others, we understand we are talking about the identifier itself. RDF's treatment of identifiers makes this problematic.


In natural language, these ambiguities are often easily ignored or corrected. In
digital media, it's vital that context be evaluated to establish the intended
referent, especially when identifiers are used in different
contexts by different issuers.
</p>
jandrieu marked this conversation as resolved.
Show resolved Hide resolved

</dd>


<dt><dfn class="export">verification method</dfn></dt>
<dd>
<p>
Expand All @@ -596,7 +647,7 @@ <h3>Terminology</h3>
<dt><dfn class="export">verification relationship</dfn></dt>
<dd>
<p>
An expression of the relationship between a [=subject=] and a
An expression of the relationship between a [=identifier=] and a
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
[=verification method=]. One example of a verification relationship is
[[[#authentication]]].
</p>
Expand All @@ -611,9 +662,9 @@ <h3>Terminology</h3>
<h3>Data Model</h3>

<p>
A [=controller document=] is a set of data that specifies one or more
relationships between a [=controller=] and a set of data, such as a set of
public cryptographic keys. The [=controller document=] SHOULD
A [=controller document=] specifies one or more relationships between
an [=identifier=] and a set of verification methods and service
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
endpoints. The [=controller document=] SHOULD
contain [=verification relationships=] that explicitly permit the use of
certain [=verification methods=] for specific purposes.
</p>
Expand Down Expand Up @@ -828,33 +879,66 @@ <h3>Subjects</h3>
<h3>Controllers</h3>

<p>
A [=controller=] is an entity that is authorized to make changes to a
[=controller document=].
A [=controller=] is any entity capable of making changes to a
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
[=controller document=]. Whoever can update
the content of the resource returned from dereferencing the controller
document's canonical URL is, by definition, a controller of the
document and its canonical identifier. Proofs that satisfy a
Copy link
Member

Choose a reason for hiding this comment

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

I have a problem with the controller being able to change the canonical identifier. Strictly speaking, changing the canonical identifier means changing the document altogether; put it another way, it means the creation of a new controller document. I would prefer to remove the reference to the identifier, it is not necessary here imho.

Suggested change
document and its canonical identifier. Proofs that satisfy a
document. Proofs that satisfy a

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That language doesn't say you can change a canonical identifier.

It says you establish control of the identifier by creating proofs.

Whoever can update
the content of the resource returned from dereferencing the controller
document's canonical URL is, by definition, a controller of the
document and its canonical identifier.

This is correct. If you can update the content of the canonical resource, you are a controller of the document's canonical identifier.

Copy link
Member

Choose a reason for hiding this comment

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

Well, again from my RDF-tainted view, I am not sure what it means to "control the identifier". Control means an ability to change; but changing the identifier means, strictly speaking, to replace the document because a document and its identifier are intimately bound. (An RDF Resource is specified by its URL. Changing a URL means to introduce a different resource.)

But I acknowledge that this is very much an RDF view of things, so I won't lie down the road over this.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@iherman

am not sure what it means to "control the identifier"

Yes. This update is describing that it means to control the identifier.

controller document's verification methods are taken as cryptographic
assurance that the controller of the identifier created those proofs.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
assurance that the controller of the identifier created those proofs.
assurance that the controller of the document created those proofs.

Strictly speaking, I believe that the controller controls the document and not necessarily the identifier. As an analogy, I may have the right to modify a google document, but I do not control its identifier (which is provided by the google doc system itself.)

Copy link
Contributor Author

@jandrieu jandrieu Nov 12, 2024

Choose a reason for hiding this comment

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

From the new abstract:

A controller document contains cryptographic material and identifies service endpoints that can be used to verify proofs from, and interact with, the controller of an identifier.

The point is to demonstrate proof of control of the identifier.

Changing the controller document is simply the most fundamental way to do that. You can also use verification methods. Control of the document lets us deduce control of the identifier. That's the magic. Simply changing a resource is as old as the web. Proving control over an identifier is what DIDs (and now controlled/controllable identifiers) add to the game.

jandrieu marked this conversation as resolved.
Show resolved Hide resolved
</p>
<p class="note" title="Identifier Controller v Document Controller">
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Member

Choose a reason for hiding this comment

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

Ah. I just realize that there is a whole note about document vs. identifier control. See may comment above: I am not sure if I agree with all this; in my view, the controller controls the document, the identifier may be provided by storage system and may not be under the control of the controller.

My proposal would be to remove that note altogether, and not touch the subject of the identifier control.

(From RDF point of view, which is underlying this model, the two resources that have two different URL-s are strictly different resources. The @id property of JSON-LD looks like a property like any other, but it is not: it is the way to "create" a resource with that given identifier.)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ah. I just realize that there is a whole note about document vs. identifier control. See may comment above: I am not sure if I agree with all this; in my view, the controller controls the document, the identifier may be provided by storage system and may not be under the control of the controller.

This is the reason controller documents for non-DIDs is an exercise is rounding a square peg. IMO, the controller document loses so much of the cryptographic properties of good DID methods as to be practically useless. HOWEVER, it was in the interest of the "big tent" that we are attempting to cut out everything from DID Documents that makes them DIDly, yet somehow keep their value for non-DID URLs. But that just leaves you with the exact uncertainty that you raise: the resolving identifier of a non-DID URL has no guarantees to be related to the content of the controller document.

And yet, here we are.

My proposal would be to remove that note altogether, and not touch the subject of the identifier control.

My proposal would be to revert the VC Data Model to use the DID document specification instead of trying to force an innovation designed for decentralized systems to also make sense when used without the decentralizing part.

(From RDF point of view, which is underlying this model, the two resources that have two different URL-s are strictly different resources. The @id property of JSON-LD looks like a property like any other, but it is not: it is the way to "create" a resource with that given identifier.)

Sure, but that is exactly the root problem here. RDF does not allow you to make statements about identifiers, but that is precisely what we are doing with controller documents. My proposal would be to treat the controller document as JSON and define the properties to more clearly describe aspects of the identifier itself rather than imagining somehow that the subject is somehow involved. Instead, we'll probably continue to bump into the HttpRange14 error of thinking RDF is a coherent semantic space, with a weird caveat of "except for identifiers".

The controller of the controller document is taken to be the
controller of the document's canonical identifier, also known as its
URL. That is, whoever can update the controller document is both
the document controller and the identifier controller. Updating the
document is how you control the identifier. These terms can be used
interchangeably. Controlling the canonical controller document for
an identifier is the same as controlling the identifier.
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
</p>

<dl>
<dt>controller</dt>
Copy link
Member

Choose a reason for hiding this comment

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

-1 to document controller.

<dd>
The `controller` property is OPTIONAL. If present, its value MUST be a
The `controller` property is OPTIONAL. If it is possible to represent
Copy link
Member

@msporny msporny Nov 16, 2024

Choose a reason for hiding this comment

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

-1 to this change, it creates backwards-breaking changes that makes this document incompatible with DID Core and will make it impossible for DID Core to build on top of this specification (forced class 4 changes in DID WG, which is not authorized to make class 4 changes).

the legitimate controllers of the document as URLs, the document SHOULD
list URLs identifying those controllers.

<p class="note" title="Presumed Control">
It is possible to list a verification method which is
functionally under the control of someone other than the controller
of the controller document. For example, a document controller could
set a public key under another party's control as an authentication
verification method. This would enable the other party to authenticate
on behalf of this identifier (because their public key is listed in
an authentication verification method) WITHOUT enabling that party
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
to update the controller document. However, since the document
controller explicitly listed that key for authentication, the
proof in question is taken as created by the document controller, as
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
proof in question is taken as created by the document controller, as
proof in question is assumed to be created by the document controller, as

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is not an assumption. It is a constructive formulation. The proof is, by definition, created by the document controller (through the verification method specified by the controller).

it was created by their explicit assignee. This is especially useful
when the "other party" is a device under the control of the document
controller, but with a distinct cryptographic authority, i.e., it
has its own keystore and can generate proofs. That pattern enables
different devices, each using their own cryptographic material, to
generate verifiable proofs that are taken as proofs created by
controller of the identifier.
</p>
If present, its value MUST be a
<a data-cite="INFRA#string">string</a> or a
<a data-cite="INFRA#ordered-set">set</a> of
<a data-cite="INFRA#string">strings</a>, each of which conforms to the rules
in the [[[URL]]]. The corresponding [=controller document=](s) SHOULD contain
[=verification relationships=] that explicitly permit the use of certain
[=verification methods=] for specific purposes. If the `controller` property is
not present, the value expressed by the `id` property MUST be treated as if it
were also set as the value of the `controller` property.
<a data-cite="INFRA#string">strings</a>,
each of which conforms to the rules in the [[[URL]]].

Each entry in the 'controller property' MUST identify
at least one entity capable of updating the canonical version
of the [=controller document=] which contains the property, such
that subsequent requests for this controller document, from its
canonical location, contain the latest version.
jandrieu marked this conversation as resolved.
Show resolved Hide resolved

If the `controller` property is not present, then control of the document
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Member

Choose a reason for hiding this comment

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

is determined entirely by its storage location.
</dd>
</dl>

<p>
When a `controller` property is present in a [=controller document=], its value
expresses one or more identifiers. Any [=verification methods=] contained in the
[=controller documents=] for those identifiers SHOULD be accepted as
authoritative, such that proofs that satisfy those [=verification methods=] are
considered equivalent to proofs provided by the [=subject=].
</p>

<pre class="example nohighlight"
title="Controller document with a controller property">
{
Expand All @@ -868,7 +952,7 @@ <h3>Controllers</h3>
While the identifier used for a [=controller=] is unambiguous, this does not
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
imply that a single entity is always the controller, nor that a controller
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
only has a single identifier. A [=controller=] might be a single entity, or a
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
collection of entities, such as a corporation. A [=controller=] might also use
collection of entities, such as a partnership. A [=controller=] might also use
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
multiple identifiers to refer to itself, for purposes such as privacy or
delineating operational boundaries within an organization. Similarly, a
[=controller=] might control many [=verification methods=]. For these reasons,
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
Expand All @@ -879,7 +963,7 @@ <h3>Controllers</h3>
<p class="note" title="Authentication versus Authorization">
Note that the definition of [=authentication=] is different from the definition
of [=authorization=]. Generally speaking, [=authentication=] answers the
question of "Who is this?" while [=authorization=] answers the question of "Are
question of "Do we know who this is?" while [=authorization=] answers the question of "Are
they allowed to perform this action?". The `authentication` property in this
Comment on lines +976 to 977
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
question of "Do we know who this is?" while [=authorization=] answers the question of "Are
they allowed to perform this action?". The `authentication` property in this
question of "Do we know who this is?" while [=authorization=] answers the question of "Do we know whether
they are allowed to perform this action?". The `authentication` property in this

Copy link
Contributor Author

Choose a reason for hiding this comment

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

In this case, I don't think the question is "do we know" but rather "are they ACTUALLY allowed".

To wit: the verifier may not know before doing the analysis, especially in cases of object capabilities and bearer tokens.

So, it isn't "answers the question of 'Do we know...?'" but rather "answers the question of 'can we determine if they are allowed'", which to me is just a wordier way to say "answers the question of 'are they allowed...?'"

Copy link
Member

Choose a reason for hiding this comment

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

The question of "are they ACTUALLY allowed" cannot be answered, unless we have some affirmative (or negative) statement to that effect. If we have no specific statement, then the Open World assumption means we can only say, "we don't know".

specification is used to, unsurprisingly, perform [=authentication=] while the
other [=verification relationships=] such as `capabilityDelegation` and
Expand Down Expand Up @@ -944,8 +1028,9 @@ <h2>Services</h2>

<p>
[=Services=] are used in [=controller documents=] to express ways of
communicating with the [=subject=] or associated entities. A [=service=] can be
any type of service the [=subject=] wants to advertise for further discovery,
communicating with the [=controller=], or associated entities, in relation to
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
the controlled identifier. A [=service=] can be
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
any type of service the [=controller=] wants to advertise for further discovery,
authentication, authorization, or interaction.
</p>

Expand Down Expand Up @@ -1145,9 +1230,15 @@ <h2>Verification Methods</h2>
The `controller` property is used by [=controller documents=], as described in
Section [[[#controller-documents]]], and by [=verification methods=], as
described in Section [[[#verification-methods]]]. When it is used in either
place, its purpose is the same; that is, it expresses one or more entities that
are authorized to perform certain actions associated with the resource with
which it is associated. To ensure explicit security guarantees, the
place, its purpose is essentially the same; that is, it expresses one or more
entities that are authorized to perform certain actions associated with the
resource with which it is associated.

In the case of the controller of a controller document, the controller can
update the content of the document. In the case of the controller of a
verification method, the controller can generate proofs that satisfy the method.
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
jandrieu marked this conversation as resolved.
Show resolved Hide resolved

jandrieu marked this conversation as resolved.
Show resolved Hide resolved
To ensure explicit security guarantees, the
[=controller=] of a [=verification method=] cannot be inferred from the
[=controller document=]. It is necessary to explicitly express the identifier of
the controller of the key because the value of `controller` for a [=verification
Expand Down Expand Up @@ -1680,11 +1771,8 @@ <h2>Authentication</h2>
<p>
Note that the [=verification method=] indicated by the
`authentication` property of a [=controller document=] can
only be used to [=authenticate=] the [=controller=]. To
[=authenticate=] a different [=controller=], the entity associated with
the value of `controller` needs to [=authenticate=] with its
<em>own</em> [=controller document=] and associated
`authentication` [=verification relationship=].
only be used to [=authenticate=] interactive sessions on behalf
of the controller document's base identifier.
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
jandrieu marked this conversation as resolved.
Show resolved Hide resolved
</p>
</section>

Expand Down