Skip to content
This repository has been archived by the owner on Oct 29, 2019. It is now read-only.

Simplify spec by moving to capabilities, proofs, and authn and authz #22

Merged
merged 36 commits into from
Nov 5, 2017
Merged

Simplify spec by moving to capabilities, proofs, and authn and authz #22

merged 36 commits into from
Nov 5, 2017

Conversation

msporny
Copy link
Contributor

@msporny msporny commented Sep 17, 2017

Attempt to simplify the spec by moving to:

  • Authentication and Authorization (vs. Ownership and Control)
  • Proofs (vs. just Keys and Signatures)
  • Decomposing Service Discovery
  • Capabilities-based Security Model

You can view the rendered changes here:

https://msporny.github.io/did-spec/

@ChristopherA
Copy link
Contributor

@msporny Do you have a URL so we can look at your branch directly?

@msporny
Copy link
Contributor Author

msporny commented Sep 17, 2017

@ChristopherA Yes, here it is:

https://msporny.github.io/did-spec/

I also added it to the PR description just now.

index.html Outdated
set of service endpoints, which are resource pointers necessary to
initiate trusted interactions with the identity owner. Each DID uses a
specific DID method, defined in a separate DID method specification, to
resolve to DID Objects — simple JSON documents that
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm a +1 to changing DID Objects to DID Descriptions.

Copy link
Contributor

@dlongley dlongley left a comment

Choose a reason for hiding this comment

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

This is a partial review only -- will check back later when I have more time.

index.html Outdated
initiate trusted interactions with the identity owner. Each DID uses a
specific DID method, defined in a separate DID method specification, to
resolve to DID Objects — simple JSON documents that
contain all the metadata needed to interact with the DID.
Copy link
Contributor

Choose a reason for hiding this comment

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

"Interact with the DID" ... how does one "interact" with the DID? Perhaps this should be "with the entity that the DID identifies."

We often talk about "authenticating as a DID" or "interacting with the DID" as shorthand for "the entity the DID identifies". I know this is verbose, but we shouldn't let the shorthand we use to discuss DIDs leak into this spec because it's inaccurate and confusing to those outside the community that discusses this on a regular basis.

index.html Outdated
resolve to DID Objects — simple JSON documents that
contain all the metadata needed to interact with the DID.
Specifically, a DID Object contains at least three things. The first is
a set of mechanisms that may be used to authenticate as
Copy link
Contributor

Choose a reason for hiding this comment

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

I think we should be careful here to indicate that the DID Description specifies the set of acceptable mechanisms or the verification material (not the mechanisms themselves or the authentication secrets). Also, again, one does not authenticate as a particular DID, they authenticate as the entity the DID identifies. So suggested language:

"The first is the set of acceptable forms of proof that may used to authenticate as the entity identified by a DID."

I'd be happy to see something more concise than that, but that's my best stab at the moment.

index.html Outdated
Specifically, a DID Object contains at least three things. The first is
a set of mechanisms that may be used to authenticate as
as a particular DID (e.g. public keys, pseudonymous biometric templates, etc.).
The second is a set of authorization information that outlines which entities
Copy link
Contributor

Choose a reason for hiding this comment

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

"outlines" => "specifies".

Copy link
Contributor

Choose a reason for hiding this comment

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

Also, I think it is a bit imprecise to say that one "authenticates as a particular DID". One does not assert "I am this DID"--as the current language suggests. Rather, we use a DDO to authenticate as an entity authorized to claim the DID. Or something like that. We are not our DIDs. DIDs are merely tools we use to authenticate as appropriate agents in certain circumstances.

Copy link
Contributor

Choose a reason for hiding this comment

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

@jandrieu -- I agree. I mentioned the same thing in a couple of comments above. It's seeped into our language when talking about this stuff as shorthand, but it shouldn't be in the spec (and it's arguable that we should even be talking that way about it at all).

index.html Outdated
as a particular DID (e.g. public keys, pseudonymous biometric templates, etc.).
The second is a set of authorization information that outlines which entities
may modify the DID Object. The third is a set of service endpoints, which may
be used to initiate trusted interactions with the identity owner. Each DID
Copy link
Contributor

Choose a reason for hiding this comment

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

"with the identity owner" => "with the entity identified by the DID".

index.html Outdated
@@ -174,12 +174,9 @@
Each identity owner can be identified on a ledger with a <a href=
Copy link
Contributor

Choose a reason for hiding this comment

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

"Each identity owner can be identified on a ledger" => "Each entity may authenticate with a"

The entities are identified by DIDs. They may authenticate via keys (or other mechanisms).

Copy link
Contributor

Choose a reason for hiding this comment

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

We should square this language with the more general use of "proofs" perhaps by saying "the simplest authentication mechanism is through the use of a public/private key pair".

index.html Outdated
</td>
<td colspan="1" rowspan="1">
<p>
DID architecture should enable identity owners to control the
Copy link
Contributor

Choose a reason for hiding this comment

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

"identity owners" => "entities"?

index.html Outdated
</td>
<td colspan="1" rowspan="1">
<p>
DID architecture should provide sufficient security for relying
Copy link
Contributor

Choose a reason for hiding this comment

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

The architecture should "provide" this security or "enable" it?

index.html Outdated
<p>
DID architecture should enable an identity owner to provide
cryptographic proof of ownership and proof of access control
rights.
Copy link
Contributor

Choose a reason for hiding this comment

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

Uses old language of "proof of ownership" and "proof of access control". Possibly change to:

"DID architecture should enable an entity to authenticate and obtain authorization to modify DID Descriptions."

Though, are there other capabilities beyond modifying the DID Descriptions -- how do we incorporate that language here?

index.html Outdated
example assumes that the identity owner—the entity that controls the
private keys for this identity—is authoritative for the DDO. See section
2.2 for an example of a DDO created by a guardian. For the authoritative
private keys for this identity—is authoritative for the DID Description. See section
Copy link
Contributor

Choose a reason for hiding this comment

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

"identity" => "entity"

index.html Outdated

<p>
Following is an example of a DDO that describes the DID above. This
Following is an example of a DID Description that describes the DID above. This
example assumes that the identity owner—the entity that controls the
Copy link
Contributor

Choose a reason for hiding this comment

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

Old language here that should probably be removed ("identity owner" and "controls") and just talk about entities, authentication, and authorization.

Copy link
Contributor

@jandrieu jandrieu left a comment

Choose a reason for hiding this comment

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

I'll start with the top level:

The emergence of distributed ledger technology (DLT), sometimes referred to as blockchain technology, provides the opportunity to implement fully decentralized identity management. In this ecosystem, all participants with identities (called identity owners) share a common root of trust in the form of a globally distributed ledger (or a decentralized P2P network that provides similar capabilities).

This sentence captures a broad disconnect I believe we can easily fix.

DIDs do not provide decentralized identity management. They provide decentralized identifier management.

There's a huge difference.

We're generally on the same page about the opportunity for decentralized identity, but DIDs are just the first step and I think we would do better to be strict in our claims.

DIDs do not address attribute management (classic ISO definition of identity), nor do they address attribute derivation, analysis, use, and protection (from the functional definition of identity).

I started adding a bunch of +1 to @dlongley's comments for replacing "identity owner" with "entity" and realized a simpler, but more sweeping change to focus on DIDs as providing a means to prove control of "identifiers" rather than "identities" would greatly improve the entire spec.

@msporny
Copy link
Contributor Author

msporny commented Sep 18, 2017

I started adding a bunch of +1 to @dlongley's comments for replacing "identity owner" with "entity" and realized a simpler, but more sweeping change to focus on DIDs as providing a means to prove control of "identifiers" rather than "identities" would greatly improve the entire spec.

I agree, but expect this change to be controversial. We should probably discuss in another PR. We may want to raise an issue for this... could you please do that, Joe?

@jandrieu
Copy link
Contributor

Done, @msporny . As issue #23.

index.html Outdated
DID record. A DDO may also contain other <a href=
DID Description. A JSON data structure containing metadata
describing a DID, including mechanisms, such as public keys and
pseudonymous biometrics, that an entity can use to authenticate itself as the

Choose a reason for hiding this comment

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

Biometrics on the ledger seems fairly risky. You can't rotate a biometric if leaked. Crypto algorithms have yet to have as long a life as humans so protecting them with crypto does not have a great track record over a long period of time (a person's life).

@kimdhamilton kimdhamilton mentioned this pull request Sep 21, 2017
Copy link
Contributor

@kimdhamilton kimdhamilton left a comment

Choose a reason for hiding this comment

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

+1 on this approach and change. Only a few minor comments added here.

I think this PR addresses the goals we had here -- moving to capabilities, proofs, etc. IMO related concerns raised in the CG could be addressed in subsequent PRs; ie:

  • new name of DDO
  • readability pass

once and never changed (forever). Ideally a DID would be a completely
abstract decentralized identifier (like a UUID) that could be bound to
multiple underlying distributed ledgers or networks over time, thus
maintaining its persistence independent of any particular ledger or
network. However registering the same identifier on multiple ledgers or
networks introduces extremely hard identity ownership and <a href=
networks introduces extremely hard entityship and <a href=
Copy link
Contributor

Choose a reason for hiding this comment

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

is this a find/replace term? replace with "entity ownership"?

index.html Outdated
private keys for this identity—is authoritative for the DDO. See section
2.2 for an example of a DDO created by a guardian. For the authoritative
Following is an example of a DID Description that describes the DID above. This
example assumes that the entity—the entity that controls the
Copy link
Contributor

Choose a reason for hiding this comment

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

minor: "entity—the entity" -> "entity"

index.html Outdated
@@ -2414,12 +2337,12 @@
<p>


Including an equivalence property, such as equivID, in DDOs whose value is an array of DIDs would allow identity owners to assert two or more DIDs that represent the same identity owner. This capability has numerous uses, including supporting migration between ledgers and providing forward compatibility of existing DIDs to future DLTs. In theory, equivalent DIDs should have the same identity rights, allowing
Including an equivalence property, such as equivID, in DID Descriptions whose value is an array of DIDs would allow entitys to assert two or more DIDs that represent the same entity. This capability has numerous uses, including supporting migration between ledgers and providing forward compatibility of existing DIDs to future DLTs. In theory, equivalent DIDs should have the same identity rights, allowing
Copy link
Contributor

Choose a reason for hiding this comment

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

minor: "entitys" -> "entities"

index.html Outdated


The authors of this specification have applied all seven Privacy by Design principles throughout its development. For example, privacy in this specification is preventative not remedial, and privacy is an embedded default. Furthermore, decentralized identity architecture by itself embodies principle #7, "Respect for user privacy—keep it user-centric."


This section lists additional privacy considerations that implementers, guardians, and identity owners should bear in mind.
This section lists additional privacy considerations that implementers, guardians, and entitys should bear in mind.
Copy link
Contributor

Choose a reason for hiding this comment

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

minor: "entitys" -> "entities"

index.html Outdated
identity). A corresponding public key is published in the DDO using a
key description. A DDO may also contain a set of service endpoints for
interacting with the identity owner. Following the dictums of <a href=
decentralized identity management. In this ecosystem, all entities
Copy link
Contributor

Choose a reason for hiding this comment

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

probably a nit, but to me this implies a single ledger: "all entities share a common root of trust in the form of a globally distributed ledger". Maybe replace with "...globally distributed ledgers or decentralized P2P networks..." -- omitting parens around the P2P network part.

@ChristopherA
Copy link
Contributor

When we approve these changes in the CG, can we change the spec version to 1.01 or 1.1?

@msporny
Copy link
Contributor Author

msporny commented Oct 17, 2017

When we approve these changes in the CG, can we change the spec version to 1.01 or 1.1?

No, we can't... a 1.0 release is a W3C REC (if all goes well, that happens in two years time). We could do semantic versioning and back out the version number to 0.x.x, though. We should discuss on the call today. I'll back out the version to 0.7.

@kimdhamilton kimdhamilton mentioned this pull request Oct 20, 2017
"LinkedDataSignature2015": "sec:LinkedDataSignature2015",
"LinkedDataSignature2016": "sec:LinkedDataSignature2016",
"RsaCryptographicKey": "sec:RsaCryptographicKey",
"RsaSignature2015": "sec:RsaSignature2015",

Choose a reason for hiding this comment

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

RSASignature2017 is referenced in index.html section 6.5.1 and doesn't appear in this context.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, we're still finishing up implementations on that spec. We may want to back it out to RsaSignature2015, which does exist.

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 just ended up adding RsaSignature2017 since we know we're implementing it.

Copy link
Contributor

@jandrieu jandrieu left a comment

Choose a reason for hiding this comment

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

LGTM

@kimdhamilton
Copy link
Contributor

kimdhamilton commented Oct 31, 2017

Comments from CCG call:
Ryan Grant: +1 to general direction. May have concerns on URNs; will follow up with details
@ChristopherA: +1 to direction

 * Authentication and Authorization (vs. Ownership and Control)
 * Proofs (vs. just Keys and Signatures)
 * Decomposing Service Discovery
 * Capabilities-based Security Model
@msporny msporny merged commit a811d17 into w3c-ccg:gh-pages Nov 5, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants