This specification defines the did:wba DID method. The method
uses HTTPS-hosted DID Documents and supports both domain-level identifiers
and path-type identifiers. The default path profile binds an Ed25519 public
key fingerprint into the final DID path segment using the e1_
prefix and requires a corresponding Data Integrity proof in the DID Document.
The did:wba method reuses DNS, HTTPS, Web PKI, ordinary Web
hosting, and HTTP caching. It is derived from the operational model of
did:web and adds method-specific rules for path-to-key binding,
DID Document processing, and the default e1_ proof profile.
This document defines the DID method lifecycle: identifier syntax, creation,
resolution, update, and deactivation. Use of a resolved did:wba
identity for agent HTTP authentication is defined by
Agent Identity and HTTP Authentication
and the
did:wba Binding Profile
.
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, SHOULD, and SHOULD NOT in this document are to be interpreted as described in RFC 2119 and RFC 8174 when, and only when, they appear in all capitals.
did:wba DID Method Specification
The method name is wba. DIDs using this method MUST begin with
the lowercase prefix did:wba:.
The method-specific identifier begins with a fully qualified domain name protected by TLS and MAY contain a path to the DID Document. Domain names are governed by RFC 1035, RFC 1123, and RFC 2181.
TLS service identity matching MUST use the DNS identifier
(dNSName) in the certificate's
subjectAltName extension. Implementations MUST NOT rely on
Common Name as the service identity.
A did:wba method-specific identifier MUST NOT contain an IP
address. A port MAY be included, but the colon between host and port MUST
be percent-encoded as %3A. Optional directories and
subdirectories are encoded as colon-separated path segments.
The method supports two DID forms:
For newly created path-type DIDs, this specification defines a default
profile in which the final path segment contains the binding public-key
fingerprint. Earlier path segments are application-defined namespaces,
such as user:alice or agents:billing.
base64url-char = ALPHA / DIGIT / "-" / "_"
path-segment = 1*(ALPHA / DIGIT / "-" / "_" / ".")
e1-fingerprint = "e1_" 43base64url-char
wba-root-did = "did:wba:" domain-name
wba-path-did = "did:wba:" domain-name 1*(":" path-segment) ":" e1-fingerprint
wba-did = wba-root-did / wba-path-did
This version of the method specification defines only
e1_ as the default path-binding profile prefix.
A naked-domain DID has the form did:wba:{domain} and
resolves to https://{domain}/.well-known/did.json.
e1_ fingerprint. The path-binding
validation rules defined for an e1_ path-type DID do not
apply.
Native did:web interoperability is defined separately in
the
did:web Binding Profile
.
e1_
For a newly created path-type did:wba, the final path segment
MUST be an e1_ binding public-key fingerprint. The
e1_ prefix identifies an Ed25519 binding key and the default
profile defined by this document.
The recommended structure is:
did:wba:{domain}:{namespace...}:{e1-fingerprint}
Examples:
did:wba:example.com
did:wba:example.com:user:alice:e1_<fingerprint>
did:wba:example.com%3A3000:user:alice:e1_<fingerprint>
For compatibility with existing deployments, an implementation MAY parse a historical path-type DID without a fingerprint segment. Newly created path-type DIDs SHOULD use the default profile defined here.
e1_ Fingerprint Generation
The e1_ fingerprint binds a path-type DID to an Ed25519
public key. It is generated as follows:
Multikey with publicKeyMultibase;authentication relationship.publicKeyMultibase to the equivalent
public JWK containing only the members required by RFC 7638:
{
"crv": "Ed25519",
"kty": "OKP",
"x": "..."
}
The publicKeyMultibase value is a Multibase base58-btc encoded
Ed25519 Multikey. After Multikey decoding, x is the unpadded
base64url encoding of the raw 32-byte Ed25519 public key.
e1_.
The e1_ prefix is a profile identifier and is not part of the
hash output. Implementations may use the 43-character thumbprint as a
verification-method fragment or key identifier to make the relationship
visible to operators.
A did:wba DID Document will commonly be served as
application/json. A resolver MUST apply the following rules:
@context is present, process the document according to
JSON-LD. Reject the document if JSON-LD processing fails.
https://www.w3.org/ns/did/v1,
process the result as a DID Document according to DID Core.
@context is absent, process the document using the JSON
representation rules defined by DID Core.
serviceEndpoint values MUST use absolute URIs.
#key-1 and MUST be expanded
against the document's root DID before use.
The following example shows the subset of a DID Document used by the
default e1_ profile. Application-specific service entries are
illustrative and non-normative.
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/data-integrity/v2",
"https://w3id.org/security/multikey/v1",
"https://w3id.org/security/suites/x25519-2019/v1"
],
"id": "did:wba:example.com%3A8800:user:alice:e1_<fingerprint>",
"verificationMethod": [
{
"id": "did:wba:example.com%3A8800:user:alice:e1_<fingerprint>#key-1",
"type": "Multikey",
"controller": "did:wba:example.com%3A8800:user:alice:e1_<fingerprint>",
"publicKeyMultibase": "z6Mk..."
},
{
"id": "did:wba:example.com%3A8800:user:alice:e1_<fingerprint>#key-x25519-1",
"type": "X25519KeyAgreementKey2019",
"controller": "did:wba:example.com%3A8800:user:alice:e1_<fingerprint>",
"publicKeyMultibase": "z9hFgmPVfmBZwRvFEyniQDBkz9LmV7gDEqytWyGZLmDXE"
}
],
"authentication": [
"did:wba:example.com%3A8800:user:alice:e1_<fingerprint>#key-1"
],
"assertionMethod": [
"did:wba:example.com%3A8800:user:alice:e1_<fingerprint>#key-1"
],
"keyAgreement": [
"did:wba:example.com%3A8800:user:alice:e1_<fingerprint>#key-x25519-1"
],
"service": [
{
"id": "did:wba:example.com%3A8800:user:alice:e1_<fingerprint>#ad",
"type": "AgentDescription",
"serviceEndpoint": "https://example.com/agents/alice/ad.json"
},
{
"id": "did:wba:example.com%3A8800:user:alice:e1_<fingerprint>#handle",
"type": "ANPHandleService",
"serviceEndpoint": "https://example.com/.well-known/handle/alice"
},
{
"id": "did:wba:example.com%3A8800:user:alice:e1_<fingerprint>#anp",
"type": "ANPMessageService",
"serviceEndpoint": "https://example.com/anp",
"serviceDid": "did:wba:example.com%3A8800"
}
],
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-jcs-2022",
"created": "2025-01-01T00:00:00Z",
"verificationMethod": "did:wba:example.com%3A8800:user:alice:e1_<fingerprint>#key-1",
"proofPurpose": "assertionMethod",
"proofValue": "z..."
}
}
ANPHandleService and ANPMessageService are examples
defined by an external protocol ecosystem. This DID method specification
does not define their endpoint formats or processing requirements.
@context: REQUIRED for the JSON-LD
representation. It MUST include
https://www.w3.org/ns/did/v1. The default
e1_ proof profile also requires the Data Integrity and
Multikey contexts used by the proof and binding key.
id: REQUIRED and MUST exactly match the
resolved did:wba DID. The host MUST NOT be an IP address.
verificationMethod: REQUIRED. A
path-type DID using the default profile MUST contain at least one
Ed25519 Multikey whose RFC 7638 thumbprint equals the
final e1_ fingerprint segment.
authentication: REQUIRED. The default
profile's binding key MUST be authorized by this relationship.
assertionMethod: REQUIRED when the
verification method is used for the default DID Document proof. The
proof verification method MUST be authorized by this relationship.
keyAgreement: OPTIONAL. It may contain
X25519 or other key-agreement material used by an upper-layer secure
messaging protocol. This DID method does not define the E2EE procedure.
service: OPTIONAL. Service semantics are
defined by the specification that defines each service type.
proof: REQUIRED for the default
e1_ profile. Its requirements are defined in
DID Document Proof.
Implementations supporting encrypted communication SHOULD manage
signature/assertion keys and key-agreement keys separately. A signing
key SHOULD NOT be used for key agreement, and a key-agreement key SHOULD
NOT be used for signatures. The upper-layer protocol defines how
keyAgreement material is used.
This method does not define a registration HTTP API. Programmatic registration and management are deployment-specific.
Creating a DID requires the controller to:
e1_ fingerprint;
Naked-domain example:
did:wba:example.com
-> https://example.com/.well-known/did.json
Path-type example:
did:wba:example.com:user:alice:e1_<fingerprint>
-> https://example.com/user/alice/e1_<fingerprint>/did.json
Path-type example with a port:
did:wba:example.com%3A3000:user:alice:e1_<fingerprint>
-> https://example.com:3000/user/alice/e1_<fingerprint>/did.json
A resolver MUST:
did:wba: prefix;https://;/.well-known when the DID contains no path;/did.json;id matches the requested DID;
For an e1_ path-type DID, the resolver MUST:
proof;DataIntegrityProof with eddsa-jcs-2022;proof.verificationMethod identifies an Ed25519
Multikey, or a semantically equivalent Ed25519 verification
method representation permitted by the profile;
e1_ fingerprint segment.
The e1_ proof and path-binding checks are mandatory and are
not controlled by a relaxed local policy switch.
For a naked-domain DID, the resolver retrieves
/.well-known/did.json, verifies identifier consistency, and
processes the DID Document according to DID Core. The
e1_ path-binding rule does not apply.
Resolvers SHOULD use privacy-preserving DNS resolution where appropriate and MUST apply secure TLS service identity validation.
A controller updates a DID by updating the did.json resource
corresponding to that DID.
For a path-type DID using the default profile, the DID remains unchanged while the binding-key fingerprint remains unchanged. Other DID Document content may be updated, including additional verification methods, removal of old non-binding keys, and service endpoints.
If the binding key changes, the path-type DID MUST change to contain the new fingerprint. The controller SHOULD create a new DID Document and MAY use an upper-layer naming or migration mechanism to maintain a stable external reference.
Version control and continuous integration may provide operational audit history, but such history is not part of the cryptographic method state unless defined by a separate profile.
A controller deactivates a DID by removing the corresponding
did.json resource or otherwise making it permanently
unavailable as an active DID Document.
When a default-profile binding key is permanently discarded, the old path-type DID may be deactivated and replaced by a new DID containing a new fingerprint. Stable naming and migration are handled by an upper-layer mechanism.
For the default e1_ profile, the top-level
proof is REQUIRED. For another profile, the presence and
processing of a top-level proof are governed by that profile.
The default proof MUST conform to Verifiable Credential Data Integrity 1.0 and Data Integrity EdDSA Cryptosuites v1.0 .
| Property | Requirement |
|---|---|
type | REQUIRED; DataIntegrityProof. |
cryptosuite | REQUIRED; eddsa-jcs-2022. |
created | REQUIRED; XML Schema date-time. |
verificationMethod | REQUIRED; a complete DID URL identifying the Ed25519 method used to generate the proof. |
proofPurpose | REQUIRED; assertionMethod. |
proofValue | REQUIRED; base58-btc Multibase value beginning with z. |
domain | OPTIONAL. |
challenge | OPTIONAL. |
The following additional constraints apply:
proof.verificationMethod MUST identify the key whose
thumbprint is carried in the final e1_ path segment.
eddsa-jcs-2022 cryptosuite and Data Integrity processing
rules. This document does not redefine the cryptographic algorithm.
Missing proof, proof-verification failure, or a mismatch between
proof.verificationMethod and the e1_
fingerprint MUST cause resolution to fail. There is no relaxed
no-proof mode for an e1_ DID.
A non-e1_ profile MAY define either a relaxed mode in which
an absent proof is accepted or a strict mode in which an absent proof is
a validation failure.
e1_ DID, the path fingerprint and required DID
Document proof are both mandatory. A resolver MUST NOT substitute another
Ed25519 key found in the document when validating the binding.
A stable DID can enable correlation across services. Controllers SHOULD use purpose-specific, role-specific, pairwise, or short-lived DIDs when a stable globally correlatable identifier is unnecessary.
DID resolution exposes the requested identifier to DNS and Web infrastructure. Resolvers SHOULD consider privacy-preserving DNS resolution, caching, and proxying appropriate to their deployment.
The path of a did:wba identifier can expose namespace or account
information. Controllers SHOULD avoid embedding unnecessary personal or
sensitive data in path segments.