owned this note
owned this note
Published
Linked with GitHub
# conc DID Method Specification
## Author
- Pelle Braendgaard pelle@notabene.id
- Andres Junge andres@notabene.id
## Preface
The conc DID method specification conforms to the requirements specified in the [DID specification](https://w3c-ccg.github.io/did-spec/), currently published by the W3C Credentials Community Group. For more information about DIDs and DID method specifications, please see the [DID Primer](https://github.com/WebOfTrustInfo/rebooting-the-web-of-trust-fall2017/blob/master/topics-and-advance-readings/did-primer.md)
## Abstract
Decentralized Identifiers (DIDs, see [1]) are designed to be compatible with any distributed ledger or network.
There are two types:
* Wallet ID (offchain) using BLS12-381 public key
* Concordium Account (onchain) using ED25519
Accounts can be multisig. Check rpc-call for multisig in WhitePaper
For a reference implementation of this DID method specification see [3].
### Identity Ownership
By default, each identity is controlled by itself. Each identity can only be controlled by a single address at any given time. By default, this is the address of the identity itself.
[WIP]
add multisig support somehow
[/WIP]
## Target System
The target system is the Concordium network where the account is deployed. This could either be:
- Mainnet
- Testnet
## JSON-LD Context Definition
Note, this DID method specification uses a `publicKeyBase64` `ED25519SignatureVerification`
An example of the conc DID-Doc is:
```
{
'@context': 'https://w3id.org/did/v1',
id: 'did:conc:Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI',
publicKey: [{
id: `did:conc:Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI#key1`,
type: 'ED25519SignatureVerification',
owner: 'did:conc:Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI',
publicKeyBase64: 'Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI'
}]
}
```
## DID Method Name
The namestring that shall identify this DID method is: `conc`
A DID that uses this method MUST begin with the following prefix: `did:conc`. Per the DID specification, this string
MUST be in lowercase. The remainder of the DID, after the prefix, is specified below.
## Method Specific Identifier
The method specific identifier is represented as the Hex-encoded Concordium [address??|regid??]
on the target network.
conc-did = "did:conc:" conc-specific-idstring
conc-specific-idstring = [ conc-network ":" ] conc-address
conc-network = "mainnet" / "testnet"
conc-address = ?????? //"0x" 40*HEXDIG
The Concordium address is case-insensitive.
Note, if no public Concordium network was specified, it is assumed that the DID is anchored on the Concordium mainnet per default. This means the following DIDs will resolve to the same DID Document:
did:conc:mainnet:Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI
did:conc:Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI
## CRUD Operation Definitions
### Create (Register)
In order to create a `conc` DID, an Concordium account, with and Identity Object, needs to be generated. At this point, no interaction with the target Concordium network is required. The registration is implicit as it is impossible to brute force an Concordium account, i.e., guessing the private key. The holder of the private key is the entity identified by the DID.
[ADD]: Describe onchain and offchain id..
The minimal DID document for an Concordium account, e.g., `Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI` with ooks like this:
```
{
'@context': 'https://w3id.org/did/v1',
id: 'did:conc:Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI',
publicKey: [{
id: `did:conc:Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI#key1`,
type: 'ED25519SignatureVerification',
owner: 'did:conc:Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI',
publicKeyBase64: 'Md8JiMIwsapml_FtQ2ngnGftNP5UmVCAUuhnLyAsPxI'
}]
}
```
[REVISED TILL HERE]
### Read (Resolve)
## References
**[1]** <https://w3c-ccg.github.io/did-spec/>
**[2]** <https://github.com/ethereum/EIPs/issues/1056>
**[3]** <https://github.com/uport-project/ethr-did-resolver>