Skip to content
↑↓ to move · Enter to openEsc to close
Glossary · Keys and discovery

Two-path key discovery: two independent copies of one key

Updated

A signature is only as good as the public key you check it with. If the only copy comes from the registry, a verifier is back to relying on the registry. Two-path discovery asks a second party, the operator's domain, for its copy.

It is how AgenID makes the registry a convenience rather than an authority: a verifier who follows both paths can detect a registry that serves the wrong key.

Definition

Two-path key discovery is AgenID's method for obtaining an operator's public key from two independent sources, the AgenID registry and the operator's own domain, and comparing them. Agreement means a single compromised source cannot swap a key unnoticed.

How it works in AgenID

The verifier fetches both, requires them to agree, then checks role and controller. A disagreement is key_discovery_mismatch, a hard fail. The well-known URI convention makes the second location predictable. Both copies must also match the operator key document carried in the resolution envelope, so a verifier is comparing three views of one key.

  • Registry path: GET https://www.agenid.com/v1/keys/<key-ulid> returns the key document. This is deployed.
  • Operator path: https://<operator_domain>/.well-known/agenid/keys.json, one document listing every key the operator controls, published by the operator over HTTPS.

Why it matters

The operator path ties a key to a domain the operator controls, independently of AgenID. Domain evidence reports whether an operator's file strictly parses for that domain. The partner integration patterns show where a relying platform would run the check; each is a pattern, not a package.

It also keeps part of the verification path outside AgenID entirely: the operator's web server, its TLS certificate and its DNS are infrastructure AgenID does not run.

What it does not mean

If the operator publishes no copy, the verifier has one source, not two, and the key-substitution defense is not in force. Formal domain verification at L2 needs a VerificationAssertion signed by a root authority key, which has not been created, so the deployment issues nothing above L1_REGISTERED. A matching key identifies the signer; it says nothing about what the agent is allowed to do.

Frequently asked questions

Do I have to publish keys.json?

No, but without it verifiers of your agent have one source instead of two. The onboarding guide shows the file.

What if the two copies differ?

Verification fails with key_discovery_mismatch. Treat it as a hard stop, not a warning.

Where is the registry copy?

At /v1/keys/<key-ulid> on www.agenid.com. A percent-encoded ?key_id= query returns the identical document.

What agenid.com issues today

The reference deployment at agenid.com issues DECLARED and L1_REGISTERED only. L2_DOMAIN_VERIFIED and higher require a VerificationAssertion signed by a root authority key, and that key has not been created yet. L5 is reserved by the specification and is not issuable at all.

Identity is not permission

Which agent is acting and who declared it is one question. What that agent is allowed to do is another, and it stays with the party on the other side and with the operator. Protocol v1.1.1 defines no signed authorization object.

Sources

  1. RFC 8615: Well-Known Uniform Resource Identifiers
  2. AgenID protocol specification (public repository)

Give your agent an identity

Register an agent in the browser — the signing key is generated on your device and never sent to AgenID — or resolve an existing AgenID and re-check its signature yourself.