10
10
-->
11
11
< script src ='https://www.w3.org/Tools/respec/respec-w3c ' class ='remove '> </ script >
12
12
< 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 >
14
14
< script class ="remove ">
15
15
var respecConfig = {
16
16
// specification status (e.g., WD, LCWD, NOTE, etc.). If in doubt use ED.
24
24
subtitle : "Privacy-preserving status information for Verifiable Credentials" ,
25
25
26
26
// if you wish the publication date to be other than today, set this
27
- publishDate : "2024-05-21" ,
27
+ // publishDate: "2024-05-21",
28
28
crEnd : "2024-06-21" ,
29
29
implementationReportURI : "https://w3c.github.io/vc-bitstring-status-list-test-suite/" ,
30
30
//previousMaturity: "CG-FINAL",
@@ -556,6 +556,15 @@ <h3>BitstringStatusListEntry</h3>
556
556
</ tr >
557
557
</ thead >
558
558
< 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 >
559
568
< tr >
560
569
< td > `revocation`</ td >
561
570
< td >
@@ -875,6 +884,14 @@ <h3>BitstringStatusListCredential</h3>
875
884
</ tr >
876
885
</ thead >
877
886
< 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 >
878
895
< tr >
879
896
< td > `revocation`</ td >
880
897
< td >
@@ -920,13 +937,13 @@ <h3>BitstringStatusListCredential</h3>
920
937
< tr >
921
938
< td id ="ttl "> credentialSubject.ttl</ td >
922
939
< 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.
930
947
</ td >
931
948
</ tr >
932
949
</ tbody >
@@ -1308,7 +1325,7 @@ <h2>Media Types</h2>
1308
1325
</ p >
1309
1326
< p >
1310
1327
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
1312
1329
secured with SD-JWT might have media type `application/sd-jwt`.
1313
1330
</ p >
1314
1331
< p >
@@ -1329,6 +1346,139 @@ <h2>Media Types</h2>
1329
1346
</ p >
1330
1347
</ section >
1331
1348
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 `<MEDIA_TYPE> ` and `<DOCUMENT_URL> ` with the
1430
+ appropriate values) through a modern UNIX-like OS command line interface:
1431
+ `curl -sL -H "Accept: <MEDIA_TYPE> " <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
+
1332
1482
< section class ="informative ">
1333
1483
< h2 > Privacy Considerations</ h2 >
1334
1484
@@ -1440,39 +1590,23 @@ <h3>Decoy Values</h3>
1440
1590
< p >
1441
1591
[=Issuer=] use of decoy values in status lists has been explored as a mechanism
1442
1592
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.
1467
1600
</ p >
1468
1601
< 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.
1474
1609
</ p >
1475
- -->
1476
1610
</ section >
1477
1611
1478
1612
< section class ="informative ">
@@ -1661,6 +1795,47 @@ <h3>Bitstring Encoding</h3>
1661
1795
</ p >
1662
1796
</ section >
1663
1797
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
+
1664
1839
</ section >
1665
1840
1666
1841
< section class ="informative ">
0 commit comments