Nate Otto
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee
  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # Peer Claims with Open Badges and Verifiable Credentials. by Nate Otto, Kim Hamilton Duffy, and Kerri Lemoie Contributors: * Serge Ravet Licensed CC-BY. The authors of this document commit to sign and abide by the W3C Community Group IPR Policy to facilitate this work being used in the web standards process. ## Abstract Peer Claims, or Peer Endorsements, are a type of Open Badges Assertion with an emphasis on light reusable credential descriptions to be awarded by many different issuers. We will describe this notion of peer claims using capabilities defined in the [Open Badges are Verifiable Claims paper](TODO: link) for Rebooting Web of Trust 6. This paper will inform the development of proofs of concept for peer claims use cases. We will then analyze the new capabilities and required updates relative to Open Badges software in the roles of Issuer, Host/Backpack, Displayer and Validator. ## Table of Contents > [TOC] ## Introduction Peer Claims are what members of a community use to recognize one another. Assertions of these claims are Open Badges Assertions of a particular BadgeClass made by one or more entities who are peers of one another. A peer claims ecosystem may be bootstrapped by a privileged BadgeClass creator, in which the creator establishes the capability for peers to award Assertions. However, the peer claims ecosystem is not governed by centralized authorities. In a companion paper, [Open Badges are Verifiable Claims](https://bit.ly/openbadges-rwot6), developed for the [Rebooting Web of Trust workshop in Spring 2018](https://github.com/WebOfTrustInfo/rebooting-the-web-of-trust-spring2018/), examples were presented showing Open Badges Assertions delivered using the [Verifiable Credentials Data Model](https://w3c.github.io/vc-data-model/). This paper extends that work to illustrate a method of making lightweight claims for peers to recognize one another. ## Use Cases ### Publish BadgeClass available with universal Award capability **As an Issuer, I would like to grant a capability to anybody to Award an instance of a BadgeClass I publish.** As part of a competency recognition program in their institution, the issuer would like to publish a 21st Century Skills framework with associated BadgeClasses that may be awarded by anybody in recognition of a peer claim. ### Publish an Assertion of a open-award BadgeClass as a peer endorsement of another entity. Students will be able to award each other Endorsements that assert competence in one of the elements of the institution's framework with a little narrative about the award. These Endorsements will be Verifiable Claims asserting other students hold the institution-defined BadgeClasses with narratives describing what they had done to demonstrate the competency. Their proofs should invoke the capability granted by an issuer. ### Grant a capability to anyone who holds a particular BadgeClass award **As an Issuer, I would like to allow anybody who holds the BadgeClass to award it to anybody else.** I can grant a capability to anyone, but attenuated to only those who hold a valid Assertion of the BadgeClass to be awarded. (This works to identify any BadgeClass as the prerequisite, not just the specific one to be awarded.) ### Multiple peers publish an Assertion of a minimal ad-hoc BadgeClass that can be related by other properties than a resolvable ID Issuers and consumers/inspectors/verifiers of badge Assertions may wish to use concepts from BadgeClass without need for all the properties. For instance, the above competency framework use cases could be recast to use a BadgeClass made up of only an alignment: ```json { "claim": { "id": "did:example:bob", "obi:holds": { "alignment": {"targetUrl": "https://example.com/competencies/teamwork"} } } // ... } ``` Relaxing requirement list on BadgeClass, including removing `image`, `criteria`, and `issuer` makes it possible to publish and consume very targeted claims. However, there is some power in consistent implementation of the BadgeClass model, so "fully defined" implementations of BadgeClass, which may still be referenced by resolvable ID in Assertions, still have a strong purpose in the ecosystem. ### Publish an assertion for a credential defined in the Credential Engine Registry The [Credential Engine Registry (CER)](http://credreg.net/) is a database with open APIs that stores and shares metadata about credentials, credentialing organizations, quality assurance organizations, and competency frameworks. The Credential Transparency Description Language (CTDL) describes each credential and associated entities. Organizations publishing to the CER are human-verified prior to publishing credential data. Each credential stored in the CER contains a unique resource link which returns a JSON payload of the credential's properties as [required or reccomended](http://credreg.net/registry/policy) by the CTDL. By referencing this resource link in an assertion the metadata for this credential is accessible as part of the verifiable credential. An example of a resource: ```json { "@id": "https://credentialengineregistry.org/resources/ce-c4ccf4c4-76d5-4a6e-9ca0-2cd7a8937ee6", "@type": "ceterms:DigitalBadge", "@context": "http://credreg.net/ctdl/schema/context/json", "ceterms:ctid": "ce-c4ccf4c4-76d5-4a6e-9ca0-2cd7a8937ee6", "ceterms:name": "Medical Assistant Patient Interviewing/Intake", "ceterms:keyword": ["Medical Assistant", "Patient Intake", "Patient Medical History"], "ceterms:ownedBy": [{ "@id": "https://credentialengineregistry.org/resources/ce-67C45100-B6D7-413D-9924-F0D5ADB825F1" }], "ceterms:subject": [{ "@type": "ceterms:CredentialAlignmentObject", "ceterms:targetNodeName": "Medical Assistant" }, { "@type": "ceterms:CredentialAlignmentObject", "ceterms:targetNodeName": "Patient Intake" }], "ceterms:isPartOf": [{ "@id": "https://credentialengineregistry.org/resources/ce-4fa8dc4b-ef12-4a44-be7c-7397f8ef0421" }], "ceterms:offeredBy": [{ "@id": "https://credentialengineregistry.org/resources/ce-67C45100-B6D7-413D-9924-F0D5ADB825F1" }], "ceterms:revokedBy": [{ "@id": "https://credentialengineregistry.org/resources/ce-67C45100-B6D7-413D-9924-F0D5ADB825F1" }], "ceterms:inLanguage": ["English"], "ceterms:availableAt": [{ "@type": "ceterms:Place", "ceterms:name": "Madison", "ceterms:latitude": 43.12171550000001, "ceterms:longitude": -89.3285843, "ceterms:postalCode": "53704", "ceterms:addressRegion": "WI", "ceterms:streetAddress": "1701 Wright St.", "ceterms:addressCountry": "United States", "ceterms:addressLocality": "Madison" }], "ceterms:description": "CAAHEP accreditation requires 100% of all medical assistant graduates to pass 100% of all competencies. In addition to passing 100% of all competencies, to earn this badge a student performed a mock rooming exercise at an exceptional level. Additionally the student successfully completed the psychomotor, affective, and cognitive domain assessments at a 93% or above.", "ceterms:dateEffective": "2016-09-01", "ceterms:occupationType": [{ "@type": "ceterms:CredentialAlignmentObject", "ceterms:framework": "https://www.bls.gov/soc/", "ceterms:codedNotation": "31-9092.00", "ceterms:frameworkName": "Standard Occupational Classification", "ceterms:targetNodeName": "Medical Assistants", "ceterms:targetNodeDescription": "Perform administrative and certain clinical duties under the direction of a physician. Administrative duties may include scheduling appointments, maintaining medical records, billing, and coding information for insurance purposes. Clinical duties may include taking and recording vital signs and medical histories, preparing patients for examination, drawing blood, and administering medications as directed by physician." }], "ceterms:subjectWebpage": "https://www.youracclaim.com/org/madison-college-school-of-health-education/badge/medical-assistant-patient-interviewing-intake", "ceterms:copyrightHolder": [{ "@id": "https://credentialengineregistry.org/resources/ce-67C45100-B6D7-413D-9924-F0D5ADB825F1" }], "ceterms:audienceLevelType": [{ "@type": "ceterms:CredentialAlignmentObject", "ceterms:targetNode": "audLevel:AssociatesDegreeLevel", "ceterms:frameworkName": "AudienceLevel", "ceterms:targetNodeName": "Associates Degree Level" }], "ceterms:availableOnlineAt": ["https://madisoncollege.edu/program/medical-assistant"], "ceterms:estimatedDuration": [{ "@type": "ceterms:DurationProfile", "ceterms:description": "This credential can be earned within one course within the Medical Assistant program.", "ceterms:maximumDuration": "P3M", "ceterms:minimumDuration": "P1M" }], "ceterms:availabilityListing": ["https://madisoncollege.edu/program/medical-assistant"], "ceterms:credentialStatusType": { "@type": "ceterms:CredentialAlignmentObject", "ceterms:targetNode": "credentialStat:Active", "ceterms:frameworkName": "CredentialStatus", "ceterms:targetNodeName": "Active" } } ``` It is required that each credential contains at least an [`ceterms:ownedBy`](http://credreg.net/ctdl/terms#ownedBy) or [`ceterms:offeredBy`](http://credreg.net/ctdl/terms/offeredBy) property. A credential may contain multiples of each property. When the resource is linked to from an assertion,`ceterms:ownedBy` or `ceterms:offeredBy` data may be the verified issuer(s) of a credential. While it can't be assumed that `ceterms:ownedBy` is the "creator" of the credential. It is arguable that the organization(s) referenced in the `ceterms:ownedBy` property is the arbitrator of which organization(s) are referenced in the `ceterms:offeredBy` property. At this stage of CER, organizations are the main providers of the credentials. However, the CER has made accomodations for individuals to be providers as well. ### Supporting Kirkpatrick Level 3 evaluation The Kirkpatrick model of learning/training evaluation comprises four levels: * __Level 1: Reaction__ — The degree to which participants find the training favorable, engaging and/or relevant to their jobs (usually referred to as the "smile sheet") * __Level 2: Learning__ — The degree to which participants acquire the intended knowledge, skills, attitude, confidence and commitment * __Level 3: Behavior__ — The degree to which participants apply what they learned during training when they are back on the job * __Level 4: Results__ — The degree to which the training has an impact on the organisation's results, e.g. turnover To support the transfer to the workplace of what participants have learned during a training intervention the suggestion is to have a verifiable claim with an embedded signature workflow: 1. __The learner__: before going to training signs the badge. The signature of the badge is like _signing a learning contract_; 2. __The trainer__: once the training intervention is over and the trainer is satisfied that the learner is competent, the trainer signs the badge; 3. __The line manager__: once back to work, and when the line manager is satisfied that the learner/worker has transfered the learning into the workplace, the line manager signs the badge. This means that the VC is like a small automaton with 3 different states and the transition from one state to the next is triggered by the signature of one of the parties. This is a very specific use case linked to training, though the roles may be generalized to apply to a broader range as well. The role of the trainer here may be filled by any assessor, including any peer expert. The states are: 1. ready to learn — _I want to learn_ 2. ready to apply — _I want to apply my learning_ 3. competent — _I want my competencies to be recognised_ This simple workflow could be augmented by adding the signature of the HR department, or that of an awarding body, etc. The great advantage of this way of working is that it is the way we do when we use a simple sheet of paper signed by the different parties. Moreover, there is a whole literature on "learning contracts" that reports their benefits on learners' engagement. This supposes a number of features that do not (yet) exist currently with Open Badges: * The learner can get the badge at the start of the learning journey, not just at the end; * The badge is only "valid" once the line manager has signed it; * The state of the badge should be reflected in its picture. The solution using current badge systems would be to implement the workflow within badge issuing platforms, with 3 different assertions, ther first one being used as evidence of the next one. The idea with VC would be to embed the rules within the claim so it is independent from any kind of platform, but the simple ability of the parties to _sign_ the claim in the right order. When the badge is issued it contains a condition relative the three parties engaged into the workflow. The condition could be: * The IDs of the parties allowed to sign the badge; or * A condition related to the IDs of the parties allowed to sign, like `ID_Trainer owns credential "XWZ"` It also contains a rule for the signature order, so that if the line manager signs before the trainer, the badge is declared invalid (and the reputation of the line manager decreases!). We could also add a time condition, something like `ID_LineManager signature time > ID_Trainer signature time`. It would be the task of the verification to check that the badge is well formed according to the rules. The verification process could also be the process that replaces the image in which the claim is embedded as the worlflow progresses. Which means that the verification process should then sign the badge, so one would be able to _verify the verifier_. ### Recommending someone for a credential This is based on a real use case from the Université de Normandie. Students have the ability to recommend other students for a particular badge. They don't issue it, just make a recommendation that is later validated by a jury. The value of a recommendation is that it can be performed by someone who is not an expert in the domain, it is less _engaging_ than the issuing of a badge and it involves the community of peers in the recommendation process. It can be read as a _pre-endorsement_ of a particular credential or badge instance. In the life cycle of a credential, _recommendations_ and _endorsements_ are at the two ends: _recommendations_ are an invitation to issue a credential while _endorsements_ is a confirmation of the merit of the credential's holder. While an _endorsement_ makes reference to two entities (the _endorser_ and a BadgeClass, an assertion, or anything bearing an identifier) a _recommendation_ makes reference to 3 entities: the _recommender_, the BadgeClass (with the issuer ID) and the recipient. The difference between a _recommendation_ and a regular _credential_ is who is at the origin of the recognition cycle. ### Skill Assessment & Recognition (*bilan de compétences*) Marie wants to have her competencies in [permaculture](https://en.wikipedia.org/wiki/Permaculture) recognised. For that, after checking that it does not already exist, she creates a "permaculture professional" badge and signs it. She then collects evidence of her work into a portfolio and uses the link to the "permaculture portfolio" as evidence of her skills. In parallel she collects testimonies, testimonials and endorsements of her skills (people add their signatures to the badge created by Marie or to the evidence collected in the portfolio). As Marie is in contact with other people involved in permaculture, she invites them to claim their own permaculture badges — "permaculture trainer," "permaculture supplies provider," "permaculture journalist," etc. To address the diversity of permaculture badges, she decides to create an overarching permaculture badge "permaculture community member" that everyone can claim—to be issued, the badge needs to be reviewed by 5 people who already have that badge. As the community of practice grows, the leaders of the community ask for their badges to be endorsed (recognised) by the ministry of agriculture, the ministry of labour and ministry of education. The products of the permaculture have their own badges eliciting their provenance and the value chain between producers, distributors and consumers. #### Key elements in the use case A badge is representative of a community and therefore it can be used to make a community visible (not just a skill). It is the community that gives credibility to the badge and then is in a position to ask for a formal recognition by public authorities. Global recognition starts with *hyperlocal* recognition. It is therefore critical to associate badges with social/community spaces where badges are produced and consumed. "Permaculture Badges" are not just useful to elicit skills (the initial intention of Marie) but also as an attribute attached to the product/service produced by such skills. The *permaculture badge ecosystem* as an echo of the extended *permaculture ecosystem*. ## Questions/Considerations - How will open badges validator correlate issuer property to `ceterms:ownedBy` and `ceterms:offeredBy`. Reference: [CER Organization property](http://credreg.net/registry/policy#mindata_organization) CER resources may contain multiple values for these properties (confirm) whereas an open badge conatins a single issuer property. - If a CER property is in an assertion as well as an issuer property, is a BadgeClass necessary? - Can the BadgeClass be optional? - If the BadgeClass is optional and the CER resource is not an Open Badge but another type of credential, is the verifiable credential still an Open Badge? ## Scenarios (assuming Issuer property is in the assertion, not in the badge class and that the assertion links to a CER resource) - CER resource is [`ceterms:OpenBadge`](http://credreg.net/ctdl/terms#OpenBadge); CER resource contains a single `ceterms:ownedBy` but not `ceterms:offeredBy`; Issuer property correlates with `ceterms:ownedBy`. BadgeClass is not present in the assertion. - CER resource is [`ceterms:OpenBadge`](http://credreg.net/ctdl/terms#OpenBadge); CER resource contains a single `ceterms:ownedBy` as well as a single `ceterms:offeredBy`; Issuer property correlates with `ceterms:offeredBy`. BadgeClass is not present in the assertion. - CER resource is [`ceterms:OpenBadge`](http://credreg.net/ctdl/terms#OpenBadge); CER resource contains multiple `ceterms:ownedBy` as well as a single `ceterms:offeredBy`; Issuer property does not correlates with `ceterms:ownedBy` or `ceterms:offeredBy`. BadgeClass is not present in the assertion. - CER resource is [`ceterms:Certification`](http://credreg.net/ctdl/terms#Certification); CER resource contains a single `ceterms:ownedBy` but not `ceterms:offeredBy`; Issuer property correlates with `ceterms:ownedBy`. BadgeClass is not present in the assertion. - CER resource is [`ceterms:Certification`](http://credreg.net/ctdl/terms#Certification); CER resource contains a single `ceterms:ownedBy` but not `ceterms:offeredBy`; Issuer property correlates with `ceterms:ownedBy`. BadgeClass is present in the assertion. - CER resource is [`ceterms:OpenBadge`] (http://credreg.net/ctdl/terms#OpenBadge); CER resource contains a single `ceterms:ownedBy` but not `ceterms:offeredBy`; Issuer property correlates with `ceterms:ownedBy`. BadgeClass is present in the assertion but the badge class description does not match the CER resource `ceterms:description`](http://credreg.net/ctdl/terms#description ). Note that description is a required property for both badge class and CER. ## Examples ### A BadgeClass with universal award capability grant The BadgeClass may include a capability grant ```json { "@context": ["https://w3id.org/credentials/v2", "https://w3id.org/openbadges/v2", "https://example.org/ocap/v1"], "id": "https://example.com/freebadges/teamwork", "issuer": "did:example:program_organizer", "name": "Teamwork Badge", "description": "A badge awarded by the Example Institution community to recognize great teamwork.", "criteria": {"narrative": "Perform random acts of teaming."}, "alignment": { "targetUrl": "https://example.com/competencies/teamwork", "targetName": "Teamwork" }, "image": "data:image/png;base64,..." "ocap:grantCapabilitySuite": { "id": "urn:uuid:167fd864-9fa5-4669-828a-1f4964eeb207", "type": "Capability", "invocationTarget": ["https://example.com/freebadges/1", "https://examp.e.com/freebadges/2"], "invoker": "*", "action": "obiActions:Award", "proof": { "type": "RsaSignature2016", "created": "2018-01-08T16:02:20Z", "creator": "did:example:program_organizer#keys-1", "signatureValue": "IOmA4R7TfhkYTYW8...CBMq2/gi25s=" } }, "proof": { "type": "RsaSignature2016", "created": "2018-01-08T16:02:20Z", "creator": "did:example:program_organizer#keys-1", "signatureValue": "IOmA4R7TfhkYTYW8...CBMq2/gi25s=" } } ``` ### A Peer Claim invoking universal award capability A student could sign a very lightweight piece of data in order to make a lightweight claim about a peer. In this claim, they would invoke the capability granted by the issuer of the BadgeClass. ```json { "@context": ["https://w3id.org/credentials/v2", "https://w3id.org/ocap/v1", "https://w3id.org/openbadges/v2"], "id": "urn:uuid:01f0bb90-86ee-4469-9655-7ca6f4d591af", "type": ["Credential"], "issuer": "did:example:alice", "issued": "2018-02-28T14:58:57.461422+00:00", "claim": [{ "@context": "https://w3id.org/openbadges/v2", "id": "did:example:bob", "badge": "https://example.com/freebadges/teamwork" }], "obi:evidence": { "narrative": "Bob was very helpful today when I was reticulating the splines." }, "proof": { "type": "sec:RsaSignature2018", "created": "2018-03-07T22:26:57Z", "creator": "did:example:alice#keys-1", "proofPurpose": "invokeCapability", "action": "obiActions:Award", "capability": { "id": "urn:uuid:167fd864-9fa5-4669-828a-1f4964eeb207", "type": "Capability", "invocationTarget": ["https://example.com/freebadges/1", "https://examp.e.com/freebadges/2"], "invoker": "*", "action": "obiActions:Award", "proof": { "type": "RsaSignature2016", "created": "2018-01-08T16:02:20Z", "creator": "did:example:program_organizer#keys-1", "signatureValue": "IOmA4R7TfhkYTYW8...CBMq2/gi25s=" } }, "sec:jws": "eyJhbGciOiJQUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..GMPdCXn-qQcZHPoO6qHn6hBiysMNaZ7nSBx_e27LuDxJvRsCLbR1n7LGG7i8NVW1SVMwRjs8aJ3H2XXFphCZF_dGaueTsaehTzLQgh9n5imPgrQFsAKsRAKTJ_zpVL8JpsbPcrXbb-fkAcD52oDuYJg1uVr3MOhe4BzibDUKaFg5-cXZ-Gs8KcXrh_Ddqtd8CWw0zS3fRvI3SKbO6op6hNB1Jha4mfAn49Q0BRiSuCxbyPNy5MtX7FGoimvLhsluM7UAtPWHBi6iW8Nh57fk4uS5ZywHJSYS9-HPcvbDUGPHPHOnwq4qq7xc47yXveMmyo2VX4YSYe3LM-_9w1TnGc" } } ``` Alternately, if the granting capability were available the URI http://www.issuer.org/167fd864-9fa5-4669-828a-1f4964eeb207, the invocation could be expressed as linked data as follows: ```json { "@context": ["https://w3id.org/credentials/v2", "https://w3id.org/ocap/v1", "https://w3id.org/openbadges/v2"], "id": "urn:uuid:01f0bb90-86ee-4469-9655-7ca6f4d591af", "type": ["Credential"], "issuer": "did:example:alice", "issued": "2018-02-28T14:58:57.461422+00:00", "claim": [{ "@context": "https://w3id.org/openbadges/v2", "id": "did:example:bob", "badge": "https://example.com/freebadges/teamwork" }], "obi:evidence": { "narrative": "Bob was very helpful today when I was reticulating the splines." }, "proof": { "type": "sec:RsaSignature2018", "created": "2018-03-07T22:26:57Z", "creator": "did:example:alice#keys-1", "proofPurpose": "invokeCapability", "action": "obiActions:Award", "capability": "http://www.issuer.org/167fd864-9fa5-4669-828a-1f4964eeb207", "sec:jws": "eyJhbGciOiJQUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..GMPdCXn-qQcZHPoO6qHn6hBiysMNaZ7nSBx_e27LuDxJvRsCLbR1n7LGG7i8NVW1SVMwRjs8aJ3H2XXFphCZF_dGaueTsaehTzLQgh9n5imPgrQFsAKsRAKTJ_zpVL8JpsbPcrXbb-fkAcD52oDuYJg1uVr3MOhe4BzibDUKaFg5-cXZ-Gs8KcXrh_Ddqtd8CWw0zS3fRvI3SKbO6op6hNB1Jha4mfAn49Q0BRiSuCxbyPNy5MtX7FGoimvLhsluM7UAtPWHBi6iW8Nh57fk4uS5ZywHJSYS9-HPcvbDUGPHPHOnwq4qq7xc47yXveMmyo2VX4YSYe3LM-_9w1TnGc" } } ``` In this example, three entities are identified just by a resolvable ID. * The first `did:example:alice` resolves to the issuer's DID Document, which contains the signing key used in the proof. * The second `did:example:bob` resolves to the recipient's DID Document, which can be correlated with other claims issued and received by the entity who is the recipient of this award. * The third `https://example.com/freebadges/teamwork` resolves to a BadgeClass published by another creator. The BadgeClass or its issuer Profile DID Document would contain a capability grant using [Linked Data Capabilities](https://w3c-ccg.github.io/ld-ocap/) to grant to anyone (or anyone who holds a particular BadgeClass, for instance) the capability to award these peer assertions. ### Example of a BadgeClass that may be awarded by anyone who holds it ("viral") A BadgeClass might contain a capability grant like the example above, but attenuated with a caveat that the invoker of the capability must hold a certain BadgeClass. ```json { "@context": ["https://w3id.org/ocap/v1", "https://w3id.org/openbadges/v2"], "id": "urn:uuid:167fd864-9fa5-4669-828a-1f4964eeb207", "type": "Capability", "invocationTarget": "https://example.com/freebadges/1", "invoker": "*", "action": "obiActions:Award", "caveat": { "obi:holds": { "id": "https://example.com/freebadges/teamwork" } }, "proof": { "type": "RsaSignature2016", "created": "2018-01-08T16:02:20Z", "creator": "did:example:program_organizer#keys-1", "signatureValue": "IOmA4R7TfhkYTYW8...CBMq2/gi25s=" } } ``` This could be invoked by presenting evidence verifiable by an inspector to match the caveat in the Capability: ```json { "@context": ["https://w3id.org/ocap/v1", "https://w3id.org/openbadges/v2"], "claim": { "...": "..." }, "proof": { "type": "sec:RsaSignature2018", "created": "2018-03-07T22:26:57Z", "creator": "did:example:alice#keys-1", "proofPurpose": "invokeCapability", "action": "obiActions:Award", "evidence": { "type": "Assertion", "id": "https://example.com/assertions/alices-teamwork-badge", "badge": "https://example.com/freebadges/teamwork" }, "capability": { "id": "urn:uuid:167fd864-9fa5-4669-828a-1f4964eeb207", "type": "Capability", "invocationTarget": ["https://example.com/freebadges/1", "https://examp.e.com/freebadges/2"], "invoker": "*", "action": "obiActions:Award", "proof": { "type": "RsaSignature2016", "created": "2018-01-08T16:02:20Z", "creator": "did:example:program_organizer#keys-1", "signatureValue": "IOmA4R7TfhkYTYW8...CBMq2/gi25s=" } }, "sec:jws": "eyJhbGciOiJQUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..GMPdCXn-qQcZHPoO6qHn6hBiysMNaZ7nSBx_e27LuDxJvRsCLbR1n7LGG7i8NVW1SVMwRjs8aJ3H2XXFphCZF_dGaueTsaehTzLQgh9n5imPgrQFsAKsRAKTJ_zpVL8JpsbPcrXbb-fkAcD52oDuYJg1uVr3MOhe4BzibDUKaFg5-cXZ-Gs8KcXrh_Ddqtd8CWw0zS3fRvI3SKbO6op6hNB1Jha4mfAn49Q0BRiSuCxbyPNy5MtX7FGoimvLhsluM7UAtPWHBi6iW8Nh57fk4uS5ZywHJSYS9-HPcvbDUGPHPHOnwq4qq7xc47yXveMmyo2VX4YSYe3LM-_9w1TnGc" } } ``` Alternately, if the granting capability were available the URI http://www.issuer.org/167fd864-9fa5-4669-828a-1f4964eeb207, the invocation could be expressed as linked data as follows: ```json { "@context": ["https://w3id.org/ocap/v1", "https://w3id.org/openbadges/v2"], "claim": { "...": "..." }, "proof": { "type": "sec:RsaSignature2018", "created": "2018-03-07T22:26:57Z", "creator": "did:example:alice#keys-1", "proofPurpose": "invokeCapability", "action": "obiActions:Award", "evidence": { "type": "Assertion", "id": "https://example.com/assertions/alices-teamwork-badge", "badge": "https://example.com/freebadges/teamwork" }, "capability": "http://www.issuer.org/167fd864-9fa5-4669-828a-1f4964eeb207", "sec:jws": "eyJhbGciOiJQUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..GMPdCXn-qQcZHPoO6qHn6hBiysMNaZ7nSBx_e27LuDxJvRsCLbR1n7LGG7i8NVW1SVMwRjs8aJ3H2XXFphCZF_dGaueTsaehTzLQgh9n5imPgrQFsAKsRAKTJ_zpVL8JpsbPcrXbb-fkAcD52oDuYJg1uVr3MOhe4BzibDUKaFg5-cXZ-Gs8KcXrh_Ddqtd8CWw0zS3fRvI3SKbO6op6hNB1Jha4mfAn49Q0BRiSuCxbyPNy5MtX7FGoimvLhsluM7UAtPWHBi6iW8Nh57fk4uS5ZywHJSYS9-HPcvbDUGPHPHOnwq4qq7xc47yXveMmyo2VX4YSYe3LM-_9w1TnGc" } } ``` ## TODO: Implementation User Stories for Open Badges software ### Issuer TODO: anything else required for issuers? To support peer claims, the Issuer would define and host specifications for: - BadgeClasses with universal award capability grant - BadgeClasses with attenuated capabilities In the latter case, our example restricted that capability invocations must hold a claim with id "https://example.com/freebadges/teamwork". To do this, the issuer must ensure issued claims match the id in the hosted attenuated BadgeClass. ### Host/Backpack TODO: not sure ### Displayer TODO: not sure ### Verifier The Verifier ensures the capability is valid by following the steps defined in [LD Capabilities Invocation](https://w3c-ccg.github.io/ld-ocap/#invocation). To summarize that process, the Verifier ensures the claim contains a `proof` property where: - `proofPurpose` equals `invokeCapability` - `capability` property links to the capability document or describes the capability inline - TODO: since we are not using `invoker`, the child claim doesn't need to be signed with a parent's invoker field, so it only needs to be signed with a child key The Verifier must also ensure: - the `capability` document grants authority to invoke this capability - the top-level capability document is signed by one of the `invocationTarget`'s keys - the restrictions of all caveats are fulfilled. In the attenuated example presented here, the verifier must ensure the child claim holds an instance of a BadgeClass with id "https://example.com/freebadges/teamwork". At this point, the invocation is considered valid and any relevant action may be performed. Notes: - The examples presented in this paper do not use the `invoker` field; if so, additional steps apply, as described in [LD Capabilities Invocation](https://w3c-ccg.github.io/ld-ocap/#invocation). - Should we provide details about any other kinds of caveats? ## Next Steps Contributors to this paper and their outside collaborators intend to build several prototypes that demonstrate proofs of the concepts discussed. ### Peer Recognition Network Proof of Concept Particularly, one system we are sketching out for development involves: * Learners registering a DID and signing up for a community * Automatically awarded membership badge upon join, awarded to their DID from the community maintainer DID. * A set of free-to-award BadgeClasses with universal Award capability grants. * An interface for community members to see one another's DIDs (and probably their nicknames for these DIDs) with ability to award peer claims to one another and sign them with their own keys. # Parking Lot (meta notes for editors) * Serge, can we rename to "A Bit of Trust: Peer Claims with Open Badges and Verifiable Credentials"? ## TODOs * [x] An example of a peer attestation ("endorsement") from a DID-identified issuer to a DID-identified recipient. * [x] Create JSON-LD Verifiable Credential samples of peer claims: "I read through Kim's code and know she writes good clear comments." - these samples should make sense to the Open Badges community. * [ ] Implementation user stories

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully