The did:educreds Method Specification

Decentralized Identifier Method for Academic Credentials and Institutional Identity

DRAFT — SUBMITTED FOR W3C REGISTRY REVIEW
Specification Version
1.0.0
Published
29 August 2026
Status
Draft — W3C DID Spec Registries Submission
Editors
Abdulmajid Kyotoyinze (EduCreds Labs), Paul Sekiziyivu (EduCreds Labs)
Contact
abdulmajid.kyotoyinze@educreds.xyz
Repository
EDUCREDS-LABS/educreds-enterprise
Specification URL
https://docs.educreds.xyz/did-method
Latest Version
https://docs.educreds.xyz/did-method
Verifiable Data Registry
Ethereum (Base L2) + IPFS
Copyright
© 2026 EduCreds Labs Ltd. All Rights Reserved.
Abstract. This document specifies the did:educreds Decentralized Identifier (DID) method, as defined by the W3C DID Core Specification [DID-CORE]. The did:educreds method provides a mechanism for academic institutions, students, and credential artefacts within the EduCreds platform to be represented as globally unique, cryptographically verifiable, and self-sovereign identifiers. Institution DIDs are anchored on the Base L2 (Ethereum Layer 2) and resolved through the EduCreds Verification Framework (EVF). This method is designed to be interoperable with the W3C Verifiable Credentials Data Model [VC-DATA-MODEL] and OpenID for Verifiable Credentials [OID4VC].

1. Introduction

1.1 Motivation

Academic credential fraud is a global crisis. Studies estimate that over 40% of job applicants misrepresent their qualifications, costing employers and institutions billions annually. Existing paper-based and siloed digital credential systems are difficult to verify, easy to forge, and not portable across borders.

EduCreds Labs has built a decentralised academic credentialing platform that issues, verifies, and governs digital academic credentials using W3C Verifiable Credentials and Decentralised Identifiers. The did:educreds method provides the identity layer underpinning this platform, enabling:

Note The did:educreds method is designed with privacy by architecture. No student personally identifiable information (names, dates of birth, grades, biometrics) is ever written to any blockchain or IPFS node. Only cryptographic commitments and anonymised identifiers are anchored on-chain.

1.2 Conformance

This specification is conformant with the W3C Decentralized Identifiers (DIDs) v1.1 specification [DID-CORE-1.1]. The key words MUST, MUST NOT, REQUIRED, SHALL, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL in this document are to be interpreted as described in RFC 2119.

2. Terminology

TermDefinition
DIDDecentralized Identifier — a globally unique identifier that does not require a centralized registration authority.
DID DocumentA JSON-LD document containing public keys, authentication methods, and service endpoints associated with a DID.
DID SubjectThe entity identified by a DID. In did:educreds, subjects are institutions, credentials, or students.
DID ControllerThe entity authorised to make changes to a DID Document. Institutions control their own DIDs.
PoICProof of Institutional Credibility — EduCreds' AI-powered trust scoring system for academic institutions.
EVFEduCreds Verification Framework — an independent verification microservice that resolves DIDs and verifies credentials.
ETFEduCreds Trust Framework — the overarching governance and trust layer of the EduCreds platform.
VCVerifiable Credential — a tamper-evident credential following the W3C VC Data Model.
OID4VCOpenID for Verifiable Credentials — the protocol suite for issuing and presenting VCs.
IPFSInterPlanetary File System — used for decentralised, content-addressed storage of DID Documents.

3. DID Method Syntax

3.1 Method Name

The method name that shall identify this DID method is: educreds

A DID that uses this method MUST begin with the prefix did:educreds:. Per the DID Core specification, this prefix MUST be in lowercase. The remainder of the DID after the prefix is the method-specific identifier described below.

3.2 Method-Specific Identifier

The method-specific identifier is structured as follows:

did:educreds    = "did:educreds:" educreds-specific-idstring
educreds-specific-idstring = subject-type ":" unique-id
subject-type    = "institution" / "credential" / "student"
unique-id       = 1*idchar
idchar          = ALPHA / DIGIT / "-" / "_"
did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238 scheme      method         subject-type             unique-id (UUID v4)

The three subject types serve distinct purposes:

Subject TypeDescriptionUnique ID Source
institution Identifies an academic institution registered on the EduCreds platform. The DID is tied to the institution's accreditation status and PoIC score. UUID v4 assigned at institution registration. Matches the institution's institutionId in the platform database.
credential Identifies a specific issued Verifiable Credential. Used as the id field in the W3C VC. SHA-256 hash (hex-encoded, first 32 chars) of the credential payload + institution DID + timestamp.
student Identifies a student credential holder. Optional — students may use an existing DID (e.g., did:key, did:pkh) or an Ethereum wallet address. Ethereum wallet address (checksummed, prefixed: 0x).

3.3 Examples

# Institution DID
did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238

# Credential DID
did:educreds:credential:a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4

# Student DID (wallet-based)
did:educreds:student:0xB588E1D7C9B8Cf1C00AE773D91a7fBeCd4CcFF64

4. DID Document

4.1 Structure

A did:educreds DID Document MUST conform to the DID Core specification. The document is stored on IPFS and the IPFS content identifier (CID) is anchored to the Base L2 blockchain via the CredentialIssuer smart contract.

The DID Document MUST include:

The DID Document SHOULD include for institution subjects:

4.2 Verification Methods

EduCreds institutions use Ed25519VerificationKey2020 key pairs for signing credentials, with ECDSA P-256 as an alternative for OID4VC flows. Keys are generated at institution registration and stored in an HSM-backed key vault. The public key material is embedded in the DID Document; private keys never leave the institution's controlled key vault environment.

4.3 Service Endpoints

Service TypeDescription
CredentialIssuanceREST endpoint for credential issuance requests (/api/v1/standard/certificates/issue)
CredentialVerificationEVF endpoint for independent credential verification
OID4VCIssuerOpenID for Verifiable Credential Issuance endpoint
OID4VPVerifierOpenID for Verifiable Presentation verification endpoint
LinkedDomainsWell-known domain linkage to institution's verified domain

4.4 Example DID Document — Institution

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1",
    "https://educreds.xyz/ns/did/v1"
  ],
  "id": "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238",
  "controller": "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238",
  "verificationMethod": [
    {
      "id": "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238#key-1",
      "type": "Ed25519VerificationKey2020",
      "controller": "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238",
      "publicKeyMultibase": "z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"
    }
  ],
  "authentication": [
    "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238#key-1"
  ],
  "assertionMethod": [
    "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238#key-1"
  ],
  "service": [
    {
      "id": "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238#issuance",
      "type": "CredentialIssuance",
      "serviceEndpoint": "https://api.educreds.xyz/api/v1/standard/certificates/issue"
    },
    {
      "id": "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238#evf",
      "type": "CredentialVerification",
      "serviceEndpoint": "https://evf.educreds.xyz/api/v1/evf/verify"
    },
    {
      "id": "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238#oid4vci",
      "type": "OID4VCIssuer",
      "serviceEndpoint": "https://oid4vc.educreds.xyz/.well-known/openid-credential-issuer"
    },
    {
      "id": "did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238#domain",
      "type": "LinkedDomains",
      "serviceEndpoint": "https://educreds.xyz/.well-known/did-configuration.json"
    }
  ],
  "educredsPoIC": {
    "score": 87,
    "tier": "verified",
    "lastEvaluated": "2026-08-01T00:00:00Z",
    "signals": {
      "accreditation": true,
      "governmentRecognised": true,
      "activeIssuance": true,
      "communityReputation": 0.91
    }
  }
}

5. CRUD Operations

5.1 Create

A did:educreds:institution DID is created through the following process:

  1. The institution submits a registration request to the EduCreds platform (POST /auth/institution/register) with their verified organisational details.
  2. EduCreds platform assigns a UUID v4 as the institution's institutionId. This becomes the unique identifier in the DID: did:educreds:institution:{institutionId}.
  3. An Ed25519 key pair is generated for the institution. The private key is stored in an HSM-backed key vault; the public key is embedded in the DID Document.
  4. A DID Document is constructed (see Section 4) and published to IPFS. The returned IPFS CID is stored.
  5. The DID and IPFS CID are anchored on Base L2 via the CredentialIssuer smart contract transaction. The on-chain record contains: DID (hashed), IPFS CID, institution UUID, and block timestamp.
  6. The DID is now resolvable globally.
PropertyValue
MethodPOST /auth/institution/register
InputInstitution name, domain, accreditation number, country, admin email
OutputDID, IPFS CID, transaction hash, institution JWT
On-chainDID hash + IPFS CID anchored to Base L2
IdempotentNo — each registration creates a new DID
Note on Credential DIDs A did:educreds:credential DID is created automatically at credential issuance. It is derived deterministically from the credential payload hash, issuing institution DID, and issuance timestamp. It does not require a separate on-chain transaction — the credential's IPFS hash serves as its anchor.

5.2 Read / Resolve

Resolving a did:educreds DID returns the DID Document. Resolution MUST proceed as follows:

  1. The resolver receives the DID string (e.g., did:educreds:institution:ba5a0d3d-...).
  2. The resolver queries the EduCreds Verification Framework (EVF) resolution endpoint: GET https://evf.educreds.xyz/did/resolve/{did}.
  3. The EVF queries the Base L2 blockchain to retrieve the anchored IPFS CID for the given DID.
  4. The EVF fetches the DID Document from IPFS using the CID.
  5. The EVF validates the DID Document structure and returns it to the resolver.
# Resolution request
GET https://evf.educreds.xyz/did/resolve/did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238

# Resolution response
{
  "@context": "https://w3id.org/did-resolution/v1",
  "didDocument": { ... },
  "didDocumentMetadata": {
    "created": "2026-02-15T00:00:00Z",
    "updated": "2026-08-01T00:00:00Z",
    "deactivated": false,
    "versionId": "QmYwAPJzv5CZsnAzt8auV...",
    "nextUpdate": null,
    "equivalentId": ["did:educreds:institution:ba5a0d3d-1f72-41b7-b88c-cf25aef18238"]
  },
  "didResolutionMetadata": {
    "contentType": "application/did+ld+json",
    "retrieved": "2026-08-29T12:00:00Z"
  }
}

Resolvers MAY also use the Universal Resolver once the did:educreds driver has been submitted to the Decentralised Identity Foundation's Universal Resolver repository.

5.3 Update

DID Documents for institution subjects MAY be updated by the DID Controller (the institution admin) via the following process:

  1. The institution admin authenticates via POST /auth/institution/login (OTP-based).
  2. The admin submits an update request to PATCH /api/institutions/did-profile with the updated fields (e.g., new service endpoints, rotated keys).
  3. The platform generates a new DID Document incorporating the changes.
  4. The updated DID Document is published to IPFS, producing a new CID.
  5. A new on-chain transaction anchors the updated CID against the existing DID.
  6. The previous DID Document version is retained on IPFS (immutable history).
Warning — Key Rotation When a verification key is rotated, all Verifiable Credentials previously signed with the old key remain valid — the old key's public material is preserved in the DID Document history on IPFS. Verifiers resolving old credentials MUST use the key version indicated in the credential's proof.verificationMethod field, not the current active key.

5.4 Deactivate

A did:educreds DID MAY be deactivated by the DID Controller or by EduCreds platform governance (e.g., institution loses accreditation). Deactivation is permanent and irreversible.

  1. Deactivation is requested via POST /api/institutions/deactivate (requires platform admin authorisation for institution DIDs).
  2. An updated DID Document is published with "deactivated": true in the document metadata.
  3. A final on-chain transaction records the deactivation CID and timestamp.
  4. All credentials issued by a deactivated institution DID remain on IPFS but EVF resolution of those credentials will include a "issuerDeactivated": true flag in the verification result.

6. DID Resolution

The did:educreds method supports two resolution paths:

PathEndpointUse Case
EVF Native GET {EVF_BASE_URL}/did/resolve/{did} Direct resolution via EduCreds EVF. Returns full DID Document + PoIC metadata.
Universal Resolver GET https://dev.uniresolver.io/1.0/identifiers/{did} Third-party universal resolution once driver is registered with DIF.

The EVF resolution endpoint also performs live validation: it checks the on-chain anchor, verifies the IPFS document hash, and returns the current PoIC score alongside the DID Document. This makes did:educreds resolution richer than a plain DID Document fetch — it provides trust context to the verifier in a single call.

7. Security Considerations

7.1 Key Management

Institution signing keys (Ed25519) are generated and stored exclusively in a Hardware Security Module (HSM)-backed secrets vault. Private keys are never exported or transmitted over the network. Key operations (signing) are performed in-place within the key vault — private keys are never exported. EduCreds does not hold copies of institution private keys.

7.2 On-Chain Anchor Integrity

The Base L2 blockchain provides immutability for DID Document anchors. Because the IPFS CID is a content hash, any tampering with a DID Document stored on IPFS would produce a different CID and fail verification against the on-chain anchor. Resolvers MUST verify that the IPFS document's content hash matches the on-chain CID.

7.3 Replay Attack Prevention

All credential issuance and DID update operations include an issuance timestamp and a nonce. The EVF verification framework rejects credentials with timestamps outside a configurable validity window. On-chain transactions include block timestamps that prevent retroactive manipulation.

7.4 DID Enumeration

Because institution UUIDs are the unique-id component of institution DIDs, it is technically possible to enumerate DIDs if UUIDs were sequential. EduCreds uses UUID v4 (randomly generated), making enumeration computationally infeasible. The smart contract does not expose a list of registered DIDs.

7.5 Smart Contract Security

The CredentialIssuer Solidity smart contract is governed by a DAO (via governance/proposals) and upgradeable only through a multi-signature governance vote. Contract updates require a minimum quorum of governance token holders. The contract has been audited internally; a third-party audit is planned for mainnet deployment.

7.6 Denial of Service

DID resolution through the EVF is protected by rate limiting and cloud-layer DDoS protection. IPFS node availability is maintained through redundant pinning (Pinata + self-hosted node). Blockchain read operations are conducted against multiple RPC endpoints to prevent single-node failure.

8. Privacy Considerations

8.1 No PII on Blockchain

The did:educreds method is designed with a strict privacy boundary: no personally identifiable information is ever written to any blockchain or IPFS node. Specifically:

8.2 Selective Disclosure

EduCreds supports SD-JWT (Selective Disclosure JWT) credentials via the sd-jwt-adapter microservice. Students MAY share partial credential claims (e.g., "I graduated from this university" without revealing GPA) using SD-JWT selective disclosure. The did:educreds DID Documents for credentials support SD-JWT proof types.

8.3 Right to Erasure

Because credential content is stored off-chain, EduCreds can fulfil GDPR and Uganda PDPA 2019 right-to-erasure requests by deleting off-chain data and revoking the on-chain anchor. The on-chain record (a hash with no PII) remains immutable per blockchain design, but without the off-chain content, it reveals nothing about the subject.

8.4 Correlation Risks

Institution DIDs are intended to be public and globally resolvable — correlation is expected and desirable for verification purposes. Student DIDs (wallet addresses) MAY be correlated if the same wallet is used across multiple credentials. Students are encouraged to use unique wallet addresses per institution relationship, which the EduCreds wallet supports natively.

9. Implementation Status

FeatureStatusNotes
DID creation (institution)✅ ImplementedProduction-ready, deployed on managed cloud infrastructure
DID creation (credential)✅ ImplementedAuto-generated at issuance
DID creation (student)✅ ImplementedWallet-based, EIP-55 checksummed
DID Document generation✅ ImplementedEd25519 + ECDSA P-256 keys
IPFS anchoring✅ ImplementedPinata + self-hosted node
On-chain anchoring (Base L2)🟡 TestnetMainnet deployment pending governance vote
EVF DID resolution endpoint🟡 In Progress/did/resolve endpoint — Paul Sekiziyivu
DID update (key rotation)🟡 In ProgressUI flows under development
DID deactivation🟡 In ProgressGovernance flow required
Universal Resolver driver🔴 PlannedPending W3C registry acceptance
OID4VCI issuer metadata✅ Implementedoid4vc-adapter microservice
SD-JWT selective disclosure✅ Implementedsd-jwt-adapter microservice

The EduCreds platform is currently deployed as 7 independent microservices — backend, EVF, OID4VC adapter, SD-JWT adapter, Trust Agent, Verifier Agent, and Redis cache. The platform is in active pilot with target institutions in Uganda.

10. References

ReferenceDocument
[DID-CORE]Decentralized Identifiers (DIDs) v1.0, W3C Recommendation, July 2022. https://www.w3.org/TR/did-core/
[DID-CORE-1.1]Decentralized Identifiers (DIDs) v1.1, W3C Working Draft, 2025. https://www.w3.org/TR/did-1.1/
[DID-EXTENSIONS]DID Specification Registries, W3C. https://www.w3.org/TR/did-extensions/
[VC-DATA-MODEL]Verifiable Credentials Data Model v2.0, W3C Recommendation, 2024. https://www.w3.org/TR/vc-data-model-2.0/
[OID4VCI]OpenID for Verifiable Credential Issuance, OpenID Foundation. openid.net/specs/openid-4-verifiable-credential-issuance
[OID4VP]OpenID for Verifiable Presentations, OpenID Foundation. openid.net/specs/openid-4-verifiable-presentations
[SD-JWT]Selective Disclosure for JWTs (SD-JWT), IETF. ietf.org/archive/id/draft-ietf-oauth-selective-disclosure-jwt
[RFC2119]Key words for use in RFCs to Indicate Requirement Levels, IETF. https://www.rfc-editor.org/rfc/rfc2119
[EIP-55]EIP-55: Mixed-case checksum address encoding, Ethereum. https://eips.ethereum.org/EIPS/eip-55
[MULTIBASE]The Multibase Data Format, W3C CCG. draft-multiformats-multibase