Skip to content

Verifying Credentials (Credential Studio)

5. Verifying Credentials in the Credential Studio

Section titled “5. Verifying Credentials in the Credential Studio”

The Credential Studio (/verify) audits W3C Verifiable Credentials (VCs). It accepts credentials via direct pasting, JSON drag-and-drop, or seamless handoff from the Universal Command Bar.

┌────────────────────────────────────────────────────────────────────────────────────────┐
│ CREDENTIAL STUDIO │
├───────────────────────────────────────────┬────────────────────────────────────────────┤
│ Input Area │ Forensic Findings │
│ • Paste JSON-LD or compact JWT │ • Status: VALID / REVOKED / INDETERMINATE │
│ • Load W3C EdDSA JCS test vector │ • Proof Suite: eddsa-jcs-2022 │
│ • Drag & drop .json / .jwt (≤ 512 KiB) │ • Issuer Resolution & Assertion Binding │
│ │ • Fail-Closed Status List Bitstrip │
└───────────────────────────────────────────┴────────────────────────────────────────────┘
Standard / Profile Wire Format Proof Mechanism Cryptosuite / Alg Status in DID.is
W3C VC Data Model 2.0 JSON-LD Data Integrity eddsa-jcs-2022 Fully Implemented
W3C VC Data Model 2.0 JSON-LD Data Integrity ecdsa-jcs-2019 (P-256) Fully Implemented
W3C VC-JOSE (typ: vc+jwt) Compact JWS JOSE Header + JWT EdDSA, ES256, ES256K Fully Implemented
W3C VC-JWT 1.1 (Legacy) Compact JWS vc claim wrapper EdDSA, ES256, ES256K Fully Implemented
RDF Canonicalization JSON-LD Data Integrity eddsa-rdfc-2022, ecdsa-rdfc-2019 Unsupported (UNSUPPORTED)
Selective Disclosure SD-JWT / BBS Data Integrity ecdsa-sd-2023, bbs-2023 Unsupported (UNSUPPORTED)

A valid signature alone does not make a credential valid. DID.is enforces strict relationship binding:

  1. Resolves the issuer DID specified in the credential.
  2. Locates the verification key identified by proof.verificationMethod or the JWT kid.
  3. Verifies that this key is explicitly authorized in the issuer’s assertionMethod relationship.
  4. If a credential is signed by a key that is only authorized for authentication or keyAgreement, verification fails with INVALID_PURPOSE.

Credential revocation audits strictly comply with W3C Bitstring Status List v1.0 and StatusList2021:

  • The Fail-Closed Mandate: If the status list URL is unreachable, times out, serves invalid JSON, or fails signature verification, the credential’s status is reported as INDETERMINATE. DID.is never assumes a credential is valid when revocation cannot be proven.
  • Decompression Bomb Protection: Decompressed GZIP status streams are hard-capped at 16 MiB.
  • Minimum Entry Threshold: Lists must declare a minimum of 131,072 bits (16 KiB compressed) to defeat truncated list attacks.
  • Status Meanings: Bit 0 = Active, Bit 1 = Revoked (or Suspended, matching the list’s declared purpose).

The Credential Studio renders an interactive forensic bitstrip showing the bit window surrounding the credential’s assigned index:

Status bits 1024 to 1055 (Credential index: 1042):
[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][1][0][0][0][0][0][0][0][0][0][0][0][0][0][0]
▲
Index 1042: 1 (REVOKED)

Strict RFC 8785 Canonicalization & Ambiguity Rejection

Section titled “Strict RFC 8785 Canonicalization & Ambiguity Rejection”

To prevent JSON interoperability attacks:

  • Canonical Serialization: Uses RFC 8785 (JCS) with strict UTF-16 member sorting and ryu-js ECMAScript-compliant 64-bit float formatting (rfc8785-binary64-v1).
  • Recursive Duplicate Key Detection: The input parser (StrictJson) scans payloads recursively. Any payload containing duplicate object keys (e.g., {"alg":"EdDSA", "alg":"none"}) is rejected immediately with HTTP 400 INVALID_REQUEST before cryptographic evaluation.