Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Endorsement Credentials #12

Open
longpd opened this issue Feb 14, 2022 · 1 comment
Open

Endorsement Credentials #12

longpd opened this issue Feb 14, 2022 · 1 comment

Comments

@longpd
Copy link

longpd commented Feb 14, 2022

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.

@longpd
Copy link
Author

longpd commented Feb 14, 2022

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

@longpd longpd changed the title Credential Chaining and Endorsements Credential Chaining and Endorsements re: VC-EDU Meeting topics #6 & #11 Feb 14, 2022
@longpd longpd changed the title Credential Chaining and Endorsements re: VC-EDU Meeting topics #6 & #11 Credential Endorsements Jul 1, 2022
@longpd longpd changed the title Credential Endorsements Endorsement Credentials Jul 1, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant