SSIMPL Specification

W3C Editor's Draft

More details about this document
This version:
https://ssimpl.org
Latest published version:
https://www.w3.org/ssimpl/
Latest editor's draft:
https://ssimpl.org
History:
Commit history
Editor:
Bastiën G.A. Bonsel
Feedback:
GitHub compilit/ssimpl (pull requests, new issue, open issues)

Abstract

SSIMPL defines a self-sovereign identity framework backed by government-issued trust anchors and a peer-validated ledger.

1. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words MAY, MUST, MUST NOT, and SHOULD in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

Status of This Document

This section describes the status of this document at the time of its publication. A list of current W3C publications and the latest revision of this technical report can be found in the W3C standards and drafts index.

This document was published by the Verifiable Credentials Working Group, the Decentralized Identifier Working Group, and the Web Authentication Working Group as an Editor's Draft.

Publication as an Editor's Draft does not imply endorsement by W3C and its Members.

This is a draft document and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to cite this document as other than a work in progress.

This document was produced by groups operating under the W3C Patent Policy. W3C maintains a public list of any patent disclosures (Verifiable Credentials Working Group), a public list of any patent disclosures (Decentralized Identifier Working Group), and a public list of any patent disclosures (Web Authentication Working Group) made in connection with the deliverables of each group; these pages also include instructions for disclosing a patent. An individual who has actual knowledge of a patent that the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

This document is governed by the 18 August 2025 W3C Process Document.

2. Overview

The SSIMPL protocol defines a Self-Sovereign Identity & Mondial Pseudonymous Ledger framework that allows individuals to maintain control over their digital identity while enabling verifiable credential issuance and revocation. It bridges physical trust anchors (e.g., ePassports) with digital identity systems, ensuring cryptographic verification without reliance on centralized authorities.

SSIMPL addresses two key problems:

  1. User control over digital identity – eliminating reliance on centralized identity providers.
  2. Verification of identities – ensuring online credentials correspond to real individuals using cryptographic proofs.

The protocol balances decentralization, peer authority, and optional server-assisted synchronization for efficiency and availability.

2.1 Identity Trust Model

SSIMPL identities are rooted in cryptographically verifiable credentials derived from Trust Anchors (TA), such as government-issued ePassports. A valid wallet:

This ensures only owners of verified physical credentials can create valid DIDs.

2.2 Levels of Authentication

2.3 Components


3. Wallet Specification

The wallet is a Self-Sovereign means of identification that can be installed and bootstrapped entirely independent of any authority. It solely relies on cryptographic proof.

3.1 Wallet Requirements

Wallets MUST:

Wallets SHOULD:

3.2 Activation Process

  1. User installs wallet.
  2. Wallet prompts for MRZ line.
  3. NFC scan and extraction of passport data.
  4. Creation of Verifiable Credential Root (VCR).
  5. BIP39 mnemonic generation.
  6. BIP32 keypair derivation and storage.
  7. Signing of the VCR.
  8. Submission of the VCR to a Relay Peer.

3.3 Canonical Signature Object Pattern

All cryptographically signed objects in SSIMPL MUST follow a uniform, canonical structure, known as the * SignatureDocument*. This ensures consistency across all signed data, including ledger entries, Verifiable Credential Roots (VCR), revocations, and delta payloads.

3.3.1 Structure

Each signed object MUST include a signatureDocument with the following structure:

  • message — The cryptographic hash of the canonical serialization of the data object. See §Canonicalization Rules.
  • signature — Object containing the signature itself:
    • publicKey — Base64url-encoded public key corresponding to the signing private key.
    • algorithm — Signature algorithm used (e.g., EdDSA, ECDSA).
    • value — Base64url-encoded signature value.
  • signer — DID of the entity producing the signature.

Example (in JSON for clarity):

{
  "message": "<hash-of-canonical-data>",
  "signature": {
    "publicKey": "<multibase-encoded public="" key="">",
    "algorithm": "<algorithm identifier="">",
    "value": "<multibase-encoded signature="">"
  },
  "signer": "<did of="" signer="">"
}

3.3.2 Usage

  • Every signed object in SSIMPL, including LedgerEntry, VerifiableCredentialRoot, revocation entries, and delta updates, MUST include a signatureDocument.
  • The message field MUST be derived from the canonical serialization of the associated data object, ensuring that identical logical objects produce identical hashes.
  • This pattern guarantees interoperability, verifiability, and deterministic ordering for all signed objects across the network.

3.3.3 Rules and Notes

  • Optional fields in the data object MUST NOT affect the canonical hash unless explicitly defined in the canonicalization rules.
  • Implementations MUST reject signatures if the hash does not match the canonicalized data object.
  • Adherence to this pattern is mandatory to ensure correct ledger validation, delta verification, and revocation processing.

This canonical signature object pattern provides a single, consistent approach for proving authorship and integrity across all SSIMPL objects.

---

4. Relay Peer Specification

The Relay Peer is a special kind of Peer in the sense that it is static and reachable over the internet on a fixed hostname. It acts like any other Peer, but it also adds a storage layer for the Ledger and serves as distribution point for the Ledger.

4.1 Relay Peer Discovery and Verification

To enable robust peer-to-peer synchronization while maintaining decentralization, SSIMPL defines a Relay Peer Discovery and Verification Protocol. This allows new Peers to bootstrap securely and verify that Relay Peers are implementing the protocol correctly.


4.1.1 Deterministic Relay Hostnames

Relay Peers are discoverable via a canonical hostname scheme:

  • Hostnames are deterministic, e.g., 0.ssimpl.org9999.ssimpl.org.
  • Each Relay Peer implements a fixed set of endpoints defined by the SSIMPL specification.
  • Peers attempt to connect sequentially or via pseudo-randomized probing across the deterministic range.

Rationale: Deterministic hostnames avoid the need for a centralized list, while still enabling Peers to discover Relay Peers without prior trust assumptions.


4.1.2 Relay Peer Verification Protocol

  1. Connection: Peer attempts a connection to a candidate Relay Peer.
  2. Metadata Exchange: Relay Peer returns:
    • last_epoch (latest ledger epoch)
    • root_hash (canonical ledger root)
    • Timestamp
    • signature_document - Signature over the metadata using the Relay Peer’s DID key
  3. Validation: Peer verifies:
    • root_hash corresponds to canonical ledger rules
    • Timestamp is within an acceptable window
    • Signature is valid and matches the DID key
  4. Challenge-Response (Optional):
    • Peer sends a nonce to the Relay Peer
    • Relay Peer signs the nonce and returns the signature
    • Peer validates the signature to ensure possession of the claimed DID key
  5. Trust Establishment: Peer marks Relay Peer as verified if all checks pass; otherwise, the peer discards the candidate.

4.1.3 Handling Non-Existing or Offline Relay Peers

  • Peers iterate through deterministic hostnames.
  • Temporarily unreachable hosts are retried after a backoff period.
  • Optionally, a seed CID on IPFS may provide an initial snapshot of active Relay Peers to bootstrap discovery.

4.1.4 Security and Trust Implications

  • Deterministic discovery combined with cryptographic verification ensures that peers cannot be misled by malicious Relay Peers.
  • Relay Peers are auditable: any failure to implement endpoints correctly or return invalid data can be detected.
  • Peers remain authoritative for ledger validation; Relay Peers are relays, not arbiters.

Summary:
This protocol allows new Peers to bootstrap without centralized coordination, ensures Relay Peers can be trusted, and maintains the integrity and decentralization of the SSIMPL ledger.

5. Ledger Specification

The SSIMPL ledger is a deterministically canonical, peer-replicated structure tracking valid DIDs, maintained across Peers and Relay Peers.

5.1 Goals

5.2 State and Canonical Construction

  1. Filter expired entries based on did_expiry and GRACE_PERIOD.
  2. Normalize entries into canonical byte format.
  3. Sort lexicographically by did_expiry then by hash(did).
  4. Compute root_hash using a Merkle tree over the current, complete, pruned ledger.

5.3 Merkle Tree

The SSIMPL ledger uses a Merkle tree to enable efficient verification of ledger state and individual entries.

5.3.1 Structure

  • Leaves: Hashes of canonical ledger entries.
  • Branches: Hashes of concatenated child nodes.
  • Root: root_hash representing the current canonical ledger state.

5.3.2 Updates

  1. New ledger entries are appended as leaves.
  2. The affected branches are rehashed up to the root.
  3. Pruning does not delete nodes; the canonical ledger for the current epoch defines which entries are considered valid.

5.3.3 Merkle Proofs

  • To prove inclusion of a DID xyz, a peer can provide the leaf hash and the branch hashes up to root_hash.
  • Other peers can recompute the root from the proof and verify it matches the canonical root_hash.

5.3.4 Relation to Checkpoints

  • Checkpoints store a root_hash for a specific epoch.
  • Peers can verify their ledger or deltas by starting from the latest checkpoint and applying updates.

5.4 Validation Rules

An entry is valid if:

  1. current_time &lt; did_expiry + GRACE_PERIOD.
  2. hash(verifiable_credential_root.data) equals verifiable_credential_root.signature_document.message.
  3. The public key in the DID matches signature_document.signature.public_key.
  4. Signature verification succeeds: verify_signature( verifiable_credential_root.signature_document.message, verifiable_credential_root.signature_document.signature.value, verifiable_credential_root.signature_document.signature.public_key, verifiable_credential_root.signature_document.signature.algorithm )

Expired or invalid entries are ignored and removed during canonical construction.

5.5 Pruning and Mutability

  1. Remove the DID from the local ledger.
  2. Store and submit a revocation payload to (Relay) Peers.

5.6 Synchronization

5.7 Merkle Checkpoints

To enable efficient verification of ledger history and prevent forks from propagating, the SSIMPL protocol introduces Merkle checkpoints. These checkpoints allow peers to validate that their current ledger state stems from a previously agreed-upon canonical state.

5.7.1 Definition

A Merkle checkpoint is a snapshot of the canonical ledger at a given epoch, containing:

  • epoch — The deterministic epoch number of the snapshot
  • root_hash — The canonical ledger Merkle root at that epoch
  • metadata (optional) — Any additional information, such as total entry count, checkpoint creator DID, or a reference timestamp

5.7.2 Purpose

Merkle checkpoints serve three main purposes:

  1. Anchoring history — They provide a trusted reference point for peers to verify that their current ledger is an extension of a previous canonical state.
  2. Fork detection — Peers can detect divergence by comparing their checkpointed root hash with peers’ reported checkpoints.
  3. Efficient synchronization — When a peer joins the network or recovers from offline mode, it can request deltas starting from the latest known checkpoint rather than from the genesis ledger.

5.7.3 Creation and Storage

  • Peers MAY create checkpoints at deterministic intervals (e.g., end of each epoch).
  • Relay Peers SHOULD store checkpoints for availability, enabling efficient delta requests for mobile peers.
  • Checkpoints themselves are immutable; once created, they cannot be modified or deleted.

5.7.4 Verification

To verify a ledger using a checkpoint:

  1. Obtain the checkpoint for the target epoch (epoch, root_hash).
  2. Compute the canonical ledger state from the checkpoint epoch to the current state.
  3. Recompute the Merkle root for the resulting ledger.
  4. Confirm that the recomputed root matches the current root_hash.

A mismatch indicates ledger tampering or divergence, and the peer MUST reject the inconsistent entries.

5.7.5 Pruning and Expiry

  • Checkpoints older than a configurable retention window MAY be pruned to reduce storage overhead.
  • Retention policies SHOULD be deterministic and consistent across peers to maintain canonical verification paths.

5.7.6 Security Considerations

  • Checkpoint integrity — Checkpoints must be signed by the creating peer using their DID key.
  • Fork prevention — Peers must reject any checkpoint that does not extend a known valid previous checkpoint.
  • Replay attacks — Timestamps and epoch numbers help prevent replay of stale checkpoints.

5.8 Security Properties


6. Conclusion

SSIMPL provides a self-sovereign identity framework with a deterministic, peer-validated ledger, enabling secure, verifiable DIDs anchored in government-issued credentials.

All entries and operations are canonical, rule-derived, and independently verifiable by peers, ensuring a fully trustworthy and decentralized identity ecosystem.

7. Canonicalization Rules

To ensure that signatures are verifiable and consistent across all peers, every signed object in SSIMPL (including LedgerEntry and VerifiableCredentialRoot) MUST be serialized in a canonical form before hashing and signing. These rules remove ambiguity in encoding and field ordering, preventing mismatches between peers.

7.1 Object Serialization

  1. Field Ordering
  1. Whitespace
  1. Encoding
  1. Number Representation
  1. Boolean and Null

7.2 Nested Objects

7.3 Signature Message

  1. The message field in every SignatureDocument MUST be the hash of the canonical serialized data object.
  2. Recommended hash function: SHA-256.
  3. The hash input is strictly the canonical byte sequence of the data object (no additional metadata).
  4. Signing the message binds the signer cryptographically to the exact canonical representation of the object.

7.4 Deterministic Encoding

7.5 Verification Procedure

To verify a signature:

  1. Peer canonicalizes the data object according to the rules above.
  2. Peer hashes the canonicalized bytes to compute the message.
  3. Peer verifies that the computed message matches the message in signatureDocument.
  4. Peer validates the signature using the provided publicKey and algorithm.
  5. Only if all checks pass is the object considered valid.

7.6 Rationale

Canonicalization guarantees that:


8. SSIMPL API Specification

This section defines the reference API for Relay Peers in the SSIMPL protocol. It provides endpoints for DID registration, revocation, and ledger synchronization.

All requests MUST be authenticated using a Bearer token, containing a signed DID in the canonical SignatureDocument format, multibase-encoded.


8.1 Endpoints

8.1.1 Request Ledger Delta

POST /ledger/delta

Purpose: Allows a Peer to request ledger entries that are newer than a given epoch, if the peer is out of sync.

Request payload (LedgerDeltaRequest):

Field Type Description
lastEpoch integer Last ledger epoch known to the peer
rootHash string Merkle root hash of the peer's current ledger state

Example:

{
  "lastEpoch": 42,
  "rootHash": "abcdef1234567890"
}

Response payload (LedgerDeltaResponse):

Field Type Description currentEpoch integer Current epoch of the relay peer ledger authoritativeRootHash string Merkle root hash after applying returned entries array Ordered ledger entries newer than lastEpoch

Example:

{
  "currentEpoch": 43,
  "authoritativeRootHash": "1234abcd5678ef90",
  "entries": [
    {
      "data": {
        "verifiableCredentialRoot": {
          ...
        },
        "proof": {
          ...
        }
      },
      "signatureDocument": {
        ...
      }
    }
  ]
}

Register a DID

POST /ledger

Purpose: Register a new DID on the ledger.

Request payload: LedgerEntry object

Example:

{
  "data": {
    "verifiableCredentialRoot": {
      ...
    },
    "proof": {
      ...
    }
  },
  "signatureDocument": {
    ...
  }
}

Response: 200 OK on success.

Revoke a DID

PUT /ledger

Purpose: Revoke a DID by submitting a revocation payload.

Request payload: LedgerEntryRevocation object

Example:

{
  "data": {
    "did": "did:key:z6Mkw...example"
  },
  "signatureDocument": {
    ...
  }
}

Response: 200 OK on success.

Shared Object Schemas

8.1.2 LedgerEntry

Field Type Description
data object Contains verifiableCredentialRoot and proof
signatureDocument object Signature verifying the integrity of data

8.1.3 LedgerEntryRevocation

Field Type Description
data object Contains the DID being revoked
signatureDocument object Signature verifying the revocation

8.1.4 VerifiableCredentialRoot

Field Type Description
data object Contains did and identityDocumentHash
signatureDocument object Signature verifying the data

8.1.5 DataGroupProof

Field Type Description
DG15 string Data group 15 proof
AASignature string Active Authentication signature
AAChallenge string Active Authentication challenge
SOD string Security Object Document

8.1.6 SignatureDocument

Field Type Description
message string Canonical serialized representation of the signed data
signature object Signature object containing algorithm, publicKey, and value
signer string DID or public key identifier of the signer

8.1.7 Signature

Field Type Description
publicKey string Public key of signer
algorithm string Signing algorithm
value string Multibase-encoded signature value

A. References

A.1 Normative references

[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174