Decentralized Identifiers – DIDs
w3c-ccg.github.io
w3c-ccg.github.io
> ActivityPub implementations at the present moment rely on HTTPS as their transport, which in turn relies on two centralized systems: DNS and SSL certificate authorities. Is there any way to bring self-sovereignty to the federated social web?
> Thankfully there is; ActivityPub was written intentionally to be layerable on any protocol that can support HTTP GET and POST verbs. The Decentralized Identifiers specification looks to be a good fit for ActivityPub.
[..]
> Here we see an example of Alyssa's profile that is entirely free of traditional centralized DNS authorities. We were able to look up Alyssa's object via her DID, but we still have access to all her endpoints, which in this case are pointing to Tor Hidden Services. No central DNS required!
[0] https://github.com/WebOfTrustInfo/rebooting-the-web-of-trust...
Personally, I think WebAssembly is going to massively revolutionize app delivery. In ten years we will have all but forgotten about JavaScript, switching instead to client-side apps that run at near binary-native speeds, written in real languages with complete type systems.
It's fairly plausible that the people working on this specification were unaware of this pre-existing acronym (which ranked after Defense In Depth, when I searched it), and just said "Oh, we're making Distributed IDentifiers. Let's call them DIDs! That's easy to remember."
When used in verbal conversation, is it generally spelled out like CPU (dee eye dee), or said as a word like RAM (did)?
And yet ...
...you've got me wanting to pay attention to something; I'm migrating from a public telco/PTSN job to The world of hosted pbx and managed voice in two weeks and I wonder if that linguistic quirk translates between the two types of environment.
Would anyone know how they plan to represent Idemix (or U-Prove) keys and proofs, for example for Hyperledger Indy / Sovrin? There doesn't seem to be anything in the w3id.org JSON-LD schemes, and while wading through the mountains of code of Hyperledger Indy I haven't been able to find any interface to DID documents.
Generally speaking, keys are embedded in a DID document in a standard text format and proofs are published as a signature using one of the published keys.
So let's stick with UUID for now…
So let's stick with horses for now :)
DIDs are different beasts than UUIDs, with different design goals [0]. Is why they need this specification.
Whether the specification is any good, is a topic of discussion, of course..
While it doesn't have all the properties of DIDs, it has the most important ones, and comes with some other nice ones (automatic deduplication).
Disclaimer: I'm working on a project[3] to create a content-addressable version of OWL2 (Web Ontology Language), so I'm certainly a bit biased.
[0]: https://arxiv.org/abs/1407.3561
[1]: https://medium.com/@ConsenSys/an-introduction-to-ipfs-9bba48...
[2]: https://en.wikipedia.org/wiki/Content-addressable_storage#Op...
Content addressable IDs, or CIDs in IPFS are used to identity a document or object.
So the distinction here is objects (some record of data) vs entities (something that can take actions).
> The DID in this instance is the record of verifying who this entity is, and if they should be trusted to do that action.
I don't see why you wouldn't be able to use a CID for that. As long as the content the CID points to contains the record of the entity, and a cryptographic signature, you could do the exact same thing.
This doesn't mean that we cannot use content-addressing. For instance, in IPFS world, the DID could actually be using IPNS to point to a CID. This allows to have a persistent DID pointing to CIDs at different times. There's actually a DID method called IPID (based on IPFS), that uses a strategy similar to this.
As far as I can see, in the end it just comes down to users trusting the same set of registrars — which we already have in the form of Certificate Authorities.
> Because DIDs reside on a distributed ledger, each entity may serve as its own root authority—an architecture referred to as DPKI [0] (decentralized PKI).
There is a whole bunch of related docs in the WebOfTrust github repo's, many of which are related to blockchain (which does not have my interest, ATM).
The spec continues:
> Note that DID methods may also be developed for identifiers registered in federated or centralized identity management systems. For their part, all types of identifier systems may add support for DIDs. This creates an interoperability bridge between the worlds of centralized, federated, and decentralized identifiers.
Then later on there is a chapter on DID Resolvers [1] but this does not have much detail. So, I guess, the actual resolving mechanisms are out of scope of the spec.
[0] https://github.com/WebOfTrustInfo/rebooting-the-web-of-trust...
Some links:
- https://github.com/ipfs/dynamic-data-and-capabilities/issues...
- https://github.com/ipfs-shipyard/peer-star/issues/6
- https://github.com/ipfs-shipyard/peer-star/issues/7
Also, browse around in the repositories and their open issues.
If anyone is really into decentralized identities and authentication, please give it a read. Feedback would be appreciated!
The answer, as you might expect, is with a blockchain.
There was a booth last week at the decentralized web summit for the "BTCR DID Method" which I believe is sponsored by W3C. You can read about it by going here:
https://decentralizedweb.net/science-fair/
Here you are:
"The Bitcoin Reference DID method supports DIDs on the public Bitcoin blockchain The Bitcoin Reference DID method (did:btcr) supports DIDs on the public Bitcoin blockchain. The Bitcoin Reference method has minimal design goals: a DID trust anchor based on the Bitcoin blockchain, updates publicly visible and auditable via Bitcoin transactions, and optionally, additional DID Document information referenced in the transaction OP_RETURN data field. No other Personal Identifiable Information (PII) would be placed on the immutable blockchain.
A secondary intent of the BTCR method is to serve as a very conservative, very secure example and some best practices for creating a DID method. The use cases for BTCR are focused on anonymous and pseudo-anonymous identities, web-of-trust style webs of identity, and absolute mimimal personal information disclosure. Other DID methods will likely need to loosen these standards.
Some aspects of the BTCR method will not be practical if inappropriately scaled — for instance, there is a transaction cost to update keys and DDO object, potential UTXO inflation (i.e. one additional unspent output for every BTCR-based identity), and even if segwit isn't used it could cause blockchain bloat. However, identities using the BTCR method can be a strong as Bitcoin itself -- currently securing billions of dollars of digital value."
What would I put in the Bitcoin blockchain in order to create a DID? A public key hash and what else? In other words, what do I want to tie together with a public key, using the Bitcoin blockchain, in order to use it as an identifier?
But when I read "if value is an object... if value is a string..." (from the specification of publicKey property), I worry. Did the authors choose JSON to take advantage of loose typing as a "feature"? Is it OK for a specification to require this kind of introspection and conditional logic?