This specification defines the DID Identity DID (DID) DID method, did:un-did. that supports DIDs
based on any other DID method including and most especially the did:did: did method.
did:un-did is a DID method that enables using any valid Decentralized Identifier (DID) as a did:un-did DID, but more importantly it un-does the did that did:did did method performs.
Example of use:
did:un-did:did:example:abc123
The namestring that shall identify this DID method is: un-did.
A DID that uses this method MUST begin with the prefix
did:un-did. As per the DID specification, this string MUST be
in lowercase.
The full DID Identity DID scheme is defined by the following ABNF, based on DID Syntax:
did = "did:" un-did
Example DID Identity UN-DID: did:un-did:example:1234.
A DID Identity DID may be created by appending the prefix un-did: to any existing DID including the did:did: method, which undoes the did that the did:did: method attempts to modify.
To resolve a did:un-did DID, the following steps MUST be followed:
controller property set to the unprefixed DID.
{
"@context": ["https://www.w3.org/ns/did/v1"],
"id": "did:un-did:did:example:1234",
"controller": "did:example:1234"
}
As a did:un-did DID is purely generative, there is no Update operation.
As a did:un-did DID is purely generative, there is no Delete operation.
Security considerations for the unprefixed DID method apply to any use of the did:un-did DID method, including regarding forms of attack such as eavesdropping, replay, message insertion, deletion, modification, denial of service, storage or network amplification, and man-in-the-middle.
A full list of requirements for this section may be found at W3C Decentralized Identifiers 7.3
Implementations must take care to avoid unbounded stack growth through repeated prefixing of "did:" in input DIDs. Implementations may set a maximum dID length or "did:" nesting level for this purpose.
If some DID methods have a high resource burden, use of did:un-did with those DID methods inherits that characteristic.
A did:un-did inherits any residual risks associated with its underlying DID.
User and applications should distinguish between a did:un-did and its corresponding unprefixed DID, but understand that the unprefixed DID is the controller of the did:un-didDID.
Unique assignment of DIDs using did:un-did depends on the underlying unprefixed DID methods. Additional did:un-did DIDs may be generated by appending successive "did:" prefixes to a DID.
did:un-did may be used with an existing did:un-did DID, with arbitrary levels of nesting. Each DID document has as its controller the DID obtained by removing a single "did:" prefix, forming a chain back to the non-did:un-did DID. The DID controller relationship is considered to be transitive for this purpose. As you can imaging the nesting could be considered a feature with multiple layers of complexity that only could be considered computationally.
Consider the folling complex Nested Chaining approach
did:un-did:did:un-did:did:example:abc123
This could also be applied to the did:un-did: did method itself
did:un-did:un-did:example:abc123
This approach un-did (un-does) the did that the did:un-did: did method does resulting in the original did:example:abc123 did method did.
did:un-did has no method-specific endpoints.
did:un-did DID documents are resolved deterministically from the DID, and so do not rely on a signature on the document.
did:un-did offers no privacy guarantees other than those of the underlying DID methods.
A full list of requirements for this section may be found at W3C Decentralized Identifiers 7.4
A did:un-did DID is trivially correlated with its underlying DID.
A did:un-did DID supports DID URLs if the underlying DID method does, including use of paths. A DID URL based on a did:un-did may be dereferenced by dereferncing the underlying DID.
The following is an example implementation of did:un-did in the
J programming language to
resolve did:un-did:example:123 to
did:example:123 in O(n) + C runtime where
n is the number of resolutions:
j=: #@[ }. <@[ ;@,. ]
s=: #@[ }.each [ (E. <;.1 ]) ,
':' j 'did' ; (< 'did') (~: # ]) (':' s 'did:un-did:did:example:123')
At this point, DID resolution proceeds as per the DID's method.