This specification describes an experimental vocabulary for asserting Verifiable Credentials related to vaccination certificates for medical purposes
This specification describes an experimental vocabulary for asserting Verifiable Credentials related to vaccination certificates for medical purposes
The following use cases outline a number of key scenarios that readers might find useful:
The following examples are provided as a simple example of how this vocabulary can be used in-conjunction with Verifiable Credentials [[VC-DATA-MODEL]]
{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://w3id.org/vaccination/v1" ], "type": [ "VerifiableCredential", "VaccinationCertificate" ], "id": "urn:uvci:af5vshde843jf831j128fj", "name": "COVID-19 Vaccination Certificate", "description": "COVID-19 Vaccination Certificate", "issuanceDate": "2019-12-03T12:19:52Z", "expirationDate": "2029-12-03T12:19:52Z", "issuer": "did:key:z6MkiY62766b1LJkExWMsM3QG4WtX7QpY823dxoYzr9qZvJ3", "credentialSubject": { "type": "VaccinationEvent", "batchNumber": "1183738569", "administeringCentre": "MoH", "healthProfessional": "MoH", "countryOfVaccination": "NZ", "recipient": { "type": "VaccineRecipient", "givenName": "JOHN", "familyName": "SMITH", "gender": "Male", "birthDate": "1958-07-17" }, "vaccine": { "type": "Vaccine", "disease": "COVID-19", "atcCode": "J07BX03", "medicinalProductName": "COVID-19 Vaccine Moderna", "marketingAuthorizationHolder": "Moderna Biotech" } }, "proof": { "type": "Ed25519Signature2018", "created": "2021-02-18T23:00:15Z", "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..vD_vXJCWdeGpN-qKHDIlzgGC0auRPcwp3O1sOI-gN8z3UD4pI0HO_77ob5KHhhU1ugLrrwrMsKv71mqHBn-dBg", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkiY62766b1LJkExWMsM3QG4WtX7QpY823dxoYzr9qZvJ3#z6MkiY62766b1LJkExWMsM3QG4WtX7QpY823dxoYzr9qZvJ3" } }
{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://w3id.org/vaccination/v1", "https://w3id.org/security/bbs/v1" ], "type": [ "VerifiableCredential", "VaccinationCertificate" ], "id": "urn:uvci:af5vshde843jf831j128fj", "name": "COVID-19 Vaccination Certificate", "description": "COVID-19 Vaccination Certificate", "issuanceDate": "2019-12-03T12:19:52Z", "expirationDate": "2029-12-03T12:19:52Z", "issuer": "did:key:zUC724vuGvHpnCGFG1qqpXb81SiBLu3KLSqVzenwEZNPoY35i2Bscb8DLaVwHvRFs6F2NkNNXRcPWvqnPDUd9ukdjLkjZd3u9zzL4wDZDUpkPAatLDGLEYVo8kkAzuAKJQMr7N2", "credentialSubject": { "type": "VaccinationEvent", "batchNumber": "1183738569", "administeringCentre": "MoH", "healthProfessional": "MoH", "countryOfVaccination": "NZ", "recipient": { "type": "VaccineRecipient", "givenName": "JOHN", "familyName": "SMITH", "gender": "Male", "birthDate": "1958-07-17" }, "vaccine": { "type": "Vaccine", "disease": "COVID-19", "atcCode": "J07BX03", "medicinalProductName": "COVID-19 Vaccine Moderna", "marketingAuthorizationHolder": "Moderna Biotech" } }, "proof": { "type": "BbsBlsSignature2020", "created": "2021-02-18T23:01:59Z", "proofPurpose": "assertionMethod", "proofValue": "kyesJtjITx/qsXTOuBpAu44e1UC9kjwqbEVyPqTiHL0pVPyaD/xeD0pEw/qBtr25SfrmMj3wXhCMfH77cc6+JgpgIaAnmR5wtTKGsxNm03wwlXf8LFZujjbw+Uf9Wm3aNO7rmAdrG3ec8e9VEQZeIw==", "verificationMethod": "did:key:zUC724vuGvHpnCGFG1qqpXb81SiBLu3KLSqVzenwEZNPoY35i2Bscb8DLaVwHvRFs6F2NkNNXRcPWvqnPDUd9ukdjLkjZd3u9zzL4wDZDUpkPAatLDGLEYVo8kkAzuAKJQMr7N2#zUC724vuGvHpnCGFG1qqpXb81SiBLu3KLSqVzenwEZNPoY35i2Bscb8DLaVwHvRFs6F2NkNNXRcPWvqnPDUd9ukdjLkjZd3u9zzL4wDZDUpkPAatLDGLEYVo8kkAzuAKJQMr7N2" } }
{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://w3id.org/vaccination/v1", "https://w3id.org/security/bbs/v1" ], "id": "urn:uvci:af5vshde843jf831j128fj", "type": [ "VaccinationCertificate", "VerifiableCredential" ], "description": "COVID-19 Vaccination Certificate", "name": "COVID-19 Vaccination Certificate", "expirationDate": "2029-12-03T12:19:52Z", "issuanceDate": "2019-12-03T12:19:52Z", "issuer": "did:key:zUC724vuGvHpnCGFG1qqpXb81SiBLu3KLSqVzenwEZNPoY35i2Bscb8DLaVwHvRFs6F2NkNNXRcPWvqnPDUd9ukdjLkjZd3u9zzL4wDZDUpkPAatLDGLEYVo8kkAzuAKJQMr7N2", "credentialSubject": { "id": "urn:bnid:_:c14n2", "type": "VaccinationEvent", "batchNumber": "1183738569", "countryOfVaccination": "NZ" }, "proof": { "type": "BbsBlsSignatureProof2020", "created": "2021-02-18T23:04:28Z", "nonce": "JNGovx4GGoi341v/YCTcZq7aLWtBtz8UhoxEeCxZFevEGzfh94WUSg8Ly/q+2jLqzzY=", "proofPurpose": "assertionMethod", "proofValue": "AB0GQA//jbDwMgaIIJeqP3fRyMYi6WDGhk0JlGJc/sk4ycuYGmyN7CbO4bA7yhIW/YQbHEkOgeMy0QM+usBgZad8x5FRePxfo4v1dSzAbJwWjx87G9F1lAIRgijlD4sYni1LhSo6svptDUmIrCAOwS2raV3G02mVejbwltMOo4+cyKcGlj9CzfjCgCuS1SqAxveDiMKGAAAAdJJF1pO6hBUGkebu/SMmiFafVdLvFgpMFUFEHTvElUQhwNSp6vxJp6Rs7pOVc9zHqAAAAAI7TJuDCf7ramzTo+syb7Njf6ExD11UKNcChaeblzegRBIkg3HoWgwR0hhd4z4D5/obSjGPKpGuD+1DoyTZhC/wqOjUZ03J1EtryZrC+y1DD14b4+khQVLgOBJ9+uvshrGDbu8+7anGezOa+qWT0FopAAAAEG6p07ghODpi8DVeDQyPwMY/iu2Lh7x3JShWniQrewY2GbsACBYOPlkNNm/qSExPRMe2X7UPpdsxpUDwqbObye4EXfAabgKd9gCmj2PNdvcOQAi5rIuJSGa4Vj7AtKoW/2vpmboPoOu4IEM1YviupomCKOzhjEuOof2/y5Adfb8JUVidWqf9Ye/HtxnzTu0HbaXL7jbwsMNn5wYfZuzpmVQgEXss2KePMSkHcfScAQNglnI90YgugHGuU+/DQcfMoA0+JviFcJy13yERAueVuzrDemzc+wJaEuNDn8UiTjAdVhLcgnHqUai+4F6ONbCfH2B3ohB3hSiGB6C7hDnEyXFOO9BijCTHrxPv3yKWNkks+3JfY28m+3NO0e2tlyH71yDX0+F6U388/bvWod/u5s3MpaCibTZEYoAc4sm4jW03HFYMmvYBuWOY6rGGOgIrXxQjx98D0macJJR7Hkh7KJhMkwvtyI4MaTPJsdJGfv8I+RFROxtRM7RcFpa4J5wF/wQnpyorqchwo6xAOKYFqCqKvI9B6Y7Da7/0iOiWsjs8a4zDiYynfYavnz6SdxCMpHLgplEQlnntqCb8C3qly2s5Ko3PGWu4M8Dlfcn4TT8YenkJDJicA91nlLaE8TJbBgsvgyT+zlTsRSXlFzQc+3KfWoODKZIZqTBaRZMft3S/", "verificationMethod": "did:key:zUC724vuGvHpnCGFG1qqpXb81SiBLu3KLSqVzenwEZNPoY35i2Bscb8DLaVwHvRFs6F2NkNNXRcPWvqnPDUd9ukdjLkjZd3u9zzL4wDZDUpkPAatLDGLEYVo8kkAzuAKJQMr7N2#zUC724vuGvHpnCGFG1qqpXb81SiBLu3KLSqVzenwEZNPoY35i2Bscb8DLaVwHvRFs6F2NkNNXRcPWvqnPDUd9ukdjLkjZd3u9zzL4wDZDUpkPAatLDGLEYVo8kkAzuAKJQMr7N2" } }
Certain applications of Verifiable Credentials create constraints around the permitted size of a credentials representation, one such example constraint is expressing a Verifiable Credential in a QR Code.
Vaccination Certificates are a particular use-case where a solution involving much of the benefits of Verifiable Credentials can be realized without requiring the credential subject to possess or have access to digital infrastructure such as a digital wallet. Instead the Verifiable Credential can be issued by the issuer, printed to a physical medium (e.g paper) and shared with the subject.
There are numerous techniques that can be used to keep the representation of a Verifiable Credential small, two of the most notable are:
As an example below the following Vaccination Certificate is issued as a Verifiable Credential using a subset of the vocabulary defined by this document. The resulting Verifiable Credential is then encoded in both JSON-LD and CBOR-LD to show the compression.
{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://w3id.org/vaccination/v1" ], "type": [ "VerifiableCredential", "VaccinationCertificate" ], "id": "urn:uvci:af5vshde843jf831j128fj", "issuanceDate": "2019-12-03T12:19:52Z", "expirationDate": "2029-12-03T12:19:52Z", "issuer": "did:key:z6MkiY62766b1LJkExWMsM3QG4WtX7QpY823dxoYzr9qZvJ3", "credentialSubject": { "type": "VaccinationEvent", "batchNumber": "1183738569", "administeringCentre": "MoH", "countryOfVaccination": "NZ", "recipient": { "type": "VaccineRecipient", "givenName": "JOHN", "familyName": "SMITH", "gender": "Male", "birthDate": "1958-07-17" }, "vaccine": { "type": "Vaccine", "atcCode": "J07BX03" } }, "proof": { "type": "Ed25519Signature2018", "created": "2021-02-18T23:49:52Z", "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..a3UqIuKSOmCKrdn2knl_hCjiN4f4Ud1eO5ckwEHb623V9vdCwWCDB7GBHlRBYSI8ek2E-By7xysVFwutcpOeDg", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkiY62766b1LJkExWMsM3QG4WtX7QpY823dxoYzr9qZvJ3#z6MkiY62766b1LJkExWMsM3QG4WtX7QpY823dxoYzr9qZvJ3" } }
d9 -- next 2 bytes 0501 -- Tag #1281 a8 -- Map, 8 pairs 01 -- {Key:0}, 1 82 -- {Val:0}, Array, 2 items 11 -- [0], 17 78 -- String, length next 1 byte 1f -- String, length: 31 68747470733a2f2f773369642e6f72672f76616363696e6174696f6e2f7631 -- [1], "https://w3id.org/vaccination/v1" 18 -- Positive number, next 1 byte 3e -- {Key:1}, 62 82 -- {Val:1}, Array, 2 items 0f -- [0], 15 0b -- [1], 11 18 -- Positive number, next 1 byte 2b -- {Key:2}, 43 78 -- String, length next 1 byte 1f -- String, length: 31 75726e3a757663693a61663576736864653834336a663833316a313238666a -- {Val:2}, "urn:uvci:af5vshde843jf831j128fj" 18 -- Positive number, next 1 byte 2d -- {Key:3}, 45 1a -- Positive number, next 4 bytes 5de652e8 -- {Val:3}, 1575375592 18 -- Positive number, next 1 byte 24 -- {Key:4}, 36 1a -- Positive number, next 4 bytes 70b64a68 -- {Val:4}, 1890994792 18 -- Positive number, next 1 byte 2f -- {Key:5}, 47 82 -- {Val:5}, Array, 2 items 19 -- Positive number, next 2 bytes 0401 -- [0], 1025 58 -- Bytes, length next 1 byte 22 -- Bytes, length: 34 ed013cab50d559e78a1bab71841fd9cbd9e802999038685ef84b7e490d2717c2b110 -- [1], ed013cab50d559e78a1bab71841fd9cbd9e802999038685ef84b7e490d2717c2b110 18 -- Positive number, next 1 byte 1d -- {Key:6}, 29 a6 -- {Val:6}, Map, 6 pairs 18 -- Positive number, next 1 byte 3e -- {Key:0}, 62 0c -- {Val:0}, 12 15 -- {Key:1}, 21 6a -- String, length: 10 31313833373338353639 -- {Val:1}, "1183738569" 11 -- {Key:2}, 17 63 -- String, length: 3 4d6f48 -- {Val:2}, "MoH" 18 -- Positive number, next 1 byte 18 -- {Key:3}, 24 62 -- String, length: 2 4e5a -- {Val:3}, "NZ" 18 -- Positive number, next 1 byte 3a -- {Key:4}, 58 a5 -- {Val:4}, Map, 5 pairs 18 -- Positive number, next 1 byte 3e -- {Key:0}, 62 0e -- {Val:0}, 14 18 -- Positive number, next 1 byte 28 -- {Key:1}, 40 64 -- String, length: 4 4a4f484e -- {Val:1}, "JOHN" 18 -- Positive number, next 1 byte 26 -- {Key:2}, 38 65 -- String, length: 5 534d495448 -- {Val:2}, "SMITH" 18 -- Positive number, next 1 byte 27 -- {Key:3}, 39 64 -- String, length: 4 4d616c65 -- {Val:3}, "Male" 16 -- {Key:4}, 22 6a -- String, length: 10 313935382d30372d3137 -- {Val:4}, "1958-07-17" 18 -- Positive number, next 1 byte 3f -- {Key:5}, 63 a2 -- {Val:5}, Map, 2 pairs 18 -- Positive number, next 1 byte 3e -- {Key:0}, 62 0d -- {Val:0}, 13 13 -- {Key:1}, 19 67 -- String, length: 7 4a303742583033 -- {Val:1}, "J07BX03" 18 -- Positive number, next 1 byte 37 -- {Key:7}, 55 a5 -- {Val:7}, Map, 5 pairs 18 -- Positive number, next 1 byte 3e -- {Key:0}, 62 07 -- {Val:0}, 7 18 -- Positive number, next 1 byte 19 -- {Key:1}, 25 1a -- Positive number, next 4 bytes 602efd20 -- {Val:1}, 1613692192 18 -- Positive number, next 1 byte 30 -- {Key:2}, 48 78 -- String, length next 1 byte 90 -- String, length: 144 65794a68624763694f694a465a45525451534973496d49324e4349365a6d467363325573496d4e79615851694f6c7369596a5930496c31392e2e6133557149754b534f6d434b72646e326b6e6c5f68436a694e346634556431654f35636b7745486236323356397664437757434442374742486c524259534938656b32452d427937787973564677757463704f654467 -- {Val:2}, "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..a3UqIuKSOmCKrdn2knl_hCjiN4f4Ud1eO5ckwEHb623V9vdCwWCDB7GBHlRBYSI8ek2E-By7xysVFwutcpOeDg" 18 -- Positive number, next 1 byte 38 -- {Key:3}, 56 12 -- {Val:3}, 18 18 -- Positive number, next 1 byte 43 -- {Key:4}, 67 83 -- {Val:4}, Array, 3 items 19 -- Positive number, next 2 bytes 0401 -- [0], 1025 58 -- Bytes, length next 1 byte 22 -- Bytes, length: 34 ed013cab50d559e78a1bab71841fd9cbd9e802999038685ef84b7e490d2717c2b110 -- [1], ed013cab50d559e78a1bab71841fd9cbd9e802999038685ef84b7e490d2717c2b110 58 -- Bytes, length next 1 byte 22 -- Bytes, length: 34 ed013cab50d559e78a1bab71841fd9cbd9e802999038685ef84b7e490d2717c2b110 -- [2], ed013cab50d559e78a1bab71841fd9cbd9e802999038685ef84b7e490d2717c2b110 0xd90501a8018211781f68747470733a2f2f773369642e6f72672f76616363696e6174696f6e2f7631183e820f0b182b781f75726e3a757663693a61663576736864653834336a663833316a313238666a182d1a5de652e818241a70b64a68182f821904015822ed013cab50d559e78a1bab71841fd9cbd9e802999038685ef84b7e490d2717c2b110181da6183e0c156a3131383337333835363911634d6f481818624e5a183aa5183e0e1828644a4f484e182665534d4954481827644d616c65166a313935382d30372d3137183fa2183e0d13674a3037425830331837a5183e0718191a602efd201830789065794a68624763694f694a465a45525451534973496d49324e4349365a6d467363325573496d4e79615851694f6c7369596a5930496c31392e2e6133557149754b534f6d434b72646e326b6e6c5f68436a694e346634556431654f35636b7745486236323356397664437757434442374742486c524259534938656b32452d427937787973564677757463704f6544671838121843831904015822ed013cab50d559e78a1bab71841fd9cbd9e802999038685ef84b7e490d2717c2b1105822ed013cab50d559e78a1bab71841fd9cbd9e802999038685ef84b7e490d2717c2b110
Below illustrates the size difference of the Verifiable Credential example shown above encoded in JSON-LD and CBOR-LD.
Encoding Technology | Size (bytes) |
---|---|
JSON-LD | 1217 |
CBOR-LD | 461 |
Below shows a QR Code that features the Verifiable Credential example shown above compressed using CBOR-LD converted to base32 in accordance with [[!RFC4648]] and encoded into a QR Code using the alphanumeric mode.
A vaccination certificate contains many different pieces of information relating to the vaccination of an individual. These pieces can be organized into the following categories
This vocabulary assumes all terms specified in the base Verifiable Credentials [[VC-DATA-MODEL]] context. In addition, the following classes are available for specifying information related to proof of vaccination for medical purposes
Class | Description |
---|---|
VaccinationCertificate | Specifies that the credential is a vaccination certificate |
VaccinationEvent | Specifies the details of the vaccination event including the administration details. |
VaccineRecipient | Specifies that the subject of the credential is the recipient of a specified vaccine. |
Vaccine | Specifies the details of medical product serving as a vaccine. |
Term | Description |
---|---|
order | Order in the vaccination course. |
batchNumber | A distinctive combination of numbers and/or letters which specifically identifies a batch. |
dateOfVaccination | Date in which the vaccination event occurred. |
administeringCentre | Name/code of administering centre or a health authority responsible for the vaccination event. |
healthProfessional | Name or health professional code responsible for administering the vaccine or prophylaxis. |
countryOfVaccination | The country in which the vaccine recipient was vaccinated. |
nextVaccinationDate | Date on which the next vaccination should be administered to the vaccine recipient. |
recipient | The recipient of the vaccine. |
vaccine | The details of vaccine administered. |
Order in the vaccination course.
Term | order |
URL | https://w3id.org/vaccination#order |
Expected Value | String |
A distinctive combination of numbers and/or letters which specifically identifies a batch.
Term | batchNumber |
URL | https://w3id.org/vaccination#batchNumber |
Expected Value | String |
Date in which the vaccination event occurred.
Term | dateOfVaccination |
URL | https://w3id.org/vaccination#dateOfVaccination |
Expected Value | Datetime |
Name/code of administering centre or a health authority responsible for the vaccination event.
Term | administeringCentre |
URL | https://w3id.org/vaccination#administeringCentre |
Expected Value | String |
Name or health professional code responsible for administering the vaccine or prophylaxis.
Term | healthProfessional |
URL | https://w3id.org/vaccination#healthProfessional |
Expected Value | String |
The country in which the vaccine recipient was vaccinated, MUST be a valid country code as per ISO 3166.
Term | countryOfVaccination |
URL | https://w3id.org/vaccination#countryOfVaccination |
Expected Value | String |
Date on which the next vaccination should be administered to the vaccine recipient.
Term | nextVaccinationDate |
URL | https://w3id.org/vaccination#nextVaccinationDate |
Expected Value | Datetime |
The recipient of the vaccine.
Term | recipient |
URL | https://w3id.org/vaccination#recipient |
Expected Value | https://w3id.org/vaccination#VaccineRecipient |
The details of vaccine administered.
Term | vaccine |
URL | https://w3id.org/vaccination#VaccineEventVaccine |
Expected Value | https://w3id.org/vaccination#Vaccine |
This document specifies the following terms for expressing the details about the vaccine recipient.
Term | Description |
---|---|
birthDate | The date on which the vaccine recipient was born. |
familyName | The name of the family with which the vaccine recipient identifies. |
givenName | The non-family name with which the vaccine recipient identifies. |
gender | The gender of the vaccine recipient. |
The date on which the vaccine recipient was born.
Term | birthDate |
URL | http://schema.org/birthDate |
Expected Value | Datetime |
The date on which the vaccine recipient was born.
Term | familyName |
URL | http://schema.org/familyName |
Expected Value | String |
The date on which the vaccine recipient was born.
Term | givenName |
URL | http://schema.org/givenName |
Expected Value | String |
The gender of the vaccine recipient.
Term | gender |
URL | http://schema.org/gender |
Expected Value | String |
This document specifies the following terms for expressing the details about the "Vaccine"
Term | Description |
---|---|
atcCode | Anatomical Therapeutic Chemical Code. |
disease | Disease or agent that the vaccination administered to the recipient provides protection against. |
vaccine | Generic description of the vaccine/prophylaxis or its component(s). |
medicinalProductName | Medicinal product name. |
marketingAuthorizationHolder | Marketing Authorization Holder. |
Anatomical Therapeutic Chemical Code, see [[WHO-ATC-CODE]]
Term | atcCode |
URL | https://w3id.org/vaccination#atcCode |
Expected Value | String |
Disease or agent that the vaccination administered to the recipient provides protection against.
Term | disease |
URL | https://w3id.org/vaccination#disease |
Expected Value | String |
Medicinal product name of the vaccine.
Term | medicinalProductName |
URL | https://w3id.org/vaccination#medicinalProductName |
Expected Value | String |
Marketing authorization holder of the vaccine.
Term | marketingAuthorizationHolder |
URL | https://w3id.org/vaccination#marketingAuthorizationHolder |
Expected Value | String |
This section details the general privacy considerations and specific privacy implications of deploying this specification into production environments.
There are a number of security considerations that implementers should be aware of when processing data described by this specification. Ignoring or not understanding the implications of this section can result in security vulnerabilities.
While this section attempts to highlight a broad set of security considerations, it is not a complete list. Implementers are urged to seek the advice of security and cryptography professionals when implementing mission critical systems using the technology outlined in this specification.
There are a number of accessibility considerations implementers should be aware of when processing data described in this specification. As with any web standards or protocols implementation, ignoring accessibility issues makes this information unusable to a large subset of the population. It is important to follow accessibility guidelines and standards, such as [[WCAG21]], to ensure all people, regardless of ability, can make use of this data. This is especially important when establishing systems utilizing cryptography, which have historically created problems for assistive technologies.
This section details the general accessibility considerations to take into account when utilizing this data model.
There are a number of internationalization considerations implementers should be aware of when publishing data described in this specification. As with any web standards or protocols implementation, ignoring internationalization makes it difficult for data to be produced and consumed across a disparate set of languages and societies, which would limit the applicability of the specification and significantly diminish its value as a standard.
This section outlines general internationalization considerations to take into account when utilizing this data model.