Skip to content
85 changes: 34 additions & 51 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<title>Verifiable Credential Status List v2021</title>
<title>Verifiable Credential Bit String Status List v1.0</title>
<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>
<!--
=== NOTA BENE ===
Expand All @@ -19,7 +19,7 @@
group: "vc",

// the specification's short name, as in http://www.w3.org/TR/short-name/
shortName: "vc-status-list",
shortName: "vc-bit-string-status-list",

// subtitle for the spec
subtitle: "Privacy-preserving status information for Verifiable Credentials",
Expand Down Expand Up @@ -155,28 +155,11 @@
<p>
This specification describes a privacy-preserving, space-efficient, and
high-performance mechanism for publishing status information such as
suspension or revocation of Verifiable Credentials.
suspension or revocation of Verifiable Credentials through use of bitstrings.
</p>
</section>

<section id='sotd'>
<p>
This document is experimental and is undergoing heavy development.
It is inadvisable to implement the specification in its current form.
An <a href="https://github.com/digitalbazaar/vc-status-list">experimental
implementation</a> is available.
</p>
<!--p>
Comments regarding all aspects of this document are welcome.
Please file issues
directly on <a href="https://github.com/w3c-ccg/vc-status-list-2021/issues/">GitHub</a>,
or send them to
<a href="mailto:public-credentials@w3.org">public-credentials@w3.org</a>
(<a href="mailto:public-credentials-request@w3.org?subject=subscribe">subscribe</a>,
<a href="https://lists.w3.org/Archives/Public/public-credentials/">archives</a>).
</p-->

</section>
<section id='sotd'></section>

<section class="informative">
<h2>Introduction</h2>
Expand Down Expand Up @@ -288,7 +271,7 @@ <h2>Data Model</h2>
</p>

<section>
<h3>StatusList2021Entry</h3>
<h3>BitStringStatusListEntry</h3>

<p>
When an <a>issuer</a> desires to enable status information for a
Expand All @@ -314,14 +297,14 @@ <h3>StatusList2021Entry</h3>
credential</a>. It MUST NOT be the URL for the status list. The value is
not used during the verification or validation process, and does not need to be
related to the `statusListCredential` value. If necessary, the value can be
used to uniquely identify the `StatusList2021Entry` object, such as when it is
used to uniquely identify the `BitStringStatusListEntry` object, such as when it is
stored in a database.
</td>
</tr>
<tr>
<td>type</td>
<td>
The <code>type</code> property MUST be <code>StatusList2021Entry</code>.
The <code>type</code> property MUST be <code>BitStringStatusListEntry</code>.
</td>
</tr>
<tr>
Expand Down Expand Up @@ -368,15 +351,15 @@ <h3>StatusList2021Entry</h3>
<td>statusListCredential</td>
<td>
The <code>statusListCredential</code> property MUST be a URL to a
<a>verifiable credential</a>. When the URL is dereferenced, the result
MUST be a <a>verifiable credential</a> that contains a <code>type</code>
property that includes the <code>StatusList2021Credential</code> value.
<a>verifiable credential</a>. When the URL is dereferenced, the resulting
<a>verifiable credential</a> MUST have <code>type</code> property that
includes the <code>BitStringStatusListCredential</code> value.
</td>
</tr>
</tbody>
</table>

<pre class="example nohighlight" title="Example StatusList2021Entry">
<pre class="example nohighlight" title="Example StatusListCredential">
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
Expand All @@ -386,8 +369,8 @@ <h3>StatusList2021Entry</h3>
"issuer": "did:example:12345",
"issued": "2021-04-05T14:27:42Z",
<span class="highlight">"credentialStatus": {
"id": "https://example.com/credentials/status/3#94567",
"type": "StatusList2021Entry",
"id": "https://example.com/credentials/status/3#94567"
"type": "BitStringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": "94567",
"statusListCredential": "https://example.com/credentials/status/3"
Expand All @@ -402,7 +385,7 @@ <h3>StatusList2021Entry</h3>
</section>

<section>
<h3>StatusList2021Credential</h3>
<h3>BitStringStatusListCredential</h3>

<p>
When a status list is published, the result is a <a>verifiable
Expand All @@ -425,15 +408,15 @@ <h3>StatusList2021Credential</h3>
The <a>verifiable credential</a> that contains the status list MAY
express an <code>id</code> property that matches the value specified in
<code>statusListCredential</code> for the corresponding
<code>StatusList2021Entry</code> (see <a href="#statuslist2021entry"></a>).
<code>BitStringStatusListEntry</code> (see <a href="#bitstringstatuslistentry"></a>).
</td>
</tr>
<tr>
<td>type</td>
<td>
The <a>verifiable credential</a> that contains the status list MUST
express a <code>type</code> property that includes the
<code>StatusList2021Credential</code> value.
<code>BitStringStatusListCredential</code> value.
</td>
</tr>
<tr>
Expand All @@ -458,7 +441,7 @@ <h3>StatusList2021Credential</h3>
<td>credentialSubject.type</td>
<td>
The <code>type</code> of the credential <a>subject</a>, which is the
status list, MUST be <code>StatusList2021</code>.
status list, MUST be <code>BitStringStatusList</code>.
</td>
</tr>
<tr>
Expand Down Expand Up @@ -524,7 +507,7 @@ <h3>StatusList2021Credential</h3>
The <code>ttl</code> indicates the "time to live" in milliseconds.
This property MAY be present. If not present, implementers MUST
use a value of <code>300000</code> for this property. A verifier
MUST NOT use a cached <code>StatusList2021Credential</code> that was
MUST NOT use a cached <code>BitstringStatusListCredential</code> that was
cached for more than the <code>ttl</code> duration prior to the
start of verification operation on a <a>verifiable credential</a>.
Implementations that publish the status list SHOULD align
Expand Down Expand Up @@ -594,18 +577,18 @@ <h3>StatusList2021Credential</h3>
</tbody>
</table>

<pre class="example nohighlight" title="Example StatusList2021Credential">
<pre class="example nohighlight" title="Example BitStringStatusListCredential">
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
],
"id": "<span class="highlight">https://example.com/credentials/status/3</span>",
"type": ["VerifiableCredential", "<span class="highlight">StatusList2021Credential</span>"],
"type": ["VerifiableCredential", "<span class="highlight">BitStringStatusListCredential</span>"],
"issuer": "did:example:12345",
"issued": "2021-04-05T14:27:40Z",
"credentialSubject": {
"id": "https://example.com/status/3#list",
"type": "<span class="highlight">StatusList2021</span>",
"type": "<span class="highlight">BitStringStatusList</span>",
"statusPurpose": "<span class="highlight">revocation</span>",
"encodedList": "<span class="highlight">H4sIAAAAAAAAA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA</span>"
},
Expand All @@ -615,18 +598,18 @@ <h3>StatusList2021Credential</h3>
<p class="issue" data-number="73" title="Design of multiple status messages is not finalized.">
The Working Group is still discussing the unification of a design between status lists with a single state (such as "revoked" or "suspended") and status lists with multiple states (exposed via a series of status messages). We are seeking implementer feedback on what a unified design should look like from an ease of implementation, privacy, and security standpoint.
</p>
<pre class="example nohighlight" title="Example StatusList2021Credential">
<pre class="example nohighlight" title="Example BitStringStatusListCredential">
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
],
"id": "<span class="highlight">https://example.com/credentials/status/3</span>",
"type": ["VerifiableCredential", "<span class="highlight">StatusList2021Credential</span>"],
"type": ["VerifiableCredential", "<span class="highlight">BitStringStatusListCredential</span>"],
"issuer": "did:example:12345",
"issued": "2021-04-05T14:27:40Z",
"credentialSubject": {
"id": "https://example.com/status/3#list",
"type": "<span class="highlight">StatusList2021</span>",
"type": "<span class="highlight">BitStringStatusList</span>",
"ttl": 500,
"statusPurpose": "<span class="highlight">status</span>",
"reference": "https://example.org/status-dictionary/",
Expand Down Expand Up @@ -659,7 +642,7 @@ <h3>Generate Algorithm</h3>
<p>
The following process, or one generating the exact output, MUST be followed
when producing a
<a href="#statuslist2021credential">StatusList2021Credential</a>:
<a href="#bitstringstatuslistcredential">BitStringStatusListCredential</a>:
</p>

<ol class="algorithm">
Expand All @@ -669,7 +652,7 @@ <h3>Generate Algorithm</h3>
</li>
<li>
Let <strong>RLC</strong> be an unsigned
<a href="#statuslist2021credential">StatusList2021Credential</a>
<a href="#bitstringstatuslistcredential">BitStringStatusListCredential</a>
without the <code>encodedList</code> property set.
</li>
<li>
Expand All @@ -693,14 +676,14 @@ <h3>Validate Algorithm</h3>
<p>
The following process, or one generating the exact output, MUST be followed
when validating a <a>verifiable credential</a> that is contained in a
<a href="#statuslist2021credential">StatusList2021Credential</a>:
<a href="#bitstringstatuslistcredential">BitStringStatusListCredential</a>:
</p>

<ol class="algorithm">
<li>
Let <strong>credentialToValidate</strong> be a <a>verifiable credential</a>
containing a <code>credentialStatus</code> entry that is a
<a href="#statuslist2021entry">StatusList2021Entry</a>.
<a href="#bitstringstatuslistentry">BitStringStatusListEntry</a>.
</li>
<li>
Let <strong>status purpose</strong> be the value of <code>statusPurpose</code>
Expand All @@ -719,12 +702,12 @@ <h3>Validate Algorithm</h3>
<li>
Let <strong>compressed bitstring</strong> be the value of the
<code>encodedList</code> property of the
<a href="#statuslist2021credential">StatusList2021Credential</a>.
<a href="#bitstringstatuslistcredential">BitStringStatusListCredential</a>.
</li>
<li>
Let <strong>credentialIndex</strong> be the value of the
<code>statusListIndex</code> property of the
<a href="#statuslist2021entry">StatusList2021Entry</a>.
<a href="#bitstringstatuslistentry">BitStringStatusListEntry</a>.
</li>
<li>
Generate a <strong>revocation bitstring</strong> by passing
Expand Down Expand Up @@ -901,7 +884,7 @@ <h3>Bitstring Encoding</h3>
encode and decode bitstrings. Failure to do so can result in checking the
wrong bitstring index for a given credential, leading to a misinterpretation
of its present state (e.g., mistaking a revoked status for an unrevoked
status). As stated in Section <a href="#statuslist2021credential"></a>,
status). As stated in Section <a href="#bitstringstatuslistcredential"></a>,
bitstrings are encoded such that the first (zeroth) index refers to the
left-most bit of the bitstring array. The diagram below demonstrates the
proper layout for an uncompressed bitstring.
Expand Down Expand Up @@ -996,7 +979,7 @@ <h2>Revocable Verifiable Credential</h2>
"validFrom": "2021-04-05T14:27:42Z",
<span class="highlight">"credentialStatus": {
"id": "https://example.com/credentials/status/3#94567",
"type": "StatusList2021Entry",
"type": "BitStringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": "94567",
"statusListCredential": "https://example.com/credentials/status/3"
Expand All @@ -1019,12 +1002,12 @@ <h2>Status List Verifiable Credential</h2>
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "<span class="highlight">https://example.com/credentials/status/3</span>",
"type": ["VerifiableCredential", "<span class="highlight">StatusList2021Credential</span>"],
"type": ["VerifiableCredential", "<span class="highlight">BitStringStatusListCredential</span>"],
"issuer": "did:example:12345",
"validFrom": "2021-04-05T14:27:40Z",
"credentialSubject": {
"id": "https://example.com/status/3#list",
"type": "<span class="highlight">StatusList2021</span>",
"type": "<span class="highlight">BitStringStatusList</span>",
"statusPurpose": "<span class="highlight">revocation</span>",
"encodedList": "<span class="highlight">H4sIAAAAAAAAA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA</span>"
}
Expand Down