Korea Mobile Identity System is a decentralized network system for Self-Sovereign Identity and Verifiable Credential. The system is operated by the Korean government(Ministry of the Interior and Safety, Korea) It can replace a legacy centralized credential id system with a trusted blockchain node.
In the Korea Mobile Identity System , the government employee ID cards will be issued by default and various types of identification cards are issued depending on future use. Decentralized Identifiers (DIDs) are used as unique identifiers for identification cards. DIDs can also obtain public key information for secure information exchange between users.
This is a draft document and will be updated.
The name string that identifies this DID method is: kr
ALPHA and DIGIT used in “kr-identifier" are the definition of Core Rules in [RFC5234].
kr-did = "did:kr:" kr-identifier
kr-identifier = ALPHA / DIGIT
example did of Korea Mobile Identity System
did:kr:4EFNaYeA9hDp6F55JAB38EFtNcYEbbM9nwKr
did:kr:gov:4EFNaYeA9hDp6F55JAB38EFtNcYEbbM9nwKr
{
"id": "did:kr:7V2FnzCykod7aK9eMBEtKEdyfxSwn",
"publicKey": [
{
"id": "did:kr:7V2FnzCykod7aK9eMBEtKEdyfxSwn #keys-1",
"type":"Secp256k1VerificationKey2018"
"publicKeyBase58":"24BdVKTgyFiobS8DwFuXvc3TMW7q25WqTS7mGCCtsp9Qt",
},
{
"id": "did:kr:7V2FnzCykod7aK9eMBEtKEdyfxSwn#keys-2",
"type":"Secp256k1VerificationKey2018"
"publicKeyBase58":"24BdVKTgyFiobS8DwFuXvc3TMW7q25WqTS7mGCCtsp9Qt",
}
],
"authentication": [
{
"publicKey": "did:kr:7V2FnzCykod7aK9eMBEtKEdyfxSwn#keys-1"
}
]
}
}
did (CRUD) operations are provided in the RESTful API format. DID documents are generated in the blockchain by smart contract code. It checks the authority and performs signature verification within the smart contract. To prevent replay attacks, all signatures require a nonce.
Two types of authoring are supported. You can request a DID generation through simple input data and signature values. The other is to create and send the entire DID Doucument directly. SmartContract returns true if it has not been issued to a block chain and if the signature verification succeeds.
endpoint : domain/bcapi/v1/did/reg
Input : {did publickey, signature}
Output : {result}
To create a simple type of document, the input value must be as following. It will return "true" if successfully created.
example input data
endpoint : /did_create
input : {did_document}
output : {result}
To create a full type of document, the input value must be as following. The input has full docuemnt of did with signature. It returns "true", if successfully created.
endport : /did_create
input : {did_document}
output : {result}
To read did document for some did, the input value must be as following. It returns a did document for that, if it is found.
endpoint : domain/bcapi/v1/did/find
input : { did }
output : { did_document }
example input data
{
"id": "did:kr:7V2FnzCykod7aK9eMBEtKEdyfxSwn"
}
{
"id": "did:kr:7V2FnzCykod7aK9eMBEtKEdyfxSwn",
"publicKey": [
{
"id": "did:kr:7V2FnzCykod7aK9eMBEtKEdyfxSwn #keys-1",
"type":"Secp256k1VerificationKey2018"
"publicKeyBase58":"24BdVKTgyFiobS8DwFuXvc3TMW7q25WqTS7mGCCtsp9Qt",
},
{
"id": "did:kr:7V2FnzCykod7aK9eMBEtKEdyfxSwn#keys-2",
"type":"Secp256k1VerificationKey2018"
"publicKeyBase58":"24BdVKTgyFiobS8DwFuXvc3TMW7q25WqTS7mGCCtsp9Qt",
}
],
"authentication": [
{
"publicKey": "did:kr:7V2FnzCykod7aK9eMBEtKEdyfxSwn#keys-1"
}
]
}
}
To update did_document, the input value must be as following. The input has a new document with a signature including a nonce. It returns updated a did document, if successfully updated.
endpoint : domain/bcapi/v1/did/update
input : did_document (included proof)
output : did_document
To delete did_document, the input value must be: The input has a signature containing a nonce. After verifying the proof of the delete operation with the public key in the blockchain, did_document with the public key is deleted from the blockchain and is no longer available. And you cannot cancel this operation. It returns "true" if successfully delete.
endpoint : domain/bcapi/v1/did/revoke
input : did with proof
output : result
To prevent a replay attack a did proof has to have nonce value. In decentralized network or smart contract code could not generate a reliable random number. (oracle problem) To solve this issue, we store the nonce value that was used and check if the value already used .
The DID owner generates a proof (digital signature) with the private key and verifies the signature with the public key paired with the private key in the blockchain.
Korea Mobile Identity System provides traffic security using TLS protocols.
Korea Mobile Identity System stores only the following data in the blockchain: • DID documents containing public keys • Signing value used to verify evidence of a verifiable claim
For the security of blockchain nodes, Korea Mobile Identity System uses signature-based Delegated Proof of Stake consensus algorithms and BFTs (2/3).
Korea Mobile Identity System blockchain and DID documents do not contain Personally-Identifiable Information (PII).
Currently, Korea Mobile Identity System stores only the following data in the blockchain:
• DID documents containing public keys
• Information that include VC schema and revocation to verify the verifiable credential
[1]. W3C Decentralized Identifiers (DIDs) v1.0,https://w3c.github.io/did-core/