w3c-ccg / vc-ed

Verifiable Credentials for Education Task Force

Home Page:https://w3c-ccg.github.io/vc-ed/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Endorsement Credentials

longpd opened this issue · comments

A credential either issued by an institution or self-issued makes an assertion about the subjects knowledge, skills or abilities. The subject wishes to have a third-party corroborate this credential to give greater credibility. The subject asks a selected third-party to "endorse" their credential, confirming the claims in the credential and add additional supporting information about it.

For the purposes of the VC-EDU a practical use case is in the context of an endorser creating an endorsement single assertion VC that is cryptographically linked to a independently issued VC held by a holder. Here a hash-llinked approach to connect the two independent VCs is necessary to connect the two in a tamper evident way.


Use Cases

  1. Self-Issued Credential + Third-party Endorsement
  2. Classic Organization-issued Credential + Third-party Endorsement

The above use cases are actually equivalent, differing only in the original issuer.

Verifiable Endorsement Distinguishing Characteristics

VCs by themselves are not sufficient to serve the endorsement use case - the Resource Anchoring and Hashlink mechanism is required.
So, the concept of endorsements involves a collection of Verifiable Credentials (and non-VC objects such as PDFs, images, videos and so on) linked together by digestMultibase style hashlinks.

(See issue w3c/vc-data-model#831 for more details on the anchoring and linking mechanism.)

Data Model Examples

Example Self-issued Credential (in OpenBadges v3 form):

{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/openbadges/v3"
  ],
  "type": [
    "VerifiableCredential",
    "OpenBadgeCredential"
  ],
  "issuer": {
    "type": "Profile",
    "id": "did:key:z6MkrHKzgsahxBLyNAbLQyB1pcWNYC9GmywiWPgkrvntAZcj",
    "name": "Alice Jones"
  },
  "issuanceDate": "2022-05-01T00:00:00Z",
  "credentialSubject": {
    "type": "AchievementSubject",
    // Note that the subject of the VC is the issuer, hence self-issued
    "id": "did:key:z6MkrHKzgsahxBLyNAbLQyB1pcWNYC9GmywiWPgkrvntAZcj",
    "achievement": {
      "id": "urn:uuid:e8096060-ce7c-47b3-a682-57098685d48d",
      "type": "Achievement",
      "name": "Mastery of Sorting Algorithms",
      // TBD: Link to Credential Engine competency framework here
      "description": "<description goes here>",
      "criteria": {
        "type": "Criteria",
        "narrative": "<narrative>"
      }
    }
  },
  "proof": {
    // ....
  }
}

Example Endorsement Credential (with an embedded issuer's relevance section):

{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/endorsement/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  "type": [
    "VerifiableCredential",
    "EndorsementCredential"
  ],
  "issuer": {
    "id": "did:web:endorser.example.com",
    "name": "Example Endorsing Agency",
    // TODO: bikeshed the name of this attribute
    "relevanceToMeBeingAbleToGiveThisEndorsement": [
          { // link to a credential I received saying I have a degree to this subject },
          {
             "id": "https://example-journal.com/my-article.pdf",
             // optional hashlink (note that 'multibase' is a part of the in-progress 
             // IETF spec https://datatracker.ietf.org/doc/html/draft-multiformats-multibase)
             "digestMultibase": "zQmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n",
             "name": "<name of the article>",
             "citation": "...",
             "description": "I have published an article in a peer-reviewed journal." 
          }
     ]
  },
  "issuanceDate": "2010-01-01T00:00:00Z",
  "expirationDate": "2020-01-01T00:00:00Z",
  "credentialSubject": {
    // Note that the credentialSubject.id is the id of the Achievement in the target VC
    "id": "urn:uuid:e8096060-ce7c-47b3-a682-57098685d48d",
    "type": [ "EndorsementSubject" ],
    "endorsementComment": "Alice indeed has the skill. See also the attached evidence."
  },
  "evidence": [
    {
      "type": ["Evidence"],
      "narrative": "# Final Project Report \n This project was ...",
      "name": "Final Project Report",
      "description": "This is the final project report.",
      "genre": "Research",
      "audience": "Department"
    },
    {
      "id": "<link to a google docs file>",
      "type": ["Evidence"],
      "name": "Final Project Code",
      "description": "This is the source code for the final project app.",
      "genre": "Research",
      "audience": "Department"
    }
  ],
  "proof": {
    // ....
  }
}

Example Workflow / Protocol

TBA: Add a description + swimlane diagram for how Alice would request the endorser for the endorsement.

Notes on Tooling

We expect that adding endorsements to VCs will be another feature offered by various wallets.

A summary presentation on Linked Data Signatures presented 2022-03-02.

Dmitri Zagidulan introduced in the W3C-VC-CCG the Anchored Resources and Hashlinks for VCs #831