Revocation
Overview
You can use MATTR VII to change the status of issued mDocs if you ever need to revoke or suspend them for any reason. Verifiers can then obtain the status of presented mDoc in a way that preserves holders’ privacy.
MATTR’s implementation of mDocs revocation is based on the IETF Token Status List draft. A revocable mDoc includes a reference to a status list which is managed by the issuer. The list contains the revocation status of multiple credentials, and each credential references the index of its status within a specific status list.
Status lists are automatically created and managed when you use your MATTR VII tenant to issue revocable mDocs. They are publicly available and mainly consumed by external verifiers to check the status of presented mDocs.
When a relying party retrieves a status list, the issuer cannot tell what specific mDoc they are checking the status for. This means the issuer does not know how often or to whom an mDoc is being presented, maintaining holder`s privacy.
As mDocs revocation is an emerging standard, relying parties are not enforced to implement it. As a result, relying parties which have not implemented revocation checks might assess a presented mDoc as valid, even when it was revoked by the issuer.
Status values
The following status are available for revocable mDocs:
- Valid: The mDoc is valid. Valid mDocs can be updated to
Invalid
orSuspended
. - Invalid: The mDoc is revoked. This state is irreversible - once an mDoc status was updated
to
Invalid
, it cannot be updated to any other status. This value should be used for permanently revoking an mDoc. - Suspended: The mDoc is temporarily revoked. Suspended mDocs can be updated to
Valid
orInvalid
. This value should be used for temporarily revoking an mDoc.
Revocable mDocs
By default signed mDocs are not revocable. To issue revocable mDocs and enable changing their status
at a later date, the request payload must set
includeStatus
to true
. This can be added when
creating an mDoc credential configuration.
This results in the following:
- The mDoc status is added to a status list.
- The issued mDoc includes a
status
object in its MSO payload that references this status list:
"status": {
"status_list": {
"uri": "https://learn.vii.au01.mattr.global/v2/credentials/mobile/status-lists/f331c9be-f526-4577-bbac-ae93d6228f7a/token",
"idx": 0
}
}
status_list
: References the status list that holds the status information for this mDoc.uri
: Relying parties can use this publicly available endpoint to retrieve the status list token.idx
: Indicates the index of the mDoc status within the referenced status list.
Status list
MATTR VII automatically creates and manages status lists when revocable mDocs are signed.
A status list is a string of characters which can be either 0 or 1. Each credential status is mapped to a position in the list and occupies two characters:
- 00: Valid.
- 01: Invalid.
- 10: Suspended.
Each list can hold the status of up to 500,000 individual mDocs.
Status list tokens
When a relying party attempts to retrieve a status list the response does not include the raw status list, but rather a signed version which is referred to as a status list token. This is a CBOR Web Token which includes the following information in its payload:
iat
: Timestamp when the status list token was signed.sub
: The URI that was used to retrieve the token. This must match theuri
from the mDocstatus
object.exp
: Timestamp at which the token expires and the relying party can no longer use it to check the mDoc status. This prevents relying parties from using locally cached tokens in their verification workflows for too long, and forces them to retrieve a new token with the most up-to-date mDocs status. Defaults to one week from when the token was signed but can be adjusted using a Status list configuration. Regardless of the Status list configuration,exp
can never exceed the validity of the IACA used to sign the Status list token.ttl
(Time To Live): Recommended duration (in seconds) the relying party should use this token before retrieving a new one. This guides best practices for relying parties to ensure they are using the most up-to-date mDocs status in their verification workflows. Defaults to one day but can be adjusted using a Status list configuration. Regardless of the Status list configuration,ttl
can never exceedexp
.status_list
:bits
: Details the number of bits each mDoc occupies in the list (currently two but might be adjusted in the future).lst
: Compressed zlib byte string containing the status of all mDocs included in this status list.
Caching
Status list tokens are automatically managed by MATTR VII and cached for improved performance. Once a new Status list token is signed, it can be cached for a minimum time of 1 minute and up to a maximum of 24 hours. The cache is cleared and a new Status list token is signed in the following scenarios:
- The Status list token has reached its maximal caching limit (24 hours).
- The referenced Status list configuration is updated.
- The status list is updated (e.g. the status of an mDoc that is included in the status list is changed).
IACA deletion
Status list tokens must be signed using the same
IACA that was used to sign the
mDocs that are included in the status list. If this IACA is deleted, all status lists signed by it
are deleted as well, and relying parties will not be able to retrieve new Status list tokens that
include the status of these mDocs. When attempting to manually retrieve the revocation status of
these mDocs, the returned status will be Unknown
.
When an IACA is deleted, relying parties can still use locally cached copies of Status list
token signed by this IACA until they reach their set exp
.
Status list configuration
Issuers can optionally create status list configurations to manually adjust the Status list ttl
and exp
values for a specific docType
. This enables issuers to adjust the duration for which
relying parties can use a status list token before being forced to retrieve a new copy.
Status list configurations are unique per docType
per tenant and are referenced by the Status
lists that include mDocs of this docType
.
If no Status list configuration is available, MATTR VII will automatically create one when a new
Status list is created based on the default ttl
(one day) and exp
(one week) values.
Status list distribution
Any relying party is able to retrieve an Issuer’s status lists and cache them locally to support offline verification workflows.
This is achieved by making a GET request to the
distribution endpoint.
This endpoint is public and does not require any authentication. It is referenced in the issuer’s
IACA X509v3 extensions
element under the 1.3.6.1.4.1.61546.100
OID, as shown in the following
example:
X509v3 extensions:
1.3.6.1.4.1.61546.100:
https://learn.vii.au01.mattr.global/v2/credentials/mobile/status-lists/distribution
The response will include a status_lists
array which details the URIs of the different Status list
tokens that are available on this MATTR VII tenant, as shown in the following example:
{
"status_lists": [
{
"uri": "https://learn.vii.au01.mattr.global/v2/credentials/mobile/status-lists/{id}/token"
}
]
}
Status list tokens signed by expired IACAs are excluded from the response.