Agent Cards currently describe agent capabilities but don't provide a way to cryptographically verify the agent's identity or prove the request body hasn't been tampered with. A receiving agent has no way to confirm the Agent Card claims are genuine.
The x-agent-trust extension (registered in the OpenAPI Extensions Registry) adds two fields to the authentication block: signing algorithm and a JWKS endpoint for local verification.
"authentication": {
"schemes": ["oauth2"],
"x-agent-trust": {
"algorithm": "ES256",
"issuerKeysUrl": "/.well-known/agent-trust-keys"
}
}
Each agent-to-agent request carries an Agent-Signature header -- an ECDSA signature over a canonical string that includes a SHA-256 hash of the request body. The receiving agent verifies against the sender's published JWKS. Body tampering breaks the signature.
Verification is ~20 lines of stdlib crypto in any language. No external dependency required:
# Build canonical string
body_hash = hashlib.sha256(request.body).hexdigest()
canonical = f"{method} {path}\n{ts}\n{body_hash}"
# Fetch sender's public key from their JWKS
keys = fetch_jwks(sender_jwks_url)
# Verify ECDSA signature
public_key.verify(base64.b64decode(sig), canonical.encode(), ECDSA(SHA256()))
This gives A2A per-request body integrity and verifiable agent identity -- both absent from the current spec. Trust levels (L0-L4) are optional and can be added later for graduated authorization.
Registry: https://spec.openapis.org/registry/extension/x-agent-trust.html
Agent Cards currently describe agent capabilities but don't provide a way to cryptographically verify the agent's identity or prove the request body hasn't been tampered with. A receiving agent has no way to confirm the Agent Card claims are genuine.
The
x-agent-trustextension (registered in the OpenAPI Extensions Registry) adds two fields to the authentication block: signing algorithm and a JWKS endpoint for local verification.Each agent-to-agent request carries an
Agent-Signatureheader -- an ECDSA signature over a canonical string that includes a SHA-256 hash of the request body. The receiving agent verifies against the sender's published JWKS. Body tampering breaks the signature.Verification is ~20 lines of stdlib crypto in any language. No external dependency required:
This gives A2A per-request body integrity and verifiable agent identity -- both absent from the current spec. Trust levels (L0-L4) are optional and can be added later for graduated authorization.
Registry: https://spec.openapis.org/registry/extension/x-agent-trust.html