## DID Rotation from `did:oyd` to `did:cheqd` ### Summary DID Rotation refers to the process of updating or changing a Decentralized Identifier (DID) while maintaining the continuity and integrity of the digital identity it signifies. This procedure is essential for various reasons, including enhancing security, adhering to emerging standards, or transitioning to a more sophisticated infrastructure. This practice fosters convergence among available DID methods by promoting interoperability and compatibility, making it a common feature in advanced DID methods. Using the [credential service](https://credential-service.cheqd.net/swagger/#/) it was easy to create and update DID documents for `did:cheqd` and manage the lifecycle of digital identities including DID Rotation. ### Overview ```plantuml @startuml hide empty description [*] -right-> v1 state "original\nDID" as v1 v1: version: 1 note top of v1 Step 0: existing DID with method: did:oyd end note v1 -down-> v2 state "new DID" as v2 v2: version: 2 note left of v2 Step 1: create new DID with method: did:cheqd end note v1 -right[dotted]-> v1a v2 -up-> v1a state "updated\noriginal DID" as v1a v1a: version: 1' note top of v1a Step 2: update original DID with alsoKnownAs from new DID v2 end note note right of v1a Step 3: deactivate updated original DID end note v1a -down-> v2a v2 -right[dotted]-> v2a state "updated\nnew DID" as v2a v2a: version: 2' note right of v2a Step 4: update new DID with alsoKnownAs from original DID end note v2a -right-> [*] @enduml ``` #### Links https://cheqd.io/ https://credential-service.cheqd.net/swagger/#/ ### Prerequisites <details><summary>Token to access Cheqd testnet</summary> ```bash= # open ``` </details> <details><summary>Delete previous <code>did:oyd</code></summary> ```bash= oydid delete did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6 \ --doc-pwd doc-cheqd2 --rev-pwd rev-cheqd2 oydid delete did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h \ --doc-pwd doc-cheqd --rev-pwd rev-cheqd ``` </details> ## Step 0: Create original DID DID: [`did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h`](https://dev.uniresolver.io/#did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h) <details><summary>Command line</summary> ```bash= echo '' | oydid create --doc-pwd doc-cheqd --rev-pwd rev-cheqd -z 1 ``` </details> <details><summary>Details</summary> * DID: `did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h` * Doc: ```json {"doc":null,"key":"z6MuxxXDKWcc4QAFNWopmnAKqa1tLwM9tnZ1ZpGXPc1Ca1XM:z6Mv4n4ZhEo1sfSqjduR8YNNP8HwEQguu4fyaYSwhsHECYPF","log":"zQmPKmQaWGjALxspEJNLsjLoRy2oXY6kE5nMTHTohrvrAhe"} ``` * W3C DID Document: ```jsonld= { "@context": [ "https://www.w3.org/ns/did/v1", "https://w3id.org/security/suites/ed25519-2020/v1" ], "id": "did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h", "verificationMethod": [ { "id": "did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h#key-doc", "type": "Ed25519VerificationKey2020", "controller": "did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h", "publicKeyMultibase": "z6MuxxXDKWcc4QAFNWopmnAKqa1tLwM9tnZ1ZpGXPc1Ca1XM" }, { "id": "did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h#key-rev", "type": "Ed25519VerificationKey2020", "controller": "did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h", "publicKeyMultibase": "z6Mv4n4ZhEo1sfSqjduR8YNNP8HwEQguu4fyaYSwhsHECYPF" } ] } ``` * private doc-key: `z1S5YjUL6friSuHE6sDQ91GjrKYoMKhWBTD1R2AjgG8HpJLX` * private rev-key: `z1S5cZrAozgVmetTVXbbG5UGLdAR8NQcNV5sM1orypXPvEKy` * Revocation log entry: ```json {"ts":1,"op":1,"doc":"zQmURi7YkUyjMt9eJyAhsHbJ1Pnh68AF2K1Ec57p2WdTvVv","sig":"z3wG1nGRo7iHKbJQc8dkaNqJ6wDjqk7y5b8MckaAz6DBksLNXinfvUpZWfeT5QzChk1uTMLMwvkiTBwxFttNchb7K"} ``` </details> ## Step 1: Create new `did:cheqd` (for rotation) DID: [`did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008`](https://dev.uniresolver.io/#did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008) <details><summary>Commands</summary> * access via https://credential-service.cheqd.net/swagger/#/DID/post_did_create </details> <details><summary>Details</summary> * DID: `did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008` * W3C DID Document: ```jsonld= { "@context": [ "https://www.w3.org/ns/did/v1", "https://w3id.org/security/suites/ed25519-2018/v1" ], "id": "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008", "controller": [ "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008" ], "verificationMethod": [ { "id": "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008#key-1", "type": "Ed25519VerificationKey2018", "controller": "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008", "publicKeyBase58": "fNBb5bEHLSAoCwTVetMBw6itH6W93xc7fTozsZGSZy2" } ], "authentication": [ "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008#key-1" ] } ``` * private key: `???` </details> ## Step 2: Link `did:cheqd` in `did:oyd` with alsoKnownAs DID: [`did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6`](https://dev.uniresolver.io/#did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6) <details><summary>Command line</summary> * set `DID_OYD` and `DID_CHEQD` from above ```bash= export DID_OYD="did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h" export DID_CHEQD="did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008" echo "{\"alsoKnownAs\": \"$DID_CHEQD\"}" | \ oydid update $DID_OYD -z 2 \ --old-doc-pwd doc-cheqd --doc-pwd doc-cheqd2 \ --old-rev-pwd rev-cheqd --rev-pwd rev-cheqd2 ``` </details> <details><summary>Details</summary> * DID: `did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6` * Doc: ```json {"doc":{"alsoKnownAs":"did:cheqd:testnet:272f4026-5472-4c19-bde2-f2369d09a754"},"key":"z6Mv4QQcJ3SXmj9z7nT2joMF4PmukVKxkkFhRAMFw9okUCUk:z6MutT4oa4QkJ1AfQtg6ReqMjCpZSCtN9FvHUziraVr36zWK","log":"zQmZ2asRtZTVDcxTz6t9jSjMpn1UvbXzZukSri6g2M9vmDk"} ``` * W3C DID Document: ```jsonld= { "@context": [ "https://www.w3.org/ns/did/v1", "https://w3id.org/security/suites/ed25519-2020/v1" ], "id": "did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6", "verificationMethod": [ { "id": "did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6#key-doc", "type": "Ed25519VerificationKey2020", "controller": "did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6", "publicKeyMultibase": "z6Mv4QQcJ3SXmj9z7nT2joMF4PmukVKxkkFhRAMFw9okUCUk" }, { "id": "did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6#key-rev", "type": "Ed25519VerificationKey2020", "controller": "did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6", "publicKeyMultibase": "z6MutT4oa4QkJ1AfQtg6ReqMjCpZSCtN9FvHUziraVr36zWK" } ], "alsoKnownAs": [ "did:oyd:zQmdmiLvtVGHqwE55o6j7iEA8ZTPdRFzs8YZwh4n41tK13h", "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008" ] } ``` * private doc-key: `z1S5TP5UCh5M9V4GPTd8TV3YSeaA9nCJ7JuuVRURzSoEabEc` * private rev-key: `z1S5RKw7cNNkeBV8ts4w9CNaGQPWWiWuJLxzTXmt5AyMsEPi` * Revocation log entry: ```json {"ts":2,"op":1,"doc":"zQmdoxrq3nQaqhJoEMNdHG58E2rnSrrNzzHv8E6iwyqmEYU","sig":"zDZPjkpvJS6oD3cbYax49ptNTj2wRLk2gqs2HVZQGgyySfwEkdGEcnn8et7NakHq9y862B57X7RcCD6HKTzvrs9W"} ``` </details> ## Step 3: Deactivate `did:oyd` DID: [`did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6`](https://dev.uniresolver.io/#did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6) <details><summary>Command line</summary> ```bash= oydid revoke did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6 \ --doc-pwd doc-cheqd2 --rev-pwd rev-cheqd2 ``` </details> ## Step 4: Link `did:oyd` in `did:cheqd` with alsoKnownAs DID: [`did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008`](https://dev.uniresolver.io/#did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008) <details><summary>Commands</summary> * access via https://credential-service.cheqd.net/swagger/#/DID/post_did_create </details> <details><summary>Details</summary> * DID: `did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008` * W3C DID Document: ```jsonld= { "@context": [ "https://www.w3.org/ns/did/v1", "https://w3id.org/security/suites/ed25519-2018/v1" ], "id": "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008", "controller": [ "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008" ], "verificationMethod": [ { "id": "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008#key-1", "type": "Ed25519VerificationKey2018", "controller": "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008", "publicKeyBase58": "fNBb5bEHLSAoCwTVetMBw6itH6W93xc7fTozsZGSZy2" } ], "authentication": [ "did:cheqd:testnet:b7c17158-29f3-4ac8-8298-043617c5e008#key-1" ], "alsoKnownAs": [ "did:oyd:zQmQsWDGHPLfuLfoB2c4prXCV16PYLZQBsjp4iDxr43p7D6" ] } ``` * private key: `???` </details>