Skip to content

Commit 471d31d

Browse files
authored
Merge branch 'main' into adding-context-references-to-vocabulary-file
2 parents 3ce6490 + ba5f8a2 commit 471d31d

File tree

5 files changed

+231
-47
lines changed

5 files changed

+231
-47
lines changed

.github/workflows/auto-publish.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# .github/workflows/auto-publish.yml
2-
name: CI
2+
name: Publish to W3C
33
on:
44
pull_request: {}
55
push:

.github/workflows/gh-pages.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ jobs:
2424
runs-on: ubuntu-latest
2525
steps:
2626
- name: Checkout
27-
uses: actions/checkout/@v3
27+
uses: actions/checkout/@v4
2828
- name: Setup Node 18
29-
uses: actions/setup-node@v3
29+
uses: actions/setup-node@v4
3030
with:
3131
node-version: 18
3232
- name: Generate vocabulary
@@ -36,12 +36,12 @@ jobs:
3636
./node_modules/.bin/yml2vocab -v vocab/vocabulary.yml -t vocab/template.html
3737
rm -rf node_modules
3838
- name: Setup Github Pages
39-
uses: actions/configure-pages@v2
39+
uses: actions/configure-pages@v5
4040
- name: Upload artifact
41-
uses: actions/upload-pages-artifact@v1
41+
uses: actions/upload-pages-artifact@v3
4242
with:
4343
# Upload entire repository
4444
path: '.'
4545
- name: Deploy to GitHub Pages
4646
id: deployment
47-
uses: actions/deploy-pages@v1
47+
uses: actions/deploy-pages@v4

.github/workflows/lint-vocab.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Lint VC Vocabulary
1+
name: Lint the RDF vocabulary
22
on:
33
pull_request:
44
paths:

index.html

+215-40
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
-->
1111
<script src='https://www.w3.org/Tools/respec/respec-w3c' class='remove'></script>
1212
<script class="remove"
13-
src="https://cdn.jsdelivr.net/gh/w3c/respec-vc@3.1.0/dist/main.js"></script>
13+
src="https://cdn.jsdelivr.net/gh/w3c/respec-vc@3.3.5/dist/main.js"></script>
1414
<script class="remove">
1515
var respecConfig = {
1616
// specification status (e.g., WD, LCWD, NOTE, etc.). If in doubt use ED.
@@ -24,7 +24,7 @@
2424
subtitle: "Privacy-preserving status information for Verifiable Credentials",
2525

2626
// if you wish the publication date to be other than today, set this
27-
publishDate: "2024-05-21",
27+
//publishDate: "2024-05-21",
2828
crEnd: "2024-06-21",
2929
implementationReportURI: "https://w3c.github.io/vc-bitstring-status-list-test-suite/",
3030
//previousMaturity: "CG-FINAL",
@@ -556,6 +556,15 @@ <h3>BitstringStatusListEntry</h3>
556556
</tr>
557557
</thead>
558558
<tbody>
559+
<tr>
560+
<td>`refresh`</td>
561+
<td>
562+
Used to signal that an updated [=verifiable credential=] is available via the
563+
credential's <a data-cite="VC-DATA-MODEL-2.0#refreshing">refresh service</a>
564+
feature. This status does not invalidate the [=verifiable credential=] and is
565+
not reversible.
566+
</td>
567+
</tr>
559568
<tr>
560569
<td>`revocation`</td>
561570
<td>
@@ -875,6 +884,14 @@ <h3>BitstringStatusListCredential</h3>
875884
</tr>
876885
</thead>
877886
<tbody>
887+
<tr>
888+
<td>`refresh`</td>
889+
<td>
890+
Used to signal that an updated [=verifiable credential=] is available via the
891+
credential's <a data-cite="VC-DATA-MODEL-2.0#refreshing">refresh service</a>
892+
feature. This status does not invalidate the [=verifiable credential=] and is not reversible.
893+
</td>
894+
</tr>
878895
<tr>
879896
<td>`revocation`</td>
880897
<td>
@@ -920,13 +937,13 @@ <h3>BitstringStatusListCredential</h3>
920937
<tr>
921938
<td id="ttl">credentialSubject.ttl</td>
922939
<td>
923-
The `ttl` indicates the "time to live" in milliseconds. This property MAY be
924-
present. If not present, implementers MUST use a value of `300000` for this
925-
property. A verifier MUST NOT use a cached `BitstringStatusListCredential` that
926-
was cached for more than the `ttl` duration prior to the start of verification
927-
operation on a [=verifiable credential=]. Implementations that publish the
928-
status list SHOULD align any protocol-specific caching information, such as the
929-
HTTP `Cache-Control` header, with the value in this field.
940+
The `ttl` is an OPTIONAL property that indicates the "time to live" in
941+
milliseconds before a refresh SHOULD be attempted. If not present, no default
942+
value is assumed. The value does not override or replace the
943+
<a data-cite="VC-DATA-MODEL-2.0#validity-period">validity period</a>
944+
of the `BitstringStatusList`. Implementations that publish the status list
945+
SHOULD align any protocol-specific caching information, such as the HTTP
946+
`Cache-Control` header, with the value in this field.
930947
</td>
931948
</tr>
932949
</tbody>
@@ -1308,7 +1325,7 @@ <h2>Media Types</h2>
13081325
</p>
13091326
<p>
13101327
For example, a verifiable credential secured with Data Integrity Proofs might
1311-
have media type `application/vc+ld+json`, while a verifiable credential
1328+
have media type `application/vc`, while a verifiable credential
13121329
secured with SD-JWT might have media type `application/sd-jwt`.
13131330
</p>
13141331
<p>
@@ -1329,6 +1346,139 @@ <h2>Media Types</h2>
13291346
</p>
13301347
</section>
13311348

1349+
<section>
1350+
<h2>Contexts and Vocabularies</h2>
1351+
1352+
<p class="issue" title="(AT RISK) Hash values might change during Candidate Recommendation">
1353+
This section lists cryptographic hash values that might change during the
1354+
Candidate Recommendation phase based on implementer feedback that requires
1355+
the referenced files to be modified.
1356+
</p>
1357+
1358+
<section>
1359+
<h2>Vocabulary</h2>
1360+
<p>
1361+
The terms defined in this specification are also part of the RDF <a
1362+
data-cite="RDF-CONCEPTS#vocabularies">vocabulary namespace</a>
1363+
<a href="https://www.w3.org/ns/credentials/status">https://www.w3.org/ns/credentials/status#</a>. For any
1364+
`TERM`, the relevant URL is of the form `https://www.w3.org/ns/credentials/status#TERM`.
1365+
Implementations that use RDF processing and rely on this specification MUST use
1366+
these URLs.
1367+
</p>
1368+
1369+
<p>
1370+
When dereferencing the
1371+
<a href="https://www.w3.org/ns/credentials/status">https://www.w3.org/ns/credentials/status#</a> URL, the
1372+
media type of the data that is returned depends on HTTP content negotiation.
1373+
These are as follows:
1374+
</p>
1375+
1376+
<table class="simple">
1377+
<thead>
1378+
<tr>
1379+
<th>Media Type</th>
1380+
<th>Description and Hash</th>
1381+
</tr>
1382+
</thead>
1383+
<tbody>
1384+
<tr>
1385+
<td>
1386+
application/ld+json
1387+
</td>
1388+
<td>
1389+
The vocabulary in JSON-LD format [[?JSON-LD11]].<br>
1390+
1391+
<strong>SHA2-256 Digest:</strong>
1392+
<code><span class="vc-hash"
1393+
data-hash-url="https://w3c.github.io/vc-bitstring-status-list/vocab/vocabulary.jsonld"
1394+
data-hash-format="openssl dgst -sha256" /></code>
1395+
</td>
1396+
</tr>
1397+
<tr>
1398+
<td>
1399+
text/turtle
1400+
</td>
1401+
<td>
1402+
The vocabulary in Turtle format [[?TURTLE]].<br>
1403+
1404+
<strong>SHA2-256 Digest:</strong>
1405+
<code><span class="vc-hash"
1406+
data-hash-url="https://w3c.github.io/vc-bitstring-status-list/vocab/vocabulary.ttl"
1407+
data-hash-format="openssl dgst -sha256" /></code>
1408+
</td>
1409+
</tr>
1410+
<tr>
1411+
<td>
1412+
text/html
1413+
</td>
1414+
<td>
1415+
The vocabulary in HTML+RDFa Format [[?HTML-RDFA]].<br>
1416+
1417+
1418+
<strong>SHA2-256 Digest:</strong>
1419+
<code><span class="vc-hash"
1420+
data-hash-url="https://w3c.github.io/vc-bitstring-status-list/vocab/vocabulary.html"
1421+
data-hash-format="openssl dgst -sha256" /></code>
1422+
</td>
1423+
</tr>
1424+
</tbody>
1425+
</table>
1426+
1427+
<p>
1428+
It is possible to confirm the cryptographic digests above by running a command
1429+
like the following (replacing `&lt;MEDIA_TYPE>` and `&lt;DOCUMENT_URL>` with the
1430+
appropriate values) through a modern UNIX-like OS command line interface:
1431+
`curl -sL -H "Accept: &lt;MEDIA_TYPE>" &lt;DOCUMENT_URL> | openssl dgst -sha256`
1432+
</p>
1433+
</section>
1434+
1435+
<section>
1436+
<h3>JSON-LD context</h3>
1437+
<p>
1438+
Implementations that perform JSON-LD processing MUST treat the following JSON-LD
1439+
context URL as already resolved, where the resolved document matches the
1440+
corresponding hash value below:
1441+
</p>
1442+
1443+
<table class="simple">
1444+
<thead>
1445+
<th>Context URL and Hash</th>
1446+
</thead>
1447+
<tbody>
1448+
<tr>
1449+
<td style="white-space: nowrap;">
1450+
<strong>URL:</strong> https://www.w3.org/ns/credentials/status/v1<br>
1451+
<strong>SHA2-256 Digest:</strong><br>
1452+
<code><span class="vc-hash"
1453+
data-hash-url="https://w3c.github.io/vc-bitstring-status-list/contexts/v1.jsonld"
1454+
data-hash-format="openssl dgst -sha256" /></code>
1455+
</td>
1456+
</tr>
1457+
</tbody>
1458+
</table>
1459+
1460+
<p>
1461+
It is possible to confirm the cryptographic digests listed above by running a
1462+
command like the following through a modern UNIX-like OS command line interface:
1463+
`curl -sL -H "Accept: application/ld+json" https://www.w3.org/ns/credentials/status/v1 | openssl dgst -sha256`
1464+
</p>
1465+
1466+
<p>
1467+
The vocabulary terms that the JSON-LD contexts resolve to
1468+
are in the <a href="https://www.w3.org/ns/credentials/status">https://www.w3.org/ns/credentials/status#</a>
1469+
namespace. See Section [[[#vocabulary]]] for further details.
1470+
</p>
1471+
1472+
<p class="note">
1473+
Applications or specifications may define mappings to the vocabulary URLs using
1474+
their own JSON-LD contexts. For example, the JSON-LD context definitions
1475+
referred to in this section are also a part of the
1476+
`https://www.w3.org/ns/credentials/v2` context, defined by the
1477+
[[[?VC-DATA-MODEL-2.0]]] specification.
1478+
</p>
1479+
</section>
1480+
</section>
1481+
13321482
<section class="informative">
13331483
<h2>Privacy Considerations</h2>
13341484

@@ -1440,39 +1590,23 @@ <h3>Decoy Values</h3>
14401590
<p>
14411591
[=Issuer=] use of decoy values in status lists has been explored as a mechanism
14421592
to increase the privacy of [=subjects=]. While algorithms for employing decoy
1443-
values are out of scope for this specification, implementers are advised that...
1444-
</p>
1445-
1446-
<p class="issue" data-number="150">
1447-
The Working Group is currently discussing what sort of guidance to provide
1448-
for decoy values. It has been suggested that decoy values are, in general,
1449-
harmful to this specification's privacy characteristics. However, the group
1450-
has not provided a complete analysis and thorough review for that assertion.
1451-
The analysis might result in some use cases where decoy values are helpful, or
1452-
might conclude that decoy values are, in general, harmful. Further
1453-
thought is currently being put into the language around decoy values and
1454-
it is expected that this language will be finalized during the Candidate
1455-
Recommendation phase.
1456-
</p>
1457-
<!-- TEXT BELOW NEEDS TO BE FURTHER ANALYZED AND JUSTIFIED
1458-
the use of decoy values does not improve privacy and can harm privacy in
1459-
most cases.
1460-
</p>
1461-
<p>
1462-
When indexes of status list entries are allocated in a random fashion, which is
1463-
the suggested mode of operation for this specification, adding decoys harms
1464-
privacy because it reduces the true group size by the number of decoys added
1465-
to the group. A random allocation of indexes inherently hides the true size of
1466-
the group without reducing it, ensuring that decoys are not necessary.
1593+
values are out of scope for this specification, implementers are advised that
1594+
the use of decoy values can harm privacy if the decoy values do not accurately
1595+
simulate the population associated with the status list. If decoy values can
1596+
be distinguished from real values, the anonymity provided in the set will be
1597+
reduced by the number of decoy values that are detectable as such. The most
1598+
privacy-preserving status list is one that never changes, since the behavior
1599+
of the population cannot be determined if no observable events occur.
14671600
</p>
14681601
<p>
1469-
There might be use cases where decoy values provide benefits. Implementers are
1470-
cautioned that no such use cases were clearly identifiable by the group that
1471-
created this specification. Therefore, the use of decoys is discouraged for
1472-
most if not all use cases, as random allocation of status list entry indexes
1473-
provides adequate protection.
1602+
Given how difficult it is to statistically simulate status entries for
1603+
a population, and that general advice cannot be given since
1604+
[=verifiable credentials=] serve a broad set of use cases, implementers
1605+
are advised to allocate status list entry indexes randomly, and to minimize —
1606+
optimally to never — the rate at which status entries are changed. Allocation
1607+
of status list entries preserves privacy best when it does not trigger any
1608+
observable change of a status list.
14741609
</p>
1475-
-->
14761610
</section>
14771611

14781612
<section class="informative">
@@ -1661,6 +1795,47 @@ <h3>Bitstring Encoding</h3>
16611795
</p>
16621796
</section>
16631797

1798+
<section class="informative">
1799+
<h3>Validity Periods</h3>
1800+
1801+
<p>
1802+
The <a data-cite="?VC-DATA-MODEL-2.0#validity-period">validity period</a> that
1803+
an issuer might choose to express in a status list is dependent on a variety of
1804+
factors including:
1805+
</p>
1806+
<ul>
1807+
<li>
1808+
How often do status values change? In real-time? Daily? Weekly? Monthly? Other?
1809+
</li>
1810+
<li>
1811+
Is there a regulatory requirement that compels an [=issuer=] to notify a
1812+
[=verifier=] that the status of a [=verifiable credential=] has changed?
1813+
</li>
1814+
<li>
1815+
Is there a period of time after which an [=issuer=] would incur reputational
1816+
damage by not notifying a [=verifier=] of a status change?
1817+
</li>
1818+
<li>
1819+
Is there any expectation that a [=verifier=] will not accept a
1820+
[=verifiable credential=] with a status list that does not expire for a
1821+
period of time it deems excessive?
1822+
</li>
1823+
<li>
1824+
Will a short validity period for a status list cause a significant network
1825+
bandwidth or computing burden for an [=issuer=] or a [=verifier=]? Might
1826+
this burden be mitigated by a longer validity period?
1827+
</li>
1828+
</ul>
1829+
1830+
<p>
1831+
Since these factors vary with the ecosystem and credential type, there is no
1832+
minimum or maximum validity period that is suggested for all status lists.
1833+
[=Issuers=] will need to consider various factors that are specific to their
1834+
[=verifiable credential=] types and choose validity periods that will strike
1835+
the right balance in their ecosystem.
1836+
</p>
1837+
</section>
1838+
16641839
</section>
16651840

16661841
<section class="informative">

0 commit comments

Comments
 (0)