- From: =Drummond Reed <drummond.reed@evernym.com>
- Date: Mon, 14 Oct 2019 19:01:15 -0500
- To: ProSapien Sam Smith <sam@prosapien.com>
- Cc: Brent Zundel <brent.zundel@evernym.com>, "W3C Credentials CG (Public List)" <public-credentials@w3.org>, Orie Steele <orie@transmute.industries>, Hardman Daniel <daniel.hardman@evernym.com>
- Message-ID: <CAAjunnZYpExwLJJtMJcu5H7N9ySff8yurXR5PvFpG9vpDhPGQA@mail.gmail.com>
Thanks Sam—you da man. On Mon, Oct 14, 2019 at 4:41 PM ProSapien Sam Smith <sam@prosapien.com> wrote: > I accept Drummond's nomination. > > > On 14 Oct 2019, at 13:16 , =Drummond Reed <drummond.reed@evernym.com> > wrote: > > I nominate Sam Smith if he's willing to open the issue because his answers > on this thread have been spot on. I believe this issue should not only be > in the Security Considerations section of the DID spec, but it's important > enough to have its own subsection. > > =Drummond > > On Mon, Oct 14, 2019 at 10:52 AM Brent Zundel <brent.zundel@evernym.com> > wrote: > >> Sam, >> >> Thank you for your explanation. And thanks to everyone for this >> discussion. As the DID Specification work moves forward, I would like to >> make sure we don't lose track of this concern. >> Would someone be willing to open an issue about it in the working group >> github repo <https://github.com/w3c/did-spec/issues>? That way the DID >> WG can try to address it. >> >> On Thu, Sep 19, 2019 at 12:11 PM ProSapien Sam Smith <sam@prosapien.com> >> wrote: >> >>> >>> Some additional comments: >>> >>> >>> The problem is that the DID Spec in its current form is sufficiently >>> ambiguous that it does not require self-certifiability but implies >>> (dangerously so) that complying with the spec without >>> self-certifiability is sufficient. >>> >>> Proving control of a DID, i.e., the binding between the DID and the DID >>> Document that describes it, requires a two step process: >>> >>> 1. Resolving the DID to a DID Document according to its DID method >>> specification. >>> 2. Verifying that the id property of the resulting DID Document >>> matches the DID that was resolved. >>> >>> >>> >>> This issue came up because the did:peer method was designed to be >>> private and not put on a ledger, however, the current formulation of >>> the did:peer method suffers from the "anyone can ledgerize" vulnerability >>> precisely because it is not self-certifying. So the ambiguity in the spec >>> is a problem. >>> >>> For example Veres one goes beyond the specification by ensuring that a >>> fingerprint of the verifiying key pair is in the DID itself. (ie is >>> self-certifiable) >>> Quoting Dave Longely: >>> "Veres One (v1) protects against this by requiring the DID itself to be >>> derived from key material. A Veres One "nym" (short for cryptonym) DID >>> must be derived from one of the `capabilityInvocation` keys expressed in >>> its associated DID Document. The act of registering the DID requires >>> that the DID Document itself be invoked as a capability >>> ("self-registration"). This invocation can only be performed by whomever >>> controls the private key material associated with a >>> `capabilityInvocation` key, and specifically, the DID itself must have a >>> fingerprint (or full public key material) that matches that key. >>> " >>> >>> A reasonable interpretation of the spec language allows one to NOT >>> include a fingerprint of the public key from the public/private key pair >>> used to sign the did document in the DID itself. >>> Merely that the id property matches the did but the id property could >>> be anything and does not have to be cryptographically linked to the signing >>> key material provided in the did doc . >>> >>> This creates a race condition. As anyone can create key material and >>> register the DID (create method) with a DID resolver. Because DID resolvers >>> are decentralized it is up to the did resolver to decide which DID docs to >>> cache and which to not and if one wants to make sure one's did doc is >>> discoverable one has to register it it widely. So a malicious party could >>> observe the registration of a DID at one resolver change the key material >>> in the did: doc and then register the same did but with different did doc >>> at another resolver. This is just another form of the anyone can >>> ledgerize attack. Its the anyone can spoof a did to a given did resolver. >>> >>> >>> Now one way to stop the spoofing would be to add a ledger as a root of >>> trust in the did method where the DID method requires that in order to >>> CREATE a did at a resolver the resolver must first find the did on the >>> ledger with its did:doc. >>> >>> But now the DID is not portable across ledgers as the root of trust is >>> also the ledger not merely the controller of some private key. >>> >>> Fundamentally the mix of non-self-certifiability and decentralized >>> control is problematic. It is possible to build a did method on other >>> roots of trust besides or in addition to self certifiability but its way >>> more complicated. >>> >>> The main value of a decentralized identifier standard is to enable any >>> entity to assert control over a namespace without dependence on some other >>> entity in an interoperable way. The infrastructure of DIDs DID Documents >>> and DID resolvers is to support than value. But when the infrastructure is >>> also decentralized it becomes problematic when there is not a consistent >>> root of trust over the whole interoperable infrastructure. >>> >>> >>> When the key material used to verify a did doc is not linked to the did >>> itself then anyone can create a did doc for that did and use different key >>> material. That is the problem. When that happens there is no unique >>> controller of the DID unless some other root of trust or authority >>> specified in the DID method is invoked to determine the unique controller. >>> >>> >>> Because DID specification punts the control of DID methods and DID >>> method namespaces to a "market solution" removing self-certifiability opens >>> up another lurking problem. Frankly the market solution may be the >>> best we can do for now. What this means is that DID resolvers get to >>> decide which did methods for which did method names they will support. >>> Different resolvers could decide to support a different method for the same >>> method name given two different entities that wish to control the same >>> method namespace. One hopes that the cost of maintaining a method name >>> space makes method name squatting a rarity. One hopes that resolvers will >>> have reputations that enable users to pick credible resolvers. >>> >>> But realistically :) >>> >>> There is incentive for a malicious entity to confuse the did method and >>> did method name from the standpoint of the user wishing to resolve a did at >>> a given resolver. >>> >>> 1) A malicious attacker could substitute a malicious method into a local >>> resolver. >>> >>> 2) A universal resolver that allows automatic registration of DID >>> methods would be a target for malicious did methods. >>> >>> 3) A business dispute between partners who have created a method >>> namespace where there is no legal basis for who gets to control the method >>> namespace. So the partners each spam new resolvers with a different version >>> of the method. >>> >>> BUT in any case if the DID itself is self-certifying then attacks on >>> methods at resolvers are limited because the user can always independently >>> verify the root of trust in the did doc. Removing that root of trust just >>> opens a can of worms. Putting the root of trust solely in the DID method >>> does not close the can. >>> >>> >>> >>> >>> > > Samuel M. Smith Ph.D. Founder > smith.sam@prosapien.com > ProSapien LLC > 242 East 600 North, Lindon Utah 84042-1662 USA > Office 1.801.768-2769 > Mobile 1.801.592.8230 > Skype: samuelmsmith > http://www.prosapien.com/ > > NOTICE: This electronic mail message, together with any attachments > contains information > that may be copyrighted, confidential, proprietary, and/or legally > privileged of and/or by > ProSapien LLC. This electronic mail message is intended solely for the > use of > the individual or entity originally named as the intended recipient. If > you are not the intended > recipient, and have received this message in error, please return > immediately this message > > > > > > > > > > >
Received on Tuesday, 15 October 2019 00:01:32 UTC