<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="exp"
     docName="draft-levi-agent-certification-00"
     ipr="trust200902"
     submissionType="IETF"
     consensus="true"
     tocInclude="true"
     sortRefs="true"
     symRefs="true"
     version="3">

  <front>
    <title abbrev="AACP">Autonomous Agent Certification Protocol (AACP)</title>
    <seriesInfo name="Internet-Draft" value="draft-levi-agent-certification-00"/>

    <author fullname="Nitzan Levi" initials="N." surname="Levi">
      <address>
        <postal><country>Israel</country></postal>
        <email>nitzanly@gmail.com</email>
      </address>
    </author>

    <author fullname="Oren Yeger" initials="O." surname="Yeger">
      <address>
        <postal><country>Israel</country></postal>
        <email>oren.yeger@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="October" day="4"/>

    <area>Security</area>
    <keyword>AI agents</keyword>
    <keyword>certification</keyword>
    <keyword>evaluation</keyword>
    <keyword>JWT</keyword>
    <keyword>authorization</keyword>

    <abstract>
      <t>This document defines the Autonomous Agent Certification Protocol
      (AACP), a framework for binding successful evaluation of an AI agent
      to cryptographically verifiable evidence of demonstrated capability.</t>
      <t>AACP introduces Evaluation Profiles that define the conditions under
      which an agent may be certified for a specific capability.  An Agent
      Configuration that satisfies an Evaluation Profile may receive a
      short-lived Agent Certification Credential (ACC) bound to the
      configuration that was evaluated.</t>
      <t>An ACC does not grant access to a resource.  It provides verifiable
      evidence that an agent has demonstrated a capability under defined
      evaluation conditions.  Existing authorization systems may require
      such evidence as a condition for granting corresponding production
      permissions.</t>
      <t>AACP therefore separates capability certification from identity,
      authentication, delegation, and authorization.</t>
    </abstract>
  </front>

  <middle>

    <section anchor="introduction">
      <name>Introduction</name>
      <t>AI agents increasingly interact with production APIs, tools, data,
      infrastructure, and other security-sensitive resources.</t>
      <t>Existing identity and authorization mechanisms can establish which
      agent is making a request, on whose behalf it is acting, and which
      permissions have been granted to it.  These mechanisms do not, by
      themselves, establish that the agent has demonstrated the ability to
      exercise a requested capability in accordance with defined safety,
      security, and operational requirements.</t>
      <t>AI evaluation systems ("evals") provide a mechanism for testing agent
      behavior against tasks, scenarios, and failure conditions.
      Evaluation results, however, are commonly used as development or
      deployment signals and are not generally represented as portable
      evidence that can participate directly in authorization decisions.</t>
      <t>AACP defines a standardized binding between these two functions:</t>
      <artwork type="ascii-art"><![CDATA[
  Evaluation -> Demonstrated Capability -> Certification Evidence
             -> Authorization Eligibility
]]></artwork>
      <t>Under AACP, a Certification Issuer <bcp14>MUST NOT</bcp14> issue certification
      evidence for a capability unless the Agent Configuration has
      satisfied an applicable Evaluation Profile for that capability.</t>
      <t>A protected resource <bcp14>MAY</bcp14> require valid AACP certification evidence as
      one input to an authorization decision.  Successful certification
      does not itself authorize an operation.  This distinction is
      fundamental:</t>
      <ul spacing="compact">
        <li>Identity establishes who is acting.</li>
        <li>Delegation establishes the authority and purpose under which the
        Agent acts.</li>
        <li>Certification establishes demonstrated capability.</li>
        <li>Runtime evidence establishes that the certified Agent
        Configuration is currently executing.</li>
        <li>Authorization determines whether that capability may be exercised
        in the current context, and grants permission.</li>
      </ul>
      <t>For example, an administrator may authorize an agent to access
      infrastructure APIs, while organizational policy additionally
      requires the agent to hold a valid certification for the capability
      "infrastructure.read" before that authorization can become effective.</t>
      <t>AACP does not replace OAuth, workload identity, access tokens,
      delegation protocols, or policy engines.  It supplies an additional
      verifiable signal that those systems can consume.</t>

      <section anchor="scope">
        <name>Scope</name>
        <t>This document specifies:</t>
        <ul spacing="compact">
          <li>the AACP Evaluation Profile;</li>
          <li>the relationship between an evaluation result and a certified
          capability;</li>
          <li>binding of certification to an evaluated Agent Configuration;</li>
          <li>the Agent Certification Credential;</li>
          <li>validation requirements;</li>
          <li>expiration and re-certification requirements; and</li>
          <li>integration of certification evidence with authorization
          systems.</li>
        </ul>
        <t>This document does not standardize:</t>
        <ul spacing="compact">
          <li>the internal implementation of an AI agent;</li>
          <li>a universal set of evaluation tasks;</li>
          <li>a universal scoring methodology;</li>
          <li>agent identity mechanisms;</li>
          <li>runtime attestation mechanisms;</li>
          <li>OAuth authorization flows;</li>
          <li>human-to-agent delegation; or</li>
          <li>resource-specific access-control policy.</li>
        </ul>
      </section>

      <section anchor="relationship">
        <name>Relationship to Existing Mechanisms</name>
        <t>Authentication establishes the identity of a principal.</t>
        <t>Attestation provides evidence concerning the state or properties of
        a workload <xref target="RFC9334"/>.</t>
        <t>Authorization establishes whether a principal is permitted to
        perform an operation.</t>
        <t>AACP introduces a separate concept: capability certification.
        Capability certification establishes that a particular Agent
        Configuration satisfied an Evaluation Profile associated with one or
        more capabilities.</t>
        <t>Authorization systems <bcp14>MAY</bcp14> consume AACP certification evidence as an
        input to their existing policy decisions.  An AACP credential <bcp14>MUST
        NOT</bcp14> be interpreted as an access token.</t>
        <t>Other work in progress addresses agent identity, delegation, and
        credential attestation, including <xref target="I-D.ietf-wimse-aims"/>
        and <xref target="I-D.yakung-oauth-agent-attestation"/>.  AACP is
        intended to complement such mechanisms rather than to duplicate them:
        those mechanisms establish who an agent is and what it has been
        permitted to do, while AACP conveys what an Agent Configuration has
        been shown capable of doing.  These mechanisms <bcp14>SHOULD</bcp14> be composable
        such that an authorization decision can relate the certified
        capability to the uniquely identified Agent, the authority under
        which it acts, the applicable purpose or transaction context, and the
        current runtime state, without requiring AACP itself to standardize
        identity or delegation.</t>
      </section>
    </section>

    <section anchor="conventions">
      <name>Conventions and Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
      "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and
      "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in
      BCP&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and
      only when, they appear in all capitals, as shown here.</t>

      <section anchor="terminology">
        <name>Terminology</name>
        <dl newline="true">
          <dt>Agent:</dt>
          <dd>An AI-enabled software entity capable of independently selecting
          or executing actions, including invoking tools, APIs, or other
          services.</dd>
          <dt>Capability:</dt>
          <dd>A defined class of behavior or operation that an agent may
          demonstrate.  Examples include log analysis, ticket creation,
          database querying, or infrastructure modification.</dd>
          <dt>Eval Set:</dt>
          <dd>A collection of evaluation tasks, test cases, scenarios, or
          adversarial conditions used to assess an agent.</dd>
          <dt>Evaluation Profile:</dt>
          <dd>A versioned specification defining the conditions under which
          successful execution of one or more Eval Sets constitutes
          certification for a capability.</dd>
          <dt>Evaluator:</dt>
          <dd>An entity that executes an Evaluation Profile against an Agent
          Configuration.  Whether a given Evaluator is trusted is determined
          by verifier policy (see <xref target="compromised-evaluator"/>).</dd>
          <dt>Certification Issuer:</dt>
          <dd>An entity that records a successful evaluation result in an
          Agent Certification Credential and signs it.</dd>
          <dt>Agent Configuration:</dt>
          <dd>The security-relevant configuration of the agent being evaluated,
          including the model, system instructions, available tools, runtime
          configuration, and applicable policies.</dd>
          <dt>Agent Configuration Manifest:</dt>
          <dd>A JSON object enumerating the security-relevant elements of an
          Agent Configuration (see <xref target="manifest"/>).</dd>
          <dt>Agent Configuration Digest:</dt>
          <dd>A cryptographic digest of the canonicalized Agent Configuration
          Manifest.</dd>
          <dt>Agent Certification Credential (ACC):</dt>
          <dd>A signed artifact asserting that a specific Agent Configuration
          satisfied a specific Evaluation Profile.</dd>
          <dt>Certification-Gated Authorization:</dt>
          <dd>An authorization policy in which possession of appropriate, valid
          certification evidence is a prerequisite for granting a
          corresponding permission.</dd>
          <dt>Verifier:</dt>
          <dd>A component, typically an Authorization System or Policy
          Enforcement Point, that validates an ACC before using it in an
          authorization decision.</dd>
          <dt>Policy Enforcement Point (PEP):</dt>
          <dd>A component that enforces authorization decisions for protected
          resources.</dd>
        </dl>
      </section>
    </section>

    <section anchor="architecture">
      <name>Architectural Model</name>
      <t>AACP separates evaluation, certification, and authorization.  A
      typical deployment contains the following logical components:</t>
      <figure anchor="fig-arch">
        <name>AACP Logical Components</name>
        <artwork type="ascii-art"><![CDATA[
            +-------------------------+
            |   Agent Configuration   |
            +------------+------------+
                         |
                         v
            +-------------------------+
            |   Evaluation Service    |
            |                         |
            |  Evaluation Profile     |
            |  + Eval Set(s)          |
            +------------+------------+
                         |
                       PASS
                         |
                         v
            +-------------------------+
            |  Certification Issuer   |
            +------------+------------+
                         |
                         | ACC
                         v
            +-------------------------+
            |  Authorization System   |
            |  / Policy Engine        |
            +------------+------------+
                         |
                   authorization
                     decision
                         |
                         v
            +-------------------------+
            |  Policy Enforcement     |
            |  Point / Resource       |
            +-------------------------+
]]></artwork>
      </figure>

      <section anchor="separation">
        <name>Separation of Certification and Authorization</name>
        <t>An Evaluator determines whether an agent has demonstrated a
        capability.</t>
        <t>A Certification Issuer records that result in an ACC.</t>
        <t>An Authorization System determines whether the agent is permitted
        to exercise that capability against a particular resource.</t>
        <t>These functions <bcp14>MAY</bcp14> be operated by the same organization but <bcp14>MUST</bcp14> be
        logically distinguishable.</t>
        <t>An ACC <bcp14>MUST NOT</bcp14> directly grant access to a protected resource.  In
        an end-to-end deployment, certification evidence represents
        demonstrated capability ("can"), while local authorization policy
        determines whether that capability may be exercised in the current
        context ("may").  The authorization architecture <bcp14>SHOULD</bcp14> preserve
        sufficient identity, delegation, purpose, resource, and runtime
        context to support policy enforcement and subsequent audit.</t>
      </section>
    </section>

    <section anchor="profiles">
      <name>Evaluation Profiles</name>
      <t>An Evaluation Profile defines the requirements that <bcp14>MUST</bcp14> be
      satisfied before an Agent Configuration can be certified for a
      capability.</t>
      <t>An Evaluation Profile <bcp14>MUST</bcp14> be versioned and uniquely identifiable.  A
      profile <bcp14>MUST</bcp14> specify:</t>
      <ul spacing="compact">
        <li>a Profile Identifier, expressed as a URI;</li>
        <li>a Profile Version (see <xref target="versioning"/>);</li>
        <li>the capability or capabilities being evaluated;</li>
        <li>the Eval Set or Eval Sets to be executed;</li>
        <li>the integrity digest of each Eval Set;</li>
        <li>the required evaluation environment;</li>
        <li>the criteria for successful completion;</li>
        <li>any mandatory safety or security invariants;</li>
        <li>the configuration elements to which certification is bound;
        and</li>
        <li>the conditions that invalidate certification.</li>
      </ul>
      <t>A profile <bcp14>MAY</bcp14> additionally define:</t>
      <ul spacing="compact">
        <li>minimum success rates;</li>
        <li>maximum permitted error rates;</li>
        <li>mandatory adversarial scenarios;</li>
        <li>repetition and statistical confidence requirements (see
        <xref target="nondeterministic"/>);</li>
        <li>latency or resource constraints;</li>
        <li>a risk classification for each certified capability (see
        <xref target="runtime-evidence"/>); and</li>
        <li>a recommended certification lifetime.</li>
      </ul>

      <section anchor="versioning">
        <name>Profile Versioning</name>
        <t>A Profile Version <bcp14>MUST</bcp14> be a dot-separated sequence of one or more
        non-negative decimal integers without leading zeros (for example,
        "1.0" or "2.3.1").</t>
        <t>Two versions are compared component by component, from left to
        right, as integers.  A missing trailing component is treated as zero,
        so "2" and "2.0" are equal.  A version is greater than another if
        the first differing component is greater.</t>
        <t>A change to a profile that alters its pass criteria, its Eval Sets,
        or its bound configuration elements <bcp14>MUST</bcp14> result in a new Profile
        Version.</t>
      </section>

      <section anchor="eval-sets">
        <name>Eval Sets</name>
        <t>AACP does not define the contents of an Eval Set.  Eval Sets <bcp14>MAY</bcp14> be
        vendor-provided, organization-specific, industry-specific, or defined
        by another standards body.</t>
        <t>AACP instead defines how an Evaluation Profile identifies the Eval
        Set used to produce a certification result.  This allows evaluation
        methodologies to evolve independently of the certification
        protocol.</t>
      </section>

      <section anchor="pass-criteria">
        <name>Pass Criteria</name>
        <t>An Evaluation Profile <bcp14>MUST</bcp14> define unambiguous criteria for
        determining whether certification is issued.</t>
        <t>A certification <bcp14>MUST NOT</bcp14> be issued solely because an agent achieves
        a high aggregate score if the profile defines mandatory conditions
        that the agent failed to satisfy.</t>
        <t>For example, a profile might require both:</t>
        <artwork><![CDATA[
  overall_success_rate >= 0.95
]]></artwork>
        <t>and:</t>
        <artwork><![CDATA[
  unauthorized_write_operations == 0
]]></artwork>
        <t>In this case, an agent with a 99 percent aggregate evaluation score
        that performs one prohibited write operation <bcp14>MUST NOT</bcp14> be
        certified.</t>
      </section>

      <section anchor="nondeterministic">
        <name>Nondeterministic Evaluation</name>
        <t>Agent behavior is commonly nondeterministic.  The same Agent
        Configuration can pass a task in one run and fail it in another.</t>
        <t>An Evaluation Profile that uses rate-based criteria <bcp14>SHOULD</bcp14> specify
        the minimum number of evaluation runs and the statistical method used
        to evaluate those criteria.  For high-risk capabilities, rate-based
        criteria <bcp14>SHOULD</bcp14> be evaluated against a lower confidence bound at a
        stated confidence level rather than against the observed point
        estimate.</t>
        <t>For example, an observed success rate of 0.95 over 20 runs and the
        same observed rate over 2,000 runs support materially different
        conclusions, and a profile <bcp14>SHOULD NOT</bcp14> treat them as equivalent.</t>
        <t>Invariant criteria, such as a prohibition on unauthorized write
        operations, apply to every run: a single violation in any run <bcp14>MUST</bcp14>
        cause the evaluation to fail.</t>
      </section>
    </section>

    <section anchor="binding">
      <name>Agent Configuration Binding</name>
      <t>Certification <bcp14>MUST</bcp14> be bound to the Agent Configuration that was
      evaluated.</t>
      <t>An implementation <bcp14>MUST NOT</bcp14> assume that certification of one model,
      system instruction, tool configuration, or runtime applies to a
      materially different configuration.</t>
      <t>Security-relevant configuration <bcp14>MAY</bcp14> include:</t>
      <ul spacing="compact">
        <li>model provider;</li>
        <li>model identifier or version;</li>
        <li>system instruction or system prompt;</li>
        <li>available tool definitions;</li>
        <li>tool permission configuration;</li>
        <li>agent runtime version;</li>
        <li>policy configuration;</li>
        <li>retrieval or external context configuration; and</li>
        <li>other elements identified by the Evaluation Profile.</li>
      </ul>

      <section anchor="manifest">
        <name>Agent Configuration Manifest and Digest</name>
        <t>Implementations <bcp14>MUST</bcp14> construct an Agent Configuration Manifest as a
        JSON object containing the configuration elements bound by the
        applicable Evaluation Profile.</t>
        <t>Sensitive values, including system instructions, <bcp14>SHOULD</bcp14> be
        represented in the manifest by their digests rather than by their
        values.</t>
        <t>Before the Agent Configuration Digest is calculated, the manifest
        <bcp14>MUST</bcp14> be serialized using the JSON Canonicalization Scheme (JCS)
        <xref target="RFC8785"/>.  The Agent Configuration Digest is the
        hash of the resulting octets.</t>
      </section>

      <section anchor="digest-representation">
        <name>Digest Representation</name>
        <t>All digests defined by this document, including
        "agent_config_digest" and "evaluation_digest", <bcp14>MUST</bcp14> be represented as
        Named Information ("ni") URIs <xref target="RFC6920"/>, which carry
        both the hash algorithm and the base64url-encoded hash value.</t>
        <t>Implementations <bcp14>MUST</bcp14> support "sha-256" and <bcp14>MUST NOT</bcp14> use the
        truncated hash suites defined in <xref target="RFC6920"/>.</t>
        <t>For example:</t>
        <artwork><![CDATA[
  ni:///sha-256;TFMWVKhN0Lcg1Bq0oxd5hNzU8wYzqZ5GuJxFgGzTd0I
]]></artwork>
      </section>

      <section anchor="config-changes">
        <name>Configuration Changes</name>
        <t>An Evaluation Profile <bcp14>MUST</bcp14> identify which changes invalidate
        certification.</t>
        <t>If a configuration change modifies an element bound by the
        Evaluation Profile, an existing ACC <bcp14>MUST NOT</bcp14> be treated as evidence
        for the modified configuration.</t>
        <t>Examples of potentially certification-invalidating changes
        include:</t>
        <ul spacing="compact">
          <li>replacement of the underlying model;</li>
          <li>modification of system instructions;</li>
          <li>addition of a privileged tool;</li>
          <li>modification of tool definitions;</li>
          <li>changes to relevant policy controls; or</li>
          <li>changes to the agent runtime affecting evaluated behavior.</li>
        </ul>
      </section>

      <section anchor="runtime-evidence">
        <name>Runtime Configuration Evidence</name>
        <t>A Verifier needs to establish that the Agent presenting an ACC is
        currently running the configuration identified by the ACC's
        "agent_config_digest" claim.  The ACC alone cannot establish this,
        because it describes the configuration at evaluation time.</t>
        <t>The Verifier <bcp14>MUST</bcp14> obtain evidence of the current Agent
        Configuration Digest from a source it trusts.  Such a source <bcp14>MAY</bcp14>
        be:</t>
        <ul spacing="compact">
          <li>Evidence or Attestation Results produced under the Remote
          ATtestation procedureS (RATS) architecture
          <xref target="RFC9334"/>;</li>
          <li>a deployment platform or agent runtime that the Verifier trusts
          to report the configuration it enforces; or</li>
          <li>a configuration registry whose integrity the Verifier trusts
          independently of the Agent.</li>
        </ul>
        <t>A configuration digest asserted solely by the Agent itself <bcp14>SHOULD
        NOT</bcp14> be accepted as runtime configuration evidence.  It <bcp14>MUST NOT</bcp14> be
        accepted for a capability that the Evaluation Profile classifies as
        high-risk.</t>
        <t>The mechanism for producing and conveying runtime configuration
        evidence is outside the scope of this document.</t>
      </section>
    </section>

    <section anchor="procedure">
      <name>Certification Procedure</name>
      <t>Certification consists of the following logical steps:</t>
      <ol spacing="compact">
        <li>The Evaluator identifies the Agent Configuration.</li>
        <li>The Evaluator determines the applicable Evaluation Profile.</li>
        <li>The Agent Configuration Manifest is constructed and the Agent
        Configuration Digest is calculated.</li>
        <li>The required Eval Set or Eval Sets are executed in the evaluation
        environment.</li>
        <li>The Evaluator determines whether all certification criteria have
        been satisfied.</li>
        <li>If evaluation fails, a certification <bcp14>MUST NOT</bcp14> be issued for the
        failed capability.</li>
        <li>If evaluation succeeds, the Certification Issuer <bcp14>MAY</bcp14> issue an
        Agent Certification Credential.</li>
        <li>The ACC is bound to the evaluated Agent Configuration and
        Evaluation Profile.</li>
        <li>Authorization systems <bcp14>MAY</bcp14> use the ACC as an input to
        access-control policy.</li>
      </ol>
    </section>

    <section anchor="acc">
      <name>Agent Certification Credential</name>
      <t>The Agent Certification Credential (ACC) is a cryptographically
      signed representation of a successful AACP certification.</t>
      <t>An ACC <bcp14>MUST</bcp14> be represented as a JSON Web Token (JWT)
      <xref target="RFC7519"/> signed using JSON Web Signature (JWS)
      <xref target="RFC7515"/>.  Unsecured JWTs (algorithm "none") <bcp14>MUST NOT</bcp14>
      be used.</t>
      <t>JWT processing <bcp14>MUST</bcp14> follow the security recommendations of
      <xref target="RFC8725"/>.</t>
      <t>An ACC is certification evidence and <bcp14>MUST NOT</bcp14> be treated as an OAuth
      access token.</t>

      <section anchor="jose-header">
        <name>JOSE Header</name>
        <t>An ACC <bcp14>MUST</bcp14> contain an explicit type value, as recommended by
        <xref target="RFC8725" section="3.11"/>:</t>
        <artwork><![CDATA[
  "typ": "aacp-cert+jwt"
]]></artwork>
        <t>Implementations <bcp14>MUST</bcp14> validate the expected type before
        interpreting a JWT as an ACC.</t>
        <t>Implementations <bcp14>MUST</bcp14> explicitly configure acceptable cryptographic
        algorithms and <bcp14>MUST</bcp14> reject credentials using algorithms outside that
        configured set.</t>
      </section>

      <section anchor="required-claims">
        <name>Required Claims</name>
        <t>An ACC <bcp14>MUST</bcp14> contain the following claims:</t>
        <dl newline="true">
          <dt>iss</dt>
          <dd>Identifier of the Certification Issuer.</dd>
          <dt>sub</dt>
          <dd>Identifier of the certified Agent.</dd>
          <dt>aud</dt>
          <dd>Intended recipient or class of recipients of the certification
          evidence.</dd>
          <dt>iat</dt>
          <dd>Time at which the certification evidence was issued.</dd>
          <dt>exp</dt>
          <dd>Time after which the certification evidence <bcp14>MUST NOT</bcp14> be
          accepted.</dd>
          <dt>jti</dt>
          <dd>Unique identifier for the ACC.</dd>
          <dt>aacp_profile</dt>
          <dd>A JSON object with members "id" (the Profile Identifier URI) and
          "version" (the Profile Version string) of the Evaluation Profile
          that was satisfied.</dd>
          <dt>aacp_capabilities</dt>
          <dd>A JSON array of one or more URIs identifying the capabilities
          demonstrated under the Evaluation Profile.</dd>
          <dt>agent_config_digest</dt>
          <dd>The Agent Configuration Digest of the evaluated configuration,
          represented as described in
          <xref target="digest-representation"/>.</dd>
          <dt>evaluated_at</dt>
          <dd>A NumericDate indicating when the qualifying evaluation
          completed.</dd>
          <dt>evaluation_digest</dt>
          <dd>A digest identifying the evaluation result or associated
          evaluation evidence, represented as described in
          <xref target="digest-representation"/>.</dd>
        </dl>
      </section>

      <section anchor="optional-claims">
        <name>Optional Claims</name>
        <t>An ACC <bcp14>MAY</bcp14> contain:</t>
        <dl newline="true">
          <dt>nbf</dt>
          <dd>Time before which the certification evidence <bcp14>MUST NOT</bcp14> be
          accepted.</dd>
          <dt>status</dt>
          <dd>A reference to the revocation status of the ACC, as defined in
          <xref target="I-D.ietf-oauth-status-list"/> (see
          <xref target="revocation"/>).</dd>
        </dl>
      </section>

      <section anchor="example">
        <name>Example Credential</name>
        <t>The following non-normative example shows the JOSE header and
        claims of an ACC certifying an agent for a log-analysis capability.
        Line breaks within values are for readability only.</t>
        <sourcecode type="json"><![CDATA[
{
  "typ": "aacp-cert+jwt",
  "alg": "ES256",
  "kid": "cert-2026-09"
}
.
{
  "iss": "https://cert.example.com",
  "sub": "agent:b4f2c9a1",
  "aud": "https://auth.example.com",
  "iat": 1790000000,
  "exp": 1790086400,
  "jti": "acc:9e1d2f71",
  "aacp_profile": {
    "id": "https://profiles.example.com/log-analysis",
    "version": "1.0"
  },
  "aacp_capabilities": [
    "urn:example:capability:log-analysis"
  ],
  "agent_config_digest":
    "ni:///sha-256;TFMWVKhN0Lcg1Bq0oxd5hNzU8wYzqZ5GuJxFgGzTd0I",
  "evaluated_at": 1789999800,
  "evaluation_digest":
    "ni:///sha-256;I71xw3tBpZdGYz7r0cVq2nKqLw8m2Qk8rXcH5J1uYhs"
}
]]></sourcecode>
      </section>
    </section>

    <section anchor="gated-authz">
      <name>Certification-Gated Authorization</name>
      <t>A protected resource or Authorization System <bcp14>MAY</bcp14> define a policy
      requiring an AACP certification for a requested operation.  For
      example:</t>
      <artwork><![CDATA[
  requested operation:
     production.logs.read

  authorization requirement:
     capability = urn:example:capability:log-analysis

  required profile:
     id      = https://profiles.example.com/log-analysis
     version >= 1.0
]]></artwork>
      <t>The Authorization System <bcp14>MUST</bcp14> independently determine whether the
      requesting Agent is otherwise authorized to perform the operation.</t>
      <t>Possession of the required certification <bcp14>MUST NOT</bcp14> by itself cause an
      authorization decision to succeed.</t>

      <section anchor="validation">
        <name>Certification Validation</name>
        <t>Before using an ACC in an authorization decision, the Verifier
        <bcp14>MUST</bcp14>:</t>
        <ul spacing="compact">
          <li>verify that the "typ" header value is "aacp-cert+jwt";</li>
          <li>verify that the signing algorithm is permitted;</li>
          <li>verify the issuer signature;</li>
          <li>verify that the issuer is an accepted Certification Issuer under
          local trust policy;</li>
          <li>verify the intended audience;</li>
          <li>verify the expiration time and, if present, the "nbf"
          claim;</li>
          <li>verify revocation status where a revocation mechanism is
          available;</li>
          <li>verify the required Evaluation Profile identifier and
          version;</li>
          <li>verify the required capability;</li>
          <li>verify, using runtime configuration evidence as described in
          <xref target="runtime-evidence"/>, that the current Agent
          Configuration Digest equals the "agent_config_digest" claim;
          and</li>
          <li>apply local authorization policy.</li>
        </ul>
        <t>Failure of any of these verification steps <bcp14>MUST</bcp14> cause the
        certification evidence to be rejected.</t>
      </section>

      <section anchor="example-flow">
        <name>Example Authorization Flow</name>
        <t>An Agent requests:</t>
        <artwork><![CDATA[
  infrastructure.vm.read
]]></artwork>
        <t>The authorization policy requires:</t>
        <artwork><![CDATA[
  capability:
     urn:example:capability:infrastructure-read

  profile:
     id      = urn:example:aacp-profile:infrastructure-read
     version >= 2.0
]]></artwork>
        <t>If the Agent:</t>
        <ul spacing="compact">
          <li>is authenticated;</li>
          <li>has been delegated or assigned permission to access the
          resource;</li>
          <li>presents a valid ACC for the required capability;</li>
          <li>is shown, by trusted runtime configuration evidence, to be
          running the configuration bound to that ACC; and</li>
          <li>satisfies all additional authorization policy;</li>
        </ul>
        <t>then the Authorization System <bcp14>MAY</bcp14> grant the requested
        permission.</t>
        <t>Certification is therefore a prerequisite, not the permission
        itself.  For material or privileged actions, deployments <bcp14>SHOULD</bcp14> be
        able to attribute the resulting action to the Agent identity, the
        applicable certified capability, the authority or delegation under
        which the Agent acted, and the relevant authorization context.</t>
      </section>
    </section>

    <section anchor="lifecycle">
      <name>Expiration, Revocation, and Re-Certification</name>
      <t>Certifications <bcp14>MUST</bcp14> have finite validity periods.</t>
      <t>The appropriate lifetime depends on the capability, environment,
      Agent Configuration, and organizational risk policy.  Highly
      privileged or safety-sensitive capabilities <bcp14>SHOULD</bcp14> use shorter
      certification lifetimes than low-risk capabilities.</t>
      <t>AACP does not mandate a universal maximum lifetime.  Authorization
      policy <bcp14>MAY</bcp14> impose a maximum acceptable certification age shorter than
      the ACC validity period, particularly for high-risk capabilities.
      Changes in runtime risk, delegated authority, operating context, or
      observed behavior <bcp14>MAY</bcp14> trigger re-evaluation or re-certification even
      when the ACC has not expired.</t>

      <section anchor="recert-triggers">
        <name>Re-Certification Triggers</name>
        <t>Re-certification <bcp14>MUST</bcp14> occur when certification has expired.</t>
        <t>Re-certification <bcp14>MUST</bcp14> also occur when an Evaluation Profile
        identifies a configuration change as certification-invalidating.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> support additional re-certification
        triggers, including:</t>
        <ul spacing="compact">
          <li>discovery of an evaluation defect;</li>
          <li>material changes to an Eval Set;</li>
          <li>newly identified attack techniques;</li>
          <li>revocation of an Evaluation Profile;</li>
          <li>security incidents involving the Agent;</li>
          <li>material changes in model behavior; or</li>
          <li>explicit administrative revocation.</li>
        </ul>
      </section>

      <section anchor="revocation">
        <name>Revocation</name>
        <t>Certification Issuers <bcp14>SHOULD</bcp14> provide a mechanism allowing Verifiers
        to determine whether an otherwise unexpired ACC has been revoked.</t>
        <t>Issuers <bcp14>MAY</bcp14> use the Token Status List mechanism
        <xref target="I-D.ietf-oauth-status-list"/> by including a "status"
        claim in the ACC.  Other revocation mechanisms are
        deployment-specific and outside the scope of this document.</t>
      </section>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>

      <section anchor="not-authz">
        <name>Certification Is Not Authorization</name>
        <t>Implementations <bcp14>MUST NOT</bcp14> treat possession of a valid ACC as
        sufficient authorization to access a resource.  Doing so would
        convert certification evidence into a bearer permission and defeat
        the separation defined by this document.</t>
      </section>

      <section anchor="substitution">
        <name>Configuration Substitution</name>
        <t>An attacker could evaluate a restricted Agent Configuration and
        subsequently present the resulting ACC while running a modified, more
        privileged configuration.</t>
        <t>Verifiers <bcp14>MUST</bcp14> therefore validate the binding between the current
        Agent Configuration and the "agent_config_digest" claim in the ACC,
        using runtime configuration evidence as described in
        <xref target="runtime-evidence"/>.  If that evidence is asserted only
        by the Agent, a compromised or malicious Agent can report the
        evaluated digest while running a different configuration; this is why
        self-asserted evidence is not accepted for high-risk
        capabilities.</t>
      </section>

      <section anchor="overfitting">
        <name>Eval Overfitting</name>
        <t>An agent may perform well on a known Eval Set without reliably
        demonstrating the intended capability in unseen conditions.</t>
        <t>Evaluation Profiles <bcp14>SHOULD</bcp14> therefore incorporate appropriate
        variation and <bcp14>SHOULD</bcp14> avoid relying exclusively on publicly
        predictable static test cases for high-risk certifications.
        Insufficient repetition can also produce misleading results (see
        <xref target="nondeterministic"/>).</t>
        <t>AACP certification represents successful completion of the defined
        Evaluation Profile.  It <bcp14>MUST NOT</bcp14> be interpreted as a guarantee of
        safe behavior under all possible conditions.</t>
      </section>

      <section anchor="compromised-evaluator">
        <name>Compromised Evaluator</name>
        <t>A compromised or malicious Evaluator or Certification Issuer could
        certify agents that did not complete the stated Evaluation
        Profile.</t>
        <t>Authorization systems <bcp14>MUST</bcp14> maintain explicit trust policy for
        accepted Certification Issuers.</t>
        <t>A cryptographically valid signature establishes the source and
        integrity of an assertion.  It does not establish that the issuer is
        trustworthy.</t>
      </section>

      <section anchor="replay">
        <name>Replay and Credential Theft</name>
        <t>An attacker obtaining a valid ACC might attempt to reuse it.</t>
        <t>Audience restriction <bcp14>MUST</bcp14> be enforced.</t>
        <t>Deployments requiring stronger protection <bcp14>SHOULD</bcp14> use
        sender-constrained mechanisms or equivalent proof-of-possession
        controls.  OAuth DPoP <xref target="RFC9449"/> <bcp14>MAY</bcp14> be used where AACP
        evidence participates in an OAuth-based architecture.</t>
      </section>

      <section anchor="prompt-injection">
        <name>Prompt Injection</name>
        <t>Passing an Evaluation Profile does not establish immunity to future
        prompt injection or other adversarial inputs.  Configuration
        integrity <bcp14>MUST NOT</bcp14> be interpreted as behavioral integrity.  Untrusted
        input, retrieved context, tool output, or environmental state can
        materially alter effective Agent behavior without changing the Agent
        Configuration Digest.  Deployments <bcp14>SHOULD</bcp14> therefore use runtime
        monitoring and behavioral controls appropriate to the risk of the
        certified capability.</t>
        <t>Profiles for capabilities exposed to untrusted input <bcp14>SHOULD</bcp14> include
        relevant adversarial evaluation scenarios.</t>
        <t>Certification <bcp14>MUST NOT</bcp14> be described as proof that an Agent is
        immune to prompt injection.</t>
      </section>

      <section anchor="eval-confidentiality">
        <name>Evaluation Data Confidentiality</name>
        <t>Evaluation material may contain sensitive tests, attack techniques,
        or proprietary information.</t>
        <t>ACCs <bcp14>SHOULD</bcp14> contain digests or references to evaluation evidence
        rather than embedding complete Eval Sets or detailed evaluation
        transcripts.</t>
      </section>
    </section>

    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>An ACC can reveal information about the capabilities and
      configuration of an Agent.</t>
      <t>Implementations <bcp14>SHOULD</bcp14> disclose only information necessary for the
      intended certification decision.</t>
      <t>Sensitive system instructions, proprietary Eval Sets, evaluation
      transcripts, and model configuration data <bcp14>SHOULD NOT</bcp14> be included
      directly in an ACC.  Where feasible, cryptographic digests or opaque
      identifiers <bcp14>SHOULD</bcp14> be used instead.</t>
      <t>Digests of low-entropy configuration values can be vulnerable to
      guessing.  Where a manifest element has few plausible values,
      implementations <bcp14>SHOULD</bcp14> consider salting it or omitting it from any
      disclosed manifest.</t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>

      <section anchor="iana-media-type">
        <name>Media Type Registration</name>
        <t>This document requests registration of the following media type in
        the "Media Types" registry <xref target="RFC6838"/>, in the manner
        described in <xref target="RFC8725" section="3.11"/>:</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>application</dd>
          <dt>Subtype name:</dt>
          <dd>aacp-cert+jwt</dd>
          <dt>Required parameters:</dt>
          <dd>N/A</dd>
          <dt>Optional parameters:</dt>
          <dd>N/A</dd>
          <dt>Encoding considerations:</dt>
          <dd>binary; an ACC is a JWT, a sequence of base64url-encoded values
          separated by period characters.</dd>
          <dt>Security considerations:</dt>
          <dd>See <xref target="security"/> of this document.</dd>
          <dt>Interoperability considerations:</dt>
          <dd>N/A</dd>
          <dt>Published specification:</dt>
          <dd>This document</dd>
          <dt>Applications that use this media type:</dt>
          <dd>Certification Issuers and Verifiers of AI agent capability
          certification.</dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>N/A</dd>
          <dt>Additional information:</dt>
          <dd>
            <t>Deprecated alias names for this type: N/A</t>
            <t>Magic number(s): N/A</t>
            <t>File extension(s): N/A</t>
            <t>Macintosh file type code(s): N/A</t>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>Nitzan Levi, nitzanly@gmail.com</dd>
          <dt>Intended usage:</dt>
          <dd>COMMON</dd>
          <dt>Restrictions on usage:</dt>
          <dd>none</dd>
          <dt>Author:</dt>
          <dd>See the Authors' Addresses section of this document.</dd>
          <dt>Change controller:</dt>
          <dd>IETF</dd>
        </dl>
      </section>

      <section anchor="iana-jwt-claims">
        <name>JSON Web Token Claims Registration</name>
        <t>This document requests registration of the following claims in the
        "JSON Web Token Claims" registry established by
        <xref target="RFC7519"/>.  For each claim, the Change Controller is
        IETF and the Specification Document is
        <xref target="required-claims"/> of this document.</t>
        <ul spacing="compact">
          <li>Claim Name: "aacp_profile"; Claim Description: AACP Evaluation
          Profile identifier and version</li>
          <li>Claim Name: "aacp_capabilities"; Claim Description: AACP
          certified capabilities</li>
          <li>Claim Name: "agent_config_digest"; Claim Description: Digest of
          the evaluated Agent Configuration</li>
          <li>Claim Name: "evaluated_at"; Claim Description: Time the
          qualifying evaluation completed</li>
          <li>Claim Name: "evaluation_digest"; Claim Description: Digest of
          the evaluation result or evidence</li>
        </ul>
      </section>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>

        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>

        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>

        <reference anchor="RFC6920" target="https://www.rfc-editor.org/info/rfc6920">
          <front>
            <title>Naming Things with Hashes</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="D. Kutscher" initials="D." surname="Kutscher"/>
            <author fullname="C. Dannewitz" initials="C." surname="Dannewitz"/>
            <author fullname="B. Ohlman" initials="B." surname="Ohlman"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker"/>
            <date month="April" year="2013"/>
          </front>
          <seriesInfo name="RFC" value="6920"/>
          <seriesInfo name="DOI" value="10.17487/RFC6920"/>
        </reference>

        <reference anchor="RFC7515" target="https://www.rfc-editor.org/info/rfc7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>

        <reference anchor="RFC7519" target="https://www.rfc-editor.org/info/rfc7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>

        <reference anchor="RFC8725" target="https://www.rfc-editor.org/info/rfc8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>

        <reference anchor="RFC8785" target="https://www.rfc-editor.org/info/rfc8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="I-D.ietf-oauth-status-list" target="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-status-list-21">
          <front>
            <title>Token Status List (TSL)</title>
            <author fullname="Tobias Looker" initials="T." surname="Looker"/>
            <author fullname="Paul Bastian" initials="P." surname="Bastian"/>
            <author fullname="Christian Bormann" initials="C." surname="Bormann"/>
            <date day="21" month="June" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-status-list-21"/>
        </reference>

        <reference anchor="I-D.ietf-wimse-aims" target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-aims-00">
          <front>
            <title>AI Identity Management System</title>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman"/>
            <author fullname="Jean-François Lombardo" asciiFullname="Jean-Francois Lombardo" initials="J." asciiInitials="J." surname="Lombardo" asciiSurname="Lombardo"/>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho"/>
            <author fullname="Brian Campbell" initials="B." surname="Campbell"/>
            <author fullname="Nick Steele" initials="N." surname="Steele"/>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki"/>
            <date day="15" month="September" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-aims-00"/>
        </reference>

        <reference anchor="I-D.yakung-oauth-agent-attestation" target="https://datatracker.ietf.org/doc/html/draft-yakung-oauth-agent-attestation-00">
          <front>
            <title>Agent Credential Attestation Protocol (ACAP)</title>
            <author fullname="Chudah Yakung" initials="C." surname="Yakung"/>
            <date day="26" month="March" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-yakung-oauth-agent-attestation-00"/>
        </reference>

        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>

        <reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>

        <reference anchor="RFC9449" target="https://www.rfc-editor.org/info/rfc9449">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Waite" initials="D." surname="Waite"/>
            <date month="September" year="2023"/>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </reference>
      </references>
    </references>

    <section anchor="acknowledgments" numbered="false">
      <name>Acknowledgments</name>
      <t>The authors would like to acknowledge the valuable contributions of
      Daniel Levi and Omer Yeger to the development of this document.</t>
    </section>
  </back>
</rfc>
