- From: Daniel Hardman <daniel.hardman@evernym.com>
- Date: Tue, 15 Jan 2019 11:50:46 -0700
- To: Joe Andrieu <joe@legreq.com>
- Cc: Credentials Community Group <public-credentials@w3.org>
- Message-ID: <CAFBYrUone9rRXp1=2xUk5Y5cWEpXb24RM1=h3suqON6=VeNekQ@mail.gmail.com>
I agree that ownership is not the right mental model. I just wanted to offer a thoughtful post from a lawyer that expands on Joe's reasoning, in case folks are interested: https://medium.com/@hackylawyER/do-we-really-want-to-sell-ourselves-the-risks-of-a-property-law-paradigm-for-data-ownership-b217e42edffa On Tue, Jan 15, 2019 at 11:28 AM Joe Andrieu <joe@legreq.com> wrote: > On Tue, Jan 15, 2019, at 9:25 AM, Michael Herman (Parallelspace) wrote: > > Repeating what I just posted in > https://github.com/w3c-ccg/did-spec/pull/102#issuecomment-454467222 ... > > > > When we consider Things (e.g. cars, pets, houses, business documents, > products, assemblies, parts, etc.) in addition to Actors (e.g. Persons, > Organizations, Software Agents), how does this influence the choice of > Owner vs. Controller? ...Things and ownership is an important scenario that > is not addressed well in the current draft DID spec and the current topic > of Owners and Controllers is very relevant to rectifying this situation. > > > As I mentioned in my last reply (I won't repeat the links or the arguments > there), the spec should not talk about ownership at all, especially not > about proof-of-ownership. > > Ownership is a matter of property and property is a matter of law, and as > such completely out of scope for DIDs. > > I can steal your keys and control your DIDs, but that doesn't mean I own > them. Proof-of-ownership isn't actually proof of ownership. It's a horrible > misnomer. > > The shift to "control" is driven by this simple functional reality: we > *can* demonstrate proof of control via cryptographic (and therefore > computational) methods, but we cannot demonstrate proof of ownership > without either a formal (and accepted) digital title and associated > processes, or involvement of the courts, both of which are not > computationally feasible. > > We accept that proof-of-control of the appropriate keys establishes > control over the DID document. (With the minor caveat that we now use > proofs rather than keys specifically because keys may or may not be > involved, but it is the easiest way to discuss proof-of-control). > > > > > Diagram reference: > https://hyperonomy.com/2019/01/13/hyperledger-indy-sovrin-comprehensive-architecture-reference-model-arm/ > > > > Best regards, > > Michael Herman (Toronto/Calgary/Seattle) > > > > -----Original Message----- > From: Dave Longley <dlongley@digitalbazaar.com> > Sent: December 30, 2018 7:02 PM > To: W3C Credentials Community Group <public-credentials@w3.org> > Subject: DIDs, proof purposes, and verification methods > > > > TL;DR: I think we should: > > > > 1. Rename "cryptographic suites" to "verification methods". > > > > 2. Consider a public key a "verification method" rather than needing to > always wrap them in a "cryptographic suite". > > > > 3. In Linked Data Proofs, replace "creator" with "verificationMethod" > > but support "creator" for backwards compatibility. > > > > 4. Require a "proofPurpose" for every Linked Data Proof (and I recommend > the same for other proof schemes). We should also use its value as a > relation in a DID document to link a DID with an authorized verification > method for a particular proof purpose. > > > > 5. Establish "assertionMethod" as a common proof purpose for proofs that > are used as a method for making an assertion, whether that assertion be in > a VC or via some social media post/message (where Linked Data Signatures > are used in concert with ActivityPub/activity streams posts and messages). > > > > 6. Make the following terms in the DID JSON-LD @context map thusly: > > > > "authentication" => "<vocab>#authenticationMethod" > > "assertionMethod" => "<vocab>#assertionMethod" > > "capabilityInvocation" => "<vocab>#capabilityInvocationMethod" > > "capabilityDelegation" => "<vocab>#capabilityDelegationMethod" > > "contractAgreement" => "<vocab>#contractAgreementMethod" > > > > (Change "xSuite" => "xMethod"). > > > > --- > > > > We've spoken in the community before about "cryptographic suites". This > term, at least within the context of our conversation, was meant to refer > to some collection of parameters used to verify a (cryptographic) proof. > > > > I think this terminology is problematic for a few reasons such as > confusion with existing terms of art and a restriction to cryptographic > proofs when we have also discussed supporting proofs that do not > necessarily require the use of cryptography. Implementation experience both > with DID documents and with digital signature and object capability > libraries has also led me to believe that we should adopt slightly > different terminology. > > > > However, rather than go over all the potential problems, I'd like to just > introduce slightly different terminology that I believe is more accurate > and see if there is buy-in from the community. I believe much of the > narrative I provide below and the new terminology already fits in with > Linked Data Proofs and the DID document model we have. This means that > there would be very few changes needed (summarized above). > > > > So, to lay out the case for the terminology I think we should adopt, I > will mention some of the basic ecosystem requirements we're trying to > fulfill in a decentralized and interoperable manner. Then I'll talk through > a concrete example using that terminology. > > > > We would like to enable entities to: > > > > 1. Make statements that can be shared without loss of trust because their > authorship can be verified by a third party (e.g. VCs, social media posts, > so on). > > > > 2. Authenticate as the controller of some DID to some domain. > > > > 3. Delegate capabilities to others that only they can invoke; delegation > can be verified by another party. > > > > 4. Invoke capabilities where the invocation can be verified by another > party. > > > > 5. Agree to contracts where the agreement can be verified by another party. > > > > There is a common generic thread for each of these requirements: > > Entities need a method by which they can demonstrate a specific intent > that can be independently verified. > > > > I believe this description can be understood as a "proof". I think we can > further unpack this to assign terminology to the attributes of a "proof" > that are necessary to give them utility: > > > > 1. "type": The specific type of proof, for example, an > "Ed25519Signature2018" type indicates that the proof includes a digital > signature produced by an ed25519 cryptographic key (amongst other things). > > > > 2. "proof purpose": The reason why an entity created a proof, i.e. they > were using the proof as a method for declaring what *specific* intent? > > > > 3. "verification method": A set of parameters required to independently > verify the proof. This would include the type of verification method and, > for example, public key material. > > > > 4. "proof value" or other proof-specific attributes: These would include > any attributes that are specific to the type of proof, such as "jws", for a > cryptographic proof that uses the JWS specification. > > > > The necessity of a proof type and value seem relatively straightforward. > > > > A proof that describes its purpose helps prevent it from being misused for > some other purpose. This is something that has been missing from earlier > revisions of Linked Data Signatures that we've started to support -- and I > recommend every Linked Data Proof (and other proof > > methods) has one of these. > > > > A proof that links to its verification method enables discovery of that > method (and its associated parameters) -- but a verifier must be able to > determine that the entity authorized the use of that verification method > for its used purpose. > > > > This last bit means that a verifier must not only confirm that the proof > was created by someone who controls the verification method but that the > verification method was authorized by that controller to be used for the > proof's purpose. This approach has advantages, such as encouraging entities > to separate their verification methods into categories for specific use, > thereby reducing ambient authority. > > > > So, a verification method should indicate who its "controller" is, i.e. > > the entity that controls the method and uses it for some purpose. We > already intend to use this terminology to replace "owner" via a PR here: > > > > https://github.com/w3c-ccg/did-spec/pull/102 > > > > This isn't enough of course, as a verification method description can > declare anything; we also need the description of the "controller" > > itself to declare that the verification method at hand has been authorized > for the intended proof purpose. We have already structured our DID > documents this way -- and that may be more obvious via a concrete example. > > > > Let's use "authentication" as the reason that an entity has created a > proof, i.e. its "proof purpose". In other words: > > > > Suppose an entity "did:example:123" has created a proof for the purpose of > "authentication" that can be verified via the method > > "did:example:123#some-key": > > > > ``` > > { > > /* some document the proof is attached to */ > > ..., > > "proof": { > > "type": "Ed25519Signature2018", > > "verificationMethod": "did:example:123#some-key", > > "proofPurpose": "authentication", > > "jws": "3242343..234234234d3232" > > } > > } > > ``` > > > > Here this "proof" looks just like a typical Linked Data Signature proof, > except that it has a specific "proofPurpose" of "authentication" and that > the field "creator" is replaced with "verificationMethod". I think using > this new terminology instead of "creator" would help alleviate some > confusion. Wrt to Linked Data Signatures, I recommend we always include a > "proofPurpose" and use the "verificationMethod" term going forward (but > support "creator" for backwards compatibility). In any case, a verifier > should dereference the verification method to get its > > description: > > > > ``` > > { > > "id": "did:example:123#some-key", > > "type": "Ed25519VerificationKey2018", > > "controller": "did:example:123", > > "publicKeyBase58": "z2847623...423" > > } > > ``` > > > > Note: We can see from this that an instance of a > "Ed25519VerificationKey2018" (a public key description), is a "verification > method". This eliminates the need for an additional encapsulating > "cryptographic suite" as we have previously discussed. It also allows us to > replace the "cryptographic suite" terminology with "verification method". I > think this terminology is more generic and appropriate for its use. This > approach supports other verification methods such as some sort of biometric > template/parameters or a third party service that must be queried. > > > > From here, a verifier can make sure the verification method is appropriate > for the type of proof and it can verify the digital signature in the proof. > Then it can then dereference the "controller" to find a DID document. > (Note: in the case of DID documents, the common case will be that keys will > be stored in the DID documents themselves, so the "dereferencing" of the > controller may actually be merely a check against the `id` of the DID > document). > > > > Here is an example DID document for the DID "did:example:123": > > > > ``` > > { > > "@context": "https://w3id.org/did/v1", > > "id": "did:example:123", > > "authentication": [{ > > "id": "did:example:123#some-key", > > "type": "Ed25519VerificationKey2018", > > "controller": "did:example:123", > > "publicKeyBase58": "z2847623...423" > > }], > > ... > > } > > ``` > > > > Here we have a relationship between the entity identified by the DID and > the verification method that can be represented as a triple: > > > > <did:example:123> <authentication> <did:example:123#some-key> > > > > This statement is a declaration that the entity uses the public key as an > authentication method. Given that this statement comes from the entity's > description itself, it is an authoritative statement authorizing the use of > that key as a verification method for proofs for the purpose of > authentication. > > > > This ties everything together -- and it works for all of the above more > specific requirements: > > > > A proof created to prove that "entity E asserted something" has a proof > purpose of "assertionMethod" and E's DID document has a relation of > "assertionMethod" with the proof's verification method. > > > > A proof created to prove that "entity E authenticated" has a proof purpose > of "authentication" and E's DID document has a relation of "authentication" > with the proof's verification method. > > > > A proof created to prove that "entity E invoked a capability" has a proof > purpose of "capabilityInvocation" and E's DID document has a relation of > "capabilityInvocation" with the proof's verification method. > > > > A proof created to prove that "entity E delegated a capability" has a > proof purpose of "capabilityDelegation" and E's DID document has a relation > of "capabilityDelegation" with the proof's verification method. > > > > A proof created as a method to prove that "entity E agrees to a contract" > has a proof purpose of "contractAgreement" and E's DID document has a > relation of "contractAgreement" with the proof's verification method. > > > > The changes needed to adopt this new terminology are summarized at the top > of this email. As an open question to the community, what do you think of > this direction? If there are no objections to these changes I would move to > have us make whatever spec and JSON-LD context changes are necessary sooner > rather than later. > > > > > > -- > > Dave Longley > > CTO > > Digital Bazaar, Inc. > > > > > -- > Joe Andrieu, PMP > joe@legreq.com > LEGENDARY REQUIREMENTS > +1(805)705-8651 > Do what matters. > http://legreq.com <http://www.legendaryrequirements.com> > > >
Attachments
- image/jpeg attachment: image003.jpg
Received on Tuesday, 15 January 2019 18:51:22 UTC