2020-11-17 Indy DID Method Specification Call
Summary
- Next steps on the <network> element of the DID
- Third (or more) level names
- How to find the nodes of the ledger given a DID with a <network>
- Ramifications of finding previous versions of a DID by version-id or version-time
Recording from the call: 20201117 Indy DID Method Spec Call Recording
Hyperledger is committed to creating a safe and welcoming community for all. For more information please visit the Hyperledger Code of Conduct.
Welcome and Introductions
Announcements
- TBD
Attendees
Collaboration Channels
- Current hackmd document
- indy-did-method on RocketChat - https://chat.hyperledger.org/channel/indy-did-method
- indy-did-method repo
Previous Discussion:
The <network> element of the DID – did:indy:<network>:<id> will be an arbitrary string (see meeting notes from last meeting).
Approach Discoverability Decentralized
Naming(Limited)
VerifiabilityHuman Friendly Conciseness Dependencies Hash of Domain Genesis FileNoYesYesNoYesRegistry or ConfigDomain NameYesYesNoYesNoDNSArbitrary Name No No
(collision risk)No Yes Maybe Registry or Config Hash and Domain NameAlias, as in TrustBlocYes and NoYesYesYes and NoYes and NoDNS and ConfigArbitrary Name + HashNoYesYesYesNoRegistry or Config
The in-call discussion about the proposals:
- Eliminated the DNS-based one as not desirable because of dependency on DNS
- Eliminated the hash and DNS-based alias because of the complexity in using the two names for the identifier in signing scenarios, and the use of DNS.
- Eliminated the hash only approach because of the lack of benefit of doing the hash vs. the downsides
- The verifiability in using the hash is lost by using just 5 characters, but using a sufficient number makes the identifier too long
- Micha generated a new Sovrin genesis file with a matching hash by varying only the alias name of one of the nodes in 30 minutes
- Since we assume there will be in the low thousands of networks at the outside, the decentralization inherent in using the hash is not crucial
- The verifiability in using the hash is lost by using just 5 characters, but using a sufficient number makes the identifier too long
- Eliminated the hash + arbitrary name because the hash is not providing additional value.
- Leaving "Arbitrary Name" as the selected solution.
Online Discussion (from RocketChat this week)
Discussion:
- Action: Add to the spec that only self-certifying DIDs will be permitted, and must be enforced – not enforced on Indy today.
- Third level names for subsidiary ledgers – e.g. Sovrin Staging and Sovrin Builder net?
- We should use ":", but that creates lots of colons. So example is did:indy:sovrin:staging:<namespace-specific-id>
- We SHOULD NOT allow subnamespaces other than by the top namespace "owner"
- Perhaps other rules?
- Andrew Whitehead
mentioned in chat that "." is a valid character per the DID Spec. What about that?did = "did:" method-name ":" method-specific-id method-name = 1*method-char method-char = %x61-7A / DIGIT method-specific-id = *( *idchar ":" ) 1*idchar idchar = ALPHA / DIGIT / "." / "-" / "_"
- KERI: <namespace-specific-id> MAY have a "keri:" prefix for a future way of hosting a KERI identifier, example: did:indy:sovrin:staging:keri:<keri_id>
- We should use ":", but that creates lots of colons. So example is did:indy:sovrin:staging:<namespace-specific-id>
- How to find the nodes of the network once the ledger is known? Perhaps this sequence, but how do we want to represent that in the DID Method Spec. Tentative idea – formally include at least the first, consider adding the second as well, and include informative text on the potential ways to go in the future.
- Config files,
- "human" gossiped names stored on the ledger - Daniel to produce a deck to explore the idea from nothing to networks
- Key pair - DID for the Indy DID Method for your network - "networks" - resolve the DID and you get the cross-registered list
- Extend to have the Trustee or Stewards DIDs be the ones to use for the "networks" elements of DIDDocs
- Must have a single hardcoded config file or way to resolve one DID (could use the universal resolver)
- Key pair - DID for the Indy DID Method for your network - "networks" - resolve the DID and you get the cross-registered list
- decentralized registries
- Use of verifiable credentials - how can we use this to build this?
- protocol for cross-registration – how do you do this?
- How to find previous versions of DIDs and what are the implementation ramifications of that?
- <did>?version-id=<txnid>
- <did>?version-time=<timestamp>